diff options
author | Josh Matthews <josh@joshmatthews.net> | 2018-01-31 09:13:41 -0500 |
---|---|---|
committer | Josh Matthews <josh@joshmatthews.net> | 2018-01-31 12:24:47 -0500 |
commit | 0e1caebaf4671498ee05abc24027ce0da3b5e601 (patch) | |
tree | a7f7a718f32ceb363def49ceee022368d9e952d7 /tests | |
parent | c88dc51d03a81e9e405688ccd2baae75d61ffffd (diff) | |
download | servo-0e1caebaf4671498ee05abc24027ce0da3b5e601.tar.gz servo-0e1caebaf4671498ee05abc24027ce0da3b5e601.zip |
Update web-platform-tests to revision 10168e9a5d44efbc6e7d416d1d454eb9c9f1396c
Diffstat (limited to 'tests')
791 files changed, 23327 insertions, 5447 deletions
diff --git a/tests/wpt/metadata/2dcontext/imagebitmap/createImageBitmap-drawImage.html.ini b/tests/wpt/metadata/2dcontext/imagebitmap/createImageBitmap-drawImage.html.ini index 7d06eb0372e..2a478cda6b3 100644 --- a/tests/wpt/metadata/2dcontext/imagebitmap/createImageBitmap-drawImage.html.ini +++ b/tests/wpt/metadata/2dcontext/imagebitmap/createImageBitmap-drawImage.html.ini @@ -51,3 +51,27 @@ [createImageBitmap from a Blob with negative sw/sh, and drawImage on the created ImageBitmap] expected: FAIL + [createImageBitmap from a bitmap HTMLImageElement, and drawImage on the created ImageBitmap] + expected: FAIL + + [createImageBitmap from a bitmap HTMLImageElement with negative sw/sh, and drawImage on the created ImageBitmap] + expected: FAIL + + [createImageBitmap from a vector HTMLImageElement, and drawImage on the created ImageBitmap] + expected: FAIL + + [createImageBitmap from a vector HTMLImageElement with negative sw/sh, and drawImage on the created ImageBitmap] + expected: FAIL + + [createImageBitmap from a bitmap SVGImageElement, and drawImage on the created ImageBitmap] + expected: FAIL + + [createImageBitmap from a bitmap SVGImageElement with negative sw/sh, and drawImage on the created ImageBitmap] + expected: FAIL + + [createImageBitmap from a vector SVGImageElement, and drawImage on the created ImageBitmap] + expected: FAIL + + [createImageBitmap from a vector SVGImageElement with negative sw/sh, and drawImage on the created ImageBitmap] + expected: FAIL + diff --git a/tests/wpt/metadata/2dcontext/imagebitmap/createImageBitmap-invalid-args.html.ini b/tests/wpt/metadata/2dcontext/imagebitmap/createImageBitmap-invalid-args.html.ini index d6de451b2a9..2595ee23ece 100644 --- a/tests/wpt/metadata/2dcontext/imagebitmap/createImageBitmap-invalid-args.html.ini +++ b/tests/wpt/metadata/2dcontext/imagebitmap/createImageBitmap-invalid-args.html.ini @@ -1,5 +1,6 @@ [createImageBitmap-invalid-args.html] type: testharness + expected: TIMEOUT [createImageBitmap with a HTMLImageElement source and sw set to 0 rejects with a RangeError.] expected: FAIL @@ -118,68 +119,122 @@ expected: FAIL [createImageBitmap with a an OffscreenCanvas source and sw set to 0] - expected: FAIL + expected: NOTRUN [createImageBitmap with a an OffscreenCanvas source and sh set to 0] - expected: FAIL + expected: NOTRUN [createImageBitmap with a an OffscreenCanvas source and oversized (unallocatable) crop region] - expected: FAIL + expected: NOTRUN [createImageBitmap with a an ImageData source and sw set to 0] - expected: FAIL + expected: NOTRUN [createImageBitmap with a an ImageData source and sh set to 0] - expected: FAIL + expected: NOTRUN [createImageBitmap with a an ImageData source and oversized (unallocatable) crop region] - expected: FAIL + expected: NOTRUN [createImageBitmap with a an ImageBitmap source and sw set to 0] - expected: FAIL + expected: NOTRUN [createImageBitmap with a an ImageBitmap source and sh set to 0] - expected: FAIL + expected: NOTRUN [createImageBitmap with a an ImageBitmap source and oversized (unallocatable) crop region] - expected: FAIL + expected: NOTRUN [createImageBitmap with a a Blob source and sw set to 0] - expected: FAIL + expected: NOTRUN [createImageBitmap with a a Blob source and sh set to 0] - expected: FAIL + expected: NOTRUN [createImageBitmap with a a Blob source and oversized (unallocatable) crop region] - expected: FAIL + expected: NOTRUN [createImageBitmap with undefined image source.] - expected: FAIL + expected: NOTRUN [createImageBitmap with null image source.] - expected: FAIL + expected: NOTRUN [createImageBitmap with empty image source.] - expected: FAIL + expected: NOTRUN [createImageBitmap with empty video source.] - expected: FAIL + expected: NOTRUN [createImageBitmap with an oversized canvas source.] - expected: FAIL + expected: NOTRUN [createImageBitmap with an invalid OffscreenCanvas source.] - expected: FAIL + expected: NOTRUN [createImageBitmap with an undecodable blob source.] - expected: FAIL + expected: NOTRUN [createImageBitmap with a broken image source.] - expected: FAIL + expected: NOTRUN [createImageBitmap with an available but undecodable image source.] - expected: FAIL + expected: NOTRUN [createImageBitmap with a closed ImageBitmap.] + expected: NOTRUN + + [createImageBitmap with a a bitmap HTMLImageElement source and sw set to 0] + expected: FAIL + + [createImageBitmap with a a bitmap HTMLImageElement source and sh set to 0] expected: FAIL + [createImageBitmap with a a bitmap HTMLImageElement source and oversized (unallocatable) crop region] + expected: FAIL + + [createImageBitmap with a a vector HTMLImageElement source and sw set to 0] + expected: TIMEOUT + + [createImageBitmap with a a vector HTMLImageElement source and sh set to 0] + expected: NOTRUN + + [createImageBitmap with a a vector HTMLImageElement source and oversized (unallocatable) crop region] + expected: NOTRUN + + [createImageBitmap with a a bitmap SVGImageElement source and sw set to 0] + expected: NOTRUN + + [createImageBitmap with a a bitmap SVGImageElement source and sh set to 0] + expected: NOTRUN + + [createImageBitmap with a a bitmap SVGImageElement source and oversized (unallocatable) crop region] + expected: NOTRUN + + [createImageBitmap with a a vector SVGImageElement source and sw set to 0] + expected: NOTRUN + + [createImageBitmap with a a vector SVGImageElement source and sh set to 0] + expected: NOTRUN + + [createImageBitmap with a a vector SVGImageElement source and oversized (unallocatable) crop region] + expected: NOTRUN + + [createImageBitmap with CanvasRenderingContext2D image source.] + expected: NOTRUN + + [createImageBitmap with WebGLRenderingContext image source.] + expected: NOTRUN + + [createImageBitmap with Uint8Array image source.] + expected: NOTRUN + + [createImageBitmap with ArrayBuffer image source.] + expected: NOTRUN + + [createImageBitmap with an available but zero height image source.] + expected: NOTRUN + + [createImageBitmap with an available but zero width image source.] + expected: NOTRUN + diff --git a/tests/wpt/metadata/2dcontext/imagebitmap/createImageBitmap-origin.sub.html.ini b/tests/wpt/metadata/2dcontext/imagebitmap/createImageBitmap-origin.sub.html.ini new file mode 100644 index 00000000000..a3d31b14f8e --- /dev/null +++ b/tests/wpt/metadata/2dcontext/imagebitmap/createImageBitmap-origin.sub.html.ini @@ -0,0 +1,16 @@ +[createImageBitmap-origin.sub.html] + [cross-origin HTMLImageElement] + expected: FAIL + + [cross-origin SVGImageElement] + expected: FAIL + + [cross-origin HTMLVideoElement] + expected: FAIL + + [unclean HTMLCanvasElement] + expected: FAIL + + [unclean ImageBitmap] + expected: FAIL + diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index 29132f8bbcc..05feb9d3bf0 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -11335,6 +11335,12 @@ {} ] ], + "css/selectors/hover-002-manual.html": [ + [ + "/css/selectors/hover-002-manual.html", + {} + ] + ], "css/vendor-imports/mozilla/mozilla-central-reftests/css21/pagination/moz-css21-block-page-break-inside-avoid-1.html": [ [ "/css/vendor-imports/mozilla/mozilla-central-reftests/css21/pagination/moz-css21-block-page-break-inside-avoid-1.html", @@ -12235,6 +12241,42 @@ {} ] ], + "graphics-aam/graphics-document_on_html_element-manual.html": [ + [ + "/graphics-aam/graphics-document_on_html_element-manual.html", + {} + ] + ], + "graphics-aam/graphics-document_on_svg_element-manual.html": [ + [ + "/graphics-aam/graphics-document_on_svg_element-manual.html", + {} + ] + ], + "graphics-aam/graphics-object_on_html_element-manual.html": [ + [ + "/graphics-aam/graphics-object_on_html_element-manual.html", + {} + ] + ], + "graphics-aam/graphics-object_on_svg_element-manual.html": [ + [ + "/graphics-aam/graphics-object_on_svg_element-manual.html", + {} + ] + ], + "graphics-aam/graphics-symbol_on_html_element-manual.html": [ + [ + "/graphics-aam/graphics-symbol_on_html_element-manual.html", + {} + ] + ], + "graphics-aam/graphics-symbol_on_svg_element-manual.html": [ + [ + "/graphics-aam/graphics-symbol_on_svg_element-manual.html", + {} + ] + ], "gyroscope/Gyroscope_onerror-manual.https.html": [ [ "/gyroscope/Gyroscope_onerror-manual.https.html", @@ -14503,6 +14545,12 @@ {} ] ], + "proximity/ProximitySensor_onerror-manual.https.html": [ + [ + "/proximity/ProximitySensor_onerror-manual.https.html", + {} + ] + ], "quirks/active-and-hover-manual.html": [ [ "/quirks/active-and-hover-manual.html", @@ -98493,6 +98541,18 @@ {} ] ], + "css/css-align/content-distribution/place-content-shorthand-007.html": [ + [ + "/css/css-align/content-distribution/place-content-shorthand-007.html", + [ + [ + "/css/css-align/content-distribution/place-content-shorthand-007-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-align/distribution-values/space-evenly-001.html": [ [ "/css/css-align/distribution-values/space-evenly-001.html", @@ -105441,6 +105501,18 @@ {} ] ], + "css/css-display/display-contents-fieldset-nested-legend.html": [ + [ + "/css/css-display/display-contents-fieldset-nested-legend.html", + [ + [ + "/css/css-display/display-contents-fieldset-nested-legend-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-display/display-contents-fieldset.html": [ [ "/css/css-display/display-contents-fieldset.html", @@ -107409,6 +107481,18 @@ {} ] ], + "css/css-fill-stroke/paint-order-001.tentative.html": [ + [ + "/css/css-fill-stroke/paint-order-001.tentative.html", + [ + [ + "/css/css-fill-stroke/reference/paint-order-001-ref.tentative.html", + "==" + ] + ], + {} + ] + ], "css/css-flexbox/Flexible-order.html": [ [ "/css/css-flexbox/Flexible-order.html", @@ -120857,18 +120941,6 @@ {} ] ], - "css/css-position/position-sticky-bottom.html": [ - [ - "/css/css-position/position-sticky-bottom.html", - [ - [ - "/css/css-position/position-sticky-bottom-ref.html", - "==" - ] - ], - {} - ] - ], "css/css-position/position-sticky-flexbox.html": [ [ "/css/css-position/position-sticky-flexbox.html", @@ -120917,18 +120989,6 @@ {} ] ], - "css/css-position/position-sticky-left.html": [ - [ - "/css/css-position/position-sticky-left.html", - [ - [ - "/css/css-position/position-sticky-left-ref.html", - "==" - ] - ], - {} - ] - ], "css/css-position/position-sticky-margins.html": [ [ "/css/css-position/position-sticky-margins.html", @@ -121025,12 +121085,12 @@ {} ] ], - "css/css-position/position-sticky-right.html": [ + "css/css-position/position-sticky-rendering.html": [ [ - "/css/css-position/position-sticky-right.html", + "/css/css-position/position-sticky-rendering.html", [ [ - "/css/css-position/position-sticky-right-ref.html", + "/css/css-position/position-sticky-rendering-ref.html", "==" ] ], @@ -121169,18 +121229,6 @@ {} ] ], - "css/css-position/position-sticky-top.html": [ - [ - "/css/css-position/position-sticky-top.html", - [ - [ - "/css/css-position/position-sticky-top-ref.html", - "==" - ] - ], - {} - ] - ], "css/css-position/position-sticky-transforms-translate.html": [ [ "/css/css-position/position-sticky-transforms-translate.html", @@ -125781,6 +125829,30 @@ {} ] ], + "css/css-text/astral-bidi/adlam-anti-ref.html": [ + [ + "/css/css-text/astral-bidi/adlam-anti-ref.html", + [ + [ + "/css/css-text/astral-bidi/adlam.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/astral-bidi/cypriot-anti-ref.html": [ + [ + "/css/css-text/astral-bidi/cypriot-anti-ref.html", + [ + [ + "/css/css-text/astral-bidi/cypriot.html", + "!=" + ] + ], + {} + ] + ], "css/css-text/i18n/css3-text-line-break-jazh-001.html": [ [ "/css/css-text/i18n/css3-text-line-break-jazh-001.html", @@ -142693,6 +142765,90 @@ {} ] ], + "css/css-transforms/transform-transformed-caption-contains-fixed-position.html": [ + [ + "/css/css-transforms/transform-transformed-caption-contains-fixed-position.html", + [ + [ + "/css/css-transforms/transform-transformed-caption-contains-fixed-position-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms/transform-transformed-tbody-contains-fixed-position.html": [ + [ + "/css/css-transforms/transform-transformed-tbody-contains-fixed-position.html", + [ + [ + "/css/css-transforms/transform-transformed-tbody-contains-fixed-position-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms/transform-transformed-td-contains-fixed-position.html": [ + [ + "/css/css-transforms/transform-transformed-td-contains-fixed-position.html", + [ + [ + "/css/css-transforms/transform-transformed-td-contains-fixed-position-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms/transform-transformed-tfoot-contains-fixed-position.html": [ + [ + "/css/css-transforms/transform-transformed-tfoot-contains-fixed-position.html", + [ + [ + "/css/css-transforms/transform-transformed-tfoot-contains-fixed-position-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms/transform-transformed-th-contains-fixed-position.html": [ + [ + "/css/css-transforms/transform-transformed-th-contains-fixed-position.html", + [ + [ + "/css/css-transforms/transform-transformed-th-contains-fixed-position-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms/transform-transformed-thead-contains-fixed-position.html": [ + [ + "/css/css-transforms/transform-transformed-thead-contains-fixed-position.html", + [ + [ + "/css/css-transforms/transform-transformed-thead-contains-fixed-position-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms/transform-transformed-tr-contains-fixed-position.html": [ + [ + "/css/css-transforms/transform-transformed-tr-contains-fixed-position.html", + [ + [ + "/css/css-transforms/transform-transformed-tr-contains-fixed-position-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-transforms/transform-translate-001.html": [ [ "/css/css-transforms/transform-translate-001.html", @@ -147109,6 +147265,42 @@ {} ] ], + "css/css-ui/text-overflow-024.html": [ + [ + "/css/css-ui/text-overflow-024.html", + [ + [ + "/css/css-ui/text-overflow-024-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-ui/text-overflow-025.html": [ + [ + "/css/css-ui/text-overflow-025.html", + [ + [ + "/css/css-ui/text-overflow-025-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-ui/text-overflow-026.html": [ + [ + "/css/css-ui/text-overflow-026.html", + [ + [ + "/css/css-ui/text-overflow-026-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-values/attr-color-invalid-cast.html": [ [ "/css/css-values/attr-color-invalid-cast.html", @@ -147265,6 +147457,18 @@ {} ] ], + "css/css-values/calc-ch-ex-lang.html": [ + [ + "/css/css-values/calc-ch-ex-lang.html", + [ + [ + "/css/css-values/calc-ch-ex-lang-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-values/calc-in-calc.html": [ [ "/css/css-values/calc-in-calc.html", @@ -147325,6 +147529,18 @@ {} ] ], + "css/css-values/calc-rem-lang.html": [ + [ + "/css/css-values/calc-rem-lang.html", + [ + [ + "/css/css-values/calc-rem-lang-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-values/ch-unit-001.html": [ [ "/css/css-values/ch-unit-001.html", @@ -150745,6 +150961,126 @@ {} ] ], + "css/css-writing-modes/available-size-001.html": [ + [ + "/css/css-writing-modes/available-size-001.html", + [ + [ + "/css/css-writing-modes/reference/available-size-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-writing-modes/available-size-002.html": [ + [ + "/css/css-writing-modes/available-size-002.html", + [ + [ + "/css/css-writing-modes/reference/available-size-002-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-writing-modes/available-size-003.html": [ + [ + "/css/css-writing-modes/available-size-003.html", + [ + [ + "/css/css-writing-modes/reference/available-size-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-writing-modes/available-size-004.html": [ + [ + "/css/css-writing-modes/available-size-004.html", + [ + [ + "/css/css-writing-modes/reference/available-size-002-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-writing-modes/available-size-005.html": [ + [ + "/css/css-writing-modes/available-size-005.html", + [ + [ + "/css/css-writing-modes/reference/available-size-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-writing-modes/available-size-006.html": [ + [ + "/css/css-writing-modes/available-size-006.html", + [ + [ + "/css/css-writing-modes/reference/available-size-002-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-writing-modes/available-size-007.html": [ + [ + "/css/css-writing-modes/available-size-007.html", + [ + [ + "/css/css-writing-modes/reference/available-size-002-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-writing-modes/available-size-008.html": [ + [ + "/css/css-writing-modes/available-size-008.html", + [ + [ + "/css/css-writing-modes/reference/available-size-002-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-writing-modes/available-size-009.html": [ + [ + "/css/css-writing-modes/available-size-009.html", + [ + [ + "/css/css-writing-modes/reference/available-size-002-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-writing-modes/available-size-010.html": [ + [ + "/css/css-writing-modes/available-size-010.html", + [ + [ + "/css/css-writing-modes/reference/available-size-002-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-writing-modes/background-position-vrl-018.xht": [ [ "/css/css-writing-modes/background-position-vrl-018.xht", @@ -152977,6 +153313,102 @@ {} ] ], + "css/css-writing-modes/ch-units-vrl-001.html": [ + [ + "/css/css-writing-modes/ch-units-vrl-001.html", + [ + [ + "/css/css-writing-modes/reference/ch-units-vrl-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-writing-modes/ch-units-vrl-002.html": [ + [ + "/css/css-writing-modes/ch-units-vrl-002.html", + [ + [ + "/css/css-writing-modes/reference/ch-units-vrl-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-writing-modes/ch-units-vrl-003.html": [ + [ + "/css/css-writing-modes/ch-units-vrl-003.html", + [ + [ + "/css/css-writing-modes/reference/ch-units-vrl-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-writing-modes/ch-units-vrl-004.html": [ + [ + "/css/css-writing-modes/ch-units-vrl-004.html", + [ + [ + "/css/css-writing-modes/reference/ch-units-vrl-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-writing-modes/ch-units-vrl-005.html": [ + [ + "/css/css-writing-modes/ch-units-vrl-005.html", + [ + [ + "/css/css-writing-modes/reference/ch-units-vrl-005-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-writing-modes/ch-units-vrl-006.html": [ + [ + "/css/css-writing-modes/ch-units-vrl-006.html", + [ + [ + "/css/css-writing-modes/reference/ch-units-vrl-005-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-writing-modes/ch-units-vrl-007.html": [ + [ + "/css/css-writing-modes/ch-units-vrl-007.html", + [ + [ + "/css/css-writing-modes/reference/ch-units-vrl-005-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-writing-modes/ch-units-vrl-008.html": [ + [ + "/css/css-writing-modes/ch-units-vrl-008.html", + [ + [ + "/css/css-writing-modes/reference/ch-units-vrl-005-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-writing-modes/clearance-calculations-vrl-002.xht": [ [ "/css/css-writing-modes/clearance-calculations-vrl-002.xht", @@ -154957,6 +155389,54 @@ {} ] ], + "css/css-writing-modes/logical-props-001.html": [ + [ + "/css/css-writing-modes/logical-props-001.html", + [ + [ + "/css/css-writing-modes/reference/logical-props-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-writing-modes/logical-props-002.html": [ + [ + "/css/css-writing-modes/logical-props-002.html", + [ + [ + "/css/css-writing-modes/reference/logical-props-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-writing-modes/logical-props-003.html": [ + [ + "/css/css-writing-modes/logical-props-003.html", + [ + [ + "/css/css-writing-modes/reference/logical-props-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-writing-modes/logical-props-004.html": [ + [ + "/css/css-writing-modes/logical-props-004.html", + [ + [ + "/css/css-writing-modes/reference/logical-props-001-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-writing-modes/margin-collapse-vlr-003.xht": [ [ "/css/css-writing-modes/margin-collapse-vlr-003.xht", @@ -155197,6 +155677,42 @@ {} ] ], + "css/css-writing-modes/mongolian-orientation-001.html": [ + [ + "/css/css-writing-modes/mongolian-orientation-001.html", + [ + [ + "/css/css-writing-modes/reference/mongolian-orientation-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-writing-modes/mongolian-orientation-002.html": [ + [ + "/css/css-writing-modes/mongolian-orientation-002.html", + [ + [ + "/css/css-writing-modes/reference/mongolian-orientation-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-writing-modes/nested-orthogonal-001.html": [ + [ + "/css/css-writing-modes/nested-orthogonal-001.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], "css/css-writing-modes/normal-flow-overconstrained-vlr-003.xht": [ [ "/css/css-writing-modes/normal-flow-overconstrained-vlr-003.xht", @@ -157081,6 +157597,30 @@ {} ] ], + "css/css-writing-modes/svg-aliasing-001.html": [ + [ + "/css/css-writing-modes/svg-aliasing-001.html", + [ + [ + "/css/css-writing-modes/reference/svg-aliasing-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-writing-modes/svg-aliasing-002.html": [ + [ + "/css/css-writing-modes/svg-aliasing-002.html", + [ + [ + "/css/css-writing-modes/reference/svg-aliasing-002-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-writing-modes/table-cell-001.html": [ [ "/css/css-writing-modes/table-cell-001.html", @@ -159681,6 +160221,18 @@ {} ] ], + "css/selectors/invalidation/sheet-going-away-002.html": [ + [ + "/css/selectors/invalidation/sheet-going-away-002.html", + [ + [ + "/css/selectors/invalidation/sheet-going-away-002-ref.html", + "==" + ] + ], + {} + ] + ], "css/selectors/of-type-selectors.xhtml": [ [ "/css/selectors/of-type-selectors.xhtml", @@ -159813,6 +160365,18 @@ {} ] ], + "css/selectors/selector-structural-pseudo-root.html": [ + [ + "/css/selectors/selector-structural-pseudo-root.html", + [ + [ + "/css/selectors/selector-structural-pseudo-root-ref.html", + "==" + ] + ], + {} + ] + ], "css/selectors/selectors-attr-white-space-001.html": [ [ "/css/selectors/selectors-attr-white-space-001.html", @@ -163569,6 +164133,18 @@ {} ] ], + "css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-paint-ordering-003.html": [ + [ + "/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-paint-ordering-003.html", + [ + [ + "/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-paint-ordering-003-ref.html", + "==" + ] + ], + {} + ] + ], "css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-root-node-001a.html": [ [ "/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-root-node-001a.html", @@ -176637,6 +177213,30 @@ {} ] ], + "html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-added.html": [ + [ + "/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-added.html", + [ + [ + "/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-added-ref.html", + "==" + ] + ], + {} + ] + ], + "html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-removed.html": [ + [ + "/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-removed.html", + [ + [ + "/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-removed-ref.html", + "==" + ] + ], + {} + ] + ], "html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-line-doesnt-fit.html": [ [ "/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-line-doesnt-fit.html", @@ -176661,6 +177261,30 @@ {} ] ], + "html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-non-snap-to-lines.html": [ + [ + "/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-non-snap-to-lines.html", + [ + [ + "/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-non-snap-to-lines-ref.html", + "==" + ] + ], + {} + ] + ], + "html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-two-cue-layout-after-first-end.html": [ + [ + "/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-two-cue-layout-after-first-end.html", + [ + [ + "/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-two-cue-layout-after-first-end-ref.html", + "==" + ] + ], + {} + ] + ], "html/semantics/embedded-content/the-audio-element/audio_001.htm": [ [ "/html/semantics/embedded-content/the-audio-element/audio_001.htm", @@ -181991,6 +182615,30 @@ {} ] ], + "css/css-text/astral-bidi/adlam.html": [ + [ + "/css/css-text/astral-bidi/adlam.html", + [ + [ + "/css/css-text/astral-bidi/adlam-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/astral-bidi/cypriot.html": [ + [ + "/css/css-text/astral-bidi/cypriot.html", + [ + [ + "/css/css-text/astral-bidi/cypriot-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-transforms/2d-rotate-notref.html": [ [ "/css/css-transforms/2d-rotate-notref.html", @@ -183416,7 +184064,7 @@ {} ] ], - "2dcontext/imagebitmap/common.js": [ + "2dcontext/imagebitmap/common.sub.js": [ [ {} ] @@ -187266,6 +187914,36 @@ {} ] ], + "bluetooth/script-tests/service/blocklisted-characteristic.js": [ + [ + {} + ] + ], + "bluetooth/script-tests/service/characteristic-not-found.js": [ + [ + {} + ] + ], + "bluetooth/script-tests/service/garbage-collection-ran-during-error.js": [ + [ + {} + ] + ], + "bluetooth/script-tests/service/get-same-object.js": [ + [ + {} + ] + ], + "bluetooth/script-tests/service/invalid-characteristic-name.js": [ + [ + {} + ] + ], + "bluetooth/script-tests/service/reconnect-during.js": [ + [ + {} + ] + ], "clear-site-data/support/echo-clear-site-data.py": [ [ {} @@ -187441,6 +188119,11 @@ {} ] ], + "common/namespaces.js": [ + [ + {} + ] + ], "common/object-association.js": [ [ {} @@ -209881,27 +210564,132 @@ {} ] ], - "content-security-policy/reporting/reporting-api-doesnt-send-reports-without-violation.https.sub.html.sub.headers": [ + "content-security-policy/reporting-api/reporting-api-doesnt-send-reports-without-violation.https.sub.html.sub.headers": [ + [ + {} + ] + ], + "content-security-policy/reporting-api/reporting-api-report-only-sends-reports-on-violation.https.sub.html.sub.headers": [ + [ + {} + ] + ], + "content-security-policy/reporting-api/reporting-api-report-to-overrides-report-uri-1.https.sub.html.sub.headers": [ + [ + {} + ] + ], + "content-security-policy/reporting-api/reporting-api-report-to-overrides-report-uri-2.https.sub.html.sub.headers": [ + [ + {} + ] + ], + "content-security-policy/reporting-api/reporting-api-sends-reports-on-violation.https.sub.html.sub.headers": [ [ {} ] ], - "content-security-policy/reporting/reporting-api-report-only-sends-reports-on-violation.https.sub.html.sub.headers": [ + "content-security-policy/reporting-api/reporting-api-works-on-frame-src.https.sub.html.sub.headers": [ [ {} ] ], - "content-security-policy/reporting/reporting-api-report-to-overrides-report-uri-1.https.sub.html.sub.headers": [ + "content-security-policy/reporting/multiple-report-policies.html.sub.headers": [ [ {} ] ], - "content-security-policy/reporting/reporting-api-report-to-overrides-report-uri-2.https.sub.html.sub.headers": [ + "content-security-policy/reporting/report-and-enforce.html.sub.headers": [ [ {} ] ], - "content-security-policy/reporting/reporting-api-sends-reports-on-violation.https.sub.html.sub.headers": [ + "content-security-policy/reporting/report-blocked-data-uri.html.sub.headers": [ + [ + {} + ] + ], + "content-security-policy/reporting/report-blocked-uri-cross-origin.sub.html.sub.headers": [ + [ + {} + ] + ], + "content-security-policy/reporting/report-blocked-uri.html.sub.headers": [ + [ + {} + ] + ], + "content-security-policy/reporting/report-cross-origin-no-cookies.sub.html.sub.headers": [ + [ + {} + ] + ], + "content-security-policy/reporting/report-multiple-violations-01.html.sub.headers": [ + [ + {} + ] + ], + "content-security-policy/reporting/report-multiple-violations-02.html.sub.headers": [ + [ + {} + ] + ], + "content-security-policy/reporting/report-only-in-meta.sub.html.sub.headers": [ + [ + {} + ] + ], + "content-security-policy/reporting/report-original-url.sub.html.sub.headers": [ + [ + {} + ] + ], + "content-security-policy/reporting/report-same-origin-with-cookies.html.sub.headers": [ + [ + {} + ] + ], + "content-security-policy/reporting/report-uri-effective-directive.html.sub.headers": [ + [ + {} + ] + ], + "content-security-policy/reporting/report-uri-from-inline-javascript.html.sub.headers": [ + [ + {} + ] + ], + "content-security-policy/reporting/report-uri-from-javascript.html.sub.headers": [ + [ + {} + ] + ], + "content-security-policy/reporting/report-uri-multiple-reversed.html.sub.headers": [ + [ + {} + ] + ], + "content-security-policy/reporting/report-uri-multiple.html.sub.headers": [ + [ + {} + ] + ], + "content-security-policy/reporting/report-uri-scheme-relative.html.sub.headers": [ + [ + {} + ] + ], + "content-security-policy/reporting/support/generate-csp-report.html": [ + [ + {} + ] + ], + "content-security-policy/reporting/support/generate-csp-report.html.sub.headers": [ + [ + {} + ] + ], + "content-security-policy/reporting/support/set-cookie.py": [ [ {} ] @@ -210291,6 +211079,11 @@ {} ] ], + "content-security-policy/support/pass2.png": [ + [ + {} + ] + ], "content-security-policy/support/ping.js": [ [ {} @@ -232396,6 +233189,11 @@ {} ] ], + "css/css-align/content-distribution/place-content-shorthand-007-ref.html": [ + [ + {} + ] + ], "css/css-align/reference/ttwf-reftest-alignContent-ref.html": [ [ {} @@ -234076,6 +234874,11 @@ {} ] ], + "css/css-display/display-contents-fieldset-nested-legend-ref.html": [ + [ + {} + ] + ], "css/css-display/display-contents-flex-001-ref.html": [ [ {} @@ -234281,6 +235084,11 @@ {} ] ], + "css/css-fill-stroke/reference/paint-order-001-ref.tentative.html": [ + [ + {} + ] + ], "css/css-flexbox/OWNERS": [ [ {} @@ -243961,6 +244769,11 @@ {} ] ], + "css/css-grid/alignment/support/100x100-green.png": [ + [ + {} + ] + ], "css/css-grid/alignment/support/style-change.js": [ [ {} @@ -244111,11 +244924,6 @@ {} ] ], - "css/css-grid/support/grid-alignment.css": [ - [ - {} - ] - ], "css/css-grid/support/grid.css": [ [ {} @@ -244411,6 +245219,11 @@ {} ] ], + "css/css-layout-api/OWNERS": [ + [ + {} + ] + ], "css/css-lists/OWNERS": [ [ {} @@ -245806,11 +246619,6 @@ {} ] ], - "css/css-position/position-sticky-bottom-ref.html": [ - [ - {} - ] - ], "css/css-position/position-sticky-flexbox-ref.html": [ [ {} @@ -245831,11 +246639,6 @@ {} ] ], - "css/css-position/position-sticky-left-ref.html": [ - [ - {} - ] - ], "css/css-position/position-sticky-margins-ref.html": [ [ {} @@ -245876,7 +246679,7 @@ {} ] ], - "css/css-position/position-sticky-right-ref.html": [ + "css/css-position/position-sticky-rendering-ref.html": [ [ {} ] @@ -245936,22 +246739,22 @@ {} ] ], - "css/css-position/position-sticky-top-ref.html": [ + "css/css-position/position-sticky-transforms-ref.html": [ [ {} ] ], - "css/css-position/position-sticky-transforms-ref.html": [ + "css/css-position/position-sticky-transforms-translate-ref.html": [ [ {} ] ], - "css/css-position/position-sticky-transforms-translate-ref.html": [ + "css/css-position/position-sticky-writing-modes-ref.html": [ [ {} ] ], - "css/css-position/position-sticky-writing-modes-ref.html": [ + "css/css-position/resources/sticky-util.js": [ [ {} ] @@ -248196,6 +248999,26 @@ {} ] ], + "css/css-text/astral-bidi/adlam-ref.html": [ + [ + {} + ] + ], + "css/css-text/astral-bidi/cypriot-ref.html": [ + [ + {} + ] + ], + "css/css-text/astral-bidi/support/adlam.css": [ + [ + {} + ] + ], + "css/css-text/astral-bidi/support/cypriot.css": [ + [ + {} + ] + ], "css/css-text/hanging-punctuation/reference/hanging-punctuation-allow-end-001-ref.xht": [ [ {} @@ -252756,6 +253579,41 @@ {} ] ], + "css/css-transforms/transform-transformed-caption-contains-fixed-position-ref.html": [ + [ + {} + ] + ], + "css/css-transforms/transform-transformed-tbody-contains-fixed-position-ref.html": [ + [ + {} + ] + ], + "css/css-transforms/transform-transformed-td-contains-fixed-position-ref.html": [ + [ + {} + ] + ], + "css/css-transforms/transform-transformed-tfoot-contains-fixed-position-ref.html": [ + [ + {} + ] + ], + "css/css-transforms/transform-transformed-th-contains-fixed-position-ref.html": [ + [ + {} + ] + ], + "css/css-transforms/transform-transformed-thead-contains-fixed-position-ref.html": [ + [ + {} + ] + ], + "css/css-transforms/transform-transformed-tr-contains-fixed-position-ref.html": [ + [ + {} + ] + ], "css/css-transforms/transform-translate-ref.html": [ [ {} @@ -253206,6 +254064,11 @@ {} ] ], + "css/css-typed-om/OWNERS": [ + [ + {} + ] + ], "css/css-typed-om/resources/1x1-green.png": [ [ {} @@ -253216,6 +254079,11 @@ {} ] ], + "css/css-typed-om/stylevalue-subclasses/numeric-objects/resources/testhelper.js": [ + [ + {} + ] + ], "css/css-ui/OWNERS": [ [ {} @@ -254521,6 +255389,21 @@ {} ] ], + "css/css-ui/text-overflow-024-ref.html": [ + [ + {} + ] + ], + "css/css-ui/text-overflow-025-ref.html": [ + [ + {} + ] + ], + "css/css-ui/text-overflow-026-ref.html": [ + [ + {} + ] + ], "css/css-ui/text-overflow-ref.html": [ [ {} @@ -254531,6 +255414,16 @@ {} ] ], + "css/css-values/calc-ch-ex-lang-ref.html": [ + [ + {} + ] + ], + "css/css-values/calc-rem-lang-ref.html": [ + [ + {} + ] + ], "css/css-values/ex-calc-expression-001-ref.html": [ [ {} @@ -255341,6 +256234,16 @@ {} ] ], + "css/css-writing-modes/reference/available-size-001-ref.html": [ + [ + {} + ] + ], + "css/css-writing-modes/reference/available-size-002-ref.html": [ + [ + {} + ] + ], "css/css-writing-modes/reference/bidi-embed-001.html": [ [ {} @@ -255821,6 +256724,16 @@ {} ] ], + "css/css-writing-modes/reference/ch-units-vrl-001-ref.html": [ + [ + {} + ] + ], + "css/css-writing-modes/reference/ch-units-vrl-005-ref.html": [ + [ + {} + ] + ], "css/css-writing-modes/reference/full-width-001-horizontal-notref.html": [ [ {} @@ -255871,6 +256784,16 @@ {} ] ], + "css/css-writing-modes/reference/logical-props-001-ref.html": [ + [ + {} + ] + ], + "css/css-writing-modes/reference/mongolian-orientation-001-ref.html": [ + [ + {} + ] + ], "css/css-writing-modes/reference/outline-inline-block-vrl-006.html": [ [ {} @@ -255896,6 +256819,16 @@ {} ] ], + "css/css-writing-modes/reference/svg-aliasing-001-ref.html": [ + [ + {} + ] + ], + "css/css-writing-modes/reference/svg-aliasing-002-ref.html": [ + [ + {} + ] + ], "css/css-writing-modes/reference/table-cell-001-ref.html": [ [ {} @@ -258776,6 +259709,36 @@ {} ] ], + "css/fonts/noto/NotoSansAdlam-hinted/LICENSE_OFL.txt": [ + [ + {} + ] + ], + "css/fonts/noto/NotoSansAdlam-hinted/NotoSansAdlam-Regular.ttf": [ + [ + {} + ] + ], + "css/fonts/noto/NotoSansAdlam-hinted/README": [ + [ + {} + ] + ], + "css/fonts/noto/NotoSansCypriot-hinted/LICENSE_OFL.txt": [ + [ + {} + ] + ], + "css/fonts/noto/NotoSansCypriot-hinted/NotoSansCypriot-Regular.ttf": [ + [ + {} + ] + ], + "css/fonts/noto/NotoSansCypriot-hinted/README": [ + [ + {} + ] + ], "css/geometry/OWNERS": [ [ {} @@ -260616,6 +261579,11 @@ {} ] ], + "css/selectors/invalidation/sheet-going-away-002-ref.html": [ + [ + {} + ] + ], "css/selectors/of-type-selectors-ref.xhtml": [ [ {} @@ -260661,6 +261629,11 @@ {} ] ], + "css/selectors/selector-structural-pseudo-root-ref.html": [ + [ + {} + ] + ], "css/selectors/selectors-attr-white-space-001-ref.html": [ [ {} @@ -260776,6 +261749,11 @@ {} ] ], + "css/support/alignment.css": [ + [ + {} + ] + ], "css/support/b-green.css": [ [ {} @@ -262631,6 +263609,11 @@ {} ] ], + "css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-paint-ordering-003-ref.html": [ + [ + {} + ] + ], "css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-root-node-001-ref.html": [ [ {} @@ -267481,6 +268464,36 @@ {} ] ], + "feature-policy/experimental-features/resources/feature-policy-image.html": [ + [ + {} + ] + ], + "feature-policy/experimental-features/resources/image.jpg": [ + [ + {} + ] + ], + "feature-policy/experimental-features/resources/image.png": [ + [ + {} + ] + ], + "feature-policy/experimental-features/resources/image.svg": [ + [ + {} + ] + ], + "feature-policy/experimental-features/resources/video.ogv": [ + [ + {} + ] + ], + "feature-policy/experimental-features/unsized-image.tentative.https.sub.html.headers": [ + [ + {} + ] + ], "feature-policy/payment-allowed-by-feature-policy.https.sub.html.headers": [ [ {} @@ -267931,6 +268944,21 @@ {} ] ], + "fetch/data-urls/README.md": [ + [ + {} + ] + ], + "fetch/data-urls/resources/base64.json": [ + [ + {} + ] + ], + "fetch/data-urls/resources/data-urls.json": [ + [ + {} + ] + ], "fetch/http-cache/README.md": [ [ {} @@ -268436,6 +269464,11 @@ {} ] ], + "graphics-aam/OWNERS": [ + [ + {} + ] + ], "gyroscope/Gyroscope-disabled-by-feature-policy.https.html.headers": [ [ {} @@ -277271,6 +278304,16 @@ {} ] ], + "html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-added-ref.html": [ + [ + {} + ] + ], + "html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-removed-ref.html": [ + [ + {} + ] + ], "html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-line-doesnt-fit-ref.html": [ [ {} @@ -277286,6 +278329,16 @@ {} ] ], + "html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-non-snap-to-lines-ref.html": [ + [ + {} + ] + ], + "html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-two-cue-layout-after-first-end-ref.html": [ + [ + {} + ] + ], "html/semantics/embedded-content/resources/should-load.html": [ [ {} @@ -279106,6 +280159,11 @@ {} ] ], + "html/semantics/scripting-1/the-script-element/module/resources/fast-module.js": [ + [ + {} + ] + ], "html/semantics/scripting-1/the-script-element/module/resources/import-non-utf8-with-charset-header.js": [ [ {} @@ -279161,6 +280219,11 @@ {} ] ], + "html/semantics/scripting-1/the-script-element/module/resources/slow-module.js": [ + [ + {} + ] + ], "html/semantics/scripting-1/the-script-element/module/set-currentScript-on-window.js": [ [ {} @@ -280541,6 +281604,11 @@ {} ] ], + "images/pattern.svg": [ + [ + {} + ] + ], "images/red-16x16.png": [ [ {} @@ -280806,6 +281874,11 @@ {} ] ], + "interfaces/screen-orientation.idl": [ + [ + {} + ] + ], "interfaces/touchevents.idl": [ [ {} @@ -282876,17 +283949,12 @@ {} ] ], - "proximity/DeviceProximityEvent_tests.js": [ - [ - {} - ] - ], "proximity/OWNERS": [ [ {} ] ], - "proximity/UserProximityEvent_tests.js": [ + "quirks/OWNERS": [ [ {} ] @@ -285576,6 +286644,11 @@ {} ] ], + "resource-timing/resources/empty.js": [ + [ + {} + ] + ], "resource-timing/resources/empty_script.js": [ [ {} @@ -286976,6 +288049,16 @@ {} ] ], + "service-workers/service-worker/resources/about-blank-replacement-blank-dynamic-nested-frame.html": [ + [ + {} + ] + ], + "service-workers/service-worker/resources/about-blank-replacement-blank-nested-frame.html": [ + [ + {} + ] + ], "service-workers/service-worker/resources/about-blank-replacement-frame.py": [ [ {} @@ -286991,6 +288074,11 @@ {} ] ], + "service-workers/service-worker/resources/about-blank-replacement-srcdoc-nested-frame.html": [ + [ + {} + ] + ], "service-workers/service-worker/resources/about-blank-replacement-uncontrolled-nested-frame.html": [ [ {} @@ -287176,6 +288264,11 @@ {} ] ], + "service-workers/service-worker/resources/echo-content.py": [ + [ + {} + ] + ], "service-workers/service-worker/resources/echo-message-to-source-worker.js": [ [ {} @@ -287241,6 +288334,11 @@ {} ] ], + "service-workers/service-worker/resources/fetch-canvas-tainting-tests.js": [ + [ + {} + ] + ], "service-workers/service-worker/resources/fetch-cors-exposed-header-names-worker.js": [ [ {} @@ -287621,6 +288719,16 @@ {} ] ], + "service-workers/service-worker/resources/local-url-inherit-controller-frame.html": [ + [ + {} + ] + ], + "service-workers/service-worker/resources/local-url-inherit-controller-worker.js": [ + [ + {} + ] + ], "service-workers/service-worker/resources/malformed-worker.py": [ [ {} @@ -290031,6 +291139,16 @@ {} ] ], + "webdriver/tests/execute_async_script/__init__.py": [ + [ + {} + ] + ], + "webdriver/tests/execute_script/__init__.py": [ + [ + {} + ] + ], "webdriver/tests/sessions/new_session/conftest.py": [ [ {} @@ -296365,6 +297483,12 @@ {} ] ], + "2dcontext/imagebitmap/createImageBitmap-origin.sub.html": [ + [ + "/2dcontext/imagebitmap/createImageBitmap-origin.sub.html", + {} + ] + ], "2dcontext/imagebitmap/createImageBitmap-sizeOverflow.html": [ [ "/2dcontext/imagebitmap/createImageBitmap-sizeOverflow.html", @@ -301695,6 +302819,12 @@ {} ] ], + "acid/acid3/numbered-tests.html": [ + [ + "/acid/acid3/numbered-tests.html", + {} + ] + ], "ambient-light/AmbientLightSensor-disabled-by-feature-policy.https.html": [ [ "/ambient-light/AmbientLightSensor-disabled-by-feature-policy.https.html", @@ -302163,6 +303293,262 @@ } ] ], + "bluetooth/requestDevice/blocklisted-service-in-filter.https.html": [ + [ + "/bluetooth/requestDevice/blocklisted-service-in-filter.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/requestDevice/blocklisted-service-in-optionalServices.https.html": [ + [ + "/bluetooth/requestDevice/blocklisted-service-in-optionalServices.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/requestDevice/canonicalizeFilter/device-name-longer-than-29-bytes.https.html": [ + [ + "/bluetooth/requestDevice/canonicalizeFilter/device-name-longer-than-29-bytes.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/requestDevice/canonicalizeFilter/empty-filter.https.html": [ + [ + "/bluetooth/requestDevice/canonicalizeFilter/empty-filter.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/requestDevice/canonicalizeFilter/empty-filters-member.https.html": [ + [ + "/bluetooth/requestDevice/canonicalizeFilter/empty-filters-member.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/requestDevice/canonicalizeFilter/empty-namePrefix.https.html": [ + [ + "/bluetooth/requestDevice/canonicalizeFilter/empty-namePrefix.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/requestDevice/canonicalizeFilter/empty-services-member.https.html": [ + [ + "/bluetooth/requestDevice/canonicalizeFilter/empty-services-member.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/requestDevice/canonicalizeFilter/filters-xor-acceptAllDevices.https.html": [ + [ + "/bluetooth/requestDevice/canonicalizeFilter/filters-xor-acceptAllDevices.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-name-unicode.https.html": [ + [ + "/bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-name-unicode.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-name.https.html": [ + [ + "/bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-name.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-namePrefix-unicode.https.html": [ + [ + "/bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-namePrefix-unicode.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-namePrefix.https.html": [ + [ + "/bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-namePrefix.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/requestDevice/canonicalizeFilter/max-length-name-unicode.https.html": [ + [ + "/bluetooth/requestDevice/canonicalizeFilter/max-length-name-unicode.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/requestDevice/canonicalizeFilter/max-length-name.https.html": [ + [ + "/bluetooth/requestDevice/canonicalizeFilter/max-length-name.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/requestDevice/canonicalizeFilter/max-length-namePrefix-unicode.https.html": [ + [ + "/bluetooth/requestDevice/canonicalizeFilter/max-length-namePrefix-unicode.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/requestDevice/canonicalizeFilter/max-length-namePrefix.https.html": [ + [ + "/bluetooth/requestDevice/canonicalizeFilter/max-length-namePrefix.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/requestDevice/canonicalizeFilter/no-arguments.https.html": [ + [ + "/bluetooth/requestDevice/canonicalizeFilter/no-arguments.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-name.https.html": [ + [ + "/bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-name.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-namePrefix.https.html": [ + [ + "/bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-namePrefix.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/requestDevice/canonicalizeFilter/wrong-service-in-optionalServices-member.https.html": [ + [ + "/bluetooth/requestDevice/canonicalizeFilter/wrong-service-in-optionalServices-member.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/requestDevice/canonicalizeFilter/wrong-service-in-services-member.https.html": [ + [ + "/bluetooth/requestDevice/canonicalizeFilter/wrong-service-in-services-member.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/requestDevice/consumes-user-gesture.https.html": [ + [ + "/bluetooth/requestDevice/consumes-user-gesture.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/requestDevice/discovery-succeeds.https.html": [ + [ + "/bluetooth/requestDevice/discovery-succeeds.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/requestDevice/filter-matches.https.html": [ + [ + "/bluetooth/requestDevice/filter-matches.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/requestDevice/le-not-supported.https.html": [ + [ + "/bluetooth/requestDevice/le-not-supported.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/requestDevice/name-empty-device-from-name-empty-filter.https.html": [ + [ + "/bluetooth/requestDevice/name-empty-device-from-name-empty-filter.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/requestDevice/not-processing-user-gesture.https.html": [ + [ + "/bluetooth/requestDevice/not-processing-user-gesture.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/requestDevice/radio-not-present.https.html": [ + [ + "/bluetooth/requestDevice/radio-not-present.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/requestDevice/request-from-iframe.https.html": [ + [ + "/bluetooth/requestDevice/request-from-iframe.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/requestDevice/request-from-sandboxed-iframe.https.html": [ + [ + "/bluetooth/requestDevice/request-from-sandboxed-iframe.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/requestDevice/same-device.https.html": [ + [ + "/bluetooth/requestDevice/same-device.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/requestDevice/single-filter-single-service.https.html": [ + [ + "/bluetooth/requestDevice/single-filter-single-service.https.html", + { + "testdriver": true + } + ] + ], "bluetooth/server/connect/connection-succeeds.https.html": [ [ "/bluetooth/server/connect/connection-succeeds.https.html", @@ -302355,6 +303741,46 @@ } ] ], + "bluetooth/server/getPrimaryService/service-found.https.html": [ + [ + "/bluetooth/server/getPrimaryService/service-found.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/server/getPrimaryService/two-iframes-from-same-origin.https.html": [ + [ + "/bluetooth/server/getPrimaryService/two-iframes-from-same-origin.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/server/getPrimaryServices/blocklisted-services-with-uuid.https.html": [ + [ + "/bluetooth/server/getPrimaryServices/blocklisted-services-with-uuid.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/server/getPrimaryServices/blocklisted-services.https.html": [ + [ + "/bluetooth/server/getPrimaryServices/blocklisted-services.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/server/getPrimaryServices/correct-services.https.html": [ + [ + "/bluetooth/server/getPrimaryServices/correct-services.https.html", + { + "testdriver": true + } + ] + ], "bluetooth/server/getPrimaryServices/gen-disconnect-called-before-with-uuid.https.html": [ [ "/bluetooth/server/getPrimaryServices/gen-disconnect-called-before-with-uuid.https.html", @@ -302563,6 +303989,30 @@ } ] ], + "bluetooth/server/getPrimaryServices/services-found-with-uuid.https.html": [ + [ + "/bluetooth/server/getPrimaryServices/services-found-with-uuid.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/server/getPrimaryServices/services-found.https.html": [ + [ + "/bluetooth/server/getPrimaryServices/services-found.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/server/getPrimaryServices/services-not-found.https.html": [ + [ + "/bluetooth/server/getPrimaryServices/services-not-found.https.html", + { + "testdriver": true + } + ] + ], "bluetooth/service/getCharacteristic/characteristic-found.https.html": [ [ "/bluetooth/service/getCharacteristic/characteristic-found.https.html", @@ -302571,6 +304021,54 @@ } ] ], + "bluetooth/service/getCharacteristic/gen-blocklisted-characteristic.https.html": [ + [ + "/bluetooth/service/getCharacteristic/gen-blocklisted-characteristic.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/service/getCharacteristic/gen-characteristic-not-found.https.html": [ + [ + "/bluetooth/service/getCharacteristic/gen-characteristic-not-found.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/service/getCharacteristic/gen-garbage-collection-ran-during-error.https.html": [ + [ + "/bluetooth/service/getCharacteristic/gen-garbage-collection-ran-during-error.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/service/getCharacteristic/gen-get-same-object.https.html": [ + [ + "/bluetooth/service/getCharacteristic/gen-get-same-object.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/service/getCharacteristic/gen-invalid-characteristic-name.https.html": [ + [ + "/bluetooth/service/getCharacteristic/gen-invalid-characteristic-name.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/service/getCharacteristic/gen-reconnect-during.https.html": [ + [ + "/bluetooth/service/getCharacteristic/gen-reconnect-during.https.html", + { + "testdriver": true + } + ] + ], "bluetooth/service/getCharacteristics/blocklisted-characteristics.https.html": [ [ "/bluetooth/service/getCharacteristics/blocklisted-characteristics.https.html", @@ -302603,6 +304101,78 @@ } ] ], + "bluetooth/service/getCharacteristics/gen-blocklisted-characteristic-with-uuid.https.html": [ + [ + "/bluetooth/service/getCharacteristics/gen-blocklisted-characteristic-with-uuid.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/service/getCharacteristics/gen-characteristic-not-found-with-uuid.https.html": [ + [ + "/bluetooth/service/getCharacteristics/gen-characteristic-not-found-with-uuid.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/service/getCharacteristics/gen-garbage-collection-ran-during-error-with-uuid.https.html": [ + [ + "/bluetooth/service/getCharacteristics/gen-garbage-collection-ran-during-error-with-uuid.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/service/getCharacteristics/gen-garbage-collection-ran-during-error.https.html": [ + [ + "/bluetooth/service/getCharacteristics/gen-garbage-collection-ran-during-error.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/service/getCharacteristics/gen-get-same-object-with-uuid.https.html": [ + [ + "/bluetooth/service/getCharacteristics/gen-get-same-object-with-uuid.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/service/getCharacteristics/gen-get-same-object.https.html": [ + [ + "/bluetooth/service/getCharacteristics/gen-get-same-object.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/service/getCharacteristics/gen-invalid-characteristic-name.https.html": [ + [ + "/bluetooth/service/getCharacteristics/gen-invalid-characteristic-name.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/service/getCharacteristics/gen-reconnect-during-with-uuid.https.html": [ + [ + "/bluetooth/service/getCharacteristics/gen-reconnect-during-with-uuid.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/service/getCharacteristics/gen-reconnect-during.https.html": [ + [ + "/bluetooth/service/getCharacteristics/gen-reconnect-during.https.html", + { + "testdriver": true + } + ] + ], "clear-site-data/navigation-insecure.html": [ [ "/clear-site-data/navigation-insecure.html", @@ -303703,41 +305273,155 @@ {} ] ], - "content-security-policy/reporting/reporting-api-doesnt-send-reports-without-violation.https.sub.html": [ + "content-security-policy/reporting-api/reporting-api-doesnt-send-reports-without-violation.https.sub.html": [ [ - "/content-security-policy/reporting/reporting-api-doesnt-send-reports-without-violation.https.sub.html", + "/content-security-policy/reporting-api/reporting-api-doesnt-send-reports-without-violation.https.sub.html", {} ] ], - "content-security-policy/reporting/reporting-api-report-only-sends-reports-on-violation.https.sub.html": [ + "content-security-policy/reporting-api/reporting-api-report-only-sends-reports-on-violation.https.sub.html": [ [ - "/content-security-policy/reporting/reporting-api-report-only-sends-reports-on-violation.https.sub.html", + "/content-security-policy/reporting-api/reporting-api-report-only-sends-reports-on-violation.https.sub.html", {} ] ], - "content-security-policy/reporting/reporting-api-report-to-overrides-report-uri-1.https.sub.html": [ + "content-security-policy/reporting-api/reporting-api-report-to-overrides-report-uri-1.https.sub.html": [ [ - "/content-security-policy/reporting/reporting-api-report-to-overrides-report-uri-1.https.sub.html", + "/content-security-policy/reporting-api/reporting-api-report-to-overrides-report-uri-1.https.sub.html", {} ] ], - "content-security-policy/reporting/reporting-api-report-to-overrides-report-uri-2.https.sub.html": [ + "content-security-policy/reporting-api/reporting-api-report-to-overrides-report-uri-2.https.sub.html": [ [ - "/content-security-policy/reporting/reporting-api-report-to-overrides-report-uri-2.https.sub.html", + "/content-security-policy/reporting-api/reporting-api-report-to-overrides-report-uri-2.https.sub.html", { "timeout": "long" } ] ], - "content-security-policy/reporting/reporting-api-sends-reports-on-violation.https.sub.html": [ + "content-security-policy/reporting-api/reporting-api-sends-reports-on-violation.https.sub.html": [ + [ + "/content-security-policy/reporting-api/reporting-api-sends-reports-on-violation.https.sub.html", + {} + ] + ], + "content-security-policy/reporting-api/reporting-api-works-on-frame-src.https.sub.html": [ + [ + "/content-security-policy/reporting-api/reporting-api-works-on-frame-src.https.sub.html", + {} + ] + ], + "content-security-policy/reporting/multiple-report-policies.html": [ + [ + "/content-security-policy/reporting/multiple-report-policies.html", + {} + ] + ], + "content-security-policy/reporting/report-and-enforce.html": [ + [ + "/content-security-policy/reporting/report-and-enforce.html", + {} + ] + ], + "content-security-policy/reporting/report-blocked-data-uri.html": [ + [ + "/content-security-policy/reporting/report-blocked-data-uri.html", + {} + ] + ], + "content-security-policy/reporting/report-blocked-uri-cross-origin.sub.html": [ + [ + "/content-security-policy/reporting/report-blocked-uri-cross-origin.sub.html", + {} + ] + ], + "content-security-policy/reporting/report-blocked-uri.html": [ + [ + "/content-security-policy/reporting/report-blocked-uri.html", + {} + ] + ], + "content-security-policy/reporting/report-cross-origin-no-cookies.sub.html": [ + [ + "/content-security-policy/reporting/report-cross-origin-no-cookies.sub.html", + {} + ] + ], + "content-security-policy/reporting/report-multiple-violations-01.html": [ + [ + "/content-security-policy/reporting/report-multiple-violations-01.html", + {} + ] + ], + "content-security-policy/reporting/report-multiple-violations-02.html": [ + [ + "/content-security-policy/reporting/report-multiple-violations-02.html", + {} + ] + ], + "content-security-policy/reporting/report-only-in-meta.sub.html": [ + [ + "/content-security-policy/reporting/report-only-in-meta.sub.html", + {} + ] + ], + "content-security-policy/reporting/report-original-url.sub.html": [ + [ + "/content-security-policy/reporting/report-original-url.sub.html", + {} + ] + ], + "content-security-policy/reporting/report-same-origin-with-cookies.html": [ [ - "/content-security-policy/reporting/reporting-api-sends-reports-on-violation.https.sub.html", + "/content-security-policy/reporting/report-same-origin-with-cookies.html", {} ] ], - "content-security-policy/reporting/securitypolicyviolation-idl.html": [ + "content-security-policy/reporting/report-strips-fragment.html": [ [ - "/content-security-policy/reporting/securitypolicyviolation-idl.html", + "/content-security-policy/reporting/report-strips-fragment.html", + {} + ] + ], + "content-security-policy/reporting/report-uri-effective-directive.html": [ + [ + "/content-security-policy/reporting/report-uri-effective-directive.html", + {} + ] + ], + "content-security-policy/reporting/report-uri-from-child-frame.html": [ + [ + "/content-security-policy/reporting/report-uri-from-child-frame.html", + {} + ] + ], + "content-security-policy/reporting/report-uri-from-inline-javascript.html": [ + [ + "/content-security-policy/reporting/report-uri-from-inline-javascript.html", + {} + ] + ], + "content-security-policy/reporting/report-uri-from-javascript.html": [ + [ + "/content-security-policy/reporting/report-uri-from-javascript.html", + {} + ] + ], + "content-security-policy/reporting/report-uri-multiple-reversed.html": [ + [ + "/content-security-policy/reporting/report-uri-multiple-reversed.html", + {} + ] + ], + "content-security-policy/reporting/report-uri-multiple.html": [ + [ + "/content-security-policy/reporting/report-uri-multiple.html", + {} + ] + ], + "content-security-policy/reporting/report-uri-scheme-relative.html": [ + [ + "/content-security-policy/reporting/report-uri-scheme-relative.html", {} ] ], @@ -305263,6 +306947,12 @@ {} ] ], + "credential-management/require_securecontext.html": [ + [ + "/credential-management/require_securecontext.html", + {} + ] + ], "css/compositing/mix-blend-mode/mix-blend-mode-creates-stacking-context.html": [ [ "/css/compositing/mix-blend-mode/mix-blend-mode-creates-stacking-context.html", @@ -305275,6 +306965,66 @@ {} ] ], + "css/css-align/content-distribution/parse-align-content-001.html": [ + [ + "/css/css-align/content-distribution/parse-align-content-001.html", + {} + ] + ], + "css/css-align/content-distribution/parse-align-content-002.html": [ + [ + "/css/css-align/content-distribution/parse-align-content-002.html", + {} + ] + ], + "css/css-align/content-distribution/parse-align-content-003.html": [ + [ + "/css/css-align/content-distribution/parse-align-content-003.html", + {} + ] + ], + "css/css-align/content-distribution/parse-align-content-004.html": [ + [ + "/css/css-align/content-distribution/parse-align-content-004.html", + {} + ] + ], + "css/css-align/content-distribution/parse-align-content-005.html": [ + [ + "/css/css-align/content-distribution/parse-align-content-005.html", + {} + ] + ], + "css/css-align/content-distribution/parse-justify-content-001.html": [ + [ + "/css/css-align/content-distribution/parse-justify-content-001.html", + {} + ] + ], + "css/css-align/content-distribution/parse-justify-content-002.html": [ + [ + "/css/css-align/content-distribution/parse-justify-content-002.html", + {} + ] + ], + "css/css-align/content-distribution/parse-justify-content-003.html": [ + [ + "/css/css-align/content-distribution/parse-justify-content-003.html", + {} + ] + ], + "css/css-align/content-distribution/parse-justify-content-004.html": [ + [ + "/css/css-align/content-distribution/parse-justify-content-004.html", + {} + ] + ], + "css/css-align/content-distribution/parse-justify-content-005.html": [ + [ + "/css/css-align/content-distribution/parse-justify-content-005.html", + {} + ] + ], "css/css-align/content-distribution/place-content-shorthand-001.html": [ [ "/css/css-align/content-distribution/place-content-shorthand-001.html", @@ -305317,6 +307067,72 @@ {} ] ], + "css/css-align/default-alignment/parse-align-items-001.html": [ + [ + "/css/css-align/default-alignment/parse-align-items-001.html", + {} + ] + ], + "css/css-align/default-alignment/parse-align-items-002.html": [ + [ + "/css/css-align/default-alignment/parse-align-items-002.html", + {} + ] + ], + "css/css-align/default-alignment/parse-align-items-003.html": [ + [ + "/css/css-align/default-alignment/parse-align-items-003.html", + {} + ] + ], + "css/css-align/default-alignment/parse-align-items-004.html": [ + [ + "/css/css-align/default-alignment/parse-align-items-004.html", + {} + ] + ], + "css/css-align/default-alignment/parse-align-items-005.html": [ + [ + "/css/css-align/default-alignment/parse-align-items-005.html", + {} + ] + ], + "css/css-align/default-alignment/parse-justify-items-001.html": [ + [ + "/css/css-align/default-alignment/parse-justify-items-001.html", + {} + ] + ], + "css/css-align/default-alignment/parse-justify-items-002.html": [ + [ + "/css/css-align/default-alignment/parse-justify-items-002.html", + {} + ] + ], + "css/css-align/default-alignment/parse-justify-items-003.html": [ + [ + "/css/css-align/default-alignment/parse-justify-items-003.html", + {} + ] + ], + "css/css-align/default-alignment/parse-justify-items-004.html": [ + [ + "/css/css-align/default-alignment/parse-justify-items-004.html", + {} + ] + ], + "css/css-align/default-alignment/parse-justify-items-005.html": [ + [ + "/css/css-align/default-alignment/parse-justify-items-005.html", + {} + ] + ], + "css/css-align/default-alignment/parse-justify-items-006.html": [ + [ + "/css/css-align/default-alignment/parse-justify-items-006.html", + {} + ] + ], "css/css-align/default-alignment/place-items-shorthand-001.html": [ [ "/css/css-align/default-alignment/place-items-shorthand-001.html", @@ -305353,6 +307169,66 @@ {} ] ], + "css/css-align/self-alignment/parse-align-self-001.html": [ + [ + "/css/css-align/self-alignment/parse-align-self-001.html", + {} + ] + ], + "css/css-align/self-alignment/parse-align-self-002.html": [ + [ + "/css/css-align/self-alignment/parse-align-self-002.html", + {} + ] + ], + "css/css-align/self-alignment/parse-align-self-003.html": [ + [ + "/css/css-align/self-alignment/parse-align-self-003.html", + {} + ] + ], + "css/css-align/self-alignment/parse-align-self-004.html": [ + [ + "/css/css-align/self-alignment/parse-align-self-004.html", + {} + ] + ], + "css/css-align/self-alignment/parse-align-self-005.html": [ + [ + "/css/css-align/self-alignment/parse-align-self-005.html", + {} + ] + ], + "css/css-align/self-alignment/parse-justify-self-001.html": [ + [ + "/css/css-align/self-alignment/parse-justify-self-001.html", + {} + ] + ], + "css/css-align/self-alignment/parse-justify-self-002.html": [ + [ + "/css/css-align/self-alignment/parse-justify-self-002.html", + {} + ] + ], + "css/css-align/self-alignment/parse-justify-self-003.html": [ + [ + "/css/css-align/self-alignment/parse-justify-self-003.html", + {} + ] + ], + "css/css-align/self-alignment/parse-justify-self-004.html": [ + [ + "/css/css-align/self-alignment/parse-justify-self-004.html", + {} + ] + ], + "css/css-align/self-alignment/parse-justify-self-005.html": [ + [ + "/css/css-align/self-alignment/parse-justify-self-005.html", + {} + ] + ], "css/css-align/self-alignment/place-self-shorthand-001.html": [ [ "/css/css-align/self-alignment/place-self-shorthand-001.html", @@ -305489,6 +307365,12 @@ {} ] ], + "css/css-color/rgb-rounding-001.html": [ + [ + "/css/css-color/rgb-rounding-001.html", + {} + ] + ], "css/css-conditional/js/001.html": [ [ "/css/css-conditional/js/001.html", @@ -306077,6 +307959,12 @@ {} ] ], + "css/css-fonts/font-feature-settings-serialization-001.html": [ + [ + "/css/css-fonts/font-feature-settings-serialization-001.html", + {} + ] + ], "css/css-fonts/font-variant-alternates-parsing.html": [ [ "/css/css-fonts/font-variant-alternates-parsing.html", @@ -307271,6 +309159,42 @@ {} ] ], + "css/css-grid/layout-algorithm/grid-find-fr-size-gutters-001.html": [ + [ + "/css/css-grid/layout-algorithm/grid-find-fr-size-gutters-001.html", + {} + ] + ], + "css/css-grid/layout-algorithm/grid-find-fr-size-gutters-002.html": [ + [ + "/css/css-grid/layout-algorithm/grid-find-fr-size-gutters-002.html", + {} + ] + ], + "css/css-layout-api/at-supports-rule.https.html": [ + [ + "/css/css-layout-api/at-supports-rule.https.html", + {} + ] + ], + "css/css-layout-api/computed-style-layout-function.https.html": [ + [ + "/css/css-layout-api/computed-style-layout-function.https.html", + {} + ] + ], + "css/css-layout-api/inline-style-layout-function.https.html": [ + [ + "/css/css-layout-api/inline-style-layout-function.https.html", + {} + ] + ], + "css/css-layout-api/supports.https.html": [ + [ + "/css/css-layout-api/supports.https.html", + {} + ] + ], "css/css-logical/logicalprops-block-size-vlr.html": [ [ "/css/css-logical/logicalprops-block-size-vlr.html", @@ -307361,6 +309285,18 @@ {} ] ], + "css/css-multicol/multicol-gap-percentage-001.html": [ + [ + "/css/css-multicol/multicol-gap-percentage-001.html", + {} + ] + ], + "css/css-position/position-sticky-bottom.html": [ + [ + "/css/css-position/position-sticky-bottom.html", + {} + ] + ], "css/css-position/position-sticky-get-bounding-client-rect.html": [ [ "/css/css-position/position-sticky-get-bounding-client-rect.html", @@ -307373,6 +309309,12 @@ {} ] ], + "css/css-position/position-sticky-left.html": [ + [ + "/css/css-position/position-sticky-left.html", + {} + ] + ], "css/css-position/position-sticky-offset-overflow.html": [ [ "/css/css-position/position-sticky-offset-overflow.html", @@ -307391,6 +309333,18 @@ {} ] ], + "css/css-position/position-sticky-right.html": [ + [ + "/css/css-position/position-sticky-right.html", + {} + ] + ], + "css/css-position/position-sticky-top.html": [ + [ + "/css/css-position/position-sticky-top.html", + {} + ] + ], "css/css-regions/cssomview-apis-no-region-chain-001.html": [ [ "/css/css-regions/cssomview-apis-no-region-chain-001.html", @@ -307433,12 +309387,24 @@ {} ] ], + "css/css-scoping/slotted-invalidation.html": [ + [ + "/css/css-scoping/slotted-invalidation.html", + {} + ] + ], "css/css-scoping/slotted-parsing.html": [ [ "/css/css-scoping/slotted-parsing.html", {} ] ], + "css/css-scoping/slotted-slot.html": [ + [ + "/css/css-scoping/slotted-slot.html", + {} + ] + ], "css/css-scroll-anchoring/abspos-containing-block-outside-scroller.html": [ [ "/css/css-scroll-anchoring/abspos-containing-block-outside-scroller.html", @@ -309473,6 +311439,18 @@ {} ] ], + "css/css-transforms/parsing/perspective-origin-parsing-invalid.html": [ + [ + "/css/css-transforms/parsing/perspective-origin-parsing-invalid.html", + {} + ] + ], + "css/css-transforms/parsing/perspective-origin-parsing-valid.html": [ + [ + "/css/css-transforms/parsing/perspective-origin-parsing-valid.html", + {} + ] + ], "css/css-transforms/parsing/rotate-parsing-invalid.html": [ [ "/css/css-transforms/parsing/rotate-parsing-invalid.html", @@ -309899,21 +311877,195 @@ {} ] ], + "css/css-typed-om/stylevalue-subclasses/cssMatrixComponent.tentative.html": [ + [ + "/css/css-typed-om/stylevalue-subclasses/cssMatrixComponent.tentative.html", + {} + ] + ], + "css/css-typed-om/stylevalue-subclasses/cssPerspective.tentative.html": [ + [ + "/css/css-typed-om/stylevalue-subclasses/cssPerspective.tentative.html", + {} + ] + ], "css/css-typed-om/stylevalue-subclasses/cssPositionValue-interface.html": [ [ "/css/css-typed-om/stylevalue-subclasses/cssPositionValue-interface.html", {} ] ], + "css/css-typed-om/stylevalue-subclasses/cssPositionValue-invalid.html": [ + [ + "/css/css-typed-om/stylevalue-subclasses/cssPositionValue-invalid.html", + {} + ] + ], + "css/css-typed-om/stylevalue-subclasses/cssPositionValue.html": [ + [ + "/css/css-typed-om/stylevalue-subclasses/cssPositionValue.html", + {} + ] + ], + "css/css-typed-om/stylevalue-subclasses/cssRotate.tentative.html": [ + [ + "/css/css-typed-om/stylevalue-subclasses/cssRotate.tentative.html", + {} + ] + ], + "css/css-typed-om/stylevalue-subclasses/cssScale.tentative.html": [ + [ + "/css/css-typed-om/stylevalue-subclasses/cssScale.tentative.html", + {} + ] + ], + "css/css-typed-om/stylevalue-subclasses/cssSkew.tentative.html": [ + [ + "/css/css-typed-om/stylevalue-subclasses/cssSkew.tentative.html", + {} + ] + ], + "css/css-typed-om/stylevalue-subclasses/cssTransformValue.tentative.html": [ + [ + "/css/css-typed-om/stylevalue-subclasses/cssTransformValue.tentative.html", + {} + ] + ], + "css/css-typed-om/stylevalue-subclasses/cssTranslate.tentative.html": [ + [ + "/css/css-typed-om/stylevalue-subclasses/cssTranslate.tentative.html", + {} + ] + ], + "css/css-typed-om/stylevalue-subclasses/cssUnparsedValue-interface.html": [ + [ + "/css/css-typed-om/stylevalue-subclasses/cssUnparsedValue-interface.html", + {} + ] + ], + "css/css-typed-om/stylevalue-subclasses/cssUnparsedValue.html": [ + [ + "/css/css-typed-om/stylevalue-subclasses/cssUnparsedValue.html", + {} + ] + ], + "css/css-typed-om/stylevalue-subclasses/cssUrlImageValue.tentative.html": [ + [ + "/css/css-typed-om/stylevalue-subclasses/cssUrlImageValue.tentative.html", + {} + ] + ], + "css/css-typed-om/stylevalue-subclasses/cssVariableReferenceValue-interface.html": [ + [ + "/css/css-typed-om/stylevalue-subclasses/cssVariableReferenceValue-interface.html", + {} + ] + ], + "css/css-typed-om/stylevalue-subclasses/cssVariableReferenceValue-invalid.html": [ + [ + "/css/css-typed-om/stylevalue-subclasses/cssVariableReferenceValue-invalid.html", + {} + ] + ], + "css/css-typed-om/stylevalue-subclasses/cssVariableReferenceValue.html": [ + [ + "/css/css-typed-om/stylevalue-subclasses/cssVariableReferenceValue.html", + {} + ] + ], + "css/css-typed-om/stylevalue-subclasses/numeric-objects/add-two-types.tentative.html": [ + [ + "/css/css-typed-om/stylevalue-subclasses/numeric-objects/add-two-types.tentative.html", + {} + ] + ], + "css/css-typed-om/stylevalue-subclasses/numeric-objects/arithmetic.tentative.html": [ + [ + "/css/css-typed-om/stylevalue-subclasses/numeric-objects/arithmetic.tentative.html", + {} + ] + ], + "css/css-typed-om/stylevalue-subclasses/numeric-objects/create-a-type.tentative.html": [ + [ + "/css/css-typed-om/stylevalue-subclasses/numeric-objects/create-a-type.tentative.html", + {} + ] + ], + "css/css-typed-om/stylevalue-subclasses/numeric-objects/cssMathInvert-type.html": [ + [ + "/css/css-typed-om/stylevalue-subclasses/numeric-objects/cssMathInvert-type.html", + {} + ] + ], + "css/css-typed-om/stylevalue-subclasses/numeric-objects/cssMathNegate-type.html": [ + [ + "/css/css-typed-om/stylevalue-subclasses/numeric-objects/cssMathNegate-type.html", + {} + ] + ], + "css/css-typed-om/stylevalue-subclasses/numeric-objects/cssMathValue.tentative.html": [ + [ + "/css/css-typed-om/stylevalue-subclasses/numeric-objects/cssMathValue.tentative.html", + {} + ] + ], + "css/css-typed-om/stylevalue-subclasses/numeric-objects/cssUnitValue.tentative.html": [ + [ + "/css/css-typed-om/stylevalue-subclasses/numeric-objects/cssUnitValue.tentative.html", + {} + ] + ], + "css/css-typed-om/stylevalue-subclasses/numeric-objects/cssnumericvalue-multiply-two-types.tentative.html": [ + [ + "/css/css-typed-om/stylevalue-subclasses/numeric-objects/cssnumericvalue-multiply-two-types.tentative.html", + {} + ] + ], + "css/css-typed-om/stylevalue-subclasses/numeric-objects/equals.tentative.html": [ + [ + "/css/css-typed-om/stylevalue-subclasses/numeric-objects/equals.tentative.html", + {} + ] + ], + "css/css-typed-om/stylevalue-subclasses/numeric-objects/numeric-factory.tentative.html": [ + [ + "/css/css-typed-om/stylevalue-subclasses/numeric-objects/numeric-factory.tentative.html", + {} + ] + ], + "css/css-typed-om/stylevalue-subclasses/numeric-objects/parse.tentative.html": [ + [ + "/css/css-typed-om/stylevalue-subclasses/numeric-objects/parse.tentative.html", + {} + ] + ], + "css/css-typed-om/stylevalue-subclasses/numeric-objects/to.tentative.html": [ + [ + "/css/css-typed-om/stylevalue-subclasses/numeric-objects/to.tentative.html", + {} + ] + ], + "css/css-typed-om/stylevalue-subclasses/numeric-objects/toSum.tentative.html": [ + [ + "/css/css-typed-om/stylevalue-subclasses/numeric-objects/toSum.tentative.html", + {} + ] + ], "css/css-typed-om/the-stylepropertymap/computed/computed.tentative.html": [ [ "/css/css-typed-om/the-stylepropertymap/computed/computed.tentative.html", {} ] ], - "css/css-typed-om/the-stylepropertymap/computed/get.tentative.html": [ + "css/css-typed-om/the-stylepropertymap/computed/get-invalid.html": [ + [ + "/css/css-typed-om/the-stylepropertymap/computed/get-invalid.html", + {} + ] + ], + "css/css-typed-om/the-stylepropertymap/computed/get.html": [ [ - "/css/css-typed-om/the-stylepropertymap/computed/get.tentative.html", + "/css/css-typed-om/the-stylepropertymap/computed/get.html", {} ] ], @@ -309953,9 +312105,27 @@ {} ] ], - "css/css-typed-om/the-stylepropertymap/declared/get.tentative.html": [ + "css/css-typed-om/the-stylepropertymap/declared/delete-invalid.html": [ + [ + "/css/css-typed-om/the-stylepropertymap/declared/delete-invalid.html", + {} + ] + ], + "css/css-typed-om/the-stylepropertymap/declared/delete.html": [ + [ + "/css/css-typed-om/the-stylepropertymap/declared/delete.html", + {} + ] + ], + "css/css-typed-om/the-stylepropertymap/declared/get-invalid.html": [ + [ + "/css/css-typed-om/the-stylepropertymap/declared/get-invalid.html", + {} + ] + ], + "css/css-typed-om/the-stylepropertymap/declared/get.html": [ [ - "/css/css-typed-om/the-stylepropertymap/declared/get.tentative.html", + "/css/css-typed-om/the-stylepropertymap/declared/get.html", {} ] ], @@ -309989,12 +312159,6 @@ {} ] ], - "css/css-typed-om/the-stylepropertymap/declared/test.tentative.html": [ - [ - "/css/css-typed-om/the-stylepropertymap/declared/test.tentative.html", - {} - ] - ], "css/css-typed-om/the-stylepropertymap/declared/update.tentative.html": [ [ "/css/css-typed-om/the-stylepropertymap/declared/update.tentative.html", @@ -310007,15 +312171,27 @@ {} ] ], - "css/css-typed-om/the-stylepropertymap/inline/delete.tentative.html": [ + "css/css-typed-om/the-stylepropertymap/inline/delete-invalid.html": [ [ - "/css/css-typed-om/the-stylepropertymap/inline/delete.tentative.html", + "/css/css-typed-om/the-stylepropertymap/inline/delete-invalid.html", {} ] ], - "css/css-typed-om/the-stylepropertymap/inline/get.tentative.html": [ + "css/css-typed-om/the-stylepropertymap/inline/delete.html": [ [ - "/css/css-typed-om/the-stylepropertymap/inline/get.tentative.html", + "/css/css-typed-om/the-stylepropertymap/inline/delete.html", + {} + ] + ], + "css/css-typed-om/the-stylepropertymap/inline/get-invalid.html": [ + [ + "/css/css-typed-om/the-stylepropertymap/inline/get-invalid.html", + {} + ] + ], + "css/css-typed-om/the-stylepropertymap/inline/get.html": [ + [ + "/css/css-typed-om/the-stylepropertymap/inline/get.html", {} ] ], @@ -310133,6 +312309,12 @@ {} ] ], + "css/css-values/calc-in-font-feature-settings.html": [ + [ + "/css/css-values/calc-in-font-feature-settings.html", + {} + ] + ], "css/css-values/calc-serialization.html": [ [ "/css/css-values/calc-serialization.html", @@ -310871,6 +313053,12 @@ {} ] ], + "css/cssom-view/elementFromPoint-dynamic-anon-box.html": [ + [ + "/css/cssom-view/elementFromPoint-dynamic-anon-box.html", + {} + ] + ], "css/cssom-view/elementFromPoint-parameters.html": [ [ "/css/cssom-view/elementFromPoint-parameters.html", @@ -311009,6 +313197,18 @@ {} ] ], + "css/cssom-view/scrollIntoView-scrollMargin.html": [ + [ + "/css/cssom-view/scrollIntoView-scrollMargin.html", + {} + ] + ], + "css/cssom-view/scrollIntoView-scrollPadding.html": [ + [ + "/css/cssom-view/scrollIntoView-scrollPadding.html", + {} + ] + ], "css/cssom-view/scrollIntoView-shadow.html": [ [ "/css/cssom-view/scrollIntoView-shadow.html", @@ -312041,6 +314241,18 @@ {} ] ], + "css/selectors/invalidation/selectorText-dynamic-001.html": [ + [ + "/css/selectors/invalidation/selectorText-dynamic-001.html", + {} + ] + ], + "css/selectors/invalidation/sheet-going-away-001.html": [ + [ + "/css/selectors/invalidation/sheet-going-away-001.html", + {} + ] + ], "css/selectors/missing-right-token.html": [ [ "/css/selectors/missing-right-token.html", @@ -312059,12 +314271,24 @@ {} ] ], + "custom-elements/Document-createElement-svg.svg": [ + [ + "/custom-elements/Document-createElement-svg.svg", + {} + ] + ], "custom-elements/Document-createElement.html": [ [ "/custom-elements/Document-createElement.html", {} ] ], + "custom-elements/Document-createElementNS.html": [ + [ + "/custom-elements/Document-createElementNS.html", + {} + ] + ], "custom-elements/HTMLElement-constructor.html": [ [ "/custom-elements/HTMLElement-constructor.html", @@ -312083,6 +314307,12 @@ {} ] ], + "custom-elements/builtin-coverage.html": [ + [ + "/custom-elements/builtin-coverage.html", + {} + ] + ], "custom-elements/connected-callbacks.html": [ [ "/custom-elements/connected-callbacks.html", @@ -312143,6 +314373,12 @@ {} ] ], + "custom-elements/parser/parser-constructs-custom-elements-with-is.html": [ + [ + "/custom-elements/parser/parser-constructs-custom-elements-with-is.html", + {} + ] + ], "custom-elements/parser/parser-constructs-custom-elements.html": [ [ "/custom-elements/parser/parser-constructs-custom-elements.html", @@ -312359,6 +314595,16 @@ {} ] ], + "device-memory/device-memory.https.any.js": [ + [ + "/device-memory/device-memory.https.any.html", + {} + ], + [ + "/device-memory/device-memory.https.any.worker.html", + {} + ] + ], "dom/abort/event.any.js": [ [ "/dom/abort/event.any.html", @@ -316625,6 +318871,12 @@ } ] ], + "feature-policy/experimental-features/unsized-image.tentative.https.sub.html": [ + [ + "/feature-policy/experimental-features/unsized-image.tentative.https.sub.html", + {} + ] + ], "feature-policy/payment-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html": [ [ "/feature-policy/payment-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html", @@ -317633,6 +319885,26 @@ {} ] ], + "fetch/data-urls/base64.any.js": [ + [ + "/fetch/data-urls/base64.any.html", + {} + ], + [ + "/fetch/data-urls/base64.any.worker.html", + {} + ] + ], + "fetch/data-urls/processing.any.js": [ + [ + "/fetch/data-urls/processing.any.html", + {} + ], + [ + "/fetch/data-urls/processing.any.worker.html", + {} + ] + ], "fetch/http-cache/304-update.html": [ [ "/fetch/http-cache/304-update.html", @@ -318379,6 +320651,12 @@ {} ] ], + "html/browsers/browsing-the-web/read-media/pageload-image-in-popup.html": [ + [ + "/html/browsers/browsing-the-web/read-media/pageload-image-in-popup.html", + {} + ] + ], "html/browsers/browsing-the-web/read-media/pageload-image.html": [ [ "/html/browsers/browsing-the-web/read-media/pageload-image.html", @@ -321071,6 +323349,12 @@ {} ] ], + "html/editing/editing-0/autocapitalization/autocapitalize.html": [ + [ + "/html/editing/editing-0/autocapitalization/autocapitalize.html", + {} + ] + ], "html/editing/editing-0/contenteditable/contentEditable-invalidvalue.html": [ [ "/html/editing/editing-0/contenteditable/contentEditable-invalidvalue.html", @@ -326013,6 +328297,12 @@ {} ] ], + "html/semantics/rellist-feature-detection.html": [ + [ + "/html/semantics/rellist-feature-detection.html", + {} + ] + ], "html/semantics/scripting-1/the-script-element/async_001.htm": [ [ "/html/semantics/scripting-1/the-script-element/async_001.htm", @@ -327305,6 +329595,14 @@ {} ] ], + "html/semantics/scripting-1/the-script-element/module/inline-async-execorder.html": [ + [ + "/html/semantics/scripting-1/the-script-element/module/inline-async-execorder.html", + { + "timeout": "long" + } + ] + ], "html/semantics/scripting-1/the-script-element/module/instantiation-error-1.html": [ [ "/html/semantics/scripting-1/the-script-element/module/instantiation-error-1.html", @@ -328087,18 +330385,6 @@ {} ] ], - "html/semantics/text-level-semantics/the-a-element/rellist-feature-detection.html": [ - [ - "/html/semantics/text-level-semantics/the-a-element/rellist-feature-detection.html", - {} - ] - ], - "html/semantics/text-level-semantics/the-area-element/rellist-feature-detection.html": [ - [ - "/html/semantics/text-level-semantics/the-area-element/rellist-feature-detection.html", - {} - ] - ], "html/semantics/text-level-semantics/the-data-element/data.value-001.html": [ [ "/html/semantics/text-level-semantics/the-data-element/data.value-001.html", @@ -330139,6 +332425,14 @@ {} ] ], + "http/tests/bluetooth/https/requestDevice/cross-origin-iframe.sub.https.html": [ + [ + "/http/tests/bluetooth/https/requestDevice/cross-origin-iframe.sub.https.html", + { + "testdriver": true + } + ] + ], "imagebitmap-renderingcontext/bitmaprenderer-as-imagesource.html": [ [ "/imagebitmap-renderingcontext/bitmaprenderer-as-imagesource.html", @@ -332973,16 +335267,6 @@ {} ] ], - "navigator/device-memory.https.any.js": [ - [ - "/navigator/device-memory.https.any.html", - {} - ], - [ - "/navigator/device-memory.https.any.worker.html", - {} - ] - ], "netinfo/netinfo-basics.html": [ [ "/netinfo/netinfo-basics.html", @@ -342611,15 +344895,15 @@ {} ] ], - "proximity/DeviceProximityEvent_tests.html": [ + "proximity/ProximitySensor.https.html": [ [ - "/proximity/DeviceProximityEvent_tests.html", + "/proximity/ProximitySensor.https.html", {} ] ], - "proximity/UserProximityEvent_tests.html": [ + "proximity/ProximitySensor_insecure_context.html": [ [ - "/proximity/UserProximityEvent_tests.html", + "/proximity/ProximitySensor_insecure_context.html", {} ] ], @@ -351013,6 +353297,12 @@ {} ] ], + "resource-timing/resource_timing.worker.js": [ + [ + "/resource-timing/resource_timing.worker.html", + {} + ] + ], "resource-timing/single-entry-per-resource.html": [ [ "/resource-timing/single-entry-per-resource.html", @@ -351027,6 +353317,12 @@ {} ] ], + "screen-orientation/interfaces.html": [ + [ + "/screen-orientation/interfaces.html", + {} + ] + ], "screen-orientation/lock-bad-argument.html": [ [ "/screen-orientation/lock-bad-argument.html", @@ -351057,12 +353353,6 @@ {} ] ], - "screen-orientation/orientation-api.html": [ - [ - "/screen-orientation/orientation-api.html", - {} - ] - ], "screen-orientation/orientation-reading.html": [ [ "/screen-orientation/orientation-reading.html", @@ -351379,6 +353669,12 @@ {} ] ], + "server-timing/cross_origin.html": [ + [ + "/server-timing/cross_origin.html", + {} + ] + ], "server-timing/server_timing_header-parsing.html": [ [ "/server-timing/server_timing_header-parsing.html", @@ -351859,15 +354155,27 @@ {} ] ], - "service-workers/service-worker/fetch-canvas-tainting-cache.https.html": [ + "service-workers/service-worker/fetch-canvas-tainting-image-cache.https.html": [ [ - "/service-workers/service-worker/fetch-canvas-tainting-cache.https.html", + "/service-workers/service-worker/fetch-canvas-tainting-image-cache.https.html", {} ] ], - "service-workers/service-worker/fetch-canvas-tainting.https.html": [ + "service-workers/service-worker/fetch-canvas-tainting-image.https.html": [ [ - "/service-workers/service-worker/fetch-canvas-tainting.https.html", + "/service-workers/service-worker/fetch-canvas-tainting-image.https.html", + {} + ] + ], + "service-workers/service-worker/fetch-canvas-tainting-video-cache.https.html": [ + [ + "/service-workers/service-worker/fetch-canvas-tainting-video-cache.https.html", + {} + ] + ], + "service-workers/service-worker/fetch-canvas-tainting-video.https.html": [ + [ + "/service-workers/service-worker/fetch-canvas-tainting-video.https.html", {} ] ], @@ -352179,6 +354487,14 @@ {} ] ], + "service-workers/service-worker/local-url-inherit-controller.https.html": [ + [ + "/service-workers/service-worker/local-url-inherit-controller.https.html", + { + "timeout": "long" + } + ] + ], "service-workers/service-worker/mime-sniffing.https.html": [ [ "/service-workers/service-worker/mime-sniffing.https.html", @@ -352661,6 +354977,12 @@ {} ] ], + "shadow-dom/DocumentOrShadowRoot-prototype-elementFromPoint.html": [ + [ + "/shadow-dom/DocumentOrShadowRoot-prototype-elementFromPoint.html", + {} + ] + ], "shadow-dom/Element-interface-attachShadow.html": [ [ "/shadow-dom/Element-interface-attachShadow.html", @@ -352847,12 +355169,6 @@ {} ] ], - "shadow-dom/untriaged/elements-and-dom-objects/extensions-to-event-interface/event-path-001.html": [ - [ - "/shadow-dom/untriaged/elements-and-dom-objects/extensions-to-event-interface/event-path-001.html", - {} - ] - ], "shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/activeElement-confirm-return-null.html": [ [ "/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/activeElement-confirm-return-null.html", @@ -354655,6 +356971,18 @@ {} ] ], + "svg/types/scripted/SVGAnimatedAngle.html": [ + [ + "/svg/types/scripted/SVGAnimatedAngle.html", + {} + ] + ], + "svg/types/scripted/SVGAnimatedBoolean.html": [ + [ + "/svg/types/scripted/SVGAnimatedBoolean.html", + {} + ] + ], "svg/types/scripted/SVGAnimatedEnumeration-SVGClipPathElement.html": [ [ "/svg/types/scripted/SVGAnimatedEnumeration-SVGClipPathElement.html", @@ -354757,6 +357085,48 @@ {} ] ], + "svg/types/scripted/SVGAnimatedInteger.html": [ + [ + "/svg/types/scripted/SVGAnimatedInteger.html", + {} + ] + ], + "svg/types/scripted/SVGAnimatedLength.html": [ + [ + "/svg/types/scripted/SVGAnimatedLength.html", + {} + ] + ], + "svg/types/scripted/SVGAnimatedLengthList.html": [ + [ + "/svg/types/scripted/SVGAnimatedLengthList.html", + {} + ] + ], + "svg/types/scripted/SVGAnimatedNumber.html": [ + [ + "/svg/types/scripted/SVGAnimatedNumber.html", + {} + ] + ], + "svg/types/scripted/SVGAnimatedNumberList.html": [ + [ + "/svg/types/scripted/SVGAnimatedNumberList.html", + {} + ] + ], + "svg/types/scripted/SVGAnimatedPreserveAspectRatio.html": [ + [ + "/svg/types/scripted/SVGAnimatedPreserveAspectRatio.html", + {} + ] + ], + "svg/types/scripted/SVGAnimatedRect.html": [ + [ + "/svg/types/scripted/SVGAnimatedRect.html", + {} + ] + ], "svg/types/scripted/SVGLength-px-with-context.html": [ [ "/svg/types/scripted/SVGLength-px-with-context.html", @@ -356207,27 +358577,39 @@ {} ] ], - "webauthn/interfaces.https.html": [ + "webauthn/createcredential-badargs-rp.https.html": [ [ - "/webauthn/interfaces.https.html", + "/webauthn/createcredential-badargs-rp.https.html", {} ] ], - "webauthn/makecredential-badargs-accountinformation.https.html": [ + "webauthn/createcredential-passing.https.html": [ [ - "/webauthn/makecredential-badargs-accountinformation.https.html", + "/webauthn/createcredential-passing.https.html", {} ] ], - "webauthn/makecredential-badargs-attestationchallenge.https.html": [ + "webauthn/getcredential-passing.https.html": [ [ - "/webauthn/makecredential-badargs-attestationchallenge.https.html", + "/webauthn/getcredential-passing.https.html", + {} + ] + ], + "webauthn/interfaces.https.html": [ + [ + "/webauthn/interfaces.https.html", {} ] ], - "webauthn/makecredential-badargs-cryptoparameters.https.html": [ + "webauthn/securecontext.http.html": [ [ - "/webauthn/makecredential-badargs-cryptoparameters.https.html", + "/webauthn/securecontext.http.html", + {} + ] + ], + "webauthn/securecontext.https.html": [ + [ + "/webauthn/securecontext.https.html", {} ] ], @@ -382003,6 +384385,12 @@ {} ] ], + "webdriver/tests/element_send_keys/form_controls.py": [ + [ + "/webdriver/tests/element_send_keys/form_controls.py", + {} + ] + ], "webdriver/tests/element_send_keys/interactability.py": [ [ "/webdriver/tests/element_send_keys/interactability.py", @@ -382050,7 +384438,9 @@ "webdriver/tests/interaction/element_clear.py": [ [ "/webdriver/tests/interaction/element_clear.py", - {} + { + "timeout": "long" + } ] ], "webdriver/tests/interaction/send_keys_content_editable.py": [ @@ -382148,25 +384538,33 @@ "webdriver/tests/state/get_element_attribute.py": [ [ "/webdriver/tests/state/get_element_attribute.py", - {} + { + "timeout": "long" + } ] ], "webdriver/tests/state/get_element_property.py": [ [ "/webdriver/tests/state/get_element_property.py", - {} + { + "timeout": "long" + } ] ], "webdriver/tests/state/get_element_tag_name.py": [ [ "/webdriver/tests/state/get_element_tag_name.py", - {} + { + "timeout": "long" + } ] ], "webdriver/tests/state/is_element_selected.py": [ [ "/webdriver/tests/state/is_element_selected.py", - {} + { + "timeout": "long" + } ] ], "webdriver/tests/state/text/get_text.py": [ @@ -382249,7 +384647,7 @@ "support" ], "./lint.whitelist": [ - "c55f23203c2e4b158dc13d25617031fcbb791744", + "fc1e09fcc92c3f54ed75fe93681c5ff0a53d25a4", "support" ], "./serve.py": [ @@ -384740,16 +387138,20 @@ "a50b997a4c738f68360f4aa450e1ea7f12687770", "testharness" ], - "2dcontext/imagebitmap/common.js": [ - "c20732ce1e92624a3d3982154d5aba92eba7adc1", + "2dcontext/imagebitmap/common.sub.js": [ + "46df9fcac72992d9d47385bfd11854131bcff172", "support" ], "2dcontext/imagebitmap/createImageBitmap-drawImage.html": [ - "ac183f2abd04f0561433083040190cdadb8ac86a", + "66c294061acec34452fa4d1e9d6743f8f6b2fdf9", "testharness" ], "2dcontext/imagebitmap/createImageBitmap-invalid-args.html": [ - "05ccfd7c45806ee919ccef8bb45c76c147bded63", + "ea323d1c0adfa41e6f5c56be2006a4cd178c470d", + "testharness" + ], + "2dcontext/imagebitmap/createImageBitmap-origin.sub.html": [ + "ebd2cd88858411c9dbbcdad0ece647b39b25b368", "testharness" ], "2dcontext/imagebitmap/createImageBitmap-sizeOverflow.html": [ @@ -389168,6 +391570,10 @@ "2c51b95bd2032c76dcc7a1c54e197756159a7e4b", "support" ], + "acid/acid3/numbered-tests.html": [ + "b715328b9b59f27f51c070011528d29103783f42", + "testharness" + ], "acid/acid3/reference.png": [ "2bd47f247ce1328013d2ade5c7e4b5b03f5a0eda", "support" @@ -389197,7 +391603,7 @@ "support" ], "acid/acid3/test.html": [ - "67435e96f4240675943bad5ca296a1020cf04fe5", + "bfdaa543bf78a008096ed8b17decd4797060ba02", "reftest" ], "acid/acid3/xhtml.1": [ @@ -391441,7 +393847,7 @@ "testharness" ], "beacon/beacon-error.window.js": [ - "3e78d3aba0964c79965c83727bb2a73381382a2e", + "6a1cfcd3d9086bb6e9ec2c6024e1b36a41b0bc1d", "testharness" ], "beacon/beacon-navigate.html": [ @@ -391513,7 +393919,7 @@ "support" ], "bluetooth/README.md": [ - "2406b51635145355309f8e8778a5669ff561813d", + "444c97b1166ed27a2180c97c29b3568c73c693be", "support" ], "bluetooth/characteristic/characteristicProperties.https.html": [ @@ -391620,12 +394026,140 @@ "50eaac3e0c94933fa995c102d53b6b00b3087ea6", "testharness" ], + "bluetooth/requestDevice/blocklisted-service-in-filter.https.html": [ + "7046c3d32539807824c3abdc95071e8495c619df", + "testharness" + ], + "bluetooth/requestDevice/blocklisted-service-in-optionalServices.https.html": [ + "c3fbd786e7cf05f72eb0afadba8924c43f2fdc11", + "testharness" + ], + "bluetooth/requestDevice/canonicalizeFilter/device-name-longer-than-29-bytes.https.html": [ + "238bfa4cae4a577d6725071585d3f4fb17211926", + "testharness" + ], + "bluetooth/requestDevice/canonicalizeFilter/empty-filter.https.html": [ + "dae6caddeebd483e59878e86ca0452dc90bf15ef", + "testharness" + ], + "bluetooth/requestDevice/canonicalizeFilter/empty-filters-member.https.html": [ + "1d3eddd98c230893f6a5f01c4af71145e89d3f9a", + "testharness" + ], + "bluetooth/requestDevice/canonicalizeFilter/empty-namePrefix.https.html": [ + "c12927b93a1e99ff1f64730f355f832136182d53", + "testharness" + ], + "bluetooth/requestDevice/canonicalizeFilter/empty-services-member.https.html": [ + "9830afe0985081f12c74bdd3f6bb4ab3dacf64d6", + "testharness" + ], + "bluetooth/requestDevice/canonicalizeFilter/filters-xor-acceptAllDevices.https.html": [ + "a640294f0ef02f113a2d6923c357d173dde13c8d", + "testharness" + ], + "bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-name-unicode.https.html": [ + "9c48f80d91ebcd2fb30656d2db2d134ea52b1b84", + "testharness" + ], + "bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-name.https.html": [ + "aff336b8d2e7f37a86afbf8dddc226a05b89c7ac", + "testharness" + ], + "bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-namePrefix-unicode.https.html": [ + "cdd53f12480cdc6d04e6d6a60b9a638d28331757", + "testharness" + ], + "bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-namePrefix.https.html": [ + "e891ad094e4ce751bfdbb594432f1e050b8bb678", + "testharness" + ], + "bluetooth/requestDevice/canonicalizeFilter/max-length-name-unicode.https.html": [ + "e6235150373eda2b417fb5e44a9fb0250f79e10b", + "testharness" + ], + "bluetooth/requestDevice/canonicalizeFilter/max-length-name.https.html": [ + "f665d5b53ac10adf947b0fa776fb4acf88ec157c", + "testharness" + ], + "bluetooth/requestDevice/canonicalizeFilter/max-length-namePrefix-unicode.https.html": [ + "577824e52873a8b056438563c993a157febc27d7", + "testharness" + ], + "bluetooth/requestDevice/canonicalizeFilter/max-length-namePrefix.https.html": [ + "ecd4a495dd13d01cc59119493022aecedb5e04f6", + "testharness" + ], + "bluetooth/requestDevice/canonicalizeFilter/no-arguments.https.html": [ + "b070a7357a626cee31f66938561a1a62576be086", + "testharness" + ], + "bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-name.https.html": [ + "9d5c26e54b12ed4600690c78c17e2d92b33f99b9", + "testharness" + ], + "bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-namePrefix.https.html": [ + "8370c2c6f65767144257fcba7032eef4410ef994", + "testharness" + ], + "bluetooth/requestDevice/canonicalizeFilter/wrong-service-in-optionalServices-member.https.html": [ + "4e8728f88844525f7fb95680499fc2024f74482c", + "testharness" + ], + "bluetooth/requestDevice/canonicalizeFilter/wrong-service-in-services-member.https.html": [ + "084ec334261ed7c584a0888ff3dfdec0f3538bad", + "testharness" + ], + "bluetooth/requestDevice/consumes-user-gesture.https.html": [ + "c76d7e37417a7db3043b761989eebbfded6e6804", + "testharness" + ], + "bluetooth/requestDevice/discovery-succeeds.https.html": [ + "da1be25f068cdb9602d6207b6af0170e232e68cd", + "testharness" + ], + "bluetooth/requestDevice/filter-matches.https.html": [ + "22ea4176f1f5cdd67a730cce43e3fbf08d1fcfdb", + "testharness" + ], + "bluetooth/requestDevice/le-not-supported.https.html": [ + "9870420cf924559cb02144ecd5da02d39f386f30", + "testharness" + ], + "bluetooth/requestDevice/name-empty-device-from-name-empty-filter.https.html": [ + "93143b0311d74ad763d26db3cbfc55d4e989b1dd", + "testharness" + ], + "bluetooth/requestDevice/not-processing-user-gesture.https.html": [ + "c4aa433b370a8dbecf4fe4167edfd1eb01febfc0", + "testharness" + ], + "bluetooth/requestDevice/radio-not-present.https.html": [ + "47b28ec24e902fe0e9593d002f6c7ed88e379b00", + "testharness" + ], + "bluetooth/requestDevice/request-from-iframe.https.html": [ + "4af485c1bb00aacd11225001ed494628063b2684", + "testharness" + ], + "bluetooth/requestDevice/request-from-sandboxed-iframe.https.html": [ + "917a1be9111f04e67231c92921b1f856685deb55", + "testharness" + ], + "bluetooth/requestDevice/same-device.https.html": [ + "2bf20db77582e6df2674dd0a5cf444d630b3b999", + "testharness" + ], + "bluetooth/requestDevice/single-filter-single-service.https.html": [ + "f147182b894cbb0f338111b146dfa16193610265", + "testharness" + ], "bluetooth/resources/bluetooth-helpers.js": [ - "bb8e5f352bdaff51bf56c366f30f99c9f1672925", + "1944dc57df774ad737179dd22fb3cc9de842bc21", "support" ], "bluetooth/resources/health-thermometer-iframe.html": [ - "d42691b2621c13a28c3cfd675de4d95c8a585902", + "f175a62907e65c03e326832449b0b8e3276387d8", "support" ], "bluetooth/script-tests/base_test_html.template": [ @@ -391704,6 +394238,30 @@ "b18022b48d354825fa747abda81bc870142d9c59", "support" ], + "bluetooth/script-tests/service/blocklisted-characteristic.js": [ + "cdc9a9e30e319c3eb1532ef24436d5fc454d2a5e", + "support" + ], + "bluetooth/script-tests/service/characteristic-not-found.js": [ + "f010c39bfc9e08f1ee68fe9c6e1ca6054d97074b", + "support" + ], + "bluetooth/script-tests/service/garbage-collection-ran-during-error.js": [ + "f851c238adc404f49b9f9bb1fb8d10cc2f4d9b38", + "support" + ], + "bluetooth/script-tests/service/get-same-object.js": [ + "9ffba72c471c6ee4ba23c61aaa991dbe5e50ad9f", + "support" + ], + "bluetooth/script-tests/service/invalid-characteristic-name.js": [ + "7c16b4edc418b3e6635d0a27dcced11c332cc2e2", + "support" + ], + "bluetooth/script-tests/service/reconnect-during.js": [ + "fc89c44348fa1bb141d9d6d16b487cd3ea1e1d5d", + "support" + ], "bluetooth/server/connect/connection-succeeds.https.html": [ "167880b07f855325a35a81a8ea833b0d006c7957", "testharness" @@ -391800,6 +394358,26 @@ "9169ed84f3502d5e3e675d5e0e317d0d895b4ca7", "testharness" ], + "bluetooth/server/getPrimaryService/service-found.https.html": [ + "ec29d8be9640efcbbfb0a33ae981a561c3a3dc86", + "testharness" + ], + "bluetooth/server/getPrimaryService/two-iframes-from-same-origin.https.html": [ + "5a8304882e2ef286eb43e4f1710df3747f8943f4", + "testharness" + ], + "bluetooth/server/getPrimaryServices/blocklisted-services-with-uuid.https.html": [ + "a58240662db7a01866c144e95d828cbeb6340a49", + "testharness" + ], + "bluetooth/server/getPrimaryServices/blocklisted-services.https.html": [ + "06ca92a6e6d5145762c9d5ae9df78fcc86f2226c", + "testharness" + ], + "bluetooth/server/getPrimaryServices/correct-services.https.html": [ + "255055f835025d77c0a993de042a13d0d2c635cd", + "testharness" + ], "bluetooth/server/getPrimaryServices/gen-disconnect-called-before-with-uuid.https.html": [ "ff1af939fa2b5b77523712a4281839349f00e43b", "testharness" @@ -391904,10 +394482,46 @@ "e9b4e0205d5d30589356aea481e469a746ee419a", "testharness" ], + "bluetooth/server/getPrimaryServices/services-found-with-uuid.https.html": [ + "9106025a145b9c4013600dd15190bf35fcf10f2e", + "testharness" + ], + "bluetooth/server/getPrimaryServices/services-found.https.html": [ + "b4c28ddf199e8cafe5252fd32c10b69395b86436", + "testharness" + ], + "bluetooth/server/getPrimaryServices/services-not-found.https.html": [ + "60b7203a67f69acfd884f0b256dd7357fe717392", + "testharness" + ], "bluetooth/service/getCharacteristic/characteristic-found.https.html": [ "53479f342ef4aab9a24aaaa4580a63b5e6bcd30b", "testharness" ], + "bluetooth/service/getCharacteristic/gen-blocklisted-characteristic.https.html": [ + "bbc9e9fbf1a84d26e60064703ad1f510d1f0d23d", + "testharness" + ], + "bluetooth/service/getCharacteristic/gen-characteristic-not-found.https.html": [ + "e56889ff833346000ece4dd161dba42603ab4722", + "testharness" + ], + "bluetooth/service/getCharacteristic/gen-garbage-collection-ran-during-error.https.html": [ + "ff07bf6e5c97eb527cf31cb785b3eaf6e61e3418", + "testharness" + ], + "bluetooth/service/getCharacteristic/gen-get-same-object.https.html": [ + "011f75d88736c0fad0904442dbffdd24a05837a3", + "testharness" + ], + "bluetooth/service/getCharacteristic/gen-invalid-characteristic-name.https.html": [ + "9d500137650d30e6ecdd2fdaa7ea0957030343ea", + "testharness" + ], + "bluetooth/service/getCharacteristic/gen-reconnect-during.https.html": [ + "2c155e835979269072d21a473010eded488ac185", + "testharness" + ], "bluetooth/service/getCharacteristics/blocklisted-characteristics.https.html": [ "cb0ff8a9913b54ef624a38d367d84b1656b2a536", "testharness" @@ -391924,6 +394538,42 @@ "694b69270065eb15a7129f9359a2b71d90ed9226", "testharness" ], + "bluetooth/service/getCharacteristics/gen-blocklisted-characteristic-with-uuid.https.html": [ + "f11a67323cbb8948074a7ed9357d0d3c3bb420b3", + "testharness" + ], + "bluetooth/service/getCharacteristics/gen-characteristic-not-found-with-uuid.https.html": [ + "a5e9744319ef73205a5cbc06993802ec4fe40ee0", + "testharness" + ], + "bluetooth/service/getCharacteristics/gen-garbage-collection-ran-during-error-with-uuid.https.html": [ + "d10095452cb2c997fa37b972e05984689d531819", + "testharness" + ], + "bluetooth/service/getCharacteristics/gen-garbage-collection-ran-during-error.https.html": [ + "d6b88afffb6ed44f706720a2b477c4687e82caf4", + "testharness" + ], + "bluetooth/service/getCharacteristics/gen-get-same-object-with-uuid.https.html": [ + "45564351fa111f80c28eff14a6175f4594d4e2c9", + "testharness" + ], + "bluetooth/service/getCharacteristics/gen-get-same-object.https.html": [ + "78bcc807683b27a57b510ebd24ec2b5e33f67fb7", + "testharness" + ], + "bluetooth/service/getCharacteristics/gen-invalid-characteristic-name.https.html": [ + "9f766bf08b1ad918bd0283cdf703fb3f030bf8a4", + "testharness" + ], + "bluetooth/service/getCharacteristics/gen-reconnect-during-with-uuid.https.html": [ + "3b89e9e5a43f2a6791ac5a5e3b58552a696420f8", + "testharness" + ], + "bluetooth/service/getCharacteristics/gen-reconnect-during.https.html": [ + "bc66082c4b04df83449fcf883d0e8e96dc3d8b61", + "testharness" + ], "clear-site-data/navigation-insecure.html": [ "97c069cf7c938e1ebdba3f243ad48369a7fb5542", "testharness" @@ -392104,6 +394754,10 @@ "e3593850f8098d3f3ff82c042deab15f51c66a52", "support" ], + "common/namespaces.js": [ + "a8018fb9fb6f1f2212f5433581fc12e7795a638e", + "support" + ], "common/object-association.js": [ "c6955b7bbf00d73ec5959678391aa59d36da8321", "support" @@ -410109,7 +412763,7 @@ "testharness" ], "content-security-policy/embedded-enforcement/required_csp-header.html": [ - "9c06eea69babc70158e7bf25fad5d79a7367403e", + "b5c68072adf79a87b1371c34a9357a1507d6d981", "testharness" ], "content-security-policy/embedded-enforcement/subsumption_algorithm-general.html": [ @@ -410808,50 +413462,210 @@ "55c94363465c252a3c24622a56020a8981e01f8e", "testharness" ], - "content-security-policy/reporting/reporting-api-doesnt-send-reports-without-violation.https.sub.html": [ + "content-security-policy/reporting-api/reporting-api-doesnt-send-reports-without-violation.https.sub.html": [ "7be3a72eb885841e8ccb674eeae3761f638adf2c", "testharness" ], - "content-security-policy/reporting/reporting-api-doesnt-send-reports-without-violation.https.sub.html.sub.headers": [ - "ddf99f2d2ed8bdfa56f5efbf371b324924c1c286", + "content-security-policy/reporting-api/reporting-api-doesnt-send-reports-without-violation.https.sub.html.sub.headers": [ + "955c2e5d0f798cee27b0fc6910cffc8c1d56940c", "support" ], - "content-security-policy/reporting/reporting-api-report-only-sends-reports-on-violation.https.sub.html": [ + "content-security-policy/reporting-api/reporting-api-report-only-sends-reports-on-violation.https.sub.html": [ "19e6a43463fb72a74a0a03e2515d564f2df49234", "testharness" ], - "content-security-policy/reporting/reporting-api-report-only-sends-reports-on-violation.https.sub.html.sub.headers": [ - "588c5767e4d7290ea7fd27be8218dd8420982848", + "content-security-policy/reporting-api/reporting-api-report-only-sends-reports-on-violation.https.sub.html.sub.headers": [ + "d7f83c9ca38ebd0a04aa431ba854b6f7afd48053", "support" ], - "content-security-policy/reporting/reporting-api-report-to-overrides-report-uri-1.https.sub.html": [ + "content-security-policy/reporting-api/reporting-api-report-to-overrides-report-uri-1.https.sub.html": [ "08311936720a8ee3835d029f572e924dd4f45e6e", "testharness" ], - "content-security-policy/reporting/reporting-api-report-to-overrides-report-uri-1.https.sub.html.sub.headers": [ - "d0dddb85abb59ded83c36f71b4776881ce626e40", + "content-security-policy/reporting-api/reporting-api-report-to-overrides-report-uri-1.https.sub.html.sub.headers": [ + "b0878feae3b549c0d1e8b7e350232b1420d23863", "support" ], - "content-security-policy/reporting/reporting-api-report-to-overrides-report-uri-2.https.sub.html": [ + "content-security-policy/reporting-api/reporting-api-report-to-overrides-report-uri-2.https.sub.html": [ "41f777a06556d6cb4d8110d4d1fe70a6e58c2709", "testharness" ], - "content-security-policy/reporting/reporting-api-report-to-overrides-report-uri-2.https.sub.html.sub.headers": [ - "1d58caea3b04f568e837678dbd27136fec73730c", + "content-security-policy/reporting-api/reporting-api-report-to-overrides-report-uri-2.https.sub.html.sub.headers": [ + "87424ab61e238019c8d91612f8e91f58dc4c91dc", "support" ], - "content-security-policy/reporting/reporting-api-sends-reports-on-violation.https.sub.html": [ + "content-security-policy/reporting-api/reporting-api-sends-reports-on-violation.https.sub.html": [ "131b261ef9a6b79714eeacd4c9a525bdfafab21c", "testharness" ], - "content-security-policy/reporting/reporting-api-sends-reports-on-violation.https.sub.html.sub.headers": [ - "966fcc13016f5980750ad1a4d5acf240762c2e0d", + "content-security-policy/reporting-api/reporting-api-sends-reports-on-violation.https.sub.html.sub.headers": [ + "515b0d940eeb19ae13da605a95039442a5893239", + "support" + ], + "content-security-policy/reporting-api/reporting-api-works-on-frame-src.https.sub.html": [ + "1475964f0393ad3833c0024153236e5480ee33fd", + "testharness" + ], + "content-security-policy/reporting-api/reporting-api-works-on-frame-src.https.sub.html.sub.headers": [ + "f48e0c655e1dcc688c1f66309cdd61ba5aaefb74", + "support" + ], + "content-security-policy/reporting/multiple-report-policies.html": [ + "f639d91d9603d3f69e76e0e674502c3377feac1e", + "testharness" + ], + "content-security-policy/reporting/multiple-report-policies.html.sub.headers": [ + "4b6be6be32411907eadd77377882dffa4f0835a7", + "support" + ], + "content-security-policy/reporting/report-and-enforce.html": [ + "fa98a53e5129156767dbe77851369c4b19798719", + "testharness" + ], + "content-security-policy/reporting/report-and-enforce.html.sub.headers": [ + "02bd8729b7c30afe738001d0ddec9c5eebe89b34", + "support" + ], + "content-security-policy/reporting/report-blocked-data-uri.html": [ + "82886510458eb1699cf026c3e97e138e9a587591", + "testharness" + ], + "content-security-policy/reporting/report-blocked-data-uri.html.sub.headers": [ + "08f2929f61e79c56506ee10ad5f87fa7e7fc0bfc", + "support" + ], + "content-security-policy/reporting/report-blocked-uri-cross-origin.sub.html": [ + "8fcb9cc75de19ffe8814aab9bc35422e9cf885c0", + "testharness" + ], + "content-security-policy/reporting/report-blocked-uri-cross-origin.sub.html.sub.headers": [ + "b616f81f7513c1adfdb3d6781480cc5fb259bd8e", + "support" + ], + "content-security-policy/reporting/report-blocked-uri.html": [ + "04edf0c89b559bbf64fabc3af7bcd0ca7ec72278", + "testharness" + ], + "content-security-policy/reporting/report-blocked-uri.html.sub.headers": [ + "f993d1f1f2d380fb011aaecf5a6320b6d91adcf7", + "support" + ], + "content-security-policy/reporting/report-cross-origin-no-cookies.sub.html": [ + "7de2fc82fd084a1b11940c5c72ce19c19f18b3dd", + "testharness" + ], + "content-security-policy/reporting/report-cross-origin-no-cookies.sub.html.sub.headers": [ + "cff5f3df3f586fda01c7a88d19356881f6a80904", + "support" + ], + "content-security-policy/reporting/report-multiple-violations-01.html": [ + "6600b2f194337f22c6913055cc52b5a825261c0f", + "testharness" + ], + "content-security-policy/reporting/report-multiple-violations-01.html.sub.headers": [ + "69f7be4dc6ca342df29bd10b9e7ebdd0f8b63c31", + "support" + ], + "content-security-policy/reporting/report-multiple-violations-02.html": [ + "6c132ba1a1e156e05fa645bc33fb0d33330dee36", + "testharness" + ], + "content-security-policy/reporting/report-multiple-violations-02.html.sub.headers": [ + "7c9611719553d30ad7ce3e500c7c9f36362c5c60", + "support" + ], + "content-security-policy/reporting/report-only-in-meta.sub.html": [ + "6b0fa99ff2a5bd73001da3240524b5ec917e838e", + "testharness" + ], + "content-security-policy/reporting/report-only-in-meta.sub.html.sub.headers": [ + "e2ec88b0925f53f92b68a29390dcc89479bc46d4", + "support" + ], + "content-security-policy/reporting/report-original-url.sub.html": [ + "bc2e6f11f3dda2c15845bb6e86f4ec40cc255e8f", + "testharness" + ], + "content-security-policy/reporting/report-original-url.sub.html.sub.headers": [ + "4d1876259b68c4f4763787e7b41df70e4929fe7c", + "support" + ], + "content-security-policy/reporting/report-same-origin-with-cookies.html": [ + "e0f05994f390b09927da2160a432c090dd405f80", + "testharness" + ], + "content-security-policy/reporting/report-same-origin-with-cookies.html.sub.headers": [ + "f9af65b4f8aa85fe384963606c14b043c80cec10", + "support" + ], + "content-security-policy/reporting/report-strips-fragment.html": [ + "f72d0664fa4415422076dcd569dfd03a7c682f04", + "testharness" + ], + "content-security-policy/reporting/report-uri-effective-directive.html": [ + "59c3dfee5583e739e49cac3740e2a3a218e3753a", + "testharness" + ], + "content-security-policy/reporting/report-uri-effective-directive.html.sub.headers": [ + "1e02bab0bd8ed64135e1633bd01ebbd53be8c7bf", + "support" + ], + "content-security-policy/reporting/report-uri-from-child-frame.html": [ + "c91cc258165682aeb7af0f9e4b5b576ad0384c6b", + "testharness" + ], + "content-security-policy/reporting/report-uri-from-inline-javascript.html": [ + "07ee4776bf34a9bd344fa9fa5cb58f9f83ae3a08", + "testharness" + ], + "content-security-policy/reporting/report-uri-from-inline-javascript.html.sub.headers": [ + "a3e08d0037b632a2a9f87dd62b4e79dc789e550b", + "support" + ], + "content-security-policy/reporting/report-uri-from-javascript.html": [ + "04ea5711199235d9d289b31aa6d1de72ee55a188", + "testharness" + ], + "content-security-policy/reporting/report-uri-from-javascript.html.sub.headers": [ + "093ee63506308937b01af5a1917d24271d3fabd8", "support" ], - "content-security-policy/reporting/securitypolicyviolation-idl.html": [ - "831948d2397790fa68e6d8bc96454dcb2f3e3280", + "content-security-policy/reporting/report-uri-multiple-reversed.html": [ + "445997741b644125b3cb973fd7430bbfa7fd78e6", "testharness" ], + "content-security-policy/reporting/report-uri-multiple-reversed.html.sub.headers": [ + "e46af6610554b47e7a864b6ab5ea6deff13ba60a", + "support" + ], + "content-security-policy/reporting/report-uri-multiple.html": [ + "deb9b21e679e9eb9d51599f52632440819ab0f7e", + "testharness" + ], + "content-security-policy/reporting/report-uri-multiple.html.sub.headers": [ + "315325e87026ee03ec535108f15864185c5d4b1e", + "support" + ], + "content-security-policy/reporting/report-uri-scheme-relative.html": [ + "2ff52fe751eb0f760eb6e8de3d774ef58aabc20f", + "testharness" + ], + "content-security-policy/reporting/report-uri-scheme-relative.html.sub.headers": [ + "f089cb2271c837f3af17830f2f4e255e5be9259d", + "support" + ], + "content-security-policy/reporting/support/generate-csp-report.html": [ + "3084447e7fc1f504fe96df8ac49e5c03d4156ef4", + "support" + ], + "content-security-policy/reporting/support/generate-csp-report.html.sub.headers": [ + "abfdaa6f0fb659fd3c65074758d691b8e15eebf2", + "support" + ], + "content-security-policy/reporting/support/set-cookie.py": [ + "886b0a3fb9042c5331083a5c73d0ee6c7638437c", + "support" + ], "content-security-policy/sandbox/iframe-inside-csp.sub.html": [ "11e165b77d866a5b62539d5722b18885838448a7", "testharness" @@ -411585,7 +414399,7 @@ "support" ], "content-security-policy/support/inject-image.js": [ - "d3fb6499c3910cd966efb85888f4a116bf6738c7", + "0962d5adf6d2fd4b80db6b9cf87be841609bc64e", "support" ], "content-security-policy/support/inject-image.sub.js": [ @@ -411612,6 +414426,10 @@ "c06160c04726a02f1583caa0f380d632b6019179", "support" ], + "content-security-policy/support/pass2.png": [ + "c06160c04726a02f1583caa0f380d632b6019179", + "support" + ], "content-security-policy/support/ping.js": [ "071616b3c0e43fab0b7a214000389585dafc393d", "support" @@ -413184,6 +416002,10 @@ "3ce3b0a2eaa10928aec1f32c9e3bcbe2af5fafba", "testharness" ], + "credential-management/require_securecontext.html": [ + "4a266e0c663a12ace13f6f08a7899236b489f698", + "testharness" + ], "credential-management/support/echoing-nester.html": [ "408bf741f31a9f69a2a9a50d93877f6a999cd9d9", "support" @@ -429885,11 +432707,11 @@ "reftest" ], "css/CSS2/floats-clear/clear-applies-to-008-ref.xht": [ - "db9d3c111a4f01fd54c04de57aa592ee0a2babb1", + "6c2e5e15021e893db1a60ab205feaf08200d5295", "support" ], "css/CSS2/floats-clear/clear-applies-to-008.xht": [ - "4dea511a4f95e4b3084a224e992ffc87957a0d28", + "7c0e621739b7b88792efacf92e49b98061155c3e", "reftest" ], "css/CSS2/floats-clear/clear-applies-to-009-ref.xht": [ @@ -429905,7 +432727,7 @@ "visual" ], "css/CSS2/floats-clear/clear-applies-to-012.xht": [ - "1e8e5c96d43520b6cdbf20232009a706648414e8", + "d6fb4efccca1214e61d3145483b093f2b8c8c7ab", "reftest" ], "css/CSS2/floats-clear/clear-applies-to-013.xht": [ @@ -430121,11 +432943,11 @@ "reftest" ], "css/CSS2/floats-clear/float-applies-to-008-ref.xht": [ - "659238329fb18ea5614ed6334f37f30f1fed9d2f", + "a77222162ef2cc0a3065fca9918ce6bff8cd70c8", "support" ], "css/CSS2/floats-clear/float-applies-to-008.xht": [ - "7324b707a78a81f274a9c8f3cacc33f5126918ee", + "ea0589a743f79dae9b5f33df683c126bbfc4c5a5", "reftest" ], "css/CSS2/floats-clear/float-applies-to-008a.xht": [ @@ -430141,7 +432963,7 @@ "visual" ], "css/CSS2/floats-clear/float-applies-to-012.xht": [ - "fb1f1ca067f5c5d97c0ce468c66083fc086a7104", + "3703899da92098c3e2d36284e5789bf7467a794a", "reftest" ], "css/CSS2/floats-clear/float-applies-to-013.xht": [ @@ -430489,11 +433311,11 @@ "reftest" ], "css/CSS2/floats-clear/floats-028-ref.xht": [ - "48c364f5ffbd8426889479a03e530d602cd41b49", + "50b611939fb7cffa6fa5b4469056589a03e27012", "support" ], "css/CSS2/floats-clear/floats-028.xht": [ - "1f83cd725b3fdb0aca8d5fa4f660ceae14e48ef6", + "229392ae1aa78dd1ffebdaf72faf47bc1a1a0fd5", "reftest" ], "css/CSS2/floats-clear/floats-029-ref.xht": [ @@ -430521,11 +433343,11 @@ "reftest" ], "css/CSS2/floats-clear/floats-036-ref.xht": [ - "5c69b8814fd1285e78e18916f717f41dd19fcfd6", + "001a8147de3e6d6290b4581f6c5c4a01461e2324", "support" ], "css/CSS2/floats-clear/floats-036.xht": [ - "8cfcf886e5410936904b8494db5f7358b3322cab", + "cb85400e14a9c7908952cbee62b322d1c7a7b125", "reftest" ], "css/CSS2/floats-clear/floats-037.xht": [ @@ -443865,7 +446687,7 @@ "reftest" ], "css/CSS2/normal-flow/inline-table-002-ref.xht": [ - "f2d793d01506513aa4eb77060654848b08ba81ce", + "a72122a5cf0b18fb5ca1ed5bc21d4ffb5adbe9ff", "support" ], "css/CSS2/normal-flow/inline-table-002a.xht": [ @@ -443901,7 +446723,7 @@ "reftest" ], "css/CSS2/normal-flow/inline-table-valign-001-ref.xht": [ - "2dd458188be1b03d22ffd5ff5b50251f68236b88", + "e0dda44b942f3ab082d495d9c3ea7cdfb06f5672", "support" ], "css/CSS2/normal-flow/inline-table-valign-001.xht": [ @@ -446197,7 +449019,7 @@ "reftest" ], "css/CSS2/normal-flow/width-inherit-001.xht": [ - "e12ea1ffae7291ba97850bd8c9d26a363e8a3e8d", + "b44bc8b00c6a11155958abe91b5b1e77a137d74d", "reftest" ], "css/CSS2/normal-flow/width-non-replaced-inline-001-ref.xht": [ @@ -447609,15 +450431,15 @@ "visual" ], "css/CSS2/positioning/abspos-011-ref.xht": [ - "c235af55f1a48bf1537880675cc07fb540672238", + "e2759da948136a4af51259eff808b067e877b4da", "support" ], "css/CSS2/positioning/abspos-011.xht": [ - "7deaa3e6c992cbc2cdcc8aba918d3896bc21c396", + "3b5e6cb42b5b130e6dc63912a34f29a631578004", "reftest" ], "css/CSS2/positioning/abspos-012.xht": [ - "888c0e9b10f97a37f320f9d947650bd10d0f3126", + "e11cb76a18a4eb52554cddf5ea79c2085741f7c5", "reftest" ], "css/CSS2/positioning/abspos-013-ref.xht": [ @@ -447685,7 +450507,7 @@ "reftest" ], "css/CSS2/positioning/abspos-027.xht": [ - "4206e6ba1f6839097eeeedf836b959883bfb0f4b", + "92f26a5069fa65e26c24b5ff548757174b491b1b", "reftest" ], "css/CSS2/positioning/abspos-028-ref.xht": [ @@ -448833,11 +451655,11 @@ "reftest" ], "css/CSS2/positioning/position-relative-031-ref.xht": [ - "d8ab20871c04f15927a2421400fc0bd94751d801", + "713239d97e9516c8a650c35062a8ac381a977a87", "support" ], "css/CSS2/positioning/position-relative-031.xht": [ - "3e7ea161ba0c2ca703de599084a12f67841ce8cc", + "9ef83749003fb8881335bddbe8a1d4978709fc94", "reftest" ], "css/CSS2/positioning/position-relative-032-ref.xht": [ @@ -448905,11 +451727,11 @@ "reftest" ], "css/CSS2/positioning/positioning-float-001-ref.xht": [ - "6c2415a373b5eda24ddb8718d4d2483a2a2902a3", + "fe017fcbf93173ebaa9f320c735c15fa366c04b6", "support" ], "css/CSS2/positioning/positioning-float-001.xht": [ - "f09c12ed86ca1c628f5cd14af54e5815eef5b3b0", + "26a3c992262056846e4ae74695c0cadb4a4993f6", "reftest" ], "css/CSS2/positioning/positioning-float-002-ref.xht": [ @@ -465961,11 +468783,11 @@ "visual" ], "css/CSS2/values/color-000-ref.xht": [ - "c7bb8fe43bd64c29069544ad57eaf0b278e3986c", + "9d9f5220470b7ad806b0960431f1297d901bb279", "support" ], "css/CSS2/values/color-000.xht": [ - "34ee507a95cc9a67ea2d92f57baeb2e1b486e64f", + "84b046a78138c015092de76c5151ff545e9df001", "reftest" ], "css/CSS2/values/numbers-units-001.xht": [ @@ -471536,12 +474358,52 @@ "7390f245c6f208a1d1f1a6548d6f7f0185decedb", "visual" ], + "css/css-align/content-distribution/parse-align-content-001.html": [ + "5f85c7e0760de399e2bbff0d27bcbe48b52f6ab0", + "testharness" + ], + "css/css-align/content-distribution/parse-align-content-002.html": [ + "1b57303c27c9ca6a195f380db7c65c6953235189", + "testharness" + ], + "css/css-align/content-distribution/parse-align-content-003.html": [ + "35e87806d671d9688fcecb2971703496c7ecf279", + "testharness" + ], + "css/css-align/content-distribution/parse-align-content-004.html": [ + "38d4d969e140dad7914c7c36ff25fd7d8b8e47ed", + "testharness" + ], + "css/css-align/content-distribution/parse-align-content-005.html": [ + "473d879d7a0a7ccfc58f8ad319af98859acaaace", + "testharness" + ], + "css/css-align/content-distribution/parse-justify-content-001.html": [ + "ea7684f5dfb55def64657615b2cf584ac01f13a1", + "testharness" + ], + "css/css-align/content-distribution/parse-justify-content-002.html": [ + "eb16c39bcdbb30282778410636f7f8966bf1b3df", + "testharness" + ], + "css/css-align/content-distribution/parse-justify-content-003.html": [ + "156da9b59e01e743277a5bd86475c3c1046cab55", + "testharness" + ], + "css/css-align/content-distribution/parse-justify-content-004.html": [ + "8387baa705e2ae6863641e72f72b1469ff902df1", + "testharness" + ], + "css/css-align/content-distribution/parse-justify-content-005.html": [ + "349d5fbf2916bf93ad87c130afe04b7f2ad011e9", + "testharness" + ], "css/css-align/content-distribution/place-content-shorthand-001.html": [ - "c0d87c542bd637ff3ac5bd5c6dc33a4d5bef49ed", + "1f79fe2f2d0fc474c4a9376dde022042d5ff935c", "testharness" ], "css/css-align/content-distribution/place-content-shorthand-002.html": [ - "bb7956c56dafba251bcba74abf922d983b8bcffd", + "f5f4f2279506dc6106de38080a639979ad7e05d0", "testharness" ], "css/css-align/content-distribution/place-content-shorthand-003.html": [ @@ -471549,7 +474411,7 @@ "testharness" ], "css/css-align/content-distribution/place-content-shorthand-004.html": [ - "f6927e1d464df4fe22cd01bb4779eb64cf790ab4", + "5aa5cda5b2b0204bd2deb5c813532f394644b31f", "testharness" ], "css/css-align/content-distribution/place-content-shorthand-005.html": [ @@ -471557,19 +474419,71 @@ "testharness" ], "css/css-align/content-distribution/place-content-shorthand-006.html": [ - "016c2ff7902fc01d8368645b7177e3932aa64d42", + "a40c054505716dda72b642ada40d8796a5d68795", "testharness" ], + "css/css-align/content-distribution/place-content-shorthand-007-ref.html": [ + "6008fc2ca235c4b4c171ace405fd312647be3313", + "support" + ], + "css/css-align/content-distribution/place-content-shorthand-007.html": [ + "5268627f55928b969e022a626961958ac8f92e05", + "reftest" + ], "css/css-align/default-alignment/justify-items-legacy-001.html": [ "bcf17f709a9b87ef728262b658d1dfa65afc93bb", "testharness" ], + "css/css-align/default-alignment/parse-align-items-001.html": [ + "4480541c8c693f479948c408e99ea3ce1d13f6cd", + "testharness" + ], + "css/css-align/default-alignment/parse-align-items-002.html": [ + "eb9d656eb94d7bb2ef11286b28ceb90a71ef9774", + "testharness" + ], + "css/css-align/default-alignment/parse-align-items-003.html": [ + "9db68647a490da7f2d3513c28359392d24bb3257", + "testharness" + ], + "css/css-align/default-alignment/parse-align-items-004.html": [ + "e2c96ca7f861965ffe525fa8de7132c041230dac", + "testharness" + ], + "css/css-align/default-alignment/parse-align-items-005.html": [ + "e5b9aed617b086152a25ffb4b3a39a8898a3622e", + "testharness" + ], + "css/css-align/default-alignment/parse-justify-items-001.html": [ + "a60f7ed4a16ad9e6c12c8004b90bb1f88083af31", + "testharness" + ], + "css/css-align/default-alignment/parse-justify-items-002.html": [ + "b74652a3770f5bf8b7184748d62a21625f9121b3", + "testharness" + ], + "css/css-align/default-alignment/parse-justify-items-003.html": [ + "3a66f7c4d618f0ea0ff112ac7dce8e5d6257084a", + "testharness" + ], + "css/css-align/default-alignment/parse-justify-items-004.html": [ + "e2e61304ecccb8f0892eebb0eda6b510287174a6", + "testharness" + ], + "css/css-align/default-alignment/parse-justify-items-005.html": [ + "2d7d4871ff887570ea0d6292d389080ac8bc9932", + "testharness" + ], + "css/css-align/default-alignment/parse-justify-items-006.html": [ + "e37a66d4363c4df6c04eef3b6fbfe26208369cb1", + "testharness" + ], "css/css-align/default-alignment/place-items-shorthand-001.html": [ - "cc69bbbee852e6cd203d3f39dac2a1e05a428361", + "d3905233affe9d6e138ef96d0f025fc23585fc44", "testharness" ], "css/css-align/default-alignment/place-items-shorthand-002.html": [ - "77bb21f97a9448b03da8b97adc3accf1308eb647", + "a087659c5fa60012fa11b685701b64a14fdda4ea", "testharness" ], "css/css-align/default-alignment/place-items-shorthand-003.html": [ @@ -471577,7 +474491,7 @@ "testharness" ], "css/css-align/default-alignment/place-items-shorthand-004.html": [ - "17f58a8c43e114540e5fe5a63ec4502a50231e10", + "d4b6346f68b085a297ba5b15a5803258cbf661da", "testharness" ], "css/css-align/default-alignment/place-items-shorthand-005.html": [ @@ -471585,7 +474499,7 @@ "testharness" ], "css/css-align/default-alignment/place-items-shorthand-006.html": [ - "3de2cbe0f38c6efd2cf830fadc858988600b7900", + "b7106d0ee863673c0d9a6160d035706edb3c67a8", "testharness" ], "css/css-align/distribution-values/space-evenly-001.html": [ @@ -471597,15 +474511,55 @@ "support" ], "css/css-align/resources/alignment-parsing-utils.js": [ - "0340f801692801d985e8b75be0bb27b6ddff734f", + "8dcde745c0e5b0832ff748c117bbbf1af3d6a829", "support" ], + "css/css-align/self-alignment/parse-align-self-001.html": [ + "aae57067e0e86c9e8d6e81b31667218184567658", + "testharness" + ], + "css/css-align/self-alignment/parse-align-self-002.html": [ + "25d0f676cb296c9fa7de67cee5ac988733ccbd13", + "testharness" + ], + "css/css-align/self-alignment/parse-align-self-003.html": [ + "8137de4c4afb4c27d2923aa4054ea9398aca865d", + "testharness" + ], + "css/css-align/self-alignment/parse-align-self-004.html": [ + "48d48c3e5c3eff5143644cc7550c6c6b7b92bea7", + "testharness" + ], + "css/css-align/self-alignment/parse-align-self-005.html": [ + "190a7d276072604ce21a7dc00676ff32d2dba57d", + "testharness" + ], + "css/css-align/self-alignment/parse-justify-self-001.html": [ + "de04cd16ef97ad1e7fdba547caee6dab891366aa", + "testharness" + ], + "css/css-align/self-alignment/parse-justify-self-002.html": [ + "ef524eeed0dd9b2c41eab613aa08b3fd512c2903", + "testharness" + ], + "css/css-align/self-alignment/parse-justify-self-003.html": [ + "30f17571f35b0d79da012f4e39f38dbe85bbe888", + "testharness" + ], + "css/css-align/self-alignment/parse-justify-self-004.html": [ + "9b4d1453941411fc09f676e00b0bd0e5a9ddf7e7", + "testharness" + ], + "css/css-align/self-alignment/parse-justify-self-005.html": [ + "e40d7137c71d3d11a434a17861450d2380138a2e", + "testharness" + ], "css/css-align/self-alignment/place-self-shorthand-001.html": [ - "62d9c6a64f6f97ed2ecef74d885397c648de3c14", + "54de5a9e58b94bce85c58f25ffeee754acd32f36", "testharness" ], "css/css-align/self-alignment/place-self-shorthand-002.html": [ - "8e39715c6208aeaf483e2d7e9abb50870beffbc4", + "a266e09207859b058f445acb7c472156e525dd21", "testharness" ], "css/css-align/self-alignment/place-self-shorthand-003.html": [ @@ -471613,7 +474567,7 @@ "testharness" ], "css/css-align/self-alignment/place-self-shorthand-004.html": [ - "006d63717f5d18bc09428a56b3a4d811ba11af9a", + "4f153c62e5d1eecf9eb4678036123d0460d7ecf1", "testharness" ], "css/css-align/self-alignment/place-self-shorthand-005.html": [ @@ -471621,7 +474575,7 @@ "testharness" ], "css/css-align/self-alignment/place-self-shorthand-006.html": [ - "5b394c37527b7a9fdc0d32ea14caddf36a72fe30", + "d355eac038a7307e7a969632bc745ad25d8d6f43", "testharness" ], "css/css-align/ttwf-reftest-alignContent.html": [ @@ -475473,7 +478427,7 @@ "reftest" ], "css/css-color/rgb-002.html": [ - "548c72f849f22c8fb0997e6175fefb10c5581bba", + "87efdbc3c1d3e09b7699a98125a2b044c5ca799b", "reftest" ], "css/css-color/rgb-003.html": [ @@ -475481,7 +478435,7 @@ "reftest" ], "css/css-color/rgb-004.html": [ - "dd6f8c7fcf7469e4f3ebae08e6e5463cc5b5e3da", + "324e16dce720b0f7f4f74482bda847a06855bc65", "reftest" ], "css/css-color/rgb-005.html": [ @@ -475489,7 +478443,7 @@ "reftest" ], "css/css-color/rgb-006.html": [ - "1768035ede3163a8836c758bb8a05485224fca41", + "e7b974f05d72e904c7dcc89a27a58f3d2919652a", "reftest" ], "css/css-color/rgb-007.html": [ @@ -475497,15 +478451,19 @@ "reftest" ], "css/css-color/rgb-008.html": [ - "3acb8eb7623bf98938d53de83715dc0eeeda52fa", + "d5738a04d24bdd87d6e9a5c070b2bc566b545ace", "reftest" ], + "css/css-color/rgb-rounding-001.html": [ + "045dccb0add6afdc063260628ed0c7260ce751e2", + "testharness" + ], "css/css-color/rgba-001.html": [ "671f70a6afe6be200987a15814e550305d85bf20", "reftest" ], "css/css-color/rgba-002.html": [ - "75872ed9c97639741fdad767ce6d65d77c72f36a", + "fd92aa5522f1d2fdb85c7dd2217960cbb9ea3a15", "reftest" ], "css/css-color/rgba-003.html": [ @@ -475513,7 +478471,7 @@ "reftest" ], "css/css-color/rgba-004.html": [ - "b7fc0f8caa2993dc8be746a9fc539fd93b51e9ee", + "7723082ac6d7f139a49e43b880424d2a2a0c8086", "reftest" ], "css/css-color/rgba-005.html": [ @@ -475521,7 +478479,7 @@ "reftest" ], "css/css-color/rgba-006.html": [ - "59387e3f2c3927d96ce693897bd3cbb98d2e4e3c", + "94d68d4489fbf05fce63ce8da4c3034d9dbcef2e", "reftest" ], "css/css-color/rgba-007.html": [ @@ -475529,7 +478487,7 @@ "reftest" ], "css/css-color/rgba-008.html": [ - "b4ca26e380502585ba202c4b129581f3b38a6482", + "9ab9ae45413993ead7c3beaaf34a71474ee948dd", "reftest" ], "css/css-color/t31-color-currentColor-b-ref.html": [ @@ -477000,6 +479958,14 @@ "c874f59947d37659e640d4e0abb8a0dc0f03927d", "reftest" ], + "css/css-display/display-contents-fieldset-nested-legend-ref.html": [ + "89fbd146ffbd862ba3d0f058d8d8c9d8024da0fa", + "support" + ], + "css/css-display/display-contents-fieldset-nested-legend.html": [ + "45be585ab1523c180b3ba159d25d0dadd80456ac", + "reftest" + ], "css/css-display/display-contents-fieldset.html": [ "353abc0ce5abe98a1678fbd5832bf16a0d8b5094", "reftest" @@ -478228,6 +481194,14 @@ "cfaff82945bd52baafb8c4c16eb38c9dbee14da6", "testharness" ], + "css/css-fill-stroke/paint-order-001.tentative.html": [ + "46e784929d8a661eb432fa04cc79e0612bd5d194", + "reftest" + ], + "css/css-fill-stroke/reference/paint-order-001-ref.tentative.html": [ + "35eb3b4cfe4505a5c9761dcecc047a8cd09f8fb9", + "support" + ], "css/css-flexbox/Flexible-order.html": [ "ff6b01d6069b9106c60e3f86ac29bffb7c94f916", "reftest" @@ -481017,7 +483991,7 @@ "support" ], "css/css-flexbox/support/100x100-green.png": [ - "e5142090341e9557fa0fa8bb44ba2f5114796484", + "237282657ba1c809361506de0f7a7185cc7457c4", "support" ], "css/css-flexbox/support/1x1-green.png": [ @@ -481540,6 +484514,10 @@ "6a46776acc325ad42993555d516c6a057d801df8", "support" ], + "css/css-fonts/font-feature-settings-serialization-001.html": [ + "51a64b41a9a6bc085804710cf3ab80d860964c71", + "testharness" + ], "css/css-fonts/font-features-across-space-1-ref.html": [ "634ece1e252f1330479bafed49eb8aa2ecc99d94", "support" @@ -481825,7 +484803,7 @@ "support" ], "css/css-fonts/font-variant-alternates-07.html": [ - "caf337f548657c4e188aa477ccec4b8149d092bf", + "2789bde5b3274fe52484de0eb69d4c4e68f99da6", "reftest" ], "css/css-fonts/font-variant-alternates-08-ref.html": [ @@ -481833,7 +484811,7 @@ "support" ], "css/css-fonts/font-variant-alternates-08.html": [ - "f9fc6c2252064c94ba3e6120b3646faa0bb590f7", + "9c43206b0f1df015aec881da4517576f154c9ead", "reftest" ], "css/css-fonts/font-variant-alternates-09-ref.html": [ @@ -481841,7 +484819,7 @@ "support" ], "css/css-fonts/font-variant-alternates-09.html": [ - "75768372f5747e12bf569e40c1474f3341479552", + "f2ad17a464d0ff1afb1e971face18d0b70b0df81", "reftest" ], "css/css-fonts/font-variant-alternates-10-ref.html": [ @@ -481849,7 +484827,7 @@ "support" ], "css/css-fonts/font-variant-alternates-10.html": [ - "36ec29992f8a3de6a3679c8b89410c7c4fef6e41", + "07a02a19a3a4c34788408814668141fdcabeb5c3", "reftest" ], "css/css-fonts/font-variant-alternates-11-ref.html": [ @@ -481857,7 +484835,7 @@ "support" ], "css/css-fonts/font-variant-alternates-11.html": [ - "70b0db84986c8f982d0cc5fe08d997f7757924bc", + "74b5613071a8e5f2e46363fe9dbe2fff093060f3", "reftest" ], "css/css-fonts/font-variant-alternates-12-ref.html": [ @@ -481865,7 +484843,7 @@ "support" ], "css/css-fonts/font-variant-alternates-12.html": [ - "c173b400c5c247aa13d400efe7a0b7d0440a498c", + "ce637ee75a42b8cb4542c6d9fd888aeded9315af", "reftest" ], "css/css-fonts/font-variant-alternates-13-ref.html": [ @@ -481873,7 +484851,7 @@ "support" ], "css/css-fonts/font-variant-alternates-13.html": [ - "47ed224bd5c03bd2610521defe634776d25ae27f", + "08ebbe94136c784d32b9012cfbe5309641f34963", "reftest" ], "css/css-fonts/font-variant-alternates-14-ref.html": [ @@ -481881,7 +484859,7 @@ "support" ], "css/css-fonts/font-variant-alternates-14.html": [ - "e5d952170c8e4e4ee507550f20e06f4f02358aa7", + "21021ed09cba33880d09e09c8c4149fee09ab14a", "reftest" ], "css/css-fonts/font-variant-alternates-15-ref.html": [ @@ -481889,7 +484867,7 @@ "support" ], "css/css-fonts/font-variant-alternates-15.html": [ - "9ff98fb9ba0a0d8f7dd7eeba46f9fff0cded50d5", + "28b9783fb266c2706a3b1bb803d3f673e8a54961", "reftest" ], "css/css-fonts/font-variant-alternates-16-ref.html": [ @@ -481897,7 +484875,7 @@ "support" ], "css/css-fonts/font-variant-alternates-16.html": [ - "438440aa6dcc401f66d6c9f271221b377e08f12f", + "7ff9e41f619a1049160e6b44757fb3df76027fc1", "reftest" ], "css/css-fonts/font-variant-alternates-17-ref.html": [ @@ -481905,7 +484883,7 @@ "support" ], "css/css-fonts/font-variant-alternates-17.html": [ - "9c7b3567045c4bce12d693df687120534e066c56", + "190ed6df571bb4c3524830312bab44762b8f7caf", "reftest" ], "css/css-fonts/font-variant-alternates-18-ref.html": [ @@ -481913,11 +484891,11 @@ "support" ], "css/css-fonts/font-variant-alternates-18.html": [ - "b85b14eaf76f9c1b89a015b8a5aea9382f61e332", + "099642fe6884b4501cbdb7182910ef296fd7c93f", "reftest" ], "css/css-fonts/font-variant-alternates-parsing.html": [ - "5a15ca070dbddff6e28995c13db825244080fc25", + "521ef26ea50ce2980f5a9026e047a05d54bb7556", "testharness" ], "css/css-fonts/font-variant-caps-01-ref.html": [ @@ -488673,11 +491651,11 @@ "reftest" ], "css/css-grid/abspos/grid-positioned-items-content-alignment-001.html": [ - "cb977a8f3e05d48e92ffecad0031834087a2ef97", + "d9f5abb41f8fb479c37f0d364b9cd73cb9008829", "testharness" ], "css/css-grid/abspos/grid-positioned-items-content-alignment-rtl-001.html": [ - "6c8ff0ddb3895d6a13d8b1354dea5ef4324c9b03", + "81cd5622a02ae3bdccd609d6e409241b9ba92117", "testharness" ], "css/css-grid/abspos/grid-positioned-items-gaps-001.html": [ @@ -489009,35 +491987,35 @@ "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-011.html": [ - "e1befaf27f4defef626b8c423f3a82f661160655", + "77ae9907a7eddd78821890b70bce2c0543a978f5", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-012.html": [ - "84eb6de9bb892de373129df60f10bdf0cf9b59d8", + "aa3823158eb43bb1fa623a1686402bc965c7f4a6", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-013.html": [ - "f527bc3b0669b048268a8c59274150f3adeabd01", + "c0c5447dd16a89783d5c6b46ab1a6d17bdb719f3", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-014.html": [ - "eee651407a75b74ba32d60312a347bef95a6501f", + "52aa385eb6a0defe54f2b7ea5ef272da4ad37709", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-015.html": [ - "cccb3afaab2bb61b26229a5bb5713348c9d4a519", + "76feb090c78632d8e09767b89e7245970015b007", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-016.html": [ - "661f7bbd9c211bb29f14bf9124676e40e44d21cd", + "c8f7ba2331a80b123206cae0a11dbd76f0f8a235", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-017.html": [ - "c5aeba430655c90997b790b922ba7aaed087211b", + "e25652288f94377e3b5082c7d7244f706903905f", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-018.html": [ - "89abc2805c57b1c79b65288efbf82fb9f98fc31a", + "a1236f5cf353218bcf5565c42df0f44564690ffd", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-019.html": [ @@ -489081,35 +492059,35 @@ "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-029.html": [ - "2c99765c101af32aff4ef16b615930a650db52f2", + "633de23d59e98b4380c7aa36c11c3e25e939f417", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-030.html": [ - "6c3e1b09a0a8e1268a3e2c513b7959972fee1632", + "83c7eb2b3ce96edf1d86b18bb59fd518fccad2a4", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-031.html": [ - "627a1e421cbcc93dbf5b5beb028482495aa96ea9", + "1c81a3ecfbbbd52f058b6968d629571e335dd15f", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-032.html": [ - "a3b9af60a41c8baa60f5ec891a56d3c2e075d6c1", + "23a4f14974e70b29a9d618d2c627bc121558ffd1", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-033.html": [ - "ab9eda7db315fdd67240c93d5544fe3230101509", + "319d6241cb92af28d38eb82830f14dd5e3ff1d1a", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-034.html": [ - "1f506f17eeaf10ca4728c0b3b40ec825e85a4438", + "a1527212bd8be336ad27bba260ec350fc1cdef98", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-035.html": [ - "2bfd66cdd546bf0151c1aaa800903bf974a10b75", + "805bbc917117c9df0831c3dcd3c9b6ae951a60c8", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-036.html": [ - "d9ab0bc1deb8a9a8b29c80b446ee9f7cb720d214", + "e209b20fc006be859a18de232223a5f9bf1d7a8f", "testharness" ], "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-001.html": [ @@ -489840,6 +492818,10 @@ "dc9d15b18538afb38790de51e31095ce9f93e0a9", "reftest" ], + "css/css-grid/alignment/support/100x100-green.png": [ + "237282657ba1c809361506de0f7a7185cc7457c4", + "support" + ], "css/css-grid/alignment/support/style-change.js": [ "021db5d6c4e974ab0c8d7e59666a785db03942c4", "support" @@ -490277,7 +493259,7 @@ "support" ], "css/css-grid/grid-items/support/100x100-green.png": [ - "ff6fda3a436fa54df17a321e2458204fd963dfb2", + "237282657ba1c809361506de0f7a7185cc7457c4", "support" ], "css/css-grid/grid-items/support/200x200-green.png": [ @@ -490444,6 +493426,14 @@ "909c91b995daafc31a6fa9f6989dc78c892840e3", "reftest" ], + "css/css-grid/layout-algorithm/grid-find-fr-size-gutters-001.html": [ + "8f25b5a976f6f113a539fa22c8ab7f4d7cf3b2fd", + "testharness" + ], + "css/css-grid/layout-algorithm/grid-find-fr-size-gutters-002.html": [ + "d1cf60290fb927f91dc132fd801b92b84262e003", + "testharness" + ], "css/css-grid/layout-algorithm/grid-layout-free-space-unit.html": [ "5873efcda9c17e48a8437a62bf6871cbf96bdc46", "reftest" @@ -490544,10 +493534,6 @@ "feb53485e24aeaf9a5f27be5e42cc4a6fc5b8df0", "support" ], - "css/css-grid/support/grid-alignment.css": [ - "b45aee51245613ceddf8eda70d995a26027671bd", - "support" - ], "css/css-grid/support/grid.css": [ "6bb300b8baebf700481ea162fb7b41913fcca29c", "support" @@ -490860,6 +493846,26 @@ "4b4b4756c2f605ab4dca092775cc39b0705efda9", "reftest" ], + "css/css-layout-api/OWNERS": [ + "516917174b3c605bb6914a7aa710ce8948524ed7", + "support" + ], + "css/css-layout-api/at-supports-rule.https.html": [ + "7e8b0c3a12b9d5e4d2409da06e7d7441d76d8e23", + "testharness" + ], + "css/css-layout-api/computed-style-layout-function.https.html": [ + "a999a2a7ad8981879cdc984bf602939a23a60ea6", + "testharness" + ], + "css/css-layout-api/inline-style-layout-function.https.html": [ + "f421a9c0fb4c930922281a88eeaa45ae69adab51", + "testharness" + ], + "css/css-layout-api/supports.https.html": [ + "be6b57f5a85f99a64e755da22411ace3fba2992f", + "testharness" + ], "css/css-lists/OWNERS": [ "d9c8054b356c9273a054a83abeb9be0626c23921", "support" @@ -492116,6 +495122,10 @@ "9294744a72ec5b0fe7622c4a68284daefa9372d9", "reftest" ], + "css/css-multicol/multicol-gap-percentage-001.html": [ + "e13f8ae08605871e1ae175eed0a83dafae77de31", + "testharness" + ], "css/css-multicol/multicol-height-001-ref.xht": [ "028a0a0f0137840368c556b59f58deacccd5a063", "support" @@ -493337,11 +496347,11 @@ "reftest" ], "css/css-paint-api/invalid-image-constructor-error-ref.html": [ - "b0c34ee1480fe1108fe8dc53f2bbb2f3ffa1c408", + "9ae74dc1b6bc4a2f346d072eca0020e7fd1b39ec", "support" ], "css/css-paint-api/invalid-image-constructor-error.https.html": [ - "6e73e10076d29e69dad68deca551ad9cb84f82f9", + "3fb935202b776ac0669804e7484a6a56667db64a", "reftest" ], "css/css-paint-api/invalid-image-paint-error-ref.html": [ @@ -493349,7 +496359,7 @@ "support" ], "css/css-paint-api/invalid-image-paint-error.https.html": [ - "53ea8b4f95f9afafd145c04c5f5961af19a9eae4", + "14d684741bcea0c95b1f50881f489e29abff080c", "reftest" ], "css/css-paint-api/invalid-image-pending-script-ref.html": [ @@ -493357,7 +496367,7 @@ "support" ], "css/css-paint-api/invalid-image-pending-script.https.html": [ - "40cd95de01fb371990dac73777e75bd306d28be9", + "780d368f790ae61cd3d9a575213dd8c9cce9a3a6", "reftest" ], "css/css-paint-api/overdraw-ref.html": [ @@ -493489,7 +496499,7 @@ "reftest" ], "css/css-paint-api/parse-input-arguments-011.https.html": [ - "15edc8fc44d339514911566fe7cf07ec899cf04a", + "b464f59c89fd6b515cdb2e027240b953bcf229d8", "reftest" ], "css/css-paint-api/parse-input-arguments-012.https.html": [ @@ -493517,11 +496527,11 @@ "reftest" ], "css/css-paint-api/parse-input-arguments-018-ref.html": [ - "7dd468373f6efa2b5a3a8d16c91c0d4dec87c143", + "a831ef2690027b266f499d652b25ed8684e0fbaf", "support" ], "css/css-paint-api/parse-input-arguments-018.https.html": [ - "b606bfff93300f114ea4efab85e489727e9821c7", + "2ae9cf7d13fa40e568d2324d060885a68ea3dbbd", "reftest" ], "css/css-paint-api/parse-input-arguments-019.https.html": [ @@ -493557,7 +496567,7 @@ "support" ], "css/css-paint-api/style-background-image.https.html": [ - "54f213635749ffeae4d21a5e3d4391901fbfe984", + "4288eba641144a33ba79390102d141693a2c14d6", "reftest" ], "css/css-paint-api/style-before-pseudo-ref.html": [ @@ -493565,7 +496575,7 @@ "support" ], "css/css-paint-api/style-before-pseudo.https.html": [ - "7e8263880905e254e7c27274d6314ba23bd1cb04", + "e491dcde66880750f3b277d520f5288e0508d13a", "reftest" ], "css/css-paint-api/style-first-letter-pseudo-ref.html": [ @@ -493676,13 +496686,9 @@ "873882f22e341bba957eb142ba90fc54c1ceae2f", "reftest" ], - "css/css-position/position-sticky-bottom-ref.html": [ - "726d6e927d84669e9355701ccd948349d377e6fd", - "support" - ], "css/css-position/position-sticky-bottom.html": [ - "2a908e60a635dbf765987c0f93d0f33c8ea85de6", - "reftest" + "b6e687068b26e8660397dfd0d6a501b76739200b", + "testharness" ], "css/css-position/position-sticky-flexbox-ref.html": [ "f8dedb4a637ea3f4bf79eb621f52a8c4622f8c75", @@ -493724,13 +496730,9 @@ "6580451dddfd6f8865925326c170f630f343fbcd", "testharness" ], - "css/css-position/position-sticky-left-ref.html": [ - "9de7a8ba6019395d729b32e514cc3bd9fee25d2b", - "support" - ], "css/css-position/position-sticky-left.html": [ - "5151bca08dff652ea728cb8bccbb6b7c6d364dd8", - "reftest" + "2a04672cdac818a6887eac7d6824ea85d3d0559d", + "testharness" ], "css/css-position/position-sticky-margins-ref.html": [ "0cdb788c913f47a121114ac5b8e6a140bb08c1ff", @@ -493808,14 +496810,18 @@ "224bc984bc6eb4a55931461cf7e51f7b04d219f4", "testharness" ], - "css/css-position/position-sticky-right-ref.html": [ - "9a4a11b22cb0ea13f38a7dded8469f4848550ed4", + "css/css-position/position-sticky-rendering-ref.html": [ + "589f876752911544957aaa600c5c1559efbf1357", "support" ], - "css/css-position/position-sticky-right.html": [ - "f79c0e3e99085e483652950b141fe15c3c4d01d8", + "css/css-position/position-sticky-rendering.html": [ + "7b85b2f81d9748bf87f6e21fec60b6159d36b020", "reftest" ], + "css/css-position/position-sticky-right.html": [ + "80caf6fb1e6c84dbf3e371a11166ac5b71bba687", + "testharness" + ], "css/css-position/position-sticky-root-scroller-ref.html": [ "b66947a9f1b39c6c489267477d0122eeaeac7341", "support" @@ -493904,13 +496910,9 @@ "7a030d17358067b78c879bf17171b60d1dc3acd9", "reftest" ], - "css/css-position/position-sticky-top-ref.html": [ - "e5a05c21494a2e2923d1ed37050ec75db7ab55cd", - "support" - ], "css/css-position/position-sticky-top.html": [ - "30c0c00c6313a747b51c8b6d4f1301056af56560", - "reftest" + "bfd49209889fc14cae5af8d7c5e7990fbde451ec", + "testharness" ], "css/css-position/position-sticky-transforms-ref.html": [ "b01ae263ac6b712912ba2af06edbaeaf75ba0215", @@ -493936,6 +496938,10 @@ "b6d16a38b73d4c107e587194818a542fee9d0716", "reftest" ], + "css/css-position/resources/sticky-util.js": [ + "c7b441a3a07276cad9528dd3ef7d82844d06e2d8", + "support" + ], "css/css-pseudo/OWNERS": [ "e196548942a4d77448f734235b3456e2a830a5a7", "support" @@ -496252,10 +499258,18 @@ "46913ea7e47811b11be898de5c3bd0a330ea6637", "testharness" ], + "css/css-scoping/slotted-invalidation.html": [ + "c500e1ceba1b293d45df5f66fd89d4a5d9ceb952", + "testharness" + ], "css/css-scoping/slotted-parsing.html": [ "6bac5b15011d7177a40f7ca3e3c5f7e410643920", "testharness" ], + "css/css-scoping/slotted-slot.html": [ + "263bcbe53e7703a2ea0a7ffae8f9ec4fcb10c7d2", + "testharness" + ], "css/css-scoping/slotted-with-pseudo-element-ref.html": [ "48561a3dff973b7ad1bfa9702461e50fd4a67c2d", "support" @@ -498584,6 +501598,38 @@ "a9db9c3323d29904f9e631e48ddcd6c722e097a3", "support" ], + "css/css-text/astral-bidi/adlam-anti-ref.html": [ + "d288d3c927c1873f69c81886087e581de111f75d", + "reftest" + ], + "css/css-text/astral-bidi/adlam-ref.html": [ + "4cc3199ae52983d1bbbf07ba63dacdf1505f747c", + "support" + ], + "css/css-text/astral-bidi/adlam.html": [ + "72e9c9cc666f8fc1762a6621c0f05937ad413f33", + "reftest_node" + ], + "css/css-text/astral-bidi/cypriot-anti-ref.html": [ + "04d9e80edb3faeeafea19a7ee122fc61c09acca4", + "reftest" + ], + "css/css-text/astral-bidi/cypriot-ref.html": [ + "952516be0a292d4560fcc667f48f96a8c4e4d356", + "support" + ], + "css/css-text/astral-bidi/cypriot.html": [ + "b33812e2fd3e87fca52c430471ef12bc90539ad4", + "reftest_node" + ], + "css/css-text/astral-bidi/support/adlam.css": [ + "83d24d6c948fe4a68423b2892ff1e75c765ec98a", + "support" + ], + "css/css-text/astral-bidi/support/cypriot.css": [ + "0e32370ffc7e03a76dd32301ec9e25ee53e8bd51", + "support" + ], "css/css-text/hanging-punctuation/hanging-punctuation-allow-end-001.xht": [ "4f0a720f0b4d91d920ce2fb34ad97810cdd92ccd", "manual" @@ -505752,8 +508798,16 @@ "b7f8e44c24d152196d929ace4549ac5e56e7c23f", "reftest" ], + "css/css-transforms/parsing/perspective-origin-parsing-invalid.html": [ + "f12960646ce37cbce073602129d93d72bcc68cbf", + "testharness" + ], + "css/css-transforms/parsing/perspective-origin-parsing-valid.html": [ + "4849602a7ede7e6a9390092525dfcaec42ef9c7f", + "testharness" + ], "css/css-transforms/parsing/resources/parsing-testcommon.js": [ - "bb1376de12185a14f77fd28be757cc8db2a9929d", + "b5cc6f7c0c7729328bbbc45ec2a8147dae8d8668", "support" ], "css/css-transforms/parsing/rotate-parsing-invalid.html": [ @@ -505777,7 +508831,7 @@ "testharness" ], "css/css-transforms/parsing/translate-parsing-valid.html": [ - "5fae7004fc23d69a0d21853254974ce94889f68b", + "f1da23d979a48dd71fab4feb3bc6c9abdc6a9111", "testharness" ], "css/css-transforms/patternTransform/reference/svg-patternTransform-combination-ref.html": [ @@ -508580,6 +511634,62 @@ "f1d2858aa9cea8218cfbc305890c025ccccac5a8", "reftest" ], + "css/css-transforms/transform-transformed-caption-contains-fixed-position-ref.html": [ + "ce5ab6d5d3b83c27f8cd66fdc8e85812725bbd76", + "support" + ], + "css/css-transforms/transform-transformed-caption-contains-fixed-position.html": [ + "30c63d6574b9f00e37fdce36c1e97a80dbbe924f", + "reftest" + ], + "css/css-transforms/transform-transformed-tbody-contains-fixed-position-ref.html": [ + "567ae4674617642d23f0eac59ada4b93107903f6", + "support" + ], + "css/css-transforms/transform-transformed-tbody-contains-fixed-position.html": [ + "244614107958cdca65167ba3832f567843cc4afd", + "reftest" + ], + "css/css-transforms/transform-transformed-td-contains-fixed-position-ref.html": [ + "1e4095bbadfbc9a3879039978c04e669685db48a", + "support" + ], + "css/css-transforms/transform-transformed-td-contains-fixed-position.html": [ + "19b1e18fd2d5130dda71cbbdaeb2b635885f2d20", + "reftest" + ], + "css/css-transforms/transform-transformed-tfoot-contains-fixed-position-ref.html": [ + "19a31f7e72f5ecf84e084f3099bfe5236aa91250", + "support" + ], + "css/css-transforms/transform-transformed-tfoot-contains-fixed-position.html": [ + "c70ff55205792ed3c30aac4ad0d8740767dd36e7", + "reftest" + ], + "css/css-transforms/transform-transformed-th-contains-fixed-position-ref.html": [ + "5cca6be38b37bf8ed975481cf94554a393878114", + "support" + ], + "css/css-transforms/transform-transformed-th-contains-fixed-position.html": [ + "a3fd389df79f592888aef277595674b7f36acbaf", + "reftest" + ], + "css/css-transforms/transform-transformed-thead-contains-fixed-position-ref.html": [ + "a75603cfa4f4376a1f6d17e034a4a511ecd47016", + "support" + ], + "css/css-transforms/transform-transformed-thead-contains-fixed-position.html": [ + "e04fa6c34aae262fe477f0ab632ee7a7dd063de7", + "reftest" + ], + "css/css-transforms/transform-transformed-tr-contains-fixed-position-ref.html": [ + "9612a07b7d2171bbe7a55948a17a2f4054c2a481", + "support" + ], + "css/css-transforms/transform-transformed-tr-contains-fixed-position.html": [ + "7d8d62227d3ee736db2c7477a96ea1e5056ea405", + "reftest" + ], "css/css-transforms/transform-translate-001.html": [ "f7f3a85ab0cd4a84b5cd7e31a60a22845941fab1", "reftest" @@ -510524,6 +513634,10 @@ "f6056e2480829c7aa9885673d332496faf7777b5", "testharness" ], + "css/css-typed-om/OWNERS": [ + "f5f0861ac3382b3b12008133c1334f812a5a2caa", + "support" + ], "css/css-typed-om/declared-styleMap-accepts-inherit.html": [ "fb0b546c9509db2d07b3e5a8e847cf23bf88dff4", "testharness" @@ -510545,7 +513659,7 @@ "support" ], "css/css-typed-om/resources/testhelper.js": [ - "08f2394f7dfa11460d1e67b8d0c6e556620bf65a", + "62fc510703d52cd0894359c29d975920e26b594f", "support" ], "css/css-typed-om/styleMap-update-function.html": [ @@ -510573,7 +513687,7 @@ "testharness" ], "css/css-typed-om/stylevalue-normalization/transformvalue-normalization.tentative.html": [ - "3a5ea9eef361accde1e0166d9defa186bae5c602", + "1b1af8a14ed0a1751ef3899e574e263c842440fd", "testharness" ], "css/css-typed-om/stylevalue-objects/interface.html": [ @@ -510601,7 +513715,7 @@ "testharness" ], "css/css-typed-om/stylevalue-serialization/cssMathValue.tentative.html": [ - "9bcb4ff6461793d61925d173da7650230e3b4555", + "4c5bf7630548c90a1397b6f1f215bd3be76b6cf6", "testharness" ], "css/css-typed-om/stylevalue-serialization/cssPositionValue.html": [ @@ -510609,7 +513723,7 @@ "testharness" ], "css/css-typed-om/stylevalue-serialization/cssTransformValue.tentative.html": [ - "d255d5d406d5620d4ed1cdd2979c7dc720475399", + "fdc7e5f43de941a0d79b0c4c13ae515038e028d1", "testharness" ], "css/css-typed-om/stylevalue-serialization/cssUnitValue.tentative.html": [ @@ -510636,16 +513750,136 @@ "236520d8ac6199066d1e082b9860f2381ff61be6", "testharness" ], + "css/css-typed-om/stylevalue-subclasses/cssMatrixComponent.tentative.html": [ + "4de186a7eb54631bb95662c9d585ea7429bb9498", + "testharness" + ], + "css/css-typed-om/stylevalue-subclasses/cssPerspective.tentative.html": [ + "95faef2381452acfdaa8b200fb91d0f4f70bfd92", + "testharness" + ], "css/css-typed-om/stylevalue-subclasses/cssPositionValue-interface.html": [ "dc32e826e1f840c99f3b4bad4f03bd0f9573ce4e", "testharness" ], + "css/css-typed-om/stylevalue-subclasses/cssPositionValue-invalid.html": [ + "799985863b303910386137217d3641cb5fa550a4", + "testharness" + ], + "css/css-typed-om/stylevalue-subclasses/cssPositionValue.html": [ + "ae2b865d7c0d60437e6dda4f2e2bfd36677f95ae", + "testharness" + ], + "css/css-typed-om/stylevalue-subclasses/cssRotate.tentative.html": [ + "c4762f3f138145cbcc8af32d70c08088d0c0cfc2", + "testharness" + ], + "css/css-typed-om/stylevalue-subclasses/cssScale.tentative.html": [ + "779c99a24057f5a2c33fcda77f5897c142659518", + "testharness" + ], + "css/css-typed-om/stylevalue-subclasses/cssSkew.tentative.html": [ + "91ff825d12373156b3c3b23d23bf866220ef1386", + "testharness" + ], + "css/css-typed-om/stylevalue-subclasses/cssTransformValue.tentative.html": [ + "c1ee0153bd654f64b64f74bf00b6b0709c7cb9ed", + "testharness" + ], + "css/css-typed-om/stylevalue-subclasses/cssTranslate.tentative.html": [ + "700fae462f258404f3d0b8fad290613fc1929e1d", + "testharness" + ], + "css/css-typed-om/stylevalue-subclasses/cssUnparsedValue-interface.html": [ + "aeab5e92558f5b61ab99cab0ed1537e7fcb1092b", + "testharness" + ], + "css/css-typed-om/stylevalue-subclasses/cssUnparsedValue.html": [ + "cf1e8d553a9ebc111a1a81de48a821f7f7ad0bf1", + "testharness" + ], + "css/css-typed-om/stylevalue-subclasses/cssUrlImageValue.tentative.html": [ + "292ae5c272bbe9eee02ab7da2a465c7e941ab562", + "testharness" + ], + "css/css-typed-om/stylevalue-subclasses/cssVariableReferenceValue-interface.html": [ + "0dbf7bb1047b3be816ae6773218788cdf27529cb", + "testharness" + ], + "css/css-typed-om/stylevalue-subclasses/cssVariableReferenceValue-invalid.html": [ + "ba012ace40e63718694a8cd91ba74039787ff666", + "testharness" + ], + "css/css-typed-om/stylevalue-subclasses/cssVariableReferenceValue.html": [ + "69014384152e249f0f0ac15aec00ad41b82dbbf4", + "testharness" + ], + "css/css-typed-om/stylevalue-subclasses/numeric-objects/add-two-types.tentative.html": [ + "46432efb6b1ed44b87e27b66332ef78d68748c89", + "testharness" + ], + "css/css-typed-om/stylevalue-subclasses/numeric-objects/arithmetic.tentative.html": [ + "3d527c8633229d53635adff6e425a8af2b56302e", + "testharness" + ], + "css/css-typed-om/stylevalue-subclasses/numeric-objects/create-a-type.tentative.html": [ + "49abeb1e69973ec08fdb0309f78720628c604a57", + "testharness" + ], + "css/css-typed-om/stylevalue-subclasses/numeric-objects/cssMathInvert-type.html": [ + "55be5e939b85f8aa5f00dcd914bd887eb906c293", + "testharness" + ], + "css/css-typed-om/stylevalue-subclasses/numeric-objects/cssMathNegate-type.html": [ + "98d69118f7b5c26031ec55e66112cd1424f74d4f", + "testharness" + ], + "css/css-typed-om/stylevalue-subclasses/numeric-objects/cssMathValue.tentative.html": [ + "e19ec7ede86d52ecf29a142607de481facabcfb2", + "testharness" + ], + "css/css-typed-om/stylevalue-subclasses/numeric-objects/cssUnitValue.tentative.html": [ + "a46c2ff1bf221cd52b4546f7c07af90849d3096f", + "testharness" + ], + "css/css-typed-om/stylevalue-subclasses/numeric-objects/cssnumericvalue-multiply-two-types.tentative.html": [ + "1b5a65d6cbc52cc263cfdb2c896e1d9591ac322f", + "testharness" + ], + "css/css-typed-om/stylevalue-subclasses/numeric-objects/equals.tentative.html": [ + "466d97791b5fbec3dd52406bd8da3d277ae5ccdc", + "testharness" + ], + "css/css-typed-om/stylevalue-subclasses/numeric-objects/numeric-factory.tentative.html": [ + "5f478898d6923264f94b26be23bda160b8e119eb", + "testharness" + ], + "css/css-typed-om/stylevalue-subclasses/numeric-objects/parse.tentative.html": [ + "a17c4fdc29c474edb1ef3f94d5282d2603dd7227", + "testharness" + ], + "css/css-typed-om/stylevalue-subclasses/numeric-objects/resources/testhelper.js": [ + "6ad63efdd0a6650a1aae6eded3426c25b01a74a6", + "support" + ], + "css/css-typed-om/stylevalue-subclasses/numeric-objects/to.tentative.html": [ + "9216fee77d3666464ed55992fc7df739d85d5667", + "testharness" + ], + "css/css-typed-om/stylevalue-subclasses/numeric-objects/toSum.tentative.html": [ + "6240dbd450965b33ed5da87f554acc54a32b6ad4", + "testharness" + ], "css/css-typed-om/the-stylepropertymap/computed/computed.tentative.html": [ "f217ed58d7f56ea588aa942fddfec0322d557283", "testharness" ], - "css/css-typed-om/the-stylepropertymap/computed/get.tentative.html": [ - "caf3a345b03a2b929af25a8b360d5da9bb59fb5a", + "css/css-typed-om/the-stylepropertymap/computed/get-invalid.html": [ + "429ff102428a84ca0a1903de1752a56c3ff5bd29", + "testharness" + ], + "css/css-typed-om/the-stylepropertymap/computed/get.html": [ + "39d85ac0274ffcbc060654df3e53ae0984dce9d3", "testharness" ], "css/css-typed-om/the-stylepropertymap/computed/getAll.tentative.html": [ @@ -510669,11 +513903,23 @@ "testharness" ], "css/css-typed-om/the-stylepropertymap/declared/declared.tentative.html": [ - "0a2097381fd03a532db7e2b1fb85dd7a901fb011", + "a879640d94c42f82bf81f80942f1ed7d181ee642", + "testharness" + ], + "css/css-typed-om/the-stylepropertymap/declared/delete-invalid.html": [ + "fe2d4e5f02b1c931e479253d523f7ec2f59c67a7", + "testharness" + ], + "css/css-typed-om/the-stylepropertymap/declared/delete.html": [ + "5e2a8ca9f0246aaba3e7d7d038cad125194c5f14", "testharness" ], - "css/css-typed-om/the-stylepropertymap/declared/get.tentative.html": [ - "944052a99d1b5cc1a574c07339c33fdb6b1423d4", + "css/css-typed-om/the-stylepropertymap/declared/get-invalid.html": [ + "649ab2a64f0b0959e06bdc7968fc28247841bb25", + "testharness" + ], + "css/css-typed-om/the-stylepropertymap/declared/get.html": [ + "45032bb362cf1c6faed623e0538779db6a6dea3a", "testharness" ], "css/css-typed-om/the-stylepropertymap/declared/getAll.tentative.html": [ @@ -510696,10 +513942,6 @@ "2e8b919993a68f96008f17a0e95c08d05434e6a6", "testharness" ], - "css/css-typed-om/the-stylepropertymap/declared/test.tentative.html": [ - "eca38801c677a07ebc5e15ec7d11a3338bf0ecc6", - "testharness" - ], "css/css-typed-om/the-stylepropertymap/declared/update.tentative.html": [ "02eff9d89e280182fd065b63d71167041c6a8394", "testharness" @@ -510708,12 +513950,20 @@ "df640de5b24c8276459a1a7fbc8a02cc97db6223", "testharness" ], - "css/css-typed-om/the-stylepropertymap/inline/delete.tentative.html": [ - "352917486fa593e0d3f6f645c9c67846aa303ed8", + "css/css-typed-om/the-stylepropertymap/inline/delete-invalid.html": [ + "df4903a2c18099bb5291a307f50778ee757824ed", "testharness" ], - "css/css-typed-om/the-stylepropertymap/inline/get.tentative.html": [ - "28c506dae933e33e536f02e17b110cced9ea0278", + "css/css-typed-om/the-stylepropertymap/inline/delete.html": [ + "922297b80497c164d4217559658a9043a99ebbf8", + "testharness" + ], + "css/css-typed-om/the-stylepropertymap/inline/get-invalid.html": [ + "1494cfe202fb93881fc60a3ed2a372a7a8b25b37", + "testharness" + ], + "css/css-typed-om/the-stylepropertymap/inline/get.html": [ + "ffed62a6ddbeb7bfe7cb71e76f4d4c5d7e9039e7", "testharness" ], "css/css-typed-om/the-stylepropertymap/inline/getAll.tentative.html": [ @@ -510741,7 +513991,7 @@ "testharness" ], "css/css-typed-om/the-stylepropertymap/interface.html": [ - "73aac61c85d142f38b871ef21c8ce75bd468cf40", + "b4561da47301cde30c37e4f77ff6870b4b6d10b4", "testharness" ], "css/css-ui/OWNERS": [ @@ -513012,6 +516262,30 @@ "4fd38a517e41851216d12db8c6b732d96f76e325", "testharness" ], + "css/css-ui/text-overflow-024-ref.html": [ + "c43715bf1ea3dd118f7b71479bd5239e01bbb314", + "support" + ], + "css/css-ui/text-overflow-024.html": [ + "7c18a786a3bfc9d1a8e9cc108ae228b979cacb6e", + "reftest" + ], + "css/css-ui/text-overflow-025-ref.html": [ + "13056acc82d5e59310d10af30da8e46f73929e5f", + "support" + ], + "css/css-ui/text-overflow-025.html": [ + "b4a2e0d1b86fd8893421de4335c9b6f36df1fc4d", + "reftest" + ], + "css/css-ui/text-overflow-026-ref.html": [ + "03c0337af58ba7bada64ab36721d9f1fe2f9a2f3", + "support" + ], + "css/css-ui/text-overflow-026.html": [ + "5087fe90cb3ef8e340be316f1534cb6dba3e0d17", + "reftest" + ], "css/css-ui/text-overflow-ref.html": [ "db55b0b95a7406e9c4f00081b3e2cbe6b07363f7", "support" @@ -513084,6 +516358,14 @@ "70627dbbfc5af5fb859fdf1362f0004b38c64e34", "reftest" ], + "css/css-values/calc-ch-ex-lang-ref.html": [ + "218e1cb6782b554de35aad70913cddb8e7d71da2", + "support" + ], + "css/css-values/calc-ch-ex-lang.html": [ + "d15f42e237b281793ac808e06af92217d4f9593e", + "reftest" + ], "css/css-values/calc-in-calc.html": [ "be08a1510714e8b4fbc4d35582db5708924d06b2", "reftest" @@ -513092,6 +516374,10 @@ "32a0face898f08b854ac392c75368282d718be32", "testharness" ], + "css/css-values/calc-in-font-feature-settings.html": [ + "0785a776a398483fab6b535b66210816ce5521af", + "testharness" + ], "css/css-values/calc-in-media-queries-001.html": [ "f8fdd8373eaca7a03d6a089b4faf71825c8bfaf2", "reftest" @@ -513108,6 +516394,14 @@ "080551c1bee3d7bf54dda2c3d5b7e5a9fbd8aed6", "reftest" ], + "css/css-values/calc-rem-lang-ref.html": [ + "08bbc95f3078421a489e1e93cc7a4f035af40d5b", + "support" + ], + "css/css-values/calc-rem-lang.html": [ + "6fa668d2bcaf01f5c4680e3e14a0e86160d1b5d5", + "reftest" + ], "css/css-values/calc-serialization.html": [ "d0bcbd402cb78e704dabc7f1665d40ba163e30eb", "testharness" @@ -514776,6 +518070,46 @@ "ee3dc6c4200c4d2127114a515b486b13f04e9bac", "reftest" ], + "css/css-writing-modes/available-size-001.html": [ + "7e04081c2b399a7647577b71da829ba71564a51f", + "reftest" + ], + "css/css-writing-modes/available-size-002.html": [ + "4df2fa9b43c546d6fcfbcc18c2004577b6ca7f88", + "reftest" + ], + "css/css-writing-modes/available-size-003.html": [ + "36b2113547c59e8653cbe596844105064733d981", + "reftest" + ], + "css/css-writing-modes/available-size-004.html": [ + "dc1c04d088049ad6bf277165eb8a48df261cd9cf", + "reftest" + ], + "css/css-writing-modes/available-size-005.html": [ + "a4ccf0846a049bf9ca582b0e4619f5ed1b8e90e7", + "reftest" + ], + "css/css-writing-modes/available-size-006.html": [ + "b02ac2c44c61fd7e5c746265eb95f0a6234ee9fd", + "reftest" + ], + "css/css-writing-modes/available-size-007.html": [ + "4f78ec7de367c78ebbad1a71745a7c92baa29131", + "reftest" + ], + "css/css-writing-modes/available-size-008.html": [ + "b422cebb5c5839abfa11a049395702cda52a1459", + "reftest" + ], + "css/css-writing-modes/available-size-009.html": [ + "0d10d0e6ef2133fee22f1cf3e0d46d3df87cdadd", + "reftest" + ], + "css/css-writing-modes/available-size-010.html": [ + "d0143fe32c956ab0be6e9573cae23f5c718161a1", + "reftest" + ], "css/css-writing-modes/background-position-vlr-003.xht": [ "c56c42d17b140be6868cc6f413f545dd6a5180e8", "manual" @@ -515640,6 +518974,38 @@ "220814b621001b3ac2d0b1437d84d2078321e0b9", "reftest" ], + "css/css-writing-modes/ch-units-vrl-001.html": [ + "1495c8627e20c07ac6ab888925d92f86d1f7aa29", + "reftest" + ], + "css/css-writing-modes/ch-units-vrl-002.html": [ + "534a0cb579d21d3991abbd6be99560c8ffe06120", + "reftest" + ], + "css/css-writing-modes/ch-units-vrl-003.html": [ + "fb04787ed593f053f57d5940ebed3dd7812f9e3d", + "reftest" + ], + "css/css-writing-modes/ch-units-vrl-004.html": [ + "e0957395e97e8aa8f40008531dbec6588edaef6c", + "reftest" + ], + "css/css-writing-modes/ch-units-vrl-005.html": [ + "4e950c9e21d61ec9aca9ca13a90ed02b6dd00d20", + "reftest" + ], + "css/css-writing-modes/ch-units-vrl-006.html": [ + "4141f62654e7c58756abba0c51a414eff199a6bf", + "reftest" + ], + "css/css-writing-modes/ch-units-vrl-007.html": [ + "d686d9af9cffbcf5ff97ee99174723da549d1150", + "reftest" + ], + "css/css-writing-modes/ch-units-vrl-008.html": [ + "9e0bcf67c5678aeee8845dfb53413ff3b6268ad1", + "reftest" + ], "css/css-writing-modes/clearance-calculations-vrl-002-ref.xht": [ "a81fc46fd680c66f2a4ff2d5b69ae7c85ff7802b", "support" @@ -516548,6 +519914,22 @@ "af9a1409c41728f261794835cdedbfa2078aa141", "reftest" ], + "css/css-writing-modes/logical-props-001.html": [ + "748107b578909bb444c7d6cad0a4e59881f69b82", + "reftest" + ], + "css/css-writing-modes/logical-props-002.html": [ + "6ee88b30d660a43e7cc47d0d610472ca403335e6", + "reftest" + ], + "css/css-writing-modes/logical-props-003.html": [ + "d1efd40838b83f293108935a755f7f3487700db4", + "reftest" + ], + "css/css-writing-modes/logical-props-004.html": [ + "96ad70537c9ed9e207ac656a1756e10fec90811a", + "reftest" + ], "css/css-writing-modes/margin-collapse-vlr-003.xht": [ "4d12a8cd3ec4cb21a30ae1c66facce5abd0a17b3", "reftest" @@ -516640,6 +520022,18 @@ "045dee441558b3bfd8c88a43d8045d86a9db2152", "reftest" ], + "css/css-writing-modes/mongolian-orientation-001.html": [ + "8aee94c83c70913ad59251b23a068e7a2d7e69b5", + "reftest" + ], + "css/css-writing-modes/mongolian-orientation-002.html": [ + "0620ecf2073ce457f139200193b6c5b789de69a6", + "reftest" + ], + "css/css-writing-modes/nested-orthogonal-001.html": [ + "6af28d8c40bbdf1bf37e02e7a053bfbdf27c14ff", + "reftest" + ], "css/css-writing-modes/normal-flow-overconstrained-vlr-003.xht": [ "a3143d84b7fe81aebe58aed32ab0706a7e838b21", "reftest" @@ -516960,6 +520354,14 @@ "98709c56c04f6ca8a006c09d3e25e2e46fd9aeb3", "reftest" ], + "css/css-writing-modes/reference/available-size-001-ref.html": [ + "0f6b3e3907f1898bae7b58b11bc4ee0b04a7e94d", + "support" + ], + "css/css-writing-modes/reference/available-size-002-ref.html": [ + "db010e663d44ba9cdd1dbf4036003cb88b460fe9", + "support" + ], "css/css-writing-modes/reference/bidi-embed-001.html": [ "6000e9bf08042d5e79b805132a64038875973008", "support" @@ -517344,6 +520746,14 @@ "d4b9c8e4f87051b0f49de03d0aca541a4314dea7", "support" ], + "css/css-writing-modes/reference/ch-units-vrl-001-ref.html": [ + "c7dba7049e0de1fc7140445c401a0020652d20e4", + "support" + ], + "css/css-writing-modes/reference/ch-units-vrl-005-ref.html": [ + "37e27d1ce7b86178edd901a7a3b6e49e9bfc4cb2", + "support" + ], "css/css-writing-modes/reference/full-width-001-horizontal-notref.html": [ "36494fa0d84f46a19b5181801884d63f83ed56e5", "support" @@ -517384,6 +520794,14 @@ "4f831069ddef79a30a28c1a456da041bae613d08", "support" ], + "css/css-writing-modes/reference/logical-props-001-ref.html": [ + "d1c50f9396298d44ba76acb7e068afe6644f2dc1", + "support" + ], + "css/css-writing-modes/reference/mongolian-orientation-001-ref.html": [ + "874c16042142d86bffda7489ac6f6b6f1a28ac73", + "support" + ], "css/css-writing-modes/reference/outline-inline-block-vrl-006.html": [ "ef64b57d2a9b3d2a2ee1538c64afd417d9cbadfd", "support" @@ -517404,6 +520822,14 @@ "82edfdbafded72202c8a7aa3610c42ea53884c96", "support" ], + "css/css-writing-modes/reference/svg-aliasing-001-ref.html": [ + "8156e1ec7df883cc2aef362a0d477dd3853f52d6", + "support" + ], + "css/css-writing-modes/reference/svg-aliasing-002-ref.html": [ + "cfce62c59f560e85be5438fd4668fbb92805c5be", + "support" + ], "css/css-writing-modes/reference/table-cell-001-ref.html": [ "50a1a2b101291a12d8adf890ea5b92908979b112", "support" @@ -518940,6 +522366,14 @@ "4efeb23cebb6f94719381adfc64c25dd9f39bdf3", "support" ], + "css/css-writing-modes/svg-aliasing-001.html": [ + "3b7ce1b494850551d430fa8f0ca40c343dfd2ad1", + "reftest" + ], + "css/css-writing-modes/svg-aliasing-002.html": [ + "229401305c755d8e8f8faa22b5bd9114f1037810", + "reftest" + ], "css/css-writing-modes/table-cell-001.html": [ "16d67b389404d9686f871a3664b37529ad585345", "reftest" @@ -520088,6 +523522,10 @@ "a689737bd60877e181a8a7ff27774ab383c3de0b", "testharness" ], + "css/cssom-view/elementFromPoint-dynamic-anon-box.html": [ + "6ee9a47112c9a5fe4f0c85f85ea577575790c5be", + "testharness" + ], "css/cssom-view/elementFromPoint-parameters.html": [ "0c31602268a831eae1bcd44b4a5e7b678a7ed7cb", "testharness" @@ -520177,7 +523615,7 @@ "testharness" ], "css/cssom-view/overscrollBehavior-manual.html": [ - "65cb71ca6b606dc8b0b527c58902566539e771b2", + "785f1d881e9482b84394ef9b3466e7fd9502498e", "manual" ], "css/cssom-view/resources/elementsFromPoint.js": [ @@ -520200,6 +523638,14 @@ "8f423a757bd716c9c22e82fd2f35007d05982c08", "testharness" ], + "css/cssom-view/scrollIntoView-scrollMargin.html": [ + "b8f09964bb93bc562992c454cf7779f8bfa3be62", + "testharness" + ], + "css/cssom-view/scrollIntoView-scrollPadding.html": [ + "cc6309f95e1d053aea7b1b5ac97fee219970f852", + "testharness" + ], "css/cssom-view/scrollIntoView-shadow.html": [ "3c4a18992105fd7bf19cbf29f0b6d80cb12ca98c", "testharness" @@ -520489,7 +523935,7 @@ "testharness" ], "css/cssom/MediaList.html": [ - "21d9e43514fb3a7fbf8933429242dc544224ef24", + "784bc428e8e65a0784dcf89c6e3e27305781cc72", "testharness" ], "css/cssom/MediaList2.xhtml": [ @@ -521664,6 +525110,30 @@ "6f3884860a84b9b6e7524c84626638e303a14660", "support" ], + "css/fonts/noto/NotoSansAdlam-hinted/LICENSE_OFL.txt": [ + "ec660b17dff69058c2bbf122ca85ab83b920fce7", + "support" + ], + "css/fonts/noto/NotoSansAdlam-hinted/NotoSansAdlam-Regular.ttf": [ + "dea38de8b3affb6060e50e4727682ab3eff7b0c6", + "support" + ], + "css/fonts/noto/NotoSansAdlam-hinted/README": [ + "837f8d36a2d38637c424b878c7b068930a07c377", + "support" + ], + "css/fonts/noto/NotoSansCypriot-hinted/LICENSE_OFL.txt": [ + "ec660b17dff69058c2bbf122ca85ab83b920fce7", + "support" + ], + "css/fonts/noto/NotoSansCypriot-hinted/NotoSansCypriot-Regular.ttf": [ + "12a8cdf3af7376abf50426eae30d490c8f83f13e", + "support" + ], + "css/fonts/noto/NotoSansCypriot-hinted/README": [ + "837f8d36a2d38637c424b878c7b068930a07c377", + "support" + ], "css/geometry/DOMMatrix-001.html": [ "a8cfa83e572a766b61e4eae5946e7efb62e9eab7", "testharness" @@ -521901,7 +525371,7 @@ "support" ], "css/mediaqueries/test_media_queries.html": [ - "7b0a2c7025dd0bd6aee14935760f88cd1f09c7dc", + "234627714b5f304ad7efbeaf2dea3455125f8cc4", "testharness" ], "css/motion/animation/offset-anchor-interpolation.html": [ @@ -523544,6 +527014,10 @@ "ce45f6b6f483ae52c241acff168573a0907ca031", "manual" ], + "css/selectors/hover-002-manual.html": [ + "589b8621fbe7e03d9254693eafd718cab6818bd6", + "manual" + ], "css/selectors/htaccess": [ "23f218e48d8fabcfdb4d0fba13066d2fa737fb99", "support" @@ -523744,6 +527218,22 @@ "de0d6f774f67362551ca7448d06ab6b264ecaa29", "testharness" ], + "css/selectors/invalidation/selectorText-dynamic-001.html": [ + "d9d0e67d49810d940aa5748294cd65498922a341", + "testharness" + ], + "css/selectors/invalidation/sheet-going-away-001.html": [ + "5e4ef2d6c9252874b73a54b308e86f8e50edf802", + "testharness" + ], + "css/selectors/invalidation/sheet-going-away-002-ref.html": [ + "5616ec15bb322f49c4b28761df2cfb40fdafc226", + "support" + ], + "css/selectors/invalidation/sheet-going-away-002.html": [ + "d23ac4f08cb0c70d06bfac4c4be121a8de8af48f", + "reftest" + ], "css/selectors/missing-right-token.html": [ "d961e801f7df57161cd8c7b5a4b26ae24013c3e9", "testharness" @@ -523828,6 +527318,14 @@ "601b8b8426c64717f82831e6258f8fe4188c797c", "reftest" ], + "css/selectors/selector-structural-pseudo-root-ref.html": [ + "891156fb1d86a3fb5a90ef08e276d82b9bbe15b6", + "support" + ], + "css/selectors/selector-structural-pseudo-root.html": [ + "698c4606188ada93f0262d0dbcaea21dc92fdaa3", + "reftest" + ], "css/selectors/selectors-attr-white-space-001-ref.html": [ "0b790e2cb7a6ca66c7e6c8f769b61e3197f372fb", "support" @@ -523944,6 +527442,10 @@ "a9716c222274ba868bfd06c05e28cb7762d93245", "support" ], + "css/support/alignment.css": [ + "0a5f57a816f56c3e16f992a4bbea8d50b3c6fad9", + "support" + ], "css/support/b-green.css": [ "eb78a4d12f35b4249051826ea000c53d04df80b7", "support" @@ -524293,195 +527795,195 @@ "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-001-ref.html": [ - "8b52ccf3dd5faf994d36c09ffe30ec004d9cb1c4", + "9713f6530859af812a14213c87f8edb89a698f2a", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-001.html": [ - "ec24d73cbf6cdba668189d8c2bd137c229dac6f8", + "899825bca706b46dd3c6eb1c52c6cba923498097", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-002-ref.html": [ - "1d074ed2340b54dddcb0bf143146b38b6a5867b0", + "98e0c480b8b618209b6735f6b1621a03d2b0fffb", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-002.html": [ - "54b7196f3485cee131b362cb6e50461b51ca7fa8", + "c2e3ace7a421abf380d40b1e8cd44fd664cc5cdc", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-003-ref.html": [ - "a0c9d671c38a911db1c737229bd0052c64c87c3b", + "88b26f2e01345c92a24880d7a9f7fbbcd9027ce2", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-003.html": [ - "3c49377348fcdd491da465b059bc7a1449594d48", + "ba532cbcdf4cc6f8d4193a7d5d9a23a161301345", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-004-ref.html": [ - "954e4e16c768f4e6511ea9f36db27cb0cfdcd279", + "94f80c88919bf51a7066925cb65becc1a48f37bb", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-004.html": [ - "4030e110002938fec059dbedaa2cae3733e92fb7", + "9bac0b29d2a597d60502d5a4107490b7b57b0f2b", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-005-ref.html": [ - "66be6e7b355a03c7b016d8cf1d9657f6614c96ed", + "c0bde28315c225de9d58cac61e174c8890d4d77f", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-005.html": [ - "48562937b313752c2b3a45884ff217c640025372", + "2c6f37ecfdfc69c91af0bd468261d4585dcc19b0", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-006-ref.html": [ - "27f369e3b13a2e3d8711360e48816f4c0de83b74", + "dab24a0344a5d725f6973e91c29a618c50e9be37", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-006.html": [ - "7fe77af6a0c97babf4b5caa1868326fc086046cb", + "01313c1c815b734c1fc7d3920da14618105147de", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-007-ref.html": [ - "3f5b82b530ca5b3485dc8f10cf1d826f4f4c40be", + "e3be4306bc3d159e28d20a647ba3872e37873b41", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-007.html": [ - "e6d3cec630fda70ee12b9370add7cb400fc08aad", + "7f54d98f88ddd507db62fa91e5629ad0af667444", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-008-ref.html": [ - "3684fe4ddf322273c7ef1dd4bf8ddcd6424f682b", + "01347c9dc9b4f41cca33fe6c6165abd2a2e0b8b2", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-008.html": [ - "ee38986377adee4101c5e38db121caceba130937", + "c69c04f61d0538787c5a580b0a284119c51a9f64", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-rtl-001-ref.html": [ - "a0c9d671c38a911db1c737229bd0052c64c87c3b", + "88b26f2e01345c92a24880d7a9f7fbbcd9027ce2", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-rtl-001.html": [ - "0d0790f3f6e86f9d609e66a197eef190b9625553", + "1511c4390406aaee1d475e0d42eacefdadbcc545", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-rtl-002-ref.html": [ - "ff51ca97910be8c22e360a1a0ec04958936f264c", + "4234acc4ab9864df5370718a63e3c9a652154577", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-rtl-002.html": [ - "c7df641cf92ebf3af535254176a48538a7ae5a16", + "69a909870b370655c00fe9c59a6ce3d9b0912aa7", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-vertWM-001-ref.html": [ - "7846f18c7f407527a5ea10809ace64f7da22bb7c", + "4234acc4ab9864df5370718a63e3c9a652154577", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-vertWM-001.html": [ - "85dddfee6f633856f45d9694545e93e4e14e62ec", + "3404e75e8ac495d71d30075f694cf6cbab024b56", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-vertWM-002-ref.html": [ - "0aab29903360d982a03b5a88e213053fe4d3e8de", + "88b26f2e01345c92a24880d7a9f7fbbcd9027ce2", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-vertWM-002.html": [ - "9d9889de375868a0ceaba807062d54bd06ee2bea", + "ff875738cd047091820839166ffe9d57b6196868", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-001-ref.html": [ - "c105c6a659debc68f60198be439b9de08bce6205", + "16497d629ae44cbe07b4912fbf4e7fdc43fe06f6", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-001.html": [ - "4f3256191b5ab5a5e5d503bb555a0dd55ba926d9", + "5599556b5c00c31a7bb29af37e3ff340b35f9497", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-002-ref.html": [ - "aae75439fcd25343219df77798a15073237c03cf", + "f4f3681d6e9276cf9b7f1d0d17cd83a6226a1260", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-002.html": [ - "8fe7a189919eb3eea5e4a454afc031637131b176", + "bf5b2bed0cc5437e7334f6402468010c3c286fa4", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-003-ref.html": [ - "c277a20815ea480b5b251fb9c7fbf61a56b6beb0", + "96e2a769b182ba0ef8f98c0aa838e9ff2926d9c3", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-003.html": [ - "7f542c0def2ce44a2a6b1852fecdc48cba96fc23", + "e513fc35db7e756bf3b4d9f59fdea127a2d83bce", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-004-ref.html": [ - "482a05fd478ca299dedbe55aab1054d06c4ccd8b", + "e156425b7eb36092988b23a496ffc0963f8d202d", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-004.html": [ - "49468bf033a80b3b703344c3ae86de85a1024a64", + "9cc68f88050bc6d961f247cc828cb4c2705599cf", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-005-ref.html": [ - "d5a16bde9c475fde1c981dd0b72d870ce51514d2", + "b5928da62f5ab6e91ffc4989d2c18a614ca132f1", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-005.html": [ - "490a5de29c954a9a2ae31522cd65cbcbf81cb59b", + "c6f014ea47d60e504d07e7cb42869a65274397be", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-006-ref.html": [ - "34c493815c1f61cfd8cfbc66f1c67cba5421d7aa", + "11db9b8f174845d9f4044322e343fd7dd2b5d880", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-006.html": [ - "5c4ada621f66b65ad5f2a642bfecdff3adaad1a1", + "a47e5927f3f1e50728f8bc6909073d807452fa1e", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-007-ref.html": [ - "4fe66c8392b451b81c4d0b5d409b2dffdc58d3ff", + "65795848c64b6c95f0fc90b97b2e6978f2d3faf2", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-007.html": [ - "85b0c1c877e1500b1bd13aae6f13551a4d1772fc", + "fbffd61652119f522b938c9008f68d789349b028", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-008-ref.html": [ - "be8c64ca86981da6068c2f7a53d9e7b3a136bcaa", + "5fad97f3276400c27430e267ca6db8bbd6f9599e", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-008.html": [ - "e48821f2ee77005e3037511f448d4760899c86bb", + "248b28589cbdfa81a09e999adca3c04b3d34a286", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-001-ref.html": [ - "25e532335077e76bf08d339707fe38da9c9583dd", + "919c483bc448b90371cb5a831fbc9b73585e05ff", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-001.html": [ - "c952fb3acd2c8ca2d488e0ec9fcd4e6cfac786ef", + "f3229796c1715b08d6fdd93277271841076a8dd0", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-002-ref.html": [ - "25e532335077e76bf08d339707fe38da9c9583dd", + "919c483bc448b90371cb5a831fbc9b73585e05ff", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-002.html": [ - "1116b93106728552b4cf6a1262927099464249b3", + "3820e15cb9f3cf0d47ec749a95b376257aecd99b", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-003-ref.html": [ - "d213e8429e90b18a10bb44ba7c28072ddb6342e8", + "77ed310332b1780c1790895719c34eea769aec54", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-003.html": [ - "dc9398ebe89f8032639d6b9dd588d9ddbe517070", + "ecb99352dd392798facfc79b045d574b3a2da2e5", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-004-ref.html": [ - "f59382aa47c09d092f45fe641c6e94d6c80ffa26", + "4337799472d5c48f3b059bca4a81da8906ced75a", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-004.html": [ - "3b9bc2cf2bfc0a17b7f9c2dd07f329e974ea2980", + "fb992917830986c5d69e2fd2a3577e7fb1f416b9", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-vertWM-001-ref.html": [ @@ -524501,131 +528003,131 @@ "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-vertWM-003-ref.html": [ - "6ea4cf296f552928cf1deab5cc6c55801f77d001", + "919c483bc448b90371cb5a831fbc9b73585e05ff", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-vertWM-003.html": [ - "f52c46c6ae11a0747ea276a096dabb3404a48eda", + "83ad035de537fc115b7ff49083c6a9b65f574a53", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-vertWM-004-ref.html": [ - "32b17b2deeaa78e4a39f83cf4ea660d261a12ed4", + "3938fff0596713355cb6d24113f8024c70b3f191", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-vertWM-004.html": [ - "6729650bdb872ecd35ff6403e78c00c5b0b8d838", + "9eda2e4ce737a9b252ba46934abf2df996d594f5", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-fallback-align-content-001-ref.html": [ - "7eca0097799a4d3bd26dc80c571d5cfae02cc274", + "edc1637e3d3b695f94340a8007e40898f9d0d203", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-fallback-align-content-001.html": [ - "9a39c1723564c1e6eaf4dc594d8636c689469cf8", + "69a806d6c25492430946cbe0ce31f27d89575398", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-fallback-justify-content-001-ref.html": [ - "108fa0d21d92ad91b74fa14546ad150a4e2cd26c", + "d67f5b0848d7895fc01c9e8b1ac0b0264309f4bb", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-fallback-justify-content-001.html": [ - "d97c3fa3aa541cdc2873f3bbcf12dcb329e6ffff", + "363aada8453fd216a544a6cc3a6bd8b2f8899833", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-001-ref.html": [ - "f2f0157c35512c77530d4c0db61fce7fa080549f", + "ce0e2c522c73a79607a3c137a32c61ad1451fd3a", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-001.html": [ - "d2be18b6a51cd1a37c2c67e811d5d59e26fb0230", + "189b48d46800ec01cd1fc7faf2f2729ec160e42f", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-002-ref.html": [ - "f2f0157c35512c77530d4c0db61fce7fa080549f", + "ce0e2c522c73a79607a3c137a32c61ad1451fd3a", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-002.html": [ - "7c8365cac7f65784256202082cdccccec167acd2", + "bda1553bac71b3dd5b52548d96c0da0010939920", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-003-ref.html": [ - "d35779aad17c0d30d73e883dc7f637ac66b50f0d", + "bd1d6327679db6de434bbecf1138bb78071900c2", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-003.html": [ - "77baa6782ce88946ffdebe5d553a33c89e5e9316", + "000b0afc3bae8b3bd87aef219fa89ec1798494a6", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-004-ref.html": [ - "d35779aad17c0d30d73e883dc7f637ac66b50f0d", + "bd1d6327679db6de434bbecf1138bb78071900c2", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-004.html": [ - "ccf462c5238ebb288d84ff1b9bf1f6fe7de59408", + "3b2631763e3f1e14e10551209770e5c3a631797c", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-005-ref.html": [ - "50f1e68c1cdf7f56d9de5aa9cd88ecb5f5a30c06", + "f80425579808bac0ff7a7ad4ccde3e20711ebed1", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-005.html": [ - "f5a57914912f021099f479e4546b7f19bb995a8c", + "14c2475483ff315589cd2195f2876cf29a7ff50f", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-006-ref.html": [ - "50f1e68c1cdf7f56d9de5aa9cd88ecb5f5a30c06", + "f80425579808bac0ff7a7ad4ccde3e20711ebed1", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-006.html": [ - "68c4c3a744573037e7e2000d97b7019df3a4267b", + "acba4aad860546da40ec84389f364e179d75d23f", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-007-ref.html": [ - "56059425b60c5f2ddb87021a6aec48bd69aae8ff", + "220971731c87cb83e2d5fe7e82de89674fd2e2c4", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-007.html": [ - "57037567931bfe11bd2a89e42b22b2cb70191ed1", + "98aa86b4ca3ae450dd2777260ac8972a7e3c3f17", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-008-ref.html": [ - "56059425b60c5f2ddb87021a6aec48bd69aae8ff", + "220971731c87cb83e2d5fe7e82de89674fd2e2c4", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-008.html": [ - "5690cf1a76170dc73301e50f8e85fc1fd42df6a4", + "e578f68d35c24d5f94baee33aadbbf4e12913ccd", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-rtl-001-ref.html": [ - "172884f877753a84aa35b7a9544e6ae569efee4d", + "223a3d0376d9102502efc8521f0efdf3402f8b6f", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-rtl-001.html": [ - "18ddd851c3d109ced126717003bf781891625e93", + "dfbf9f4177e5b2fe768826775156e6c7ab37c750", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-rtl-002-ref.html": [ - "8ab7c1c9349ae5ea82cefc706e286d6e7149ab52", + "3afeb370de5ae42433288ead4387cd10e9a01b27", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-rtl-002.html": [ - "40fda5105c2ad58d10584403ca1f816c5fea841b", + "3b7dee34e3a3413ecbea36d6eb3492ab675a1947", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-vertWM-001-ref.html": [ - "0f15f5462dd1b9f04ff9e4b8caf8c27926a52100", + "634cd8cf0c388c9ec996f0798040117c204435ea", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-vertWM-001.html": [ - "4a4379e46a02f6e5dac8487dafbf1cbcf51fc949", + "36514ad5abf2af1b5555a46b6e4be5942b48bae8", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-vertWM-002-ref.html": [ - "a5f2c054ca2e66e3020551f43e7a66e5fa5d88b5", + "84ecebda68be03517847e2241545371ba2940ff0", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-vertWM-002.html": [ - "0977fb588f2e1dd37c38bb7c00a5701a4892fa73", + "666e3f04868c516ed5a00fe37ef4c12106fa45e2", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-self-001-ref.html": [ @@ -524653,19 +528155,19 @@ "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-align-self-001-ref.html": [ - "981ae2a45c49f71346a4ae96c6c7592ee78d57f5", + "a13cf703442d74056b93ee4b6e21e4f8ea033fab", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-align-self-001.html": [ - "055c0fe1b05cb98cd113ccc49e2cff682a3813e3", + "214a5e6a67f2b3c1c649ff8c0ba0d326a0d7906f", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-align-self-002-ref.html": [ - "a8488a3598a1a16a33ed7d784a1595dfb0d6cd9c", + "af2a8433d7db25bda6acc643886e5d724faf123f", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-align-self-002.html": [ - "99cd4246f53bb55efac55306a5443ecc6b2d0cb1", + "e53550a5ff8c9a3df299222e6ed706d0c5586529", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-align-self-img-001-ref.html": [ @@ -524749,99 +528251,99 @@ "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-001-ref.html": [ - "ebc61b763e8ad3c809376aa7e436800e45cf4d4f", + "df4d7e713c84009826a38155db2e1feca17b87d5", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-001.html": [ - "3fe1e59ca39fa5624af76f607e756c6bac28d20a", + "24d9a60f895669b90d17ffd46874f34cf0e0a4bf", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-002-ref.html": [ - "010a452f17fcce2a5821e0b50ba2bdb62115af3b", + "3ff3c3fc34cb9b0b2f9ebf5ce50ff0561fc2caad", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-002.html": [ - "a011b5b839efdfbaf54a23eceafae3135f323ea7", + "bf34963d5516a632fceb9a0df203b41637734250", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-img-001-ref.html": [ - "35974e8e9e3606548d3fe84c64e6f28f30297c1f", + "671120ce75717e5d922aa5e50cd23bb0bb99440f", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-img-001.html": [ - "09cf8775eac24d4c01b33d8f0f9fc29a4f343b0c", + "8a7e029632f276be5672be8503a735cb93145ec1", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-img-002-ref.html": [ - "590adc398556a887cc05f3f37bff3557d195a81c", + "0d6b49d619c70c2c3812763c0515e281c68c1167", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-img-002.html": [ - "c2a0549ec642d8785e18c0d254b44824f0dc0bdc", + "258958b3a4ef48ccc7ff2ff727b9a7b103eaad79", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-001-ref.html": [ - "8c5574d316afff4c6763d5752861d30d870b4897", + "1676f2c62c37502b918a8f07574e29bb582bf434", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-001.html": [ - "67b0ca09d6550bfee48fced29085eaa2d74afea4", + "10264b8fd4f45e54d41f5529d2f2916c1e0e5d31", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-002-ref.html": [ - "4487634fc067804526dcc8c80840db66f8510843", + "f98979fb7f26d6d5c5e52db6b3777f0dd520cac8", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-002.html": [ - "1eace13a5914ab6e0a295150e0c176108af837f4", + "afce74c97255827757f29b4d19fd987248653a13", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-003-ref.html": [ - "7a6a10cc35ad9d6d0f69d2970456700d20a0f8b8", + "8817d61abda7c77afc608798aa1ae628638cec29", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-003.html": [ - "1badba0c31003af31a4f949c73163e9ef08d670c", + "0d9e70415f27a4d4f1447a2d6af9544cad92c024", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-004-ref.html": [ - "60140d2dad0b5084903d37415bc95854e60b9adf", + "151e078eb255e7c77822701f5c79804b2afcbebf", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-004.html": [ - "453fcaff8730433686a71aeac0268eeecaadabb8", + "9637f0d340d72ee5edea76e2bed4e6182cbb0c53", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-001-ref.html": [ - "d7ad2e115df3e1f89ff603c6e015bc66dff0140f", + "8ef906b99dfab87396ea783505dd774f961cd14d", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-001.html": [ - "c7fe198018916bf65e3aa552af24b2f31b55374c", + "60c2ed16e28326f3e3f1b39b092b931c12ef93b0", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-002-ref.html": [ - "d7ad2e115df3e1f89ff603c6e015bc66dff0140f", + "8ef906b99dfab87396ea783505dd774f961cd14d", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-002.html": [ - "f05e0fe981e1973c70ee7eee943b9e5bf756d59e", + "56533e4323a6326e300e432afddbd4afc790d754", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-003-ref.html": [ - "e0c0d19423366fc808a21af30928f5647c5715e6", + "32036492ab25b6deb98775c58491ae492be57179", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-003.html": [ - "6fcbb2f5218c8b1dd2c2835482d36e25f4403a7b", + "6f5954ff299e9faa9bd80753741946e46e52da72", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-004-ref.html": [ - "e0c0d19423366fc808a21af30928f5647c5715e6", + "32036492ab25b6deb98775c58491ae492be57179", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-004.html": [ - "6e33ad8a2bd85ad27e3d4ac0ac18c4f2490417a8", + "f486a79118363126e2b1d65434b2de0ee59bbfc5", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/reftest.list": [ @@ -525857,27 +529359,27 @@ "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-content-horiz-001-ref.xhtml": [ - "c97203afc41105153190525ab7cfdc20a2af1c2e", + "812712adfc932b89afaae066b464562f4bddf7a9", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-content-horiz-001a.xhtml": [ - "9fe60aa20e99072abe9144075f65d73d38be8947", + "4d8ab12dac9a3c051599ec4ea7116171e401a9e6", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-content-horiz-001b.xhtml": [ - "b0c455ebd9512f7a241a1a6521e75663c301c75b", + "f260463a6f544434023d5a8a64c220df985a9dba", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-content-vert-001-ref.xhtml": [ - "d8fcb4f972f7a7d9d0de000fe94dc112a7b552b5", + "d5556cdd75a8778735165fbb6eca5b566e5a66ce", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-content-vert-001a.xhtml": [ - "8fd364088f61e3002fb158d04fe9c5de2baca50a", + "e069306468a1fe14c140a74d1b84afd5e362e3f1", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-content-vert-001b.xhtml": [ - "2010263599e331bcfccb4a1e2a2fe9adbd0680d3", + "099d697f926babb60493aa1cdeba479a956747a1", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-items-center-nested-001-ref.html": [ @@ -525949,15 +529451,15 @@ "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-horiz-001-block.xhtml": [ - "6fe8269816908878766c10a19192f78bd765badf", + "1b83848390c39cafbe4615b542cbbb80d9e514fa", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-horiz-001-ref.xhtml": [ - "0e3471d7a71402fc36d677ca37fb6818e437f3b0", + "2525504b7777a4dd5913bcf33c2426e29f1aad09", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-horiz-001-table.xhtml": [ - "af0587ba40578f0dc683a2a583cef77d3dee9b89", + "5b8fbed4af2464d58c8c7edfdefc4573df7bc417", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-horiz-002-ref.xhtml": [ @@ -526009,11 +529511,11 @@ "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-vert-001-ref.xhtml": [ - "de5df5cec5d32d6ed4fb7a2147febe552a31783d", + "292613649b06e82fbab28b37bd307dcdd2b83a54", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-vert-001.xhtml": [ - "d0fa07b6d6e9ecabac29b0da23feecc1a7d89e4f", + "9e136582396f0ccf961da19e46dd097c8b167e92", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-vert-002-ref.xhtml": [ @@ -526041,11 +529543,11 @@ "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-vert-rtl-001-ref.xhtml": [ - "97089c8f2dbf0f6f3046f4c4817671ac948d3510", + "f81bf68ea31bef16d00c46ac0550d2b9d66154bb", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-vert-rtl-001.xhtml": [ - "76077b866854bedc49881688bd01328c2f0f86f8", + "1688f321b6a2a3fad4a9396126768fda65f8c375", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-vert-rtl-002-ref.xhtml": [ @@ -526840,6 +530342,14 @@ "6092f9269a40b5d763b3e71cb235d917c418ed38", "reftest" ], + "css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-paint-ordering-003-ref.html": [ + "8ce06ed245c0bb9d391c751ad73a8bdc9c6934ab", + "support" + ], + "css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-paint-ordering-003.html": [ + "3f3c416f2f966ea2208f89a0e90b26385ee35694", + "reftest" + ], "css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-root-node-001-ref.html": [ "b06b801d20ebf9776648cb522ec427a1676e7490", "support" @@ -527049,7 +530559,7 @@ "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/reftest.list": [ - "a0d4a43edbe193d5e2cf2dc949b3e3ccf5726263", + "911d2c2dddc66574c36cb7ca58ed31af20618290", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/support/Ahem.ttf": [ @@ -532304,8 +535814,16 @@ "d1661ab1734f7d1a252030aeac7e9842a7a4cb3b", "testharness" ], + "custom-elements/Document-createElement-svg.svg": [ + "9af8f2dc7778feeea4fa8e557d7885b10d325dea", + "testharness" + ], "custom-elements/Document-createElement.html": [ - "074c9f703cc7feb1dfc3d07aedd08460bd591d42", + "14960ee9498f6ff23c1c94d3351a8ef383e60067", + "testharness" + ], + "custom-elements/Document-createElementNS.html": [ + "04cd97839e98c6082f67740dbcfc7588e2b251b9", "testharness" ], "custom-elements/HTMLElement-constructor.html": [ @@ -532321,7 +535839,11 @@ "testharness" ], "custom-elements/attribute-changed-callback.html": [ - "1ad26231aa638a0e0f9b76d77bdd93a3712dda98", + "320fb2bb26e7495d0829c39c113df3ea7ec1f4ef", + "testharness" + ], + "custom-elements/builtin-coverage.html": [ + "9163c06e2bf06b67e5ddf16a6b6d95ca7d64fb4d", "testharness" ], "custom-elements/connected-callbacks.html": [ @@ -532364,6 +535886,10 @@ "dc0ca4a066d9a05362a81b263594965763919e46", "testharness" ], + "custom-elements/parser/parser-constructs-custom-elements-with-is.html": [ + "17145d44113ea88688060c6cfd10d162cd97e28b", + "testharness" + ], "custom-elements/parser/parser-constructs-custom-elements.html": [ "228d4a90d57dc942692becc6f126ec9130b3a4e0", "testharness" @@ -532373,7 +535899,7 @@ "testharness" ], "custom-elements/parser/parser-sets-attributes-and-children.html": [ - "422bd43f10b48f0450b20fd4b0de046d465bec38", + "8049449173e4082b2f4ccadfe552abadadc0834a", "testharness" ], "custom-elements/parser/parser-uses-constructed-element.html": [ @@ -532513,7 +536039,7 @@ "testharness" ], "custom-elements/upgrading/Node-cloneNode.html": [ - "cc121ea56de1b8e1074062b5dda69f57e2add665", + "264a2631a79370bce8392657ba52c8b0c949b7e1", "testharness" ], "custom-elements/upgrading/upgrading-enqueue-reactions.html": [ @@ -532524,6 +536050,10 @@ "2ec52a6baa7490478ec61e72bf89b2ec09d453b5", "testharness" ], + "device-memory/device-memory.https.any.js": [ + "4e746987c6580c6ff388f1512a02cc6fe33393ea", + "testharness" + ], "docs/.gitignore": [ "e74984773578df84decce0bfd0db831220a2b008", "support" @@ -534693,7 +538223,7 @@ "support" ], "editing/data/insertparagraph.js": [ - "7e5061611c18e53d67329ebd32bc078bcce4c73d", + "b6e1c396986b88bb51befc9ea46eb511e25e8c71", "support" ], "editing/data/inserttext.js": [ @@ -537288,6 +540818,34 @@ "4239ec4ef240e199f15a38145d478d2c0aa43ad2", "support" ], + "feature-policy/experimental-features/resources/feature-policy-image.html": [ + "7ac7a5803b60a4f95b454aa44e0a79f363cffade", + "support" + ], + "feature-policy/experimental-features/resources/image.jpg": [ + "8edf07742134d02b486ee8bdb5fa8e9043875183", + "support" + ], + "feature-policy/experimental-features/resources/image.png": [ + "a2f7334bd0884f51ce49f529a745a343bdb44a1d", + "support" + ], + "feature-policy/experimental-features/resources/image.svg": [ + "39f716f4bc22283fc444ea0b3a807ae426e2aadf", + "support" + ], + "feature-policy/experimental-features/resources/video.ogv": [ + "7c6d80135c0688eb5ef5e79351c8ebbd24cb7d77", + "support" + ], + "feature-policy/experimental-features/unsized-image.tentative.https.sub.html": [ + "ac063a3e3084a9416a272bbac413016124e5289f", + "testharness" + ], + "feature-policy/experimental-features/unsized-image.tentative.https.sub.html.headers": [ + "2ae1da8e026e63625a6168b842303cc156963ced", + "support" + ], "feature-policy/payment-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html": [ "22d155755cd7aaff8a1c40c597468066f01eb13b", "testharness" @@ -538197,7 +541755,7 @@ "testharness" ], "fetch/api/response/response-init-002.html": [ - "9806050696657f48e609bbc943ba15a78d6464d1", + "5b87fa0d008f633d73bd87ab1755eee719b104cc", "testharness" ], "fetch/api/response/response-static-error.html": [ @@ -538236,6 +541794,26 @@ "aba9a9168c083a18a85336948c1ba72ca827562f", "testharness" ], + "fetch/data-urls/README.md": [ + "83d54a0532dd87ab1fa9f5f9b7e01d9a43d91eae", + "support" + ], + "fetch/data-urls/base64.any.js": [ + "ba4acd05372765d0fb03e89f13186e73467db58c", + "testharness" + ], + "fetch/data-urls/processing.any.js": [ + "7ba48c1ab609fd739e5fcd594a93d237e4fc326b", + "testharness" + ], + "fetch/data-urls/resources/base64.json": [ + "8079b52c59420f924df9dfb7d99d1ac49265a315", + "support" + ], + "fetch/data-urls/resources/data-urls.json": [ + "8f2ea63fb10ffe403125fb01b0afb848ed7ccb28", + "support" + ], "fetch/http-cache/304-update.html": [ "2571df43eb57ecbd29f55c2fc57b16f227001787", "testharness" @@ -538913,7 +542491,7 @@ "support" ], "generic-sensor/generic-sensor-tests.js": [ - "22c64a2145caa9eeaf4e53243dc971d832a478e0", + "0f1cea2c0d3f38220cbfdbe4f47d713214987cbd", "support" ], "generic-sensor/idlharness.https.html": [ @@ -539032,6 +542610,34 @@ "ea9edf12752af0a97cd9fe825ae927bd07090a56", "testharness" ], + "graphics-aam/OWNERS": [ + "3a6002295ea2893ba74763e46965bd2d1291d55b", + "support" + ], + "graphics-aam/graphics-document_on_html_element-manual.html": [ + "933fcb47c29bb5e119326147266457231dabf810", + "manual" + ], + "graphics-aam/graphics-document_on_svg_element-manual.html": [ + "126688d4b899c2b718914a9e7454f4ff14e21ae3", + "manual" + ], + "graphics-aam/graphics-object_on_html_element-manual.html": [ + "5fef647bd9e1cfed38467ca790b8796ef9d58bbe", + "manual" + ], + "graphics-aam/graphics-object_on_svg_element-manual.html": [ + "ae94b8f962584ba8afa6ccb40c992a597bb9d9af", + "manual" + ], + "graphics-aam/graphics-symbol_on_html_element-manual.html": [ + "be301a3a71514708c547fa033eab0271367a3fb9", + "manual" + ], + "graphics-aam/graphics-symbol_on_svg_element-manual.html": [ + "52b2e48333492373708b86cf558e578b04ac5977", + "manual" + ], "gyroscope/Gyroscope-disabled-by-feature-policy.https.html": [ "bc6f85cb3506d3e3e062eef43dca88bf3a4ebe89", "testharness" @@ -539820,6 +543426,10 @@ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "support" ], + "html/browsers/browsing-the-web/read-media/pageload-image-in-popup.html": [ + "ccf7d69d5d7fe04242eb63db86a04458cb979b87", + "testharness" + ], "html/browsers/browsing-the-web/read-media/pageload-image.html": [ "b6710a9c29c09b52db31c9379e933649982dfe09", "testharness" @@ -539865,7 +543475,7 @@ "testharness" ], "html/browsers/browsing-the-web/scroll-to-fragid/003.html": [ - "5c21b741294792396c0bde318ed7fcbe9a917fde", + "0d1a543f6c7a321f3037a7a9b9f9aea2c7293167", "testharness" ], "html/browsers/browsing-the-web/scroll-to-fragid/004.html": [ @@ -539901,7 +543511,7 @@ "testharness" ], "html/browsers/browsing-the-web/scroll-to-fragid/scroll-to-anchor-name.html": [ - "8de758988400b4b1acad6bb4c94069b4d0167c20", + "9bc91bc9bb368e8bf42810ed8aed936a6c9d581a", "testharness" ], "html/browsers/browsing-the-web/scroll-to-fragid/scroll-to-id-top.html": [ @@ -541961,7 +545571,7 @@ "support" ], "html/dom/documents/dom-tree-accessors/Document.body.html": [ - "a9c8feb21f69d7a1c4824fa3dab73a7ae45dfd8f", + "4bb3bceaa3d70b19ee60624ee19251a4f36924d7", "testharness" ], "html/dom/documents/dom-tree-accessors/Document.currentScript.html": [ @@ -543625,7 +547235,7 @@ "testharness" ], "html/dom/usvstring-reflection.html": [ - "a48e32b268a8117ed803c8ede806a879e1556d76", + "33a8ab2735650368c7cdc38226cb84be2dbbee85", "testharness" ], "html/editing/.gitkeep": [ @@ -547496,6 +551106,10 @@ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "support" ], + "html/editing/editing-0/autocapitalization/autocapitalize.html": [ + "95e7ddabc1f76b7a1577591c285f28b06da441c9", + "testharness" + ], "html/editing/editing-0/best-practices-for-in-page-editors/.gitkeep": [ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "support" @@ -550237,7 +553851,7 @@ "testharness" ], "html/semantics/embedded-content/media-elements/mime-types/canPlayType.html": [ - "960d7daccac83f48f553edb4d32f1b5919f67dcc", + "06c4d54aa102c108a7e51e425933eb2cfb97b920", "testharness" ], "html/semantics/embedded-content/media-elements/networkState_during_loadstart.html": [ @@ -550904,6 +554518,22 @@ "eeab6b02e728aea21878cf72664929766be057b7", "testharness" ], + "html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-added-ref.html": [ + "93575c87d29ce6637a976f01d81edf15051d7c79", + "support" + ], + "html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-added.html": [ + "063fae44970221248485c887a861dd695dad9ae5", + "reftest" + ], + "html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-removed-ref.html": [ + "eac59788fa5c75d30cdc6a2bb6196ee3b13c11d3", + "support" + ], + "html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-removed.html": [ + "bd59e65de7e465c469e00d81cfb9e568da72e9c1", + "reftest" + ], "html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-empty-cue.html": [ "688c592e8fc4b4dbc2d7d6ea16e17380c13f440a", "testharness" @@ -551144,6 +554774,14 @@ "baa44683fe0d00e691f536309a7772347301d57a", "testharness" ], + "html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-non-snap-to-lines-ref.html": [ + "229912bc6439e9a83adb0793d2c7e97b67ef2e5f", + "support" + ], + "html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-non-snap-to-lines.html": [ + "f7befc87f84534b206e72ecca9c2f35c27833786", + "reftest" + ], "html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-positioning.html": [ "852584f301e1ab52359e3344120149d65a35d5f7", "testharness" @@ -551168,6 +554806,14 @@ "c42b3e45318e167bf00edf77528d56e2d107d5e8", "testharness" ], + "html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-two-cue-layout-after-first-end-ref.html": [ + "2c37fbbd1a8f2b28de5f10363565d122a6c36916", + "support" + ], + "html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-two-cue-layout-after-first-end.html": [ + "099a220edda883f720e874c4b06714cdb70d34cd", + "reftest" + ], "html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-unsupported-markup.html": [ "c43ab0c10e1de3af01f6137c044c73cfcbc6d339", "testharness" @@ -554196,6 +557842,10 @@ "6426b10821b4af9a794c52940a08afd144ff1730", "support" ], + "html/semantics/rellist-feature-detection.html": [ + "382371297d71a43de804453a6f40b9d63e08ee3f", + "testharness" + ], "html/semantics/scripting-1/.gitkeep": [ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "support" @@ -555440,6 +559090,10 @@ "15b0b32d86bc6411b29c5d978db71053c00a1d65", "testharness" ], + "html/semantics/scripting-1/the-script-element/module/inline-async-execorder.html": [ + "790fc3e9e9b9661da1e88d536e50f540792ee729", + "testharness" + ], "html/semantics/scripting-1/the-script-element/module/instantiation-error-1.html": [ "b48335aa61dc13c34d2a77806f20663e2156bc6f", "testharness" @@ -555581,7 +559235,7 @@ "testharness" ], "html/semantics/scripting-1/the-script-element/module/load-error-events-inline.html": [ - "9b35d8d7ba6bb4826274c9570056cc962660d715", + "bbdfd11cfc7e52748f07d09ebe7cf6782ad5e782", "testharness" ], "html/semantics/scripting-1/the-script-element/module/load-error-events.html": [ @@ -555597,7 +559251,7 @@ "support" ], "html/semantics/scripting-1/the-script-element/module/module-in-xhtml.xhtml": [ - "32a4a4db2a5325b909078c73f76ab51085e66c5a", + "4b41e3e07ff72b0f181b0dd3a6c1aab40a01da0c", "testharness" ], "html/semantics/scripting-1/the-script-element/module/module-vs-script-1.html": [ @@ -555656,6 +559310,10 @@ "f09db3d2acdf3aba3fc8c67b2f089a0ba506c799", "support" ], + "html/semantics/scripting-1/the-script-element/module/resources/fast-module.js": [ + "218ea0b166fa79df83ee7ac7aff3bca8437b44aa", + "support" + ], "html/semantics/scripting-1/the-script-element/module/resources/import-non-utf8-with-charset-header.js": [ "5ff227dc83335d8a3e8da0161993c1de239ee7f8", "support" @@ -555700,6 +559358,10 @@ "a148d34314c2734fd49bf69d201006618fdac78f", "support" ], + "html/semantics/scripting-1/the-script-element/module/resources/slow-module.js": [ + "6a68189c41bb8a69fc0468bb048a50f8b8961101", + "support" + ], "html/semantics/scripting-1/the-script-element/module/script-for-event.html": [ "c225684e0c7d09f9628aab589c8673b140994243", "testharness" @@ -556520,10 +560182,6 @@ "d6cf92ac34d83cdd6357d516daeb87108933f8ed", "testharness" ], - "html/semantics/text-level-semantics/the-a-element/rellist-feature-detection.html": [ - "aff1352988cb70e52cff99e1fde379a807dd6984", - "testharness" - ], "html/semantics/text-level-semantics/the-a-element/resources/a-download-404.html": [ "f703d9a7ce1e09e0c9ef9ea2bd2cd2b318613f6d", "support" @@ -556536,10 +560194,6 @@ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "support" ], - "html/semantics/text-level-semantics/the-area-element/rellist-feature-detection.html": [ - "d51356778b9a9e87e79c33b64ea9cf31a091cb07", - "testharness" - ], "html/semantics/text-level-semantics/the-b-element/.gitkeep": [ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "support" @@ -557549,7 +561203,7 @@ "support" ], "html/webappapis/atob/base64.html": [ - "5ee9005c14491a0c33f3fdba4771a8a491f43d8c", + "d720c251750e32d5ba6a76897439128a0eaa8479", "testharness" ], "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/origin-check-in-document-open-basic.html": [ @@ -558133,9 +561787,13 @@ "testharness" ], "http/resources/securedimage.py": [ - "b03f45c4dad3a9cd0f0fb67a99a79be3ba64b199", + "d5aa250e8cba8384f47fca2c559aa6a310dff457", "support" ], + "http/tests/bluetooth/https/requestDevice/cross-origin-iframe.sub.https.html": [ + "dc9df7886d4a020b1853d7a54d67a8b1249c56c7", + "testharness" + ], "imagebitmap-renderingcontext/bitmaprenderer-as-imagesource.html": [ "f80d1496329c64643d2b40e478779929de20c499", "testharness" @@ -558268,6 +561926,10 @@ "c0edf6205f84cd5d03ef85ad6db7824d7f70b345", "support" ], + "images/pattern.svg": [ + "a904f9f7aec35cda20b738ba665c7cf4f38fd339", + "support" + ], "images/red-16x16.png": [ "0d6c6847bafe93c1e1d617a64bd1b432700f7f3f", "support" @@ -558517,7 +562179,7 @@ "support" ], "interfaces/html.idl": [ - "5eead97f7b1cc2e511f268cb5a40011a33519bf0", + "84ed07588763a87bffbe191bf440e820f9d130ec", "support" ], "interfaces/magnetometer.idl": [ @@ -558548,6 +562210,10 @@ "fc724b70bc1e1d30e538ee5154a99d4871414302", "support" ], + "interfaces/screen-orientation.idl": [ + "b280c2a72795d4abd55a361a0afd8adce70562dc", + "support" + ], "interfaces/touchevents.idl": [ "6ce4f601cda6cd3b99a300e0b28d2886647f06d3", "support" @@ -559429,7 +563095,7 @@ "testharness" ], "media-source/mediasource-addsourcebuffer.html": [ - "c65d474f5279b3238dccf50415b5995b9d6b80ca", + "34ba3bf54e410c5e5396ef69f256c1e3853dfe17", "testharness" ], "media-source/mediasource-append-buffer.html": [ @@ -559549,7 +563215,7 @@ "testharness" ], "media-source/mediasource-is-type-supported.html": [ - "3c22e7a06768ab1a942349f24b2e2f3240ce560b", + "84265f4f1db7429bf7ff0807c5ebddddc25d370c", "testharness" ], "media-source/mediasource-liveseekable.html": [ @@ -559965,7 +563631,7 @@ "testharness" ], "mediacapture-streams/MediaDevices-IDL-enumerateDevices.html": [ - "0bebfb5c5a6204257f30d03fb16e4a35b8943814", + "6f35e6cfb8409803c64ed7511f9f1dd5c1c538ac", "testharness" ], "mediacapture-streams/MediaDevices-enumerateDevices.https.html": [ @@ -561696,10 +565362,6 @@ "b9d933d6a33eabc0b9c9f856c91b802677fa1094", "testharness" ], - "navigator/device-memory.https.any.js": [ - "4e746987c6580c6ff388f1512a02cc6fe33393ea", - "testharness" - ], "netinfo/netinfo-basics.html": [ "972b4048bbb74e1489329ae48759b587b9ad3800", "testharness" @@ -568089,7 +571751,7 @@ "support" ], "payment-request/OWNERS": [ - "a2937112040fe45b12ba87b6fb75bd9be6aab6ad", + "a13f63124c56c014a0d88d299cbaabe565c567cf", "support" ], "payment-request/PaymentAddress/attributes-and-toJSON-method-manual.https.html": [ @@ -568213,7 +571875,7 @@ "testharness" ], "payment-request/payment-request-id-attribute.https.html": [ - "9a8a1ffc3cd7ba3c29380c4a9962bd17f35087c3", + "34dd889e8bc906eb9a99c192e547fab831099f7c", "testharness" ], "payment-request/payment-request-not-exposed.https.worker.js": [ @@ -568317,7 +571979,7 @@ "testharness" ], "performance-timeline/idlharness.html": [ - "30e6893af2cda301efb45fa7cfe16cec04701445", + "d6ce8e5c21b42843caea8e61c1637d75c2e51d64", "testharness" ], "performance-timeline/performanceentry-tojson.html": [ @@ -569133,7 +572795,7 @@ "manual" ], "presentation-api/receiving-ua/PresentationReceiver_create-manual.https.html": [ - "1830e4420c668b77dbd835912f518920743c5592", + "a1ca78e036505bae01d207a0810e84c465586bd2", "manual" ], "presentation-api/receiving-ua/cache.txt": [ @@ -569173,11 +572835,11 @@ "support" ], "presentation-api/receiving-ua/support/PresentationReceiver_create_receiving-ua.html": [ - "84f37932fc911d5dbf692b42569b564ebf9b8e7d", + "68f0a929fa97a9dce8566237e538f769860c14fe", "support" ], "presentation-api/receiving-ua/support/PresentationReceiver_create_receiving-ua_child.html": [ - "9320e6d42c5b2856934ff1d80d89276a010b48f1", + "d0a87a3ca4dbb9bb706133ee3ca638be929e56d4", "support" ], "presentation-api/receiving-ua/support/PresentationReceiver_unreached_receiving-ua.html": [ @@ -569204,30 +572866,30 @@ "f64f2ab5d0afa93e5adfa327e478936c0e295823", "support" ], - "proximity/DeviceProximityEvent_tests.html": [ - "95de85f7e9e74e9bdcc0f0dceefa5f099dd48191", - "testharness" - ], - "proximity/DeviceProximityEvent_tests.js": [ - "4f598faf998653343ae1929fdb1c2a13fa82422d", - "support" - ], "proximity/OWNERS": [ "8de2a4a7f850b2d52ab3102b585fe38828b6d08d", "support" ], - "proximity/UserProximityEvent_tests.html": [ - "13008fe761a4569792af6bbe4a29ce2fa98fae0d", + "proximity/ProximitySensor.https.html": [ + "6920751273c1220f40b5046be7ce7254a01ce72e", "testharness" ], - "proximity/UserProximityEvent_tests.js": [ - "ba9b710aa4213f10edc7131a3879821f38f2ef19", - "support" + "proximity/ProximitySensor_insecure_context.html": [ + "00b6ec75ae65d4ee7144e9362ccc89a3b3adb856", + "testharness" + ], + "proximity/ProximitySensor_onerror-manual.https.html": [ + "522cdac324519313d77aa2dd417d486f15b2511f", + "manual" ], "proximity/idlharness.https.html": [ "25c63ad4caa047d13ef9be748d6c880df4193b0d", "testharness" ], + "quirks/OWNERS": [ + "3a52efa37cb05c353bb8ce78146c42db6a238b74", + "support" + ], "quirks/active-and-hover-manual.html": [ "b82c3af04387a133935d1eed50be37fdc34474b2", "manual" @@ -576933,7 +580595,7 @@ "testharness" ], "resource-timing/resource_initiator_types.html": [ - "b04269a158aadf5a178decc306481c15f2c310b0", + "70ab5e0b5d8d684fc420e9242a273e948edbb1ba", "testharness" ], "resource-timing/resource_memory_cached.sub.html": [ @@ -576956,6 +580618,10 @@ "072eb2cd05a0711abc498f4180738aef7d1bf282", "testharness" ], + "resource-timing/resource_timing.worker.js": [ + "352213c5bc7533afa10003da93dfb399a101c224", + "testharness" + ], "resource-timing/resources/TAOResponse.py": [ "9e8051a2ff8fff72b36ed1cecb61f9e7bba29071", "support" @@ -576972,6 +580638,10 @@ "99949c515749e66f471c3589ee7a0ef518aaccb5", "support" ], + "resource-timing/resources/empty.js": [ + "51e0050cf1bdeb051d0d7ab6f23a7a2173cb40db", + "support" + ], "resource-timing/resources/empty_script.js": [ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "support" @@ -577092,6 +580762,10 @@ "516c041687b10ee09daae6695437013dd622c1a6", "support" ], + "screen-orientation/interfaces.html": [ + "d54475008731fafd00c3cae73f11eac94dba0883", + "testharness" + ], "screen-orientation/lock-bad-argument.html": [ "4d06c44e347ae7326e928ed0fd09b8ae3991e11b", "testharness" @@ -577112,10 +580786,6 @@ "b2c9679f11ebae5968c063bfb2449edfae46fc08", "testharness" ], - "screen-orientation/orientation-api.html": [ - "44225c2493c6ac472a9f2d4b871ee17368cf02be", - "testharness" - ], "screen-orientation/orientation-reading.html": [ "863ce2783be30b5482733cb8cc31201d7f272128", "testharness" @@ -577129,7 +580799,7 @@ "support" ], "screen-orientation/resources/sandboxed-iframe-locking.html": [ - "a900654e798241fb52ea214e90d25c272494e058", + "27c3eb23f9931697d65c64a2c7a46be77f8961ee", "support" ], "secure-contexts/basic-dedicated-worker.html": [ @@ -577380,6 +581050,10 @@ "01ae6e757d428800555012783e290ebba575bcab", "testharness" ], + "server-timing/cross_origin.html": [ + "74333db517babacbb84bb20c91ccfc8b2627b934", + "testharness" + ], "server-timing/resources/blue.png": [ "7de5cdb5ad04ac365430b3b5f5ba01d2ba57ea23", "support" @@ -578081,7 +581755,7 @@ "support" ], "service-workers/OWNERS": [ - "84acd30c6a2c1cea23afd9f046ee5c34ae885828", + "153554b1fb793acd7a005c50b12678305e02014a", "support" ], "service-workers/cache-storage/OWNERS": [ @@ -578377,7 +582051,7 @@ "testharness" ], "service-workers/service-worker/about-blank-replacement.https.html": [ - "345259908d040e4f5d810ae7089dab8a8c909b0a", + "d2cc0fc99820308096d549d892962fe10b19f0ae", "testharness" ], "service-workers/service-worker/activate-event-after-install-state-change.https.html": [ @@ -578496,12 +582170,20 @@ "401235c18e1594c7248b22eb6881d54801de9809", "testharness" ], - "service-workers/service-worker/fetch-canvas-tainting-cache.https.html": [ - "b3f8375bc412c99099ac886673fd80f6cb0a312b", + "service-workers/service-worker/fetch-canvas-tainting-image-cache.https.html": [ + "a9a3c252cb40c38f3e53f577d35486f597c3f73c", + "testharness" + ], + "service-workers/service-worker/fetch-canvas-tainting-image.https.html": [ + "189e24f1aa5768d2bb75453900826843e0ab306b", "testharness" ], - "service-workers/service-worker/fetch-canvas-tainting.https.html": [ - "9c2e160f95d2915a961bd7da840ac53779c9387d", + "service-workers/service-worker/fetch-canvas-tainting-video-cache.https.html": [ + "68deaada4bc6996777980c0b0b69bf9da4689eb4", + "testharness" + ], + "service-workers/service-worker/fetch-canvas-tainting-video.https.html": [ + "54838009a0f9d724f0088adab56173526597385b", "testharness" ], "service-workers/service-worker/fetch-cors-exposed-header-names.https.html": [ @@ -578573,7 +582255,7 @@ "testharness" ], "service-workers/service-worker/fetch-event.https.html": [ - "98712ceed8cd6ea7514bf3b2a5e51a3670cd0a4d", + "9d365e1960c873a48cf5378cda7615cbef49f5cd", "testharness" ], "service-workers/service-worker/fetch-frame-resource.https.html": [ @@ -578633,7 +582315,7 @@ "testharness" ], "service-workers/service-worker/fetch-response-taint.https.html": [ - "217383b4dddcc6f984c4cc7cd5f99e1f9b86cdd1", + "154a52255d0aae9a99879389afba6214b803b08d", "testharness" ], "service-workers/service-worker/fetch-response-xhr.https.html": [ @@ -578704,6 +582386,10 @@ "3c75caa66d3906602d10b07ff22e7d0f210cfee9", "testharness" ], + "service-workers/service-worker/local-url-inherit-controller.https.html": [ + "e2e8258f24860cb93b71b4bb27f618b7740756bd", + "testharness" + ], "service-workers/service-worker/mime-sniffing.https.html": [ "d61a859a111dea758efb91480817fa1a029c152b", "testharness" @@ -578984,6 +582670,14 @@ "567d0a7de3ef54adaa8339bb04632a2ecfcc57a5", "support" ], + "service-workers/service-worker/resources/about-blank-replacement-blank-dynamic-nested-frame.html": [ + "bfd2c8e7acb010cd7b5a0076a9138d8584e5efab", + "support" + ], + "service-workers/service-worker/resources/about-blank-replacement-blank-nested-frame.html": [ + "79cb319dbdbae7efb9abf3405c2bc76ad9f0bc0f", + "support" + ], "service-workers/service-worker/resources/about-blank-replacement-frame.py": [ "2f22a4c92cfb7c7e8cfbe6f168872c2f5875867d", "support" @@ -578996,6 +582690,10 @@ "498a08b652ec0d867e8d2e173be954f69354a208", "support" ], + "service-workers/service-worker/resources/about-blank-replacement-srcdoc-nested-frame.html": [ + "6a0d88da977057eb365dfc8bfb531558d7a1bd4a", + "support" + ], "service-workers/service-worker/resources/about-blank-replacement-uncontrolled-nested-frame.html": [ "ab2ce3693bbc40943b7390c8d76f3601f52410ca", "support" @@ -579101,7 +582799,7 @@ "support" ], "service-workers/service-worker/resources/clients-get-worker.js": [ - "bc72471e16df1507a2cebd4c32f7f995299ebd4e", + "06ab101997ce13da6d81645661b4a0b5281c5c1d", "support" ], "service-workers/service-worker/resources/clients-matchall-client-types-dedicated-worker.js": [ @@ -579144,6 +582842,10 @@ "33ab5639bfd8e7b95eb1d8d0b87781d4ffea4d5d", "support" ], + "service-workers/service-worker/resources/echo-content.py": [ + "d22a9fe2b426436a8e4901d82ca68833eeb905b3", + "support" + ], "service-workers/service-worker/resources/echo-message-to-source-worker.js": [ "760b04aa2e36f55cfdbea0871a7424f787734a6e", "support" @@ -579189,11 +582891,15 @@ "support" ], "service-workers/service-worker/resources/fetch-access-control.py": [ - "e612c0f7457c8d15ff7d0e2515d8e967a8bb81b5", + "be1cb7ce3d6346a98d35a6c19d7a3bf656f9373b", "support" ], "service-workers/service-worker/resources/fetch-canvas-tainting-iframe.html": [ - "aee62d5b6ee22664c493036c879ed8d530b5ba1d", + "9fc63a38bee0e0368bec3c7c6d1185d72c3bc752", + "support" + ], + "service-workers/service-worker/resources/fetch-canvas-tainting-tests.js": [ + "2119442a255d9544a2642be58f16a1b404c41c40", "support" ], "service-workers/service-worker/resources/fetch-cors-exposed-header-names-worker.js": [ @@ -579397,7 +583103,7 @@ "support" ], "service-workers/service-worker/resources/fetch-rewrite-worker.js": [ - "e390cdc4fa2324db03069193e2b049dde82fbc2d", + "27390f173dd2ac0720b58184484c667122944529", "support" ], "service-workers/service-worker/resources/fetch-waits-for-activate-worker.js": [ @@ -579500,6 +583206,14 @@ "7ef9421050590733bab9b7c1d0d1b8695b5cb920", "support" ], + "service-workers/service-worker/resources/local-url-inherit-controller-frame.html": [ + "12822899ad84cef80d4f67cb33475a93ca1d56ed", + "support" + ], + "service-workers/service-worker/resources/local-url-inherit-controller-worker.js": [ + "7a74ae709c072750cf0639f78bf9a0ac4f16f50b", + "support" + ], "service-workers/service-worker/resources/malformed-worker.py": [ "a9f19c8f8f6908c4a4732bbd0f6b2f3d19401909", "support" @@ -579937,7 +583651,7 @@ "testharness" ], "service-workers/service-worker/unregister-then-register-new-script.https.html": [ - "43964791edbb2b5cd3b3ed27b600e78412902240", + "ee8d7cd4e47cdb9bcf2b39c911593bc671df914d", "testharness" ], "service-workers/service-worker/unregister-then-register.https.html": [ @@ -579985,7 +583699,7 @@ "testharness" ], "service-workers/service-worker/worker-interception.https.html": [ - "2c5e8cb2b7be6d394aaa1400158d3f14895909f3", + "41f7e5e8da2c305370fddad83518cd0fa57547eb", "testharness" ], "service-workers/specgen.json": [ @@ -580208,6 +583922,10 @@ "857cfd26d985a763ac16dac4b86b1223e6792388", "testharness" ], + "shadow-dom/DocumentOrShadowRoot-prototype-elementFromPoint.html": [ + "e33e48a3eb754e961f07b7850caff67eee38fe69", + "testharness" + ], "shadow-dom/Element-interface-attachShadow.html": [ "e5b4dedaf8f78a6ce771af4509da8acb3aca3441", "testharness" @@ -580253,7 +583971,7 @@ "testharness" ], "shadow-dom/event-composed-path-with-related-target.html": [ - "6a5cbb21645faf8f18ed4b14799a6d01b326f998", + "a4c58227f937a943b3845ed3f672419b62a8caad", "testharness" ], "shadow-dom/event-composed-path.html": [ @@ -580360,10 +584078,6 @@ "4b18b29129666d399abcf949f2e977cbad5a5eeb", "testharness" ], - "shadow-dom/untriaged/elements-and-dom-objects/extensions-to-event-interface/event-path-001.html": [ - "32840cb9d6e7809d31113d8ec4b6acd929cb5b58", - "testharness" - ], "shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/activeElement-confirm-return-null.html": [ "1b42c7c55978b8f6c2afc39e9ede4e9caee22c2c", "testharness" @@ -582013,7 +585727,7 @@ "support" ], "svg/OWNERS": [ - "09ddeebeb4f8ad8622d76143f276d90a1d9aebdc", + "553fcb48a960e9d5f1fe84fb19228366b33864de", "support" ], "svg/README.md": [ @@ -584484,6 +588198,14 @@ "08237002915323f41dd5590ce4226f95ae79f285", "testharness" ], + "svg/types/scripted/SVGAnimatedAngle.html": [ + "a3d0e532c846efdbcf0f51967b7c9531ed19768c", + "testharness" + ], + "svg/types/scripted/SVGAnimatedBoolean.html": [ + "1d9ed6c9b089bbd43c5dae5f34fa8faaafa9a8e5", + "testharness" + ], "svg/types/scripted/SVGAnimatedEnumeration-SVGClipPathElement.html": [ "0f81d16badaade09929ca0b35faf89cc420ef199", "testharness" @@ -584552,6 +588274,34 @@ "b2c5c52669b802412b085529a2babf0ec2ec3ee1", "testharness" ], + "svg/types/scripted/SVGAnimatedInteger.html": [ + "c4a838233710207e7eb5631a242a9f2f0db83488", + "testharness" + ], + "svg/types/scripted/SVGAnimatedLength.html": [ + "b60dfae30ec8af58d6a4f6b024b8a917e3d1f55c", + "testharness" + ], + "svg/types/scripted/SVGAnimatedLengthList.html": [ + "28b583d0d5e55379fdc69f182505d37d85929509", + "testharness" + ], + "svg/types/scripted/SVGAnimatedNumber.html": [ + "6085f272c222d53838f3c4e9d94dc8260dc846d7", + "testharness" + ], + "svg/types/scripted/SVGAnimatedNumberList.html": [ + "6a2920d16df72b0d890c3dff6c2350c65ba08010", + "testharness" + ], + "svg/types/scripted/SVGAnimatedPreserveAspectRatio.html": [ + "e2667461c918fceecc4aca58ff5713a98df347c0", + "testharness" + ], + "svg/types/scripted/SVGAnimatedRect.html": [ + "dfc7ec677df247b015ef360793c7e5f0c926e45f", + "testharness" + ], "svg/types/scripted/SVGLength-px-with-context.html": [ "a605dba2368aa00a3cd3343739c05cdbbd930205", "testharness" @@ -586461,7 +590211,7 @@ "support" ], "wai-aria/tools/make_tests.pl": [ - "8c51b77876da3ca0a00716caf4934ee9708a4d3a", + "54a8f59aa4bafab1987f6c1c5016fd6ee44e574a", "support" ], "wai-aria/tree_orientation_horizontal-manual.html": [ @@ -586665,7 +590415,7 @@ "support" ], "web-animations/README.md": [ - "6344565e53b2f9e8d6ee7658d1c5c5670e68fc98", + "9dfaf5979c3bf30bf075b3929ac3620954e83497", "support" ], "web-animations/animation-model/animation-types/accumulation-per-property.html": [ @@ -586685,7 +590435,7 @@ "testharness" ], "web-animations/animation-model/animation-types/property-list.js": [ - "7f20ed34cf9c72b53db3206639367eff69f0e226", + "a3a0b0e9232416125e385dcf4df0812a2fce39e2", "support" ], "web-animations/animation-model/animation-types/property-types.js": [ @@ -586777,7 +590527,7 @@ "testharness" ], "web-animations/interfaces/Animation/playbackRate.html": [ - "27d289f603953b3e39322287fb2a55f84dd8dc54", + "a298a65aaeb5a337fe894f0160493693f309c2a1", "testharness" ], "web-animations/interfaces/Animation/ready.html": [ @@ -586793,11 +590543,11 @@ "testharness" ], "web-animations/interfaces/AnimationEffectTiming/direction.html": [ - "11398d5ea40bb4137b4f5d4e6e6238af64caf3c5", + "642207ce454fb816cc47d14fbe29f65d92ddf6ed", "testharness" ], "web-animations/interfaces/AnimationEffectTiming/duration.html": [ - "315810a1e73f9b4ef2cffea868fb766af5ee5c93", + "14abe09cb19080585a315115e387b85784c7d862", "testharness" ], "web-animations/interfaces/AnimationEffectTiming/easing.html": [ @@ -586805,7 +590555,7 @@ "testharness" ], "web-animations/interfaces/AnimationEffectTiming/endDelay.html": [ - "b36d9c8a4e4082e6a75ac5d8f336cf474cd75aab", + "a8609f22672b092178c2391d7ba7ef804112bef4", "testharness" ], "web-animations/interfaces/AnimationEffectTiming/fill.html": [ @@ -586821,11 +590571,11 @@ "testharness" ], "web-animations/interfaces/AnimationEffectTiming/iterationStart.html": [ - "734743adeec628da907ea2f6cc4ae3be3aab7329", + "393b37098ab470e75b1254b53875901e705d8d1b", "testharness" ], "web-animations/interfaces/AnimationEffectTiming/iterations.html": [ - "c8705eb209d8a4912b5d3fd94a05c763b7707eca", + "1e8bb46b5a1eef496edda32b16c856baa16e9b30", "testharness" ], "web-animations/interfaces/AnimationPlaybackEvent/constructor.html": [ @@ -586853,11 +590603,11 @@ "testharness" ], "web-animations/interfaces/KeyframeEffect/composite.html": [ - "7dd18327d8da81914adaf443086891ba3646d882", + "12fc2e8e7bcfb1eab6e162b68731ff6fcb767438", "testharness" ], "web-animations/interfaces/KeyframeEffect/constructor.html": [ - "4a80ea073da0a9c62dcb9587676445a2fba234e1", + "2f6449cbf2b47ae457efb23fb52b8fd1709837ac", "testharness" ], "web-animations/interfaces/KeyframeEffect/copy-constructor.html": [ @@ -586873,7 +590623,7 @@ "testharness" ], "web-animations/interfaces/KeyframeEffect/processing-a-keyframes-argument-001.html": [ - "165b651cea12ab9e0825f4335e7f697ce1fc6247", + "f54c7c0da5728f88f37a067761af7ad815fea005", "testharness" ], "web-animations/interfaces/KeyframeEffect/processing-a-keyframes-argument-002.html": [ @@ -586897,7 +590647,7 @@ "support" ], "web-animations/resources/keyframe-tests.js": [ - "52ffc50c4ebf0326db8f4e1d0cc1234f6c860dc2", + "b31029042fdfa77ba8bf0e9370f63a423fbe0da9", "support" ], "web-animations/resources/keyframe-utils.js": [ @@ -586909,11 +590659,11 @@ "support" ], "web-animations/testcommon.js": [ - "94130b39fda8e95ca495d297f9d47eefa6430a04", + "de3f89d5ed07d00d453746df5d13387d15f05016", "support" ], "web-animations/timing-model/animation-effects/active-time.html": [ - "68ca985984ed6f868cebb539dfde6d7ddba6c824", + "f05ff3594dde7248c84db42f8a80a6d0136b5f54", "testharness" ], "web-animations/timing-model/animation-effects/current-iteration.html": [ @@ -586937,7 +590687,7 @@ "testharness" ], "web-animations/timing-model/animations/current-time.html": [ - "390e2ba8d6de9bfea5f26cd2e7a42ccdf73f1a35", + "52d23e752878c821754b2c2b752e7393882609e2", "testharness" ], "web-animations/timing-model/animations/finishing-an-animation.html": [ @@ -586953,7 +590703,7 @@ "testharness" ], "web-animations/timing-model/animations/playing-an-animation.html": [ - "6ee1b850154ce22fffafa686fc2fdfef9dded38b", + "1ae05a904e5b4fbcf1d904f02825f836da7b4c18", "testharness" ], "web-animations/timing-model/animations/reversing-an-animation.html": [ @@ -586961,7 +590711,7 @@ "testharness" ], "web-animations/timing-model/animations/set-the-animation-start-time.html": [ - "10fea7d0b0dbe046d72b4048607816c9ebe37f7f", + "fa26feebcde00a5b0b63f8f3587acc313a58f26a", "testharness" ], "web-animations/timing-model/animations/set-the-target-effect-of-an-animation.html": [ @@ -586969,7 +590719,7 @@ "testharness" ], "web-animations/timing-model/animations/set-the-timeline-of-an-animation.html": [ - "ef8ce243226296718453e10d89b4cfd68b2d765e", + "bd33cb8638aa373b17cda20906af5aea2f5a7503", "testharness" ], "web-animations/timing-model/animations/updating-the-finished-state.html": [ @@ -587393,11 +591143,23 @@ "testharness" ], "webauthn/OWNERS": [ - "b0d65c7428735c824eba977b053babdc4be5cdcf", + "368ab4153a7f6843ce65ce924a3b4af92f3488ee", "support" ], + "webauthn/createcredential-badargs-rp.https.html": [ + "941a9bda02e22b7d54855e3a4714a49d8392fa9d", + "testharness" + ], + "webauthn/createcredential-passing.https.html": [ + "32a6ac38f91ec6b887e9e57519eb1603b4abcdbb", + "testharness" + ], + "webauthn/getcredential-passing.https.html": [ + "6272128ea3af65ecb4fc40055b062a678bfbb2fd", + "testharness" + ], "webauthn/helpers.js": [ - "bc38559e447710f701bc5392b0d02704ae97e970", + "e6224e8e2be8657e2e312f4197cbe0225c819cea", "support" ], "webauthn/interfaces.https.html": [ @@ -587405,23 +591167,19 @@ "testharness" ], "webauthn/interfaces.idl": [ - "78cdd63fc1b0e3eff699976b67b72d46cf108ed2", + "77076f0828383c0f48f36131a81b25186622b3a3", "support" ], - "webauthn/makecredential-badargs-accountinformation.https.html": [ - "7f81446a152ab31223b79e3089eb29505a8b603d", + "webauthn/securecontext.http.html": [ + "afc1492723d140e34027a3bdbf0d1e09843ef5d6", "testharness" ], - "webauthn/makecredential-badargs-attestationchallenge.https.html": [ - "26fbc55b0c313be854ddd59469baf6dcdd5d21c6", - "testharness" - ], - "webauthn/makecredential-badargs-cryptoparameters.https.html": [ - "9e2cbb2a667cf57f979c3e67516fb63fedd18d46", + "webauthn/securecontext.https.html": [ + "7f7a7aba32b9e049c618203121fae0884936643a", "testharness" ], "webdriver/OWNERS": [ - "020bcd036daed8eb8928c2924ea1d04050cf1939", + "752d7099018be8b67e4ca16628bbecfa08da8e82", "support" ], "webdriver/README.md": [ @@ -587429,7 +591187,7 @@ "support" ], "webdriver/tests/__init__.py": [ - "da39a3ee5e6b4b0d3255bfef95601890afd80709", + "b2ebe4b632b1a75e7334b97c3df7075f494dd5c6", "support" ], "webdriver/tests/actions/__init__.py": [ @@ -587453,11 +591211,11 @@ "wdspec" ], "webdriver/tests/actions/mouse.py": [ - "0af689cee458ed260b2b9cc6f3231c314a3a6638", + "708373af0d50f2a0a9776743848482c939f90ec8", "wdspec" ], "webdriver/tests/actions/mouse_dblclick.py": [ - "61bab159bf1ccc7d44e4034a3e67d60b13fc1607", + "154d595a3d4466a44c5217c54bb3c717d9a2b9ec", "wdspec" ], "webdriver/tests/actions/sequence.py": [ @@ -587477,7 +591235,7 @@ "support" ], "webdriver/tests/actions/support/mouse.py": [ - "0a6fca5e3fe20db114dbee1dd9d290ec343f6f9c", + "208a1c4fbc0d5c542d17de7f6474d477ce1feb45", "support" ], "webdriver/tests/actions/support/refine.py": [ @@ -587505,15 +591263,15 @@ "wdspec" ], "webdriver/tests/cookies/add_cookie.py": [ - "c58e50480aa3189bd4f1c52050cff6fcfcdf8d8b", + "27b567989053e411e409b08a01df38a867a020f4", "wdspec" ], "webdriver/tests/cookies/delete_cookie.py": [ - "451cef1c071f67bc2bc1666a906b4c289b700d22", + "dbb50588ba525f3ec27a7408eaa4c240614696d5", "wdspec" ], "webdriver/tests/cookies/get_named_cookie.py": [ - "12e1f83275fbfe6926380b267689fbfa55d6b93a", + "e6e265f417d17b4c9d349fbe9aa9fe3923dcfea0", "wdspec" ], "webdriver/tests/document_handling/page_source.py": [ @@ -587529,7 +591287,7 @@ "wdspec" ], "webdriver/tests/element_click/select.py": [ - "5ba51b660c7203bba3ada597c2f56fe094358e1f", + "bbce720456bd6bae72ad256b56b7743be85959f3", "wdspec" ], "webdriver/tests/element_click/stale.py": [ @@ -587564,18 +591322,30 @@ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "support" ], + "webdriver/tests/element_send_keys/form_controls.py": [ + "7c4a249f9575a69268b5f2970a5623fc1724e6e1", + "wdspec" + ], "webdriver/tests/element_send_keys/interactability.py": [ - "bd7cd6c009c86fe93c0e132c30fb9674413962d4", + "bd5d26173017dc3cbdc282809028639a7b4a214a", "wdspec" ], "webdriver/tests/element_send_keys/scroll_into_view.py": [ "fb192d5d1d93aa729b07cadcadfa630587bd0b39", "wdspec" ], + "webdriver/tests/execute_async_script/__init__.py": [ + "da39a3ee5e6b4b0d3255bfef95601890afd80709", + "support" + ], "webdriver/tests/execute_async_script/user_prompts.py": [ "e31edd4537f9b7479a348465154381f5b18f938c", "wdspec" ], + "webdriver/tests/execute_script/__init__.py": [ + "da39a3ee5e6b4b0d3255bfef95601890afd80709", + "support" + ], "webdriver/tests/execute_script/cyclic.py": [ "cbebfbd2413ea0b10f547ab66fcc7159898e684a", "wdspec" @@ -587593,7 +591363,7 @@ "wdspec" ], "webdriver/tests/interaction/element_clear.py": [ - "9b598e993e404275f1fe4bdb1967d8e1950e25cb", + "7d0a8199890afb97894c363af7ef342b5ed5cef3", "wdspec" ], "webdriver/tests/interaction/send_keys_content_editable.py": [ @@ -587645,7 +591415,7 @@ "wdspec" ], "webdriver/tests/sessions/new_session/response.py": [ - "973f5deb240dd01f6213252e6d9fc2f462b0e035", + "5eabb99858b9c3051efb351096d7ba8dca8dbfce", "wdspec" ], "webdriver/tests/sessions/new_session/support/__init__.py": [ @@ -587653,7 +591423,7 @@ "support" ], "webdriver/tests/sessions/new_session/support/create.py": [ - "2c79b22324aa0c318522ac3930e314b4f2b32a86", + "4bfb99fd4ba44ab5b4e70e9246cbb200c098ae89", "support" ], "webdriver/tests/sessions/status.py": [ @@ -587669,19 +591439,19 @@ "support" ], "webdriver/tests/state/get_element_attribute.py": [ - "75620b583be6495d9b7b5d65c57cbda217cd2e01", + "1fcd451313d40a0b0a84ced63596d032ffc97f2a", "wdspec" ], "webdriver/tests/state/get_element_property.py": [ - "042f184dd54153fe5ff46e886ddcf27ffe4bae6d", + "c0fdf271eebb7dcef16a37a897362ed48eec2df1", "wdspec" ], "webdriver/tests/state/get_element_tag_name.py": [ - "0887f71ceb4b4959989ee9f589707624f46e0ce3", + "ce749e286bd030083fcac15dd75c49caf032f990", "wdspec" ], "webdriver/tests/state/is_element_selected.py": [ - "fb7825918c186d97abe69c4ab06fea1ed62f5387", + "f52c565da22038a41db7344cbcfa2a6a101cc61d", "wdspec" ], "webdriver/tests/state/text/__init__.py": [ @@ -587697,7 +591467,7 @@ "support" ], "webdriver/tests/support/asserts.py": [ - "68bb420a9d85810c9fd8b6eaa569b855dfb83638", + "1b839404daaca1d059cba98377edb91691ef7e82", "support" ], "webdriver/tests/support/fixtures.py": [ @@ -587805,7 +591575,7 @@ "testharness" ], "webmessaging/MessageEvent.html": [ - "7debf220e539b7bdef752e98b280398f17e8603b", + "5146873a9545548655893eda08bbf66ec3287218", "testharness" ], "webmessaging/MessageEvent_onmessage_postMessage_infinite_loop.html": [ @@ -588525,7 +592295,7 @@ "testharness" ], "webrtc/RTCStats-helper.js": [ - "1c18bc44f5694a5a273807c06b7ab8f025dd1530", + "f640565a3a6fd6e7f80e8891638b88a1b9fec949", "support" ], "webrtc/RTCTrackEvent-constructor.html": [ @@ -592797,7 +596567,7 @@ "support" ], "webxr/resources/webxr_util.js": [ - "2e92835bb77e028fffc597767528a4a3548f27e8", + "df6490ff3370ea580015f6b02ef5ec7ef2bb1e2b", "support" ], "webxr/webxr_availability.http.sub.html": [ @@ -595157,7 +598927,7 @@ "testharness" ], "xhr/responsexml-document-properties.htm": [ - "9c3698d77cb49266cfcc33e89a74d7930b5b06cb", + "3171001d9f35e2524a575d02c581c2cbe813f973", "testharness" ], "xhr/responsexml-get-twice.htm": [ @@ -595541,7 +599311,7 @@ "testharness" ], "xhr/xmlhttprequest-sync-default-feature-policy.sub.html": [ - "f83a057d1874e5e633c4529d3fac91249de652b3", + "33c86511fb9047346a9d28546b89b64fe323fde6", "testharness" ], "xhr/xmlhttprequest-sync-not-hang-scriptloader-subframe.html": [ diff --git a/tests/wpt/metadata/css/CSS2/floats-clear/float-applies-to-008.xht.ini b/tests/wpt/metadata/css/CSS2/floats-clear/float-applies-to-008.xht.ini deleted file mode 100644 index 32431b94c61..00000000000 --- a/tests/wpt/metadata/css/CSS2/floats-clear/float-applies-to-008.xht.ini +++ /dev/null @@ -1,4 +0,0 @@ -[float-applies-to-008.xht] - type: reftest - expected: - if os == "mac": FAIL diff --git a/tests/wpt/metadata/css/CSS2/normal-flow/width-inherit-001.xht.ini b/tests/wpt/metadata/css/CSS2/normal-flow/width-inherit-001.xht.ini deleted file mode 100644 index ddbb1567a5c..00000000000 --- a/tests/wpt/metadata/css/CSS2/normal-flow/width-inherit-001.xht.ini +++ /dev/null @@ -1,3 +0,0 @@ -[width-inherit-001.xht] - type: reftest - expected: FAIL diff --git a/tests/wpt/metadata/css/CSS2/positioning/abspos-027.xht.ini b/tests/wpt/metadata/css/CSS2/positioning/abspos-027.xht.ini deleted file mode 100644 index b2c9231fa0a..00000000000 --- a/tests/wpt/metadata/css/CSS2/positioning/abspos-027.xht.ini +++ /dev/null @@ -1,3 +0,0 @@ -[abspos-027.xht] - type: reftest - expected: FAIL diff --git a/tests/wpt/metadata/css/CSS2/values/color-000.xht.ini b/tests/wpt/metadata/css/CSS2/values/color-000.xht.ini deleted file mode 100644 index 844d61938ae..00000000000 --- a/tests/wpt/metadata/css/CSS2/values/color-000.xht.ini +++ /dev/null @@ -1,3 +0,0 @@ -[color-000.xht] - type: reftest - expected: FAIL diff --git a/tests/wpt/metadata/css/css-color/rgb-002.html.ini b/tests/wpt/metadata/css/css-color/rgb-002.html.ini deleted file mode 100644 index d5479c6f79e..00000000000 --- a/tests/wpt/metadata/css/css-color/rgb-002.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[rgb-002.html] - expected: FAIL diff --git a/tests/wpt/metadata/css/css-color/rgb-004.html.ini b/tests/wpt/metadata/css/css-color/rgb-004.html.ini deleted file mode 100644 index 5f96c404862..00000000000 --- a/tests/wpt/metadata/css/css-color/rgb-004.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[rgb-004.html] - expected: FAIL diff --git a/tests/wpt/metadata/css/css-color/rgb-006.html.ini b/tests/wpt/metadata/css/css-color/rgb-006.html.ini deleted file mode 100644 index 026a2381950..00000000000 --- a/tests/wpt/metadata/css/css-color/rgb-006.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[rgb-006.html] - expected: FAIL diff --git a/tests/wpt/metadata/css/css-color/rgb-008.html.ini b/tests/wpt/metadata/css/css-color/rgb-008.html.ini deleted file mode 100644 index a7edbe809fa..00000000000 --- a/tests/wpt/metadata/css/css-color/rgb-008.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[rgb-008.html] - expected: FAIL diff --git a/tests/wpt/metadata/css/css-color/rgba-002.html.ini b/tests/wpt/metadata/css/css-color/rgba-002.html.ini deleted file mode 100644 index fa615e84672..00000000000 --- a/tests/wpt/metadata/css/css-color/rgba-002.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[rgba-002.html] - expected: FAIL diff --git a/tests/wpt/metadata/css/css-color/rgba-004.html.ini b/tests/wpt/metadata/css/css-color/rgba-004.html.ini deleted file mode 100644 index 119e9824653..00000000000 --- a/tests/wpt/metadata/css/css-color/rgba-004.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[rgba-004.html] - expected: FAIL diff --git a/tests/wpt/metadata/css/css-color/rgba-006.html.ini b/tests/wpt/metadata/css/css-color/rgba-006.html.ini deleted file mode 100644 index 26285fda7db..00000000000 --- a/tests/wpt/metadata/css/css-color/rgba-006.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[rgba-006.html] - expected: FAIL diff --git a/tests/wpt/metadata/css/css-color/rgba-008.html.ini b/tests/wpt/metadata/css/css-color/rgba-008.html.ini deleted file mode 100644 index e0cdff906ad..00000000000 --- a/tests/wpt/metadata/css/css-color/rgba-008.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[rgba-008.html] - expected: FAIL diff --git a/tests/wpt/metadata/css/CSS2/floats-clear/floats-028.xht.ini b/tests/wpt/metadata/css/css-text/astral-bidi/adlam-anti-ref.html.ini index a878510023c..9b2cdade18e 100644 --- a/tests/wpt/metadata/css/CSS2/floats-clear/floats-028.xht.ini +++ b/tests/wpt/metadata/css/css-text/astral-bidi/adlam-anti-ref.html.ini @@ -1,4 +1,3 @@ -[floats-028.xht] - type: reftest +[adlam-anti-ref.html] expected: if os == "mac": FAIL diff --git a/tests/wpt/metadata/css/css-text/astral-bidi/cypriot-anti-ref.html.ini b/tests/wpt/metadata/css/css-text/astral-bidi/cypriot-anti-ref.html.ini new file mode 100644 index 00000000000..c9a7054423d --- /dev/null +++ b/tests/wpt/metadata/css/css-text/astral-bidi/cypriot-anti-ref.html.ini @@ -0,0 +1,3 @@ +[cypriot-anti-ref.html] + expected: + if os == "mac": FAIL diff --git a/tests/wpt/metadata/css/css-transforms/parsing/perspective-origin-parsing-invalid.html.ini b/tests/wpt/metadata/css/css-transforms/parsing/perspective-origin-parsing-invalid.html.ini new file mode 100644 index 00000000000..0dd0ca7f244 --- /dev/null +++ b/tests/wpt/metadata/css/css-transforms/parsing/perspective-origin-parsing-invalid.html.ini @@ -0,0 +1,25 @@ +[perspective-origin-parsing-invalid.html] + [e.style['perspective-origin'\] = "center left 1px" should not set the property value] + expected: FAIL + + [e.style['perspective-origin'\] = "center top 2px" should not set the property value] + expected: FAIL + + [e.style['perspective-origin'\] = "right 3% center" should not set the property value] + expected: FAIL + + [e.style['perspective-origin'\] = "left 4px top" should not set the property value] + expected: FAIL + + [e.style['perspective-origin'\] = "right top 5px" should not set the property value] + expected: FAIL + + [e.style['perspective-origin'\] = "bottom 6% center" should not set the property value] + expected: FAIL + + [e.style['perspective-origin'\] = "bottom 7% left" should not set the property value] + expected: FAIL + + [e.style['perspective-origin'\] = "bottom right 8%" should not set the property value] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-transforms/parsing/translate-parsing-valid.html.ini b/tests/wpt/metadata/css/css-transforms/parsing/translate-parsing-valid.html.ini index 3d698e879cd..c0a7ed07667 100644 --- a/tests/wpt/metadata/css/css-transforms/parsing/translate-parsing-valid.html.ini +++ b/tests/wpt/metadata/css/css-transforms/parsing/translate-parsing-valid.html.ini @@ -5,3 +5,9 @@ [Serialization should round-trip after setting e.style['translate'\] = "1px 2px 0"] expected: FAIL + [e.style['translate'\] = "0" should set the property value] + expected: FAIL + + [e.style['translate'\] = "1px 2px 0" should set the property value] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-transforms/transform-transformed-caption-contains-fixed-position.html.ini b/tests/wpt/metadata/css/css-transforms/transform-transformed-caption-contains-fixed-position.html.ini new file mode 100644 index 00000000000..c3b7ac8e5de --- /dev/null +++ b/tests/wpt/metadata/css/css-transforms/transform-transformed-caption-contains-fixed-position.html.ini @@ -0,0 +1,2 @@ +[transform-transformed-caption-contains-fixed-position.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-transforms/transform-transformed-tbody-contains-fixed-position.html.ini b/tests/wpt/metadata/css/css-transforms/transform-transformed-tbody-contains-fixed-position.html.ini new file mode 100644 index 00000000000..9a5907e66b6 --- /dev/null +++ b/tests/wpt/metadata/css/css-transforms/transform-transformed-tbody-contains-fixed-position.html.ini @@ -0,0 +1,2 @@ +[transform-transformed-tbody-contains-fixed-position.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-transforms/transform-transformed-td-contains-fixed-position.html.ini b/tests/wpt/metadata/css/css-transforms/transform-transformed-td-contains-fixed-position.html.ini new file mode 100644 index 00000000000..9fce6a3d73d --- /dev/null +++ b/tests/wpt/metadata/css/css-transforms/transform-transformed-td-contains-fixed-position.html.ini @@ -0,0 +1,2 @@ +[transform-transformed-td-contains-fixed-position.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-transforms/transform-transformed-tfoot-contains-fixed-position.html.ini b/tests/wpt/metadata/css/css-transforms/transform-transformed-tfoot-contains-fixed-position.html.ini new file mode 100644 index 00000000000..7d397b381e0 --- /dev/null +++ b/tests/wpt/metadata/css/css-transforms/transform-transformed-tfoot-contains-fixed-position.html.ini @@ -0,0 +1,2 @@ +[transform-transformed-tfoot-contains-fixed-position.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-transforms/transform-transformed-th-contains-fixed-position.html.ini b/tests/wpt/metadata/css/css-transforms/transform-transformed-th-contains-fixed-position.html.ini new file mode 100644 index 00000000000..dd64b75e741 --- /dev/null +++ b/tests/wpt/metadata/css/css-transforms/transform-transformed-th-contains-fixed-position.html.ini @@ -0,0 +1,2 @@ +[transform-transformed-th-contains-fixed-position.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-transforms/transform-transformed-thead-contains-fixed-position.html.ini b/tests/wpt/metadata/css/css-transforms/transform-transformed-thead-contains-fixed-position.html.ini new file mode 100644 index 00000000000..af984ec334d --- /dev/null +++ b/tests/wpt/metadata/css/css-transforms/transform-transformed-thead-contains-fixed-position.html.ini @@ -0,0 +1,2 @@ +[transform-transformed-thead-contains-fixed-position.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-transforms/transform-transformed-tr-contains-fixed-position.html.ini b/tests/wpt/metadata/css/css-transforms/transform-transformed-tr-contains-fixed-position.html.ini new file mode 100644 index 00000000000..5ecc5feccaf --- /dev/null +++ b/tests/wpt/metadata/css/css-transforms/transform-transformed-tr-contains-fixed-position.html.ini @@ -0,0 +1,2 @@ +[transform-transformed-tr-contains-fixed-position.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-ui/text-overflow-024.html.ini b/tests/wpt/metadata/css/css-ui/text-overflow-024.html.ini new file mode 100644 index 00000000000..3efcee3ee66 --- /dev/null +++ b/tests/wpt/metadata/css/css-ui/text-overflow-024.html.ini @@ -0,0 +1,2 @@ +[text-overflow-024.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-ui/text-overflow-025.html.ini b/tests/wpt/metadata/css/css-ui/text-overflow-025.html.ini new file mode 100644 index 00000000000..a7d356084b2 --- /dev/null +++ b/tests/wpt/metadata/css/css-ui/text-overflow-025.html.ini @@ -0,0 +1,2 @@ +[text-overflow-025.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-ui/text-overflow-026.html.ini b/tests/wpt/metadata/css/css-ui/text-overflow-026.html.ini new file mode 100644 index 00000000000..eed6b77be27 --- /dev/null +++ b/tests/wpt/metadata/css/css-ui/text-overflow-026.html.ini @@ -0,0 +1,2 @@ +[text-overflow-026.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-values/calc-in-font-feature-settings.html.ini b/tests/wpt/metadata/css/css-values/calc-in-font-feature-settings.html.ini new file mode 100644 index 00000000000..fdfd80f1494 --- /dev/null +++ b/tests/wpt/metadata/css/css-values/calc-in-font-feature-settings.html.ini @@ -0,0 +1,4 @@ +[calc-in-font-feature-settings.html] + [calc() in font-feature-settings] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-values/vh_not_refreshing_on_chrome.html.ini b/tests/wpt/metadata/css/css-values/vh_not_refreshing_on_chrome.html.ini new file mode 100644 index 00000000000..26435e28b09 --- /dev/null +++ b/tests/wpt/metadata/css/css-values/vh_not_refreshing_on_chrome.html.ini @@ -0,0 +1,2 @@ +[vh_not_refreshing_on_chrome.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/cssom-view/scrollIntoView-scrollMargin.html.ini b/tests/wpt/metadata/css/cssom-view/scrollIntoView-scrollMargin.html.ini new file mode 100644 index 00000000000..c07411bd5a1 --- /dev/null +++ b/tests/wpt/metadata/css/cssom-view/scrollIntoView-scrollMargin.html.ini @@ -0,0 +1,10 @@ +[scrollIntoView-scrollMargin.html] + [scrollIntoView({block: "center", inline: "center"})] + expected: FAIL + + [scrollIntoView({block: "start", inline: "start"})] + expected: FAIL + + [scrollIntoView({block: "end", inline: "end"})] + expected: FAIL + diff --git a/tests/wpt/metadata/css/cssom-view/scrollIntoView-scrollPadding.html.ini b/tests/wpt/metadata/css/cssom-view/scrollIntoView-scrollPadding.html.ini new file mode 100644 index 00000000000..2d9bda237b9 --- /dev/null +++ b/tests/wpt/metadata/css/cssom-view/scrollIntoView-scrollPadding.html.ini @@ -0,0 +1,10 @@ +[scrollIntoView-scrollPadding.html] + [scrollIntoView({block: "center", inline: "center"})] + expected: FAIL + + [scrollIntoView({block: "start", inline: "start"})] + expected: FAIL + + [scrollIntoView({block: "end", inline: "end"})] + expected: FAIL + diff --git a/tests/wpt/metadata/css/cssom/MediaList.html.ini b/tests/wpt/metadata/css/cssom/MediaList.html.ini index a761ec382bf..f3ee37b050a 100644 --- a/tests/wpt/metadata/css/cssom/MediaList.html.ini +++ b/tests/wpt/metadata/css/cssom/MediaList.html.ini @@ -3,3 +3,6 @@ [MediaList] expected: FAIL + [CSSOM - MediaList interface] + expected: FAIL + diff --git a/tests/wpt/metadata/css/mediaqueries/test_media_queries.html.ini b/tests/wpt/metadata/css/mediaqueries/test_media_queries.html.ini index 63f757ce648..92789f0a78c 100644 --- a/tests/wpt/metadata/css/mediaqueries/test_media_queries.html.ini +++ b/tests/wpt/metadata/css/mediaqueries/test_media_queries.html.ini @@ -566,18 +566,9 @@ [subtest_335] expected: FAIL - [subtest_338] - expected: FAIL - [subtest_340] expected: FAIL - [subtest_346] - expected: FAIL - - [subtest_350] - expected: FAIL - [subtest_80] expected: FAIL @@ -764,24 +755,39 @@ [subtest_337] expected: FAIL - [subtest_349] + [subtest_359] expected: FAIL - [subtest_353] + [subtest_360] expected: FAIL - [subtest_354] + [subtest_334] expected: FAIL - [subtest_357] + [subtest_339] expected: FAIL - [subtest_358] + [subtest_342] expected: FAIL - [subtest_359] + [subtest_348] expected: FAIL - [subtest_360] + [subtest_351] + expected: FAIL + + [subtest_352] + expected: FAIL + + [subtest_355] + expected: FAIL + + [subtest_356] + expected: FAIL + + [subtest_361] + expected: FAIL + + [subtest_362] expected: FAIL diff --git a/tests/wpt/metadata/css/selectors/invalidation/sheet-going-away-001.html.ini b/tests/wpt/metadata/css/selectors/invalidation/sheet-going-away-001.html.ini new file mode 100644 index 00000000000..76b222d254c --- /dev/null +++ b/tests/wpt/metadata/css/selectors/invalidation/sheet-going-away-001.html.ini @@ -0,0 +1,4 @@ +[sheet-going-away-001.html] + [Style should be recomputed correctly when the stylesheet it depends on goes away] + expected: FAIL + diff --git a/tests/wpt/metadata/custom-elements/Document-createElement-svg.svg.ini b/tests/wpt/metadata/custom-elements/Document-createElement-svg.svg.ini new file mode 100644 index 00000000000..9e4a4f96426 --- /dev/null +++ b/tests/wpt/metadata/custom-elements/Document-createElement-svg.svg.ini @@ -0,0 +1,2 @@ +[Document-createElement-svg.svg] + expected: TIMEOUT diff --git a/tests/wpt/metadata/custom-elements/builtin-coverage.html.ini b/tests/wpt/metadata/custom-elements/builtin-coverage.html.ini new file mode 100644 index 00000000000..3ce70c1cfcd --- /dev/null +++ b/tests/wpt/metadata/custom-elements/builtin-coverage.html.ini @@ -0,0 +1,4 @@ +[builtin-coverage.html] + [Untitled] + expected: FAIL + diff --git a/tests/wpt/metadata/custom-elements/parser/parser-sets-attributes-and-children.html.ini b/tests/wpt/metadata/custom-elements/parser/parser-sets-attributes-and-children.html.ini new file mode 100644 index 00000000000..598fd107344 --- /dev/null +++ b/tests/wpt/metadata/custom-elements/parser/parser-sets-attributes-and-children.html.ini @@ -0,0 +1,4 @@ +[parser-sets-attributes-and-children.html] + expected: + if os == "mac": CRASH + if os == "linux": TIMEOUT diff --git a/tests/wpt/metadata/fetch/api/response/response-init-002.html.ini b/tests/wpt/metadata/fetch/api/response/response-init-002.html.ini index 5d3edd80268..d5d77c14514 100644 --- a/tests/wpt/metadata/fetch/api/response/response-init-002.html.ini +++ b/tests/wpt/metadata/fetch/api/response/response-init-002.html.ini @@ -6,3 +6,6 @@ [Testing empty Response Content-Type header] expected: FAIL + [Testing null Response body] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/data-urls/base64.any.js.ini b/tests/wpt/metadata/fetch/data-urls/base64.any.js.ini new file mode 100644 index 00000000000..2aa2f25c9a1 --- /dev/null +++ b/tests/wpt/metadata/fetch/data-urls/base64.any.js.ini @@ -0,0 +1,153 @@ +[base64.any.worker.html] + [data: URL base64 handling: ""] + expected: FAIL + + [data: URL base64 handling: "abcd"] + expected: FAIL + + [data: URL base64 handling: " abcd"] + expected: FAIL + + [data: URL base64 handling: "abcd "] + expected: FAIL + + [data: URL base64 handling: "ab"] + expected: FAIL + + [data: URL base64 handling: "abc"] + expected: FAIL + + [data: URL base64 handling: "ab="] + expected: FAIL + + [data: URL base64 handling: "ab=="] + expected: FAIL + + [data: URL base64 handling: "abc="] + expected: FAIL + + [data: URL base64 handling: "ab\\tcd"] + expected: FAIL + + [data: URL base64 handling: "ab\\ncd"] + expected: FAIL + + [data: URL base64 handling: "ab\\fcd"] + expected: FAIL + + [data: URL base64 handling: "ab\\rcd"] + expected: FAIL + + [data: URL base64 handling: "ab cd"] + expected: FAIL + + [data: URL base64 handling: "ab\\t\\n\\f\\r cd"] + expected: FAIL + + [data: URL base64 handling: " \\t\\n\\f\\r ab\\t\\n\\f\\r cd\\t\\n\\f\\r "] + expected: FAIL + + [data: URL base64 handling: "ab\\t\\n\\f\\r =\\t\\n\\f\\r =\\t\\n\\f\\r "] + expected: FAIL + + [data: URL base64 handling: "/A"] + expected: FAIL + + [data: URL base64 handling: "//A"] + expected: FAIL + + [data: URL base64 handling: "///A"] + expected: FAIL + + [data: URL base64 handling: "A/"] + expected: FAIL + + [data: URL base64 handling: "AA/"] + expected: FAIL + + [data: URL base64 handling: "AAA/"] + expected: FAIL + + [data: URL base64 handling: "YQ"] + expected: FAIL + + [data: URL base64 handling: "YR"] + expected: FAIL + + +[base64.any.html] + [data: URL base64 handling: ""] + expected: FAIL + + [data: URL base64 handling: "abcd"] + expected: FAIL + + [data: URL base64 handling: " abcd"] + expected: FAIL + + [data: URL base64 handling: "abcd "] + expected: FAIL + + [data: URL base64 handling: "ab"] + expected: FAIL + + [data: URL base64 handling: "abc"] + expected: FAIL + + [data: URL base64 handling: "ab="] + expected: FAIL + + [data: URL base64 handling: "ab=="] + expected: FAIL + + [data: URL base64 handling: "abc="] + expected: FAIL + + [data: URL base64 handling: "ab\\tcd"] + expected: FAIL + + [data: URL base64 handling: "ab\\ncd"] + expected: FAIL + + [data: URL base64 handling: "ab\\fcd"] + expected: FAIL + + [data: URL base64 handling: "ab\\rcd"] + expected: FAIL + + [data: URL base64 handling: "ab cd"] + expected: FAIL + + [data: URL base64 handling: "ab\\t\\n\\f\\r cd"] + expected: FAIL + + [data: URL base64 handling: " \\t\\n\\f\\r ab\\t\\n\\f\\r cd\\t\\n\\f\\r "] + expected: FAIL + + [data: URL base64 handling: "ab\\t\\n\\f\\r =\\t\\n\\f\\r =\\t\\n\\f\\r "] + expected: FAIL + + [data: URL base64 handling: "/A"] + expected: FAIL + + [data: URL base64 handling: "//A"] + expected: FAIL + + [data: URL base64 handling: "///A"] + expected: FAIL + + [data: URL base64 handling: "A/"] + expected: FAIL + + [data: URL base64 handling: "AA/"] + expected: FAIL + + [data: URL base64 handling: "AAA/"] + expected: FAIL + + [data: URL base64 handling: "YQ"] + expected: FAIL + + [data: URL base64 handling: "YR"] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/data-urls/processing.any.js.ini b/tests/wpt/metadata/fetch/data-urls/processing.any.js.ini new file mode 100644 index 00000000000..fce394e5e13 --- /dev/null +++ b/tests/wpt/metadata/fetch/data-urls/processing.any.js.ini @@ -0,0 +1,381 @@ +[processing.any.worker.html] + ["data://test/,X"] + expected: FAIL + + ["data:,X"] + expected: FAIL + + ["data:,"] + expected: FAIL + + ["data:,X#X"] + expected: FAIL + + ["data:,%FF"] + expected: FAIL + + ["data:text/plain,X"] + expected: FAIL + + ["data:text/plain ,X"] + expected: FAIL + + ["data:text/plain%20,X"] + expected: FAIL + + ["data:text/plain\\f,X"] + expected: FAIL + + ["data:text/plain%0C,X"] + expected: FAIL + + ["data:text/plain;,X"] + expected: FAIL + + ["data:;x=x;charset=x,X"] + expected: FAIL + + ["data:;x=x,X"] + expected: FAIL + + ["data:text/plain;charset=windows-1252,%C2%B1"] + expected: FAIL + + ["data:text/plain;Charset=UTF-8,%C2%B1"] + expected: FAIL + + ["data:image/gif,%C2%B1"] + expected: FAIL + + ["data:IMAGE/gif,%C2%B1"] + expected: FAIL + + ["data:IMAGE/gif;hi=x,%C2%B1"] + expected: FAIL + + ["data:IMAGE/gif;CHARSET=x,%C2%B1"] + expected: FAIL + + ["data: ,%FF"] + expected: FAIL + + ["data:%20,%FF"] + expected: FAIL + + ["data:\\f,%FF"] + expected: FAIL + + ["data:%1F,%FF"] + expected: FAIL + + ["data:\\0,%FF"] + expected: FAIL + + ["data:%00,%FF"] + expected: FAIL + + ["data:text/html ,X"] + expected: FAIL + + ["data:text / html,X"] + expected: FAIL + + ["data:†,X"] + expected: FAIL + + ["data:†/†,X"] + expected: FAIL + + ["data:X,X"] + expected: FAIL + + ["data:image/png,X X"] + expected: FAIL + + ["data:application/xml,X X"] + expected: FAIL + + ["data:unknown/unknown,X X"] + expected: FAIL + + ["data:text/plain;a=\\",\\",X"] + expected: FAIL + + ["data:text/plain;a=%2C,X"] + expected: FAIL + + ["data:;base64;base64,WA"] + expected: FAIL + + ["data:x/x;base64;base64,WA"] + expected: FAIL + + ["data:x/x;base64;charset=x,WA"] + expected: FAIL + + ["data:x/x;base64;charset=x;base64,WA"] + expected: FAIL + + ["data:x/x;base64;base64x,WA"] + expected: FAIL + + ["data:;base64,W%20A"] + expected: FAIL + + ["data:;base64,W%0CA"] + expected: FAIL + + ["data:x;base64x,WA"] + expected: FAIL + + ["data:x;base64;x,WA"] + expected: FAIL + + ["data:x;base64=x,WA"] + expected: FAIL + + ["data:; base64,WA"] + expected: FAIL + + ["data:; base64,WA"] + expected: FAIL + + ["data: ;charset=x ; base64,WA"] + expected: FAIL + + ["data:;base64;,WA"] + expected: FAIL + + ["data:;base64 ,WA"] + expected: FAIL + + ["data:;base64 ,WA"] + expected: FAIL + + ["data:;base 64,WA"] + expected: FAIL + + ["data:;BASe64,WA"] + expected: FAIL + + ["data:;%62ase64,WA"] + expected: FAIL + + ["data:%3Bbase64,WA"] + expected: FAIL + + ["data:;charset=x,X"] + expected: FAIL + + ["data:; charset=x,X"] + expected: FAIL + + ["data:;charset =x,X"] + expected: FAIL + + ["data:;charset= x,X"] + expected: FAIL + + ["data:;charset=,X"] + expected: FAIL + + ["data:;charset,X"] + expected: FAIL + + ["data:;charset=\\"x\\",X"] + expected: FAIL + + ["data:;CHARSET=\\"X\\",X"] + expected: FAIL + + +[processing.any.html] + ["data://test/,X"] + expected: FAIL + + ["data:,X"] + expected: FAIL + + ["data:,"] + expected: FAIL + + ["data:,X#X"] + expected: FAIL + + ["data:,%FF"] + expected: FAIL + + ["data:text/plain,X"] + expected: FAIL + + ["data:text/plain ,X"] + expected: FAIL + + ["data:text/plain%20,X"] + expected: FAIL + + ["data:text/plain\\f,X"] + expected: FAIL + + ["data:text/plain%0C,X"] + expected: FAIL + + ["data:text/plain;,X"] + expected: FAIL + + ["data:;x=x;charset=x,X"] + expected: FAIL + + ["data:;x=x,X"] + expected: FAIL + + ["data:text/plain;charset=windows-1252,%C2%B1"] + expected: FAIL + + ["data:text/plain;Charset=UTF-8,%C2%B1"] + expected: FAIL + + ["data:image/gif,%C2%B1"] + expected: FAIL + + ["data:IMAGE/gif,%C2%B1"] + expected: FAIL + + ["data:IMAGE/gif;hi=x,%C2%B1"] + expected: FAIL + + ["data:IMAGE/gif;CHARSET=x,%C2%B1"] + expected: FAIL + + ["data: ,%FF"] + expected: FAIL + + ["data:%20,%FF"] + expected: FAIL + + ["data:\\f,%FF"] + expected: FAIL + + ["data:%1F,%FF"] + expected: FAIL + + ["data:\\0,%FF"] + expected: FAIL + + ["data:%00,%FF"] + expected: FAIL + + ["data:text/html ,X"] + expected: FAIL + + ["data:text / html,X"] + expected: FAIL + + ["data:†,X"] + expected: FAIL + + ["data:†/†,X"] + expected: FAIL + + ["data:X,X"] + expected: FAIL + + ["data:image/png,X X"] + expected: FAIL + + ["data:application/xml,X X"] + expected: FAIL + + ["data:unknown/unknown,X X"] + expected: FAIL + + ["data:text/plain;a=\\",\\",X"] + expected: FAIL + + ["data:text/plain;a=%2C,X"] + expected: FAIL + + ["data:;base64;base64,WA"] + expected: FAIL + + ["data:x/x;base64;base64,WA"] + expected: FAIL + + ["data:x/x;base64;charset=x,WA"] + expected: FAIL + + ["data:x/x;base64;charset=x;base64,WA"] + expected: FAIL + + ["data:x/x;base64;base64x,WA"] + expected: FAIL + + ["data:;base64,W%20A"] + expected: FAIL + + ["data:;base64,W%0CA"] + expected: FAIL + + ["data:x;base64x,WA"] + expected: FAIL + + ["data:x;base64;x,WA"] + expected: FAIL + + ["data:x;base64=x,WA"] + expected: FAIL + + ["data:; base64,WA"] + expected: FAIL + + ["data:; base64,WA"] + expected: FAIL + + ["data: ;charset=x ; base64,WA"] + expected: FAIL + + ["data:;base64;,WA"] + expected: FAIL + + ["data:;base64 ,WA"] + expected: FAIL + + ["data:;base64 ,WA"] + expected: FAIL + + ["data:;base 64,WA"] + expected: FAIL + + ["data:;BASe64,WA"] + expected: FAIL + + ["data:;%62ase64,WA"] + expected: FAIL + + ["data:%3Bbase64,WA"] + expected: FAIL + + ["data:;charset=x,X"] + expected: FAIL + + ["data:; charset=x,X"] + expected: FAIL + + ["data:;charset =x,X"] + expected: FAIL + + ["data:;charset= x,X"] + expected: FAIL + + ["data:;charset=,X"] + expected: FAIL + + ["data:;charset,X"] + expected: FAIL + + ["data:;charset=\\"x\\",X"] + expected: FAIL + + ["data:;CHARSET=\\"X\\",X"] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/read-media/pageload-image-in-popup.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/read-media/pageload-image-in-popup.html.ini new file mode 100644 index 00000000000..d936073896a --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/read-media/pageload-image-in-popup.html.ini @@ -0,0 +1,5 @@ +[pageload-image-in-popup.html] + expected: ERROR + [The document for a standalone media file should have one child in the body.] + expected: NOTRUN + diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/scroll-to-fragid/scroll-to-anchor-name.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/scroll-to-fragid/scroll-to-anchor-name.html.ini new file mode 100644 index 00000000000..86882865455 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/scroll-to-fragid/scroll-to-anchor-name.html.ini @@ -0,0 +1,4 @@ +[scroll-to-anchor-name.html] + [Fragment Navigation: scroll to anchor name is lower priority than equal id] + expected: FAIL + diff --git a/tests/wpt/metadata/html/dom/interfaces.html.ini b/tests/wpt/metadata/html/dom/interfaces.html.ini index 10e41464e70..78284b0d68b 100644 --- a/tests/wpt/metadata/html/dom/interfaces.html.ini +++ b/tests/wpt/metadata/html/dom/interfaces.html.ini @@ -13908,3 +13908,6 @@ [HTMLSlotElement interface: calling assignedElements(AssignedNodesOptions) on document.createElement("slot") with too few arguments must throw TypeError] expected: FAIL + [OffscreenCanvas interface: operation getContext(OffscreenRenderingContextId, any)] + expected: FAIL + diff --git a/tests/wpt/metadata/html/dom/usvstring-reflection.html.ini b/tests/wpt/metadata/html/dom/usvstring-reflection.html.ini index 1e3ff756963..69f8f521e20 100644 --- a/tests/wpt/metadata/html/dom/usvstring-reflection.html.ini +++ b/tests/wpt/metadata/html/dom/usvstring-reflection.html.ini @@ -23,3 +23,6 @@ [location.href : unpaired surrogate codepoint should be replaced with U+FFFD] expected: FAIL + [sendBeacon URL: unpaired surrogate codepoint should not make any exceptions.] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/mime-types/canPlayType.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/mime-types/canPlayType.html.ini index 91b6048e419..bcad0d56823 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/mime-types/canPlayType.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/mime-types/canPlayType.html.ini @@ -123,3 +123,6 @@ [video/webm with and without codecs] expected: FAIL + [fictional formats and codecs not supported] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/text-level-semantics/the-a-element/rellist-feature-detection.html.ini b/tests/wpt/metadata/html/semantics/rellist-feature-detection.html.ini index d2762c55d7b..d2762c55d7b 100644 --- a/tests/wpt/metadata/html/semantics/text-level-semantics/the-a-element/rellist-feature-detection.html.ini +++ b/tests/wpt/metadata/html/semantics/rellist-feature-detection.html.ini diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/inline-async-execorder.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/inline-async-execorder.html.ini new file mode 100644 index 00000000000..54dcc064e7e --- /dev/null +++ b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/inline-async-execorder.html.ini @@ -0,0 +1,4 @@ +[inline-async-execorder.html] + [Inline async module script execution order] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/tabular-data/processing-model-1/span-limits.html.ini b/tests/wpt/metadata/html/semantics/tabular-data/processing-model-1/span-limits.html.ini index ec05b7788e6..f477b391508 100644 --- a/tests/wpt/metadata/html/semantics/tabular-data/processing-model-1/span-limits.html.ini +++ b/tests/wpt/metadata/html/semantics/tabular-data/processing-model-1/span-limits.html.ini @@ -1,5 +1,6 @@ [span-limits.html] type: testharness + expected: TIMEOUT [colspan of 1001 must be treated as 1000] expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/text-level-semantics/the-area-element/rellist-feature-detection.html.ini b/tests/wpt/metadata/html/semantics/text-level-semantics/the-area-element/rellist-feature-detection.html.ini deleted file mode 100644 index d2762c55d7b..00000000000 --- a/tests/wpt/metadata/html/semantics/text-level-semantics/the-area-element/rellist-feature-detection.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[rellist-feature-detection.html] - [Make sure that relList based feature detection is working] - expected: FAIL - diff --git a/tests/wpt/metadata/mozilla-sync b/tests/wpt/metadata/mozilla-sync index 5ae6f54c5e9..bac04108893 100644 --- a/tests/wpt/metadata/mozilla-sync +++ b/tests/wpt/metadata/mozilla-sync @@ -1,2 +1,2 @@ -local: 1f6a864ab5372fe4f59b1a4c3db7cf8e7a79b06d -upstream: 08e864fd23048d707cc42bed8538e644d8dec950 +local: c88dc51d03a81e9e405688ccd2baae75d61ffffd +upstream: 9ca21c6c87ccec0ff7fdb0fc896d6e9918f3e331 diff --git a/tests/wpt/metadata/performance-timeline/idlharness.html.ini b/tests/wpt/metadata/performance-timeline/idlharness.html.ini index 66e1aae7c8e..173fc1c6a27 100644 --- a/tests/wpt/metadata/performance-timeline/idlharness.html.ini +++ b/tests/wpt/metadata/performance-timeline/idlharness.html.ini @@ -9,3 +9,6 @@ [PerformanceEntry interface: operation toJSON()] expected: FAIL + [PerformanceObserver interface: operation takeRecords()] + expected: FAIL + diff --git a/tests/wpt/web-platform-tests/2dcontext/imagebitmap/common.js b/tests/wpt/web-platform-tests/2dcontext/imagebitmap/common.sub.js index 4e5b9a88833..d76a42d5a1f 100644 --- a/tests/wpt/web-platform-tests/2dcontext/imagebitmap/common.js +++ b/tests/wpt/web-platform-tests/2dcontext/imagebitmap/common.sub.js @@ -43,14 +43,29 @@ function makeVideo() { }); } -function makeImage() { - return new Promise(resolve => { - var img = new Image(); - img.onload = function() { - resolve(img); - }; - img.src = "/images/pattern.png"; - }); +function makeMakeHTMLImage(src) { + return function() { + return new Promise(resolve => { + var img = new Image(); + img.onload = function() { + resolve(img); + }; + img.src = src; + }); + } +} + +function makeMakeSVGImage(src) { + return function() { + return new Promise((resolve, reject) => { + var image = document.createElementNS(NAMESPACES.svg, "image"); + image.onload = () => resolve(image); + image.onerror = reject; + image.setAttribute("externalResourcesRequired", "true"); + image.setAttributeNS(NAMESPACES.xlink, 'xlink:href', src); + document.body.appendChild(image); + }); + } } function makeImageData() { @@ -100,7 +115,10 @@ function makeBlob() { var imageSourceTypes = [ { name: 'an HTMLCanvasElement', factory: makeCanvas }, { name: 'an HTMLVideoElement', factory: makeVideo }, - { name: 'an HTMLImageElement', factory: makeImage }, + { name: 'a bitmap HTMLImageElement', factory: makeMakeHTMLImage("/images/pattern.png") }, + { name: 'a vector HTMLImageElement', factory: makeMakeHTMLImage("/images/pattern.svg") }, + { name: 'a bitmap SVGImageElement', factory: makeMakeSVGImage("/images/pattern.png") }, + { name: 'a vector SVGImageElement', factory: makeMakeSVGImage("/images/pattern.svg") }, { name: 'an OffscreenCanvas', factory: makeOffscreenCanvas }, { name: 'an ImageData', factory: makeImageData }, { name: 'an ImageBitmap', factory: makeImageBitmap }, diff --git a/tests/wpt/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-drawImage.html b/tests/wpt/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-drawImage.html index d527b4c2adb..4fe8a83d87e 100644 --- a/tests/wpt/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-drawImage.html +++ b/tests/wpt/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-drawImage.html @@ -5,7 +5,8 @@ <script src="/resources/testharnessreport.js"></script> <script src="/common/canvas-tests.js"></script> <script src="/common/media.js"></script> -<script src="common.js"></script> +<script src="/common/namespaces.js"></script> +<script src="common.sub.js"></script> <link rel="stylesheet" href="/common/canvas-tests.css"> <body> <script> diff --git a/tests/wpt/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-invalid-args.html b/tests/wpt/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-invalid-args.html index 12f9974a687..801ec418b6b 100644 --- a/tests/wpt/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-invalid-args.html +++ b/tests/wpt/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-invalid-args.html @@ -2,7 +2,8 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/common/media.js"></script> -<script src="common.js"></script> +<script src="/common/namespaces.js"></script> +<script src="common.sub.js"></script> <script> function makeOversizedCanvas() { @@ -29,17 +30,18 @@ function makeInvalidBlob() { } function makeBrokenImage() { - return new Promise(resolve => { + return new Promise((resolve, reject) => { const image = new Image(); image.src = "data:,x"; + image.onload = reject; image.onerror = () => resolve(image); }); } -function makeAvailableButBrokenImage() { +function makeAvailableButBrokenImage(path) { return new Promise((resolve, reject) => { const image = new Image(); - image.src = "/images/broken.png"; + image.src = path; image.onload = () => resolve(image); image.onerror = reject; }); @@ -100,6 +102,26 @@ promise_test( t => { }, "createImageBitmap with null image source."); promise_test( t => { + var context = document.createElement("canvas").getContext("2d"); + return promise_rejects(t, new TypeError(), createImageBitmap(context)); +}, "createImageBitmap with CanvasRenderingContext2D image source."); + +promise_test( t => { + var context = document.createElement("canvas").getContext("webgl"); + return promise_rejects(t, new TypeError(), createImageBitmap(context)); +}, "createImageBitmap with WebGLRenderingContext image source."); + +promise_test( t => { + var buffer = new Uint8Array(); + return promise_rejects(t, new TypeError(), createImageBitmap(buffer)); +}, "createImageBitmap with Uint8Array image source."); + +promise_test( t => { + var buffer = new ArrayBuffer(8); + return promise_rejects(t, new TypeError(), createImageBitmap(buffer)); +}, "createImageBitmap with ArrayBuffer image source."); + +promise_test( t => { return promise_rejects(t, "InvalidStateError", createImageBitmap(new Image())); }, "createImageBitmap with empty image source."); @@ -138,13 +160,27 @@ promise_test( t => { }, "createImageBitmap with a broken image source."); promise_test( t => { - return makeAvailableButBrokenImage().then(image => { + return makeAvailableButBrokenImage("/images/broken.png").then(image => { return promise_rejects(t, "InvalidStateError", createImageBitmap(image)); }); }, "createImageBitmap with an available but undecodable image source."); promise_test( t => { + return makeAvailableButBrokenImage("/images/red-zeroheight.svg").then(image => { + return promise_rejects(t, "InvalidStateError", + createImageBitmap(image)); + }); +}, "createImageBitmap with an available but zero height image source."); + +promise_test( t => { + return makeAvailableButBrokenImage("/images/red-zerowidth.svg").then(image => { + return promise_rejects(t, "InvalidStateError", + createImageBitmap(image)); + }); +}, "createImageBitmap with an available but zero width image source."); + +promise_test( t => { return makeImageBitmap().then(bitmap => { bitmap.close() return promise_rejects(t, "InvalidStateError", createImageBitmap(bitmap)); diff --git a/tests/wpt/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-origin.sub.html b/tests/wpt/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-origin.sub.html new file mode 100644 index 00000000000..1b24bca92bd --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-origin.sub.html @@ -0,0 +1,86 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>createImageBitmap: origin-clean flag</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/media.js"></script> +<script src="/common/namespaces.js"></script> +<div id=log></div> +<script> +const crossOriginImageUrl = "http://{{domains[www1]}}:{{ports[http][0]}}/images/red.png"; + +function assert_origin_unclean(bitmap) { + const context = document.createElement("canvas").getContext("2d"); + context.drawImage(bitmap, 0, 0); + assert_throws("SecurityError", () => { + context.getImageData(0, 0, 1, 1); + }); +} + +function makeImage() { + return new Promise((resolve, reject) => { + const image = new Image(); + image.onload = () => resolve(image); + image.onerror = reject; + image.src = crossOriginImageUrl; + }); +} + +const arguments = [ + { + name: "cross-origin HTMLImageElement", + factory: makeImage, + }, + + { + name: "cross-origin SVGImageElement", + factory: () => { + return new Promise((resolve, reject) => { + const image = document.createElementNS(NAMESPACES.svg, "image"); + image.onload = () => resolve(image); + image.onerror = reject; + image.setAttribute("externalResourcesRequired", "true"); + image.setAttributeNS(NAMESPACES.xlink, 'xlink:href', crossOriginImageUrl); + document.body.appendChild(image); + }); + }, + }, + + { + name: "cross-origin HTMLVideoElement", + factory: () => { + return new Promise((resolve, reject) => { + const video = document.createElement("video"); + video.oncanplaythrough = () => resolve(video); + video.onerror = reject; + video.src = getVideoURI("http://{{domains[www1]}}:{{ports[http][0]}}/media/movie_300"); + }); + }, + }, + + { + name: "unclean HTMLCanvasElement", + factory: () => { + return makeImage().then(image => { + const canvas = document.createElement("canvas"); + const context = canvas.getContext("2d"); + context.drawImage(image, 0, 0); + return canvas; + }); + }, + }, + + { + name: "unclean ImageBitmap", + factory: () => { + return makeImage().then(createImageBitmap); + }, + }, +]; + +for (let { name, factory } of arguments) { + promise_test(function() { + return factory().then(createImageBitmap).then(assert_origin_unclean); + }, name); +} +</script> diff --git a/tests/wpt/web-platform-tests/acid/acid3/numbered-tests.html b/tests/wpt/web-platform-tests/acid/acid3/numbered-tests.html new file mode 100644 index 00000000000..dfe7f3876f4 --- /dev/null +++ b/tests/wpt/web-platform-tests/acid/acid3/numbered-tests.html @@ -0,0 +1,27 @@ +<!doctype html> +<title>Acid3 numbered tests</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +var tests = undefined; + +function gotMessage(e) { + var m = e.data; + if (tests === undefined && "num_tests" in m) { + tests = []; + for (var i = 0; i < m.num_tests; i++) { + tests.push(async_test("Test " + i)); + } + } else if ("result" in m) { + var test = m.test; + var passed = m.result === "pass"; + var message = m.message; + tests[test].step(function() { + assert_true(passed, message); + }); + tests[test].done(); + } +} +window.addEventListener("message", gotMessage, false); +</script> +<iframe src="test.html"></iframe> diff --git a/tests/wpt/web-platform-tests/acid/acid3/test.html b/tests/wpt/web-platform-tests/acid/acid3/test.html index 1ac8da6838e..0c475309cf5 100644 --- a/tests/wpt/web-platform-tests/acid/acid3/test.html +++ b/tests/wpt/web-platform-tests/acid/acid3/test.html @@ -3419,6 +3419,7 @@ } ]; + window.parent.postMessage({num_tests: tests.length}, "*"); var log = ''; var delay = 10; var score = 0, index = 0, retry = 0, errors = 0; @@ -3456,6 +3457,7 @@ } else { fail("no error message"); } + window.parent.postMessage({test: index, result: "pass"}, "*"); } catch (e) { var s; if (e.message) @@ -3464,6 +3466,7 @@ s = e; errors += 1; log += "Test " + zeroPaddedIndex + " failed: " + s + "\n"; + window.parent.postMessage({test: index, result: "fail", message: s}, "*"); }; retry = 0; index += 1; diff --git a/tests/wpt/web-platform-tests/beacon/beacon-error.window.js b/tests/wpt/web-platform-tests/beacon/beacon-error.window.js index 9c037ba34f6..b53353abc1e 100644 --- a/tests/wpt/web-platform-tests/beacon/beacon-error.window.js +++ b/tests/wpt/web-platform-tests/beacon/beacon-error.window.js @@ -24,16 +24,25 @@ test(function() { }, "Verify calling 'navigator.sendBeacon()' with a URL that is not a http(s) scheme throws an exception."); // We'll validate that we can send one beacon that uses our entire Quota and then fail to send one that is just one char. -test(function () { - var destinationURL = "/fetch/api/resources/trickle.py?count=1&ms=1000"; - - var firstSuccess = navigator.sendBeacon(destinationURL, maxPayload); - assert_true(firstSuccess, "calling 'navigator.sendBeacon()' with our max payload size should succeed."); +promise_test(async () => { + function wait(ms) { + return new Promise(res => step_timeout(res, ms)); + } + const url = '/fetch/api/resources/trickle.py?count=1&ms=0'; + assert_true(navigator.sendBeacon(url, maxPayload), + "calling 'navigator.sendBeacon()' with our max payload size should succeed."); // Now we'll send just one character. - var secondSuccess = navigator.sendBeacon(destinationURL, "1"); - assert_false(secondSuccess, "calling 'navigator.sendBeacon()' with just one char should fail while our Quota is used up."); - -}, "Verify calling 'navigator.sendBeacon()' with a small payload fails while Quota is completely utilized."); + assert_false(navigator.sendBeacon(url, '1'), + "calling 'navigator.sendBeacon()' with just one char should fail while our Quota is used up."); + + for (let i = 0; i < 20; ++i) { + await wait(100); + if (navigator.sendBeacon(url, maxPayload)) { + return; + } + } + assert_unreached('The quota should recover after fetching.'); +}, "Verify the behavior after the quota is exhausted."); done(); diff --git a/tests/wpt/web-platform-tests/bluetooth/README.md b/tests/wpt/web-platform-tests/bluetooth/README.md index 869dd4af446..2d0e9ab7a9b 100644 --- a/tests/wpt/web-platform-tests/bluetooth/README.md +++ b/tests/wpt/web-platform-tests/bluetooth/README.md @@ -9,6 +9,19 @@ the API to be loaded as needed. The Chromium implementation is provided by `../resources/chromium/web-bluetooth-test.js`. +The Chromium implementation is not included in stable Chrome builds since it +would add too much to the binary size. On Chromium infrastructure, it is run +using the `content_shell` executable. + +In the future, Chromium `src/device/bluetooth` may be refactored into a Mojo +service. At this point, it would be possible to add the necessary testing hooks +into stable Chrome without substantially increasing the binary size, similar to +WebUSB. + +These bluetooth tests are upstreamed here because other browsers can reuse them +by implementing the [Web Bluetooth Testing API], even if only on their internal +infrastructure. + [Web Bluetooth Testing API]: https://docs.google.com/document/d/1Nhv_oVDCodd1pEH_jj9k8gF4rPGb_84VYaZ9IG8M_WY/ # Generated gen-* files from generator.py @@ -45,4 +58,4 @@ Usage: $ python generate.py ``` -More details documented in `generate.py`.
\ No newline at end of file +More details documented in `generate.py`. diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/blocklisted-service-in-filter.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/blocklisted-service-in-filter.https.html new file mode 100644 index 00000000000..253e3119916 --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/blocklisted-service-in-filter.https.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'Reject with SecurityError if requesting a blocklisted ' + + 'service.'; +const expected = new DOMException( + 'requestDevice() called with a filter containing a blocklisted UUID. ' + + 'https://goo.gl/4NeimX', + 'SecurityError'); + +bluetooth_test(() => setUpPreconnectedDevice({ + knownServiceUUIDs: ['human_interface_device'] +}) + .then(() => assert_promise_rejects_with_message( + requestDeviceWithTrustedClick({ + filters: [{services: ['human_interface_device']}] + }), + expected, 'Requesting blocklisted service rejects.')), + test_desc); +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/blocklisted-service-in-optionalServices.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/blocklisted-service-in-optionalServices.https.html new file mode 100644 index 00000000000..d77486fcbc3 --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/blocklisted-service-in-optionalServices.https.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'Blocklisted UUID in optionalServices is removed and ' + + 'access not granted.'; +const expected = new DOMException('Origin is not allowed to access the ' + + 'service. Tip: Add the service UUID to \'optionalServices\' in ' + + 'requestDevice() options. https://goo.gl/HxfxSQ', + 'SecurityError'); +let device, fake_peripheral; + +bluetooth_test(() => getDiscoveredHealthThermometerDevice({ + filters: [{services: ['health_thermometer']}], + optionalServices: ['human_interface_device'] +}) + .then(_ => ({device, fake_peripheral} = _)) + .then(() => + fake_peripheral.setNextGATTConnectionResponse({code: HCI_SUCCESS})) + .then(() => device.gatt.connect()) + .then(() => + fake_peripheral.setNextGATTDiscoveryResponse({code: HCI_SUCCESS})) + .then(() => Promise.all([ + assert_promise_rejects_with_message( + device.gatt.getPrimaryService('human_interface_device'), + expected, 'Blocklisted service not accessible.'), + assert_promise_rejects_with_message( + device.gatt.getPrimaryServices('human_interface_device'), + expected, 'Blocklisted services not accessible.')])), + test_desc); +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/device-name-longer-than-29-bytes.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/device-name-longer-than-29-bytes.https.html new file mode 100644 index 00000000000..ba8a090309b --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/device-name-longer-than-29-bytes.https.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'A device name between 29 and 248 bytes is valid.'; +const DEVICE_NAME = 'a_device_name_that_is_longer_than_29_bytes_but_' + + 'shorter_than_248_bytes'; + +bluetooth_test(() => setUpPreconnectedDevice({name: DEVICE_NAME}) + .then(() => requestDeviceWithTrustedClick({ + filters: [{name: DEVICE_NAME}] + })) + .then(device => assert_equals(device.name, DEVICE_NAME)), + test_desc); +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/empty-filter.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/empty-filter.https.html new file mode 100644 index 00000000000..eed7b870b38 --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/empty-filter.https.html @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'A filter must restrict the devices in some way.'; +const expected = new TypeError(); + +bluetooth_test(() => assert_promise_rejects_with_message( + requestDeviceWithTrustedClick({filters: [{}]}), + expected), + test_desc); +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/empty-filters-member.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/empty-filters-member.https.html new file mode 100644 index 00000000000..fbbd6dacad9 --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/empty-filters-member.https.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'An empty |filters| member should result in a TypeError'; +const expected = new DOMException('Failed to execute \'requestDevice\' on ' + + '\'Bluetooth\': \'filters\' member must be non-empty to find any devices.', + new TypeError()); + +bluetooth_test(() => assert_promise_rejects_with_message( + requestDeviceWithTrustedClick({filters: []}), + expected), + test_desc); +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/empty-namePrefix.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/empty-namePrefix.https.html new file mode 100644 index 00000000000..aa6c83089e6 --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/empty-namePrefix.https.html @@ -0,0 +1,44 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'requestDevice with empty namePrefix. ' + + 'Should reject with TypeError.'; +const expected = new TypeError(); +const test_specs = [{ + filters: [{ namePrefix: ''}] +}, { + filters: [{ namePrefix: '', name: 'Name'}] +}, { + filters: [{ namePrefix: '', services: ['heart_rate']}] +}, { + filters: [{ namePrefix: '', name: 'Name', services: ['heart_rate']}] +}, { + filters: [{ namePrefix: ''}], + optionalServices: ['heart_rate'] +}, { + filters: [{ namePrefix: '', name: 'Name'}], + optionalServices: ['heart_rate'] +}, { + filters: [{ namePrefix: '', services: ['heart_rate']}], + optionalServices: ['heart_rate'] +}, { + filters: [{ namePrefix: '', name: 'Name', services: ['heart_rate']}], + optionalServices: ['heart_rate'] +}]; + +bluetooth_test(() => { + let test_promises = Promise.resolve(); + test_specs.forEach(args => { + test_promises = test_promises + .then(() => assert_promise_rejects_with_message( + requestDeviceWithTrustedClick(args), + expected)); + }); + return test_promises; + }, test_desc); +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/empty-services-member.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/empty-services-member.https.html new file mode 100644 index 00000000000..6cb923a5ac0 --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/empty-services-member.https.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'Services member must contain at least one service.'; +const expected = new TypeError(); + +bluetooth_test(() => { + let test_promises = Promise.resolve(); + generateRequestDeviceArgsWithServices([]).forEach(args => { + test_promises = test_promises.then(() => + assert_promise_rejects_with_message( + requestDeviceWithTrustedClick(args), + expected, + 'Services member must contain at least one service')) + }); + return test_promises; + }, test_desc); +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/filters-xor-acceptAllDevices.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/filters-xor-acceptAllDevices.https.html new file mode 100644 index 00000000000..ab207329447 --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/filters-xor-acceptAllDevices.https.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = "RequestDeviceOptions should have exactly one of " + + "'filters' or 'acceptAllDevices:true'. Reject with TypeError if not."; +const expected = new DOMException( + "Failed to execute 'requestDevice' on 'Bluetooth': " + + "Either 'filters' should be present or " + + "'acceptAllDevices' should be true, but not both.", + new TypeError()); +const test_specs = [ + {}, + {optionalServices: ['heart_rate']}, + {filters: [], acceptAllDevices: true}, + {filters: [], acceptAllDevices: true, optionalServices: ['heart_rate']} +]; + +bluetooth_test(() => { + let test_promises = Promise.resolve(); + test_specs.forEach(args => { + test_promises = test_promises + .then(() => assert_promise_rejects_with_message( + requestDeviceWithTrustedClick(args), + expected)) + }); + return test_promises; + }, test_desc); +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-name-unicode.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-name-unicode.https.html new file mode 100644 index 00000000000..2f2df741277 --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-name-unicode.https.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'Unicode string with utf8 representation longer than 248 ' + + 'bytes in \'name\' must throw TypeError.'; +const expected = new DOMException( + "Failed to execute 'requestDevice' on 'Bluetooth': " + + "A device name can't be longer than 248 bytes.", + new TypeError()); +// \u2764's UTF-8 respresentation is 3 bytes long. +// 83 chars * 3 bytes/char = 249 bytes +const unicode_name = '\u2764'.repeat(83); + +bluetooth_test(() => assert_promise_rejects_with_message( + requestDeviceWithTrustedClick({filters: [{name: unicode_name}]}), + expected), + test_desc); +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-name.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-name.https.html new file mode 100644 index 00000000000..dcb6c40d8fe --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-name.https.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'A device name longer than 248 must reject.'; +const expected = new DOMException( + "Failed to execute 'requestDevice' on 'Bluetooth': A device " + + "name can't be longer than 248 bytes.", + new TypeError()); +const name_too_long = 'a'.repeat(249); + +bluetooth_test(() => assert_promise_rejects_with_message( + requestDeviceWithTrustedClick({filters: [{name: name_too_long}]}), + expected, + 'Device name longer than 248'), + test_desc); +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-namePrefix-unicode.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-namePrefix-unicode.https.html new file mode 100644 index 00000000000..fe1f91927d2 --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-namePrefix-unicode.https.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'Unicode string with utf8 representation longer than 248 ' + + 'bytes in \'namePrefix\' must throw NotFoundError.'; +const expected = new DOMException( + "Failed to execute 'requestDevice' on 'Bluetooth': " + + "A device name can't be longer than 248 bytes.", + new TypeError()); +// \u2764's UTF-8 respresentation is 3 bytes long. +// 83 chars * 3 bytes/char = 249 bytes +const unicode_name = '\u2764'.repeat(83); + +bluetooth_test(() => assert_promise_rejects_with_message( + requestDeviceWithTrustedClick({filters: [{namePrefix: unicode_name}]}), + expected), + test_desc); +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-namePrefix.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-namePrefix.https.html new file mode 100644 index 00000000000..ab3a6bae3fb --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-namePrefix.https.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'A device name prefix longer than 248 must reject.'; +const expected = new DOMException( + "Failed to execute 'requestDevice' on 'Bluetooth': A device " + + "name can't be longer than 248 bytes.", + new TypeError()); +const name_too_long = 'a'.repeat(249); + +bluetooth_test(() => assert_promise_rejects_with_message( + requestDeviceWithTrustedClick({filters: [{namePrefix: name_too_long}]}), + expected, + 'Device name longer than 248'), + test_desc); +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-name-unicode.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-name-unicode.https.html new file mode 100644 index 00000000000..40df9d0de7f --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-name-unicode.https.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'A unicode device name of 248 bytes is valid.'; +// \u00A1's UTF-8 respresentation is 2 bytes long. +// 124 chars * 2 bytes/char = 248 bytes +const DEVICE_NAME = '\u00A1'.repeat(124); + +bluetooth_test(() => setUpPreconnectedDevice({name: DEVICE_NAME}) + .then(() => requestDeviceWithTrustedClick({ filters: [{name: DEVICE_NAME}]})) + .then(device => assert_equals(device.name, DEVICE_NAME)), + test_desc); +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-name.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-name.https.html new file mode 100644 index 00000000000..d1759d6efe0 --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-name.https.html @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'A device name of 248 bytes is valid.'; +const DEVICE_NAME = 'a'.repeat(248); + +bluetooth_test(() => setUpPreconnectedDevice({name: DEVICE_NAME}) + .then(() => requestDeviceWithTrustedClick({ filters: [{name: DEVICE_NAME}]})) + .then(device => assert_equals(device.name, DEVICE_NAME)), + test_desc); +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-namePrefix-unicode.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-namePrefix-unicode.https.html new file mode 100644 index 00000000000..8e86844473e --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-namePrefix-unicode.https.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'A unicode device namePrefix of 248 bytes is valid.'; +// \u00A1's UTF-8 respresentation is 2 bytes long. +// 124 chars * 2 bytes/char = 248 bytes +const DEVICE_NAME = '\u00A1'.repeat(124); + +bluetooth_test(() => setUpPreconnectedDevice({name: DEVICE_NAME}) + .then(() => requestDeviceWithTrustedClick({ + filters: [{namePrefix: DEVICE_NAME}] + })) + .then(device => assert_equals(device.name, DEVICE_NAME)), + test_desc); +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-namePrefix.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-namePrefix.https.html new file mode 100644 index 00000000000..01ed22e6366 --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-namePrefix.https.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'A device namePrefix of 248 bytes is valid.'; +const DEVICE_NAME = 'a'.repeat(248); + +bluetooth_test(() => setUpPreconnectedDevice({name: DEVICE_NAME}) + .then(() => requestDeviceWithTrustedClick({ + filters: [{namePrefix: DEVICE_NAME}] + })) + .then(device => assert_equals(device.name, DEVICE_NAME)), + test_desc); +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/no-arguments.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/no-arguments.https.html new file mode 100644 index 00000000000..e6337a543bc --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/no-arguments.https.html @@ -0,0 +1,17 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharness-helpers.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'requestDevice() requires an argument.'; +const expected = new TypeError(); + +promise_test(() => assert_promise_rejects_with_message( + requestDeviceWithTrustedClick(), + expected), + test_desc); +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-name.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-name.https.html new file mode 100644 index 00000000000..08038b9de00 --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-name.https.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'A name containing unicode characters whose utf8 length ' + + 'is less than 30 must not throw an error.'; +// \u2764's UTF-8 representation is 3 bytes long. +// 9 chars * 3 bytes/char = 27 bytes +const valid_unicode_name = '\u2764'.repeat(9); + +bluetooth_test(() => setUpPreconnectedDevice({name: valid_unicode_name}) + .then(() => requestDeviceWithTrustedClick({ + filters: [{name: valid_unicode_name}] + })) + .then(device => assert_equals(device.name, valid_unicode_name)), + test_desc); +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-namePrefix.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-namePrefix.https.html new file mode 100644 index 00000000000..fc44482379d --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-namePrefix.https.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'A namePrefix containing unicode characters whose utf8 ' + + 'length is less than 30 must not throw an error.'; +// \u2764's UTF-8 representation is 3 bytes long. +// 9 chars * 3 bytes/char = 27 bytes +const valid_unicode_name = '\u2764'.repeat(9); + +bluetooth_test(() => setUpPreconnectedDevice({name: valid_unicode_name}) + .then(() => requestDeviceWithTrustedClick({ + filters: [{namePrefix: valid_unicode_name}] + })) + .then(device => assert_equals(device.name, valid_unicode_name)), + test_desc); +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/wrong-service-in-optionalServices-member.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/wrong-service-in-optionalServices-member.https.html new file mode 100644 index 00000000000..15cf902177d --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/wrong-service-in-optionalServices-member.https.html @@ -0,0 +1,44 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'Invalid optional service must reject the promise.'; +const expected = new TypeError(); +const test_specs = [{ + optionalServices: ['wrong_service'], + filters: [{services: ['heart_rate']}] +}, { + optionalServices: ['wrong_service'], + filters: [{ services: ['heart_rate'], name: 'Name'}] +}, { + optionalServices: ['wrong_service'], + filters: [{ services: ['heart_rate'], namePrefix: 'Pre'}] +}, { + optionalServices: ['wrong_service'], + filters: [{ services: ['heart_rate'], name: 'Name', namePrefix: 'Pre'}] +}, { + optionalServices: ['wrong_service'], + filters: [{ name: 'Name'}] +}, { + optionalServices: ['wrong_service'], + filters: [{ name: 'Name', namePrefix: 'Pre'}] +}, { + optionalServices: ['wrong_service'], + filters: [{ namePrefix: 'Pre'}] +}]; + +bluetooth_test(() => { + let test_promises = Promise.resolve(); + test_specs.forEach(args => { + test_promises = + test_promises.then(() => assert_promise_rejects_with_message( + requestDeviceWithTrustedClick(args), + expected)); + }); + return test_promises; + }, test_desc); +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/wrong-service-in-services-member.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/wrong-service-in-services-member.https.html new file mode 100644 index 00000000000..5d9b245f953 --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/wrong-service-in-services-member.https.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'Invalid service must reject the promise.'; +const expected = new TypeError(); + +bluetooth_test(() => { + let test_promises = Promise.resolve(); + generateRequestDeviceArgsWithServices(['wrong_service']).forEach(args => { + test_promises = test_promises.then(() => + assert_promise_rejects_with_message( + requestDeviceWithTrustedClick(args), + expected)); + }); + return test_promises; + }, test_desc); +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/consumes-user-gesture.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/consumes-user-gesture.https.html new file mode 100644 index 00000000000..12a062e2f59 --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/consumes-user-gesture.https.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'Consumes a user gesture.'; +const expected = new DOMException( + 'Must be handling a user gesture to show a permission request.', + 'SecurityError'); + +bluetooth_test(() => setUpHealthThermometerAndHeartRateDevices() + .then(() => callWithTrustedClick(() => { + let first = navigator.bluetooth.requestDevice({ + filters: [{services: ['heart_rate']}]}); + let second = navigator.bluetooth.requestDevice({ + filters: [{services: ['heart_rate']}]}); + return Promise.all([ + first.then(device => assert_equals( + device.constructor.name, 'BluetoothDevice')), + assert_promise_rejects_with_message(second, + expected, 'A request should consume a user gesture') + ]); + })), test_desc); +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/discovery-succeeds.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/discovery-succeeds.https.html new file mode 100644 index 00000000000..2ac18485a1f --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/discovery-succeeds.https.html @@ -0,0 +1,28 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'Discover a device using alias, name, or UUID.'; + +bluetooth_test(() => getHealthThermometerDevice() + // Chrome will always close the previous chooser in the process of handling + // a user gesture for the next request, so these need to be done + // sequentially. + .then(() => requestDeviceWithTrustedClick({ + filters: [{services: [health_thermometer.alias]}] + })) + .then(device => assert_equals(device.constructor.name, 'BluetoothDevice')) + .then(() => requestDeviceWithTrustedClick({ + filters: [{services: [health_thermometer.name]}] + })) + .then(device => assert_equals(device.constructor.name, 'BluetoothDevice')) + .then(() => requestDeviceWithTrustedClick({ + filters: [{services: [health_thermometer.uuid]}] + })) + .then(device => assert_equals(device.constructor.name, 'BluetoothDevice')), + test_desc); +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/filter-matches.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/filter-matches.https.html new file mode 100644 index 00000000000..3f62d39c7ac --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/filter-matches.https.html @@ -0,0 +1,67 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'Matches a filter if all present members match.'; +let matching_services = [health_thermometer.uuid]; +let matching_name = 'Health Thermometer'; +let matching_namePrefix = 'Health'; + +let test_specs = [{ + filters: [{ + services: matching_services, + }] +}, { + filters: [{ + services: matching_services, + name: matching_name, + }] +}, { + filters: [{ + services: matching_services, + namePrefix: matching_namePrefix + }] +}, { + filters: [{ + name: matching_name, + }], + optionalServices: matching_services +}, { + filters: [{ + name: matching_name, + namePrefix: matching_namePrefix + }], + optionalServices: matching_services +}, { + filters: [{ + namePrefix: matching_namePrefix + }], + optionalServices: matching_services +}, { + filters: [{ + services: matching_services, + name: matching_name, + namePrefix: matching_namePrefix + }] +}]; + +bluetooth_test(() => setUpHealthThermometerDevice() + .then(() => { + let test_promises = Promise.resolve(); + test_specs.forEach(args => { + test_promises = test_promises + .then(() => requestDeviceWithTrustedClick(args)) + .then(device => { + // We always have access to the services in matching_services + // because we include them in a filter or in optionalServices. + assert_equals(device.name, matching_name); + assert_true(device.name.startsWith(matching_namePrefix)); + }); + }); + return test_promises; + }), test_desc); +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/le-not-supported.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/le-not-supported.https.html new file mode 100644 index 00000000000..4a3752501a3 --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/le-not-supported.https.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'Reject with NotFoundError if Bluetooth is not supported.'; +const expected = new DOMException('Bluetooth Low Energy not available.', + 'NotFoundError'); + +bluetooth_test(() => navigator.bluetooth.test.setLESupported(false) + .then(() => assert_promise_rejects_with_message( + requestDeviceWithTrustedClick({acceptAllDevices: true}), + expected, 'Bluetooth Low Energy is not supported.')), + test_desc); +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/name-empty-device-from-name-empty-filter.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/name-empty-device-from-name-empty-filter.https.html new file mode 100644 index 00000000000..ee9b9125de2 --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/name-empty-device-from-name-empty-filter.https.html @@ -0,0 +1,15 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'An empty name device can be obtained by empty name filter.' + +bluetooth_test(() => setUpPreconnectedDevice({name: ''}) + .then(() => requestDeviceWithTrustedClick({filters: [{name: ''}]})) + .then(device => assert_equals(device.name, '')), + test_desc); +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/not-processing-user-gesture.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/not-processing-user-gesture.https.html new file mode 100644 index 00000000000..1781b7bd1b8 --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/not-processing-user-gesture.https.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'Requires a user gesture.'; +const expected = new DOMException( + 'Must be handling a user gesture to show a permission request.', + 'SecurityError'); + +bluetooth_test(() => setUpHealthThermometerAndHeartRateDevices() + .then(() => assert_promise_rejects_with_message( + navigator.bluetooth.requestDevice({filters:[{services:['heart_rate']}]}), + expected, 'User gesture is required')), + test_desc); +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/radio-not-present.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/radio-not-present.https.html new file mode 100644 index 00000000000..a66bcf99c6e --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/radio-not-present.https.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'Reject with NotFoundError if there is no BT radio present.'; +const expected = new DOMException('Bluetooth adapter not available.', + 'NotFoundError'); + +bluetooth_test(() => navigator.bluetooth.test.simulateCentral({state: 'absent'}) + .then(() => assert_promise_rejects_with_message( + requestDeviceWithTrustedClick({ + filters: [{services: ['generic_access']}] + }), + expected, 'Bluetooth adapter is not present.')), + test_desc); +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/request-from-iframe.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/request-from-iframe.https.html new file mode 100644 index 00000000000..01590ea0fd9 --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/request-from-iframe.https.html @@ -0,0 +1,43 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'Concurrent requestDevice calls in iframes work.'; +const iframes = []; +for (let i = 0; i < 5; i++) { + iframes.push(document.createElement('iframe')); +} + +bluetooth_test(() => setUpHealthThermometerAndHeartRateDevices() + // 1. Load the iframes. + .then(() => { + let promises = []; + for (let iframe of iframes) { + iframe.src = '/bluetooth/resources/health-thermometer-iframe.html'; + document.body.appendChild(iframe); + promises.push(new Promise(resolve => + iframe.addEventListener('load', resolve))); + } + return Promise.all(promises); + }) + // 2. Request the device from the iframes. + .then(() => new Promise(async (resolve) => { + let numMessages = 0; + window.onmessage = messageEvent => { + assert_equals(messageEvent.data, 'Success'); + if (++numMessages === iframes.length) { + resolve(); + } + } + + for (let iframe of iframes) { + await callWithTrustedClick(() => iframe.contentWindow.postMessage({ + type: 'RequestDevice' + }, '*')); + } + })), test_desc); +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/request-from-sandboxed-iframe.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/request-from-sandboxed-iframe.https.html new file mode 100644 index 00000000000..62a917a70f1 --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/request-from-sandboxed-iframe.https.html @@ -0,0 +1,39 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<body> +<script> +'use strict'; +const test_desc = 'Request device from a unique origin. ' + + 'Should reject with SecurityError.'; +const expected = 'SecurityError: requestDevice() called from cross-origin ' + + 'iframe.'; + +let iframe = document.createElement('iframe'); + +bluetooth_test(() => getHealthThermometerDevice() + // 1. Load the iframe. + .then(() => new Promise(resolve => { + iframe.sandbox.add('allow-scripts'); + iframe.src = '/bluetooth/resources/health-thermometer-iframe.html'; + document.body.appendChild(iframe); + iframe.addEventListener('load', resolve); + })) + // 2. Request the device from the iframe. + .then(() => new Promise(resolve => { + callWithTrustedClick(() => { + iframe.contentWindow.postMessage({ + type: 'RequestDevice' + }, '*'); + }); + + window.onmessage = messageEvent => { + assert_equals(messageEvent.data, expected); + resolve(); + } + })), test_desc); +</script> +</body> diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/same-device.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/same-device.https.html new file mode 100644 index 00000000000..a83cf705a73 --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/same-device.https.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'Returned device should always be the same.'; +let devices = []; +let push = device => devices.push(device); + +bluetooth_test(() => setUpHealthThermometerAndHeartRateDevices() + .then(() => requestDeviceWithTrustedClick({ + filters: [{services: [heart_rate.alias]}] + })) + .then(push) + .then(() => requestDeviceWithTrustedClick({ + filters: [{services: [heart_rate.name]}] + })) + .then(push) + .then(() => requestDeviceWithTrustedClick({ + filters: [{services: [heart_rate.uuid]}] + })) + .then(push) + .then(() => { + assert_equals(devices[0], devices[1]); + assert_equals(devices[1], devices[2]); + }), test_desc); +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/single-filter-single-service.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/single-filter-single-service.https.html new file mode 100644 index 00000000000..8735eb3f872 --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/single-filter-single-service.https.html @@ -0,0 +1,17 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'Simple filter selects matching device.'; + +bluetooth_test(() => setUpHealthThermometerAndHeartRateDevices() + .then(() => requestDeviceWithTrustedClick({ + filters: [{services: ['health_thermometer']}] + })) + .then(device => assert_equals(device.name, 'Health Thermometer')), + test_desc); +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/resources/bluetooth-helpers.js b/tests/wpt/web-platform-tests/bluetooth/resources/bluetooth-helpers.js index 0f378b2b8a7..56357043ba7 100644 --- a/tests/wpt/web-platform-tests/bluetooth/resources/bluetooth-helpers.js +++ b/tests/wpt/web-platform-tests/bluetooth/resources/bluetooth-helpers.js @@ -218,22 +218,36 @@ var gatt_errors_tests = [{ 'NotSupportedError') }]; -function callWithTrustedClick(callback) { +// Waits until the document has finished loading. +function waitForDocumentReady() { return new Promise(resolve => { - let button = document.createElement('button'); - button.textContent = 'click to continue test'; - button.style.display = 'block'; - button.style.fontSize = '20px'; - button.style.padding = '10px'; - button.onclick = () => { - document.body.removeChild(button); - resolve(callback()); - }; - document.body.appendChild(button); - test_driver.click(button); + if (document.readyState === 'complete') { + resolve(); + } + + window.addEventListener('load', () => { + resolve(); + }, {once: true}); }); } +function callWithTrustedClick(callback) { + return waitForDocumentReady() + .then(() => new Promise(resolve => { + let button = document.createElement('button'); + button.textContent = 'click to continue test'; + button.style.display = 'block'; + button.style.fontSize = '20px'; + button.style.padding = '10px'; + button.onclick = () => { + document.body.removeChild(button); + resolve(callback()); + }; + document.body.appendChild(button); + test_driver.click(button); + })); +} + // Calls requestDevice() in a context that's 'allowed to show a popup'. function requestDeviceWithTrustedClick() { let args = arguments; diff --git a/tests/wpt/web-platform-tests/bluetooth/resources/health-thermometer-iframe.html b/tests/wpt/web-platform-tests/bluetooth/resources/health-thermometer-iframe.html index c94ba55bbfd..5e24f62a06e 100644 --- a/tests/wpt/web-platform-tests/bluetooth/resources/health-thermometer-iframe.html +++ b/tests/wpt/web-platform-tests/bluetooth/resources/health-thermometer-iframe.html @@ -1,17 +1,31 @@ <!DOCTYPE html> <script> -let device; +let device, gatt; function requestDeviceWithOptionsAndConnect(options) { return navigator.bluetooth.requestDevice(options) .then(device => device.gatt.connect()); } -window.onmessage = messageEvent => { +window.addEventListener('message', (messageEvent) => { switch (messageEvent.data.type) { + case 'RequestDevice': + navigator.bluetooth.requestDevice({ + filters: [{services: ['generic_access']}] + }) + .then(device => { + if (device.constructor.name === 'BluetoothDevice') { + parent.postMessage('Success', '*'); + } else { + parent.postMessage( + `FAIL: requestDevice in iframe returned ${device.name}`, '*'); + }}).catch(err => parent.postMessage(`${err.name}: ${err.message}`, + '*')); + break; case 'RequestAndConnect': requestDeviceWithOptionsAndConnect(messageEvent.data.options) - .then(gatt => { + .then(_ => { + gatt = _; device = gatt.device; parent.postMessage('Connected', '*'); }).catch(err => { @@ -26,9 +40,18 @@ window.onmessage = messageEvent => { parent.postMessage(`FAIL: ${err}`, '*'); }); break; + case 'GetService': + if (typeof gatt === 'undefined') { + parent.postMessage('FAIL: no GATT server', '*'); + break; + } + gatt.getPrimaryService(messageEvent.data.options) + .then(() => parent.postMessage('ServiceReceived', '*')) + .catch(err => parent.postMessage(`FAIL: ${err}`, '*')); + break; default: parent.postMessage(`FAIL: Bad message type: ${messageEvent.data.type}`, - '*'); + '*'); } -}; +}); </script> diff --git a/tests/wpt/web-platform-tests/bluetooth/script-tests/service/blocklisted-characteristic.js b/tests/wpt/web-platform-tests/bluetooth/script-tests/service/blocklisted-characteristic.js new file mode 100644 index 00000000000..b26f039a706 --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/script-tests/service/blocklisted-characteristic.js @@ -0,0 +1,19 @@ +'use strict'; +const test_desc = 'Serial Number String characteristic is blocklisted. ' + + 'Should reject with SecurityError.'; +const expected = new DOMException( + 'getCharacteristic(s) called with blocklisted UUID. https://goo.gl/4NeimX', + 'SecurityError'); + +bluetooth_test(() => getHIDDevice({ + filters: [{services: ['device_information']}] +}) + .then(({device}) => device.gatt.getPrimaryService('device_information')) + .then(service => assert_promise_rejects_with_message( + service.CALLS([ + getCharacteristic('serial_number_string')| + getCharacteristics('serial_number_string')[UUID] + ]), + expected, + 'Serial Number String characteristic is blocklisted.')), + test_desc); diff --git a/tests/wpt/web-platform-tests/bluetooth/script-tests/service/characteristic-not-found.js b/tests/wpt/web-platform-tests/bluetooth/script-tests/service/characteristic-not-found.js new file mode 100644 index 00000000000..366e046774b --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/script-tests/service/characteristic-not-found.js @@ -0,0 +1,15 @@ +'use strict'; +const test_desc = 'Request for absent characteristics with UUID. ' + + 'Reject with NotFoundError.'; + +bluetooth_test(() => getEmptyHealthThermometerService() + .then(({service}) => assert_promise_rejects_with_message( + service.CALLS([ + getCharacteristic('battery_level')| + getCharacteristics('battery_level')[UUID] + ]), + new DOMException( + `No Characteristics matching UUID ${battery_level.uuid} found ` + + `in Service with UUID ${health_thermometer.uuid}.`, + 'NotFoundError'))), + test_desc); diff --git a/tests/wpt/web-platform-tests/bluetooth/script-tests/service/garbage-collection-ran-during-error.js b/tests/wpt/web-platform-tests/bluetooth/script-tests/service/garbage-collection-ran-during-error.js new file mode 100644 index 00000000000..33c61096794 --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/script-tests/service/garbage-collection-ran-during-error.js @@ -0,0 +1,24 @@ +'use strict'; +const test_desc = 'Garbage Collection ran during FUNCTION_NAME ' + + 'call that fails. Should not crash'; +const expected = new DOMException( + 'GATT Server is disconnected. Cannot retrieve characteristics. ' + + '(Re)connect first with `device.gatt.connect`.', + 'NetworkError'); +let promise; + +bluetooth_test(() => getHealthThermometerService() + .then(({service}) => { + promise = assert_promise_rejects_with_message( + service.CALLS([ + getCharacteristic('measurement_interval')| + getCharacteristics()| + getCharacteristics('measurement_interval')[UUID] + ]), expected); + // Disconnect called to clear attributeInstanceMap and allow the object to + // get garbage collected. + service.device.gatt.disconnect(); + }) + .then(runGarbageCollection) + .then(() => promise), + test_desc); diff --git a/tests/wpt/web-platform-tests/bluetooth/script-tests/service/get-same-object.js b/tests/wpt/web-platform-tests/bluetooth/script-tests/service/get-same-object.js new file mode 100644 index 00000000000..db9d740c83c --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/script-tests/service/get-same-object.js @@ -0,0 +1,24 @@ +'use strict'; +const test_desc = 'Calls to FUNCTION_NAME should return the same object.'; + +bluetooth_test(() => getHealthThermometerService() + .then(({service}) => Promise.all([ + service.CALLS([ + getCharacteristic('measurement_interval')| + getCharacteristics()| + getCharacteristics('measurement_interval')[UUID]]), + service.PREVIOUS_CALL])) + .then(([characteristics_first_call, characteristics_second_call]) => { + // Convert to arrays if necessary. + characteristics_first_call = [].concat(characteristics_first_call); + characteristics_second_call = [].concat(characteristics_second_call); + + let first_call_set = new Set(characteristics_first_call); + assert_equals(characteristics_first_call.length, first_call_set.size); + let second_call_set = new Set(characteristics_second_call); + assert_equals(characteristics_second_call.length, second_call_set.size); + + characteristics_first_call.forEach(characteristic => { + assert_true(second_call_set.has(characteristic)); + }); + }), test_desc); diff --git a/tests/wpt/web-platform-tests/bluetooth/script-tests/service/invalid-characteristic-name.js b/tests/wpt/web-platform-tests/bluetooth/script-tests/service/invalid-characteristic-name.js new file mode 100644 index 00000000000..74cba7ec431 --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/script-tests/service/invalid-characteristic-name.js @@ -0,0 +1,23 @@ +'use strict'; +const test_desc = 'Wrong Characteristic name. Reject with TypeError.'; +const expected = new DOMException( + "Failed to execute 'FUNCTION_NAME' on " + + "'BluetoothRemoteGATTService': Invalid Characteristic name: " + + "'wrong_name'. " + + "It must be a valid UUID alias (e.g. 0x1234), " + + "UUID (lowercase hex characters e.g. " + + "'00001234-0000-1000-8000-00805f9b34fb'), " + + "or recognized standard name from " + + "https://www.bluetooth.com/specifications/gatt/characteristics" + + " e.g. 'aerobic_heart_rate_lower_limit'.", + 'TypeError'); + +bluetooth_test(() => getHealthThermometerService() + .then(({service}) => assert_promise_rejects_with_message( + service.CALLS([ + getCharacteristic('wrong_name')| + getCharacteristics('wrong_name') + ]), + expected, + 'Wrong Characteristic name passed.')), + test_desc); diff --git a/tests/wpt/web-platform-tests/bluetooth/script-tests/service/reconnect-during.js b/tests/wpt/web-platform-tests/bluetooth/script-tests/service/reconnect-during.js new file mode 100644 index 00000000000..cc71547ac24 --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/script-tests/service/reconnect-during.js @@ -0,0 +1,36 @@ +'use strict'; +const test_desc = 'disconnect() and connect() called during ' + + 'FUNCTION_NAME. Reject with NetworkError.'; +const expected = new DOMException( + 'GATT Server is disconnected. Cannot retrieve characteristics. ' + + '(Re)connect first with `device.gatt.connect`.', + 'NetworkError'); +let device; + +bluetooth_test(() => getHealthThermometerDeviceWithServicesDiscovered({ + filters: [{services: [health_thermometer.name]}], +}) + .then(_ => ({device} = _)) + .then(() => device.gatt.getPrimaryService(health_thermometer.name)) + .then(service => Promise.all([ + // 1. Make a call to service.FUNCTION_NAME, while the service is still + // valid. + assert_promise_rejects_with_message(service.CALLS([ + getCharacteristic(measurement_interval.name)| + getCharacteristics()| + getCharacteristics(measurement_interval.name)[UUID] + ]), expected), + + // 2. disconnect() and connect before the initial call completes. + // This is accomplished by making the calls without waiting for the + // earlier promises to resolve. + // connect() guarantees on OS-level connection, but disconnect() + // only disconnects the current instance. + // getHealthThermometerDeviceWithServicesDiscovered holds another + // connection in an iframe, so disconnect() and connect() are certain to + // reconnect. However, disconnect() will invalidate the service object so + // the subsequent calls made to it will fail, even after reconnecting. + device.gatt.disconnect(), + device.gatt.connect() + ])), + test_desc); diff --git a/tests/wpt/web-platform-tests/bluetooth/server/getPrimaryService/service-found.https.html b/tests/wpt/web-platform-tests/bluetooth/server/getPrimaryService/service-found.https.html new file mode 100644 index 00000000000..6fccff1813f --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/server/getPrimaryService/service-found.https.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'Request for service. Should return right service'; +let device; + +bluetooth_test(() => getHealthThermometerDevice({ + filters: [{services: ['health_thermometer']}], + optionalServices: ['generic_access'] +}) + .then(_ => ({device} = _)) + .then(() => Promise.all([ + device.gatt.getPrimaryService(generic_access.alias), + device.gatt.getPrimaryService(generic_access.name), + device.gatt.getPrimaryService(generic_access.uuid)])) + .then(services => { + services.forEach(service => { + assert_equals(service.uuid, generic_access.uuid, + 'Service UUID should be the same as requested UUID.'); + assert_true(service.isPrimary, + 'getPrimaryService should return a primary service.'); + assert_equals(service.device, device, + 'Service device should be the same as device.'); + }) + }), test_desc); +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/server/getPrimaryService/two-iframes-from-same-origin.https.html b/tests/wpt/web-platform-tests/bluetooth/server/getPrimaryService/two-iframes-from-same-origin.https.html new file mode 100644 index 00000000000..eb20225e4ba --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/server/getPrimaryService/two-iframes-from-same-origin.https.html @@ -0,0 +1,80 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +"use strict"; +const test_desc = 'Two iframes in the same origin should be able to access ' + + 'each other\'s services'; + +const iframe1 = document.createElement('iframe'); +const iframe2 = document.createElement('iframe'); + +function add_iframe(iframe) { + let promise = new Promise(resolve => iframe.addEventListener('load', resolve)); + iframe.src = '/bluetooth/resources/health-thermometer-iframe.html'; + document.body.appendChild(iframe); + return promise; +} + +function send_message(iframe, command, arg, assert_func) { + let promise = new Promise((resolve, reject) => { + window.addEventListener('message', (messageEvent) => { + try { + assert_func(messageEvent.data); + } catch (e) { + reject(e); + } + resolve(); + }, { once: true }); + }); + if (command === 'RequestAndConnect') { + arg = {filters: [{services: [arg]}]}; + } + callWithTrustedClick(() => iframe.contentWindow.postMessage({ + type: command, + options: arg, + }, '*')); + return promise; +} + +bluetooth_test(() => getHealthThermometerDevice() + // 1. Add the first iframe. + .then(() => add_iframe(iframe1)) + // 2. Connect with the first iframe, requesting the health thermometer + // service. + .then(() => send_message(iframe1, 'RequestAndConnect', 'health_thermometer', + msg => assert_equals(msg, 'Connected'))) + // 3. Access the health thermometer service with the first iframe + // (successfully). + .then(() => send_message(iframe1, 'GetService', 'health_thermometer', + msg => assert_equals(msg, 'ServiceReceived'))) + // 4. Access the generic access service with the first iframe + // (unsuccessfully). + .then(() => send_message(iframe1, 'GetService', 'generic_access', msg => { + let split_msg = msg.split(': '); + assert_equals(split_msg[0], 'FAIL'); + assert_equals(split_msg[1], 'SecurityError'); + })) + // 5. Add the second iframe. + .then(() => add_iframe(iframe2)) + // 6. Connect with the second iframe, requesting the generic access service. + .then(() => send_message(iframe2, 'RequestAndConnect', 'generic_access', + msg => assert_equals(msg, 'Connected'))) + // 7. Access the health thermometer service with the second iframe + // (successfully). Both iframes should have access to both services at this + // point since they have the same origin. + .then(() => send_message(iframe2, 'GetService', 'health_thermometer', + msg => assert_equals(msg, 'ServiceReceived'))) + // 8. Access the generic access service with the second iframe + // (unsuccessfully). + .then(() => send_message(iframe2, 'GetService', 'generic_access', + msg => assert_equals(msg, 'ServiceReceived'))) + // 9. Access the generic access service with the first iframe + // (successfully). + .then(() => send_message(iframe1, 'GetService', 'generic_access', + msg => assert_equals(msg, 'ServiceReceived'))), + test_desc); +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/server/getPrimaryServices/blocklisted-services-with-uuid.https.html b/tests/wpt/web-platform-tests/bluetooth/server/getPrimaryServices/blocklisted-services-with-uuid.https.html new file mode 100644 index 00000000000..aa0b556c3fd --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/server/getPrimaryServices/blocklisted-services-with-uuid.https.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'Request for services. Does not return blocklisted service.'; +const expected = new DOMException( + 'Origin is not allowed to access the service. Tip: Add the service ' + + 'UUID to \'optionalServices\' in requestDevice() options. ' + + 'https://goo.gl/HxfxSQ', 'SecurityError'); + +bluetooth_test(() => getHIDDevice({ + filters: [{services: ['device_information']}], + optionalServices: ['human_interface_device'] +}) + .then(({device}) => assert_promise_rejects_with_message( + device.gatt.getPrimaryServices('human_interface_device'), + expected)), + test_desc); +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/server/getPrimaryServices/blocklisted-services.https.html b/tests/wpt/web-platform-tests/bluetooth/server/getPrimaryServices/blocklisted-services.https.html new file mode 100644 index 00000000000..2a34e0bf50a --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/server/getPrimaryServices/blocklisted-services.https.html @@ -0,0 +1,26 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'Request for services. Does not return blocklisted service.'; + +bluetooth_test(() => getHIDDevice({ + filters: [{services: ['device_information']}], + optionalServices: ['generic_access', 'human_interface_device'] +}) + .then(({device}) => device.gatt.getPrimaryServices()) + .then(services => { + assert_equals(services.length, 2); + let uuid_set = new Set(services.map(s => s.uuid)); + + assert_equals(uuid_set.size, 2); + assert_true(uuid_set.has(BluetoothUUID.getService('generic_access'))); + assert_true(uuid_set.has(BluetoothUUID.getService('device_information'))); + assert_false( + uuid_set.has(BluetoothUUID.getService('human_interface_device'))); + }), test_desc); +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/server/getPrimaryServices/correct-services.https.html b/tests/wpt/web-platform-tests/bluetooth/server/getPrimaryServices/correct-services.https.html new file mode 100644 index 00000000000..9fffbd5d00e --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/server/getPrimaryServices/correct-services.https.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'Find correct services with UUID.'; +let device, fake_peripheral; + +bluetooth_test(() => getConnectedHealthThermometerDevice({ + filters: [{services: ['health_thermometer']}] +}) + .then(_ => ({device, fake_peripheral} = _)) + .then(() => fake_peripheral.addFakeService({uuid: 'health_thermometer'})) + .then(fake_service => Promise.all([ + fake_service.addFakeCharacteristic({ + uuid: 'temperature_measurement', properties: ['indicate']}), + fake_service.addFakeCharacteristic({ + uuid: 'temperature_measurement', properties: ['indicate']}) + ])) + .then(() => fake_peripheral.setNextGATTDiscoveryResponse({code:HCI_SUCCESS})) + .then(() => device.gatt.getPrimaryServices('health_thermometer')) + .then(services => Promise.all([ + services[0].getCharacteristics(), + services[1].getCharacteristics()])) + .then(([characteristics1, characteristics2]) => { + if (characteristics1.length === 2) + assert_equals(characteristics2.length, 3); + else if (characteristics2.length === 2) + assert_equals(characteristics1.length, 3); + else + assert_unreached('Invalid lengths.'); + }), test_desc); +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/server/getPrimaryServices/services-found-with-uuid.https.html b/tests/wpt/web-platform-tests/bluetooth/server/getPrimaryServices/services-found-with-uuid.https.html new file mode 100644 index 00000000000..6face0acfae --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/server/getPrimaryServices/services-found-with-uuid.https.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'Request for services. Should return right number of ' + + 'services.'; + +bluetooth_test(() => getTwoHealthThermometerServicesDevice({ + filters: [{services: ['health_thermometer']}] +}) + .then(({device}) => Promise.all([ + device.gatt.getPrimaryServices(health_thermometer.alias), + device.gatt.getPrimaryServices(health_thermometer.name), + device.gatt.getPrimaryServices(health_thermometer.uuid)])) + .then(services_arrays => services_arrays.forEach(services => { + assert_equals(services.length, 2); + services.forEach(service => { + assert_equals(service.uuid, + BluetoothUUID.getService('health_thermometer')); + assert_true(service.isPrimary); + }); + })), test_desc); +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/server/getPrimaryServices/services-found.https.html b/tests/wpt/web-platform-tests/bluetooth/server/getPrimaryServices/services-found.https.html new file mode 100644 index 00000000000..6edb1118c2a --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/server/getPrimaryServices/services-found.https.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'Find all services in a device.'; + +bluetooth_test(() => getTwoHealthThermometerServicesDevice({ + filters: [{services: ['health_thermometer']}], + optionalServices: ['generic_access'] +}) + .then(({device}) => device.gatt.getPrimaryServices()) + .then(services => { + // Expect three service instances. + assert_equals(services.length, 3); + services.forEach(s => assert_true(s.isPrimary)); + + let uuid_set = new Set(services.map(s => s.uuid)); + // Two of the expected services are 'health_thermometer', so + // only 2 unique UUIDs. + assert_equals(uuid_set.size, 2); + + assert_true(uuid_set.has(BluetoothUUID.getService('generic_access'))); + assert_true(uuid_set.has(BluetoothUUID.getService('health_thermometer'))); + }), test_desc); +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/server/getPrimaryServices/services-not-found.https.html b/tests/wpt/web-platform-tests/bluetooth/server/getPrimaryServices/services-not-found.https.html new file mode 100644 index 00000000000..2632ec6e7fe --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/server/getPrimaryServices/services-not-found.https.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'Request for services in a device with no services. Reject ' + + 'with NotFoundError.'; +const expected = new DOMException('No Services found in device.', + 'NotFoundError'); + +bluetooth_test(() => getEmptyHealthThermometerDevice() + .then(({device}) => assert_promise_rejects_with_message( + device.gatt.getPrimaryServices(), + expected)), + test_desc); +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristic/gen-blocklisted-characteristic.https.html b/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristic/gen-blocklisted-characteristic.https.html new file mode 100644 index 00000000000..9e42a469c67 --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristic/gen-blocklisted-characteristic.https.html @@ -0,0 +1,26 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'Serial Number String characteristic is blocklisted. ' + + 'Should reject with SecurityError.'; +const expected = new DOMException( + 'getCharacteristic(s) called with blocklisted UUID. https://goo.gl/4NeimX', + 'SecurityError'); + +bluetooth_test(() => getHIDDevice({ + filters: [{services: ['device_information']}] +}) + .then(({device}) => device.gatt.getPrimaryService('device_information')) + .then(service => assert_promise_rejects_with_message( + service.getCharacteristic('serial_number_string'), + expected, + 'Serial Number String characteristic is blocklisted.')), + test_desc); + +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristic/gen-characteristic-not-found.https.html b/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristic/gen-characteristic-not-found.https.html new file mode 100644 index 00000000000..5fc3ec470ac --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristic/gen-characteristic-not-found.https.html @@ -0,0 +1,22 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'Request for absent characteristics with UUID. ' + + 'Reject with NotFoundError.'; + +bluetooth_test(() => getEmptyHealthThermometerService() + .then(({service}) => assert_promise_rejects_with_message( + service.getCharacteristic('battery_level'), + new DOMException( + `No Characteristics matching UUID ${battery_level.uuid} found ` + + `in Service with UUID ${health_thermometer.uuid}.`, + 'NotFoundError'))), + test_desc); + +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristic/gen-garbage-collection-ran-during-error.https.html b/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristic/gen-garbage-collection-ran-during-error.https.html new file mode 100644 index 00000000000..0b81768d508 --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristic/gen-garbage-collection-ran-during-error.https.html @@ -0,0 +1,30 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'Garbage Collection ran during getCharacteristic ' + + 'call that fails. Should not crash'; +const expected = new DOMException( + 'GATT Server is disconnected. Cannot retrieve characteristics. ' + + '(Re)connect first with `device.gatt.connect`.', + 'NetworkError'); +let promise; + +bluetooth_test(() => getHealthThermometerService() + .then(({service}) => { + promise = assert_promise_rejects_with_message( + service.getCharacteristic('measurement_interval'), expected); + // Disconnect called to clear attributeInstanceMap and allow the object to + // get garbage collected. + service.device.gatt.disconnect(); + }) + .then(runGarbageCollection) + .then(() => promise), + test_desc); + +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristic/gen-get-same-object.https.html b/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristic/gen-get-same-object.https.html new file mode 100644 index 00000000000..e8fc6542cce --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristic/gen-get-same-object.https.html @@ -0,0 +1,31 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'Calls to getCharacteristic should return the same object.'; + +bluetooth_test(() => getHealthThermometerService() + .then(({service}) => Promise.all([ + service.getCharacteristic('measurement_interval'), + service.getCharacteristic('measurement_interval')])) + .then(([characteristics_first_call, characteristics_second_call]) => { + // Convert to arrays if necessary. + characteristics_first_call = [].concat(characteristics_first_call); + characteristics_second_call = [].concat(characteristics_second_call); + + let first_call_set = new Set(characteristics_first_call); + assert_equals(characteristics_first_call.length, first_call_set.size); + let second_call_set = new Set(characteristics_second_call); + assert_equals(characteristics_second_call.length, second_call_set.size); + + characteristics_first_call.forEach(characteristic => { + assert_true(second_call_set.has(characteristic)); + }); + }), test_desc); + +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristic/gen-invalid-characteristic-name.https.html b/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristic/gen-invalid-characteristic-name.https.html new file mode 100644 index 00000000000..08c1352155a --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristic/gen-invalid-characteristic-name.https.html @@ -0,0 +1,30 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'Wrong Characteristic name. Reject with TypeError.'; +const expected = new DOMException( + "Failed to execute 'getCharacteristic' on " + + "'BluetoothRemoteGATTService': Invalid Characteristic name: " + + "'wrong_name'. " + + "It must be a valid UUID alias (e.g. 0x1234), " + + "UUID (lowercase hex characters e.g. " + + "'00001234-0000-1000-8000-00805f9b34fb'), " + + "or recognized standard name from " + + "https://www.bluetooth.com/specifications/gatt/characteristics" + + " e.g. 'aerobic_heart_rate_lower_limit'.", + 'TypeError'); + +bluetooth_test(() => getHealthThermometerService() + .then(({service}) => assert_promise_rejects_with_message( + service.getCharacteristic('wrong_name'), + expected, + 'Wrong Characteristic name passed.')), + test_desc); + +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristic/gen-reconnect-during.https.html b/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristic/gen-reconnect-during.https.html new file mode 100644 index 00000000000..2fe9cd06cf7 --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristic/gen-reconnect-during.https.html @@ -0,0 +1,42 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'disconnect() and connect() called during ' + + 'getCharacteristic. Reject with NetworkError.'; +const expected = new DOMException( + 'GATT Server is disconnected. Cannot retrieve characteristics. ' + + '(Re)connect first with `device.gatt.connect`.', + 'NetworkError'); +let device; + +bluetooth_test(() => getHealthThermometerDeviceWithServicesDiscovered({ + filters: [{services: [health_thermometer.name]}], +}) + .then(_ => ({device} = _)) + .then(() => device.gatt.getPrimaryService(health_thermometer.name)) + .then(service => Promise.all([ + // 1. Make a call to service.getCharacteristic, while the service is still + // valid. + assert_promise_rejects_with_message(service.getCharacteristic(measurement_interval.name), expected), + + // 2. disconnect() and connect before the initial call completes. + // This is accomplished by making the calls without waiting for the + // earlier promises to resolve. + // connect() guarantees on OS-level connection, but disconnect() + // only disconnects the current instance. + // getHealthThermometerDeviceWithServicesDiscovered holds another + // connection in an iframe, so disconnect() and connect() are certain to + // reconnect. However, disconnect() will invalidate the service object so + // the subsequent calls made to it will fail, even after reconnecting. + device.gatt.disconnect(), + device.gatt.connect() + ])), + test_desc); + +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristics/gen-blocklisted-characteristic-with-uuid.https.html b/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristics/gen-blocklisted-characteristic-with-uuid.https.html new file mode 100644 index 00000000000..eeaa5b3da30 --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristics/gen-blocklisted-characteristic-with-uuid.https.html @@ -0,0 +1,26 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'Serial Number String characteristic is blocklisted. ' + + 'Should reject with SecurityError.'; +const expected = new DOMException( + 'getCharacteristic(s) called with blocklisted UUID. https://goo.gl/4NeimX', + 'SecurityError'); + +bluetooth_test(() => getHIDDevice({ + filters: [{services: ['device_information']}] +}) + .then(({device}) => device.gatt.getPrimaryService('device_information')) + .then(service => assert_promise_rejects_with_message( + service.getCharacteristics('serial_number_string'), + expected, + 'Serial Number String characteristic is blocklisted.')), + test_desc); + +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristics/gen-characteristic-not-found-with-uuid.https.html b/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristics/gen-characteristic-not-found-with-uuid.https.html new file mode 100644 index 00000000000..7f32b30b303 --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristics/gen-characteristic-not-found-with-uuid.https.html @@ -0,0 +1,22 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'Request for absent characteristics with UUID. ' + + 'Reject with NotFoundError.'; + +bluetooth_test(() => getEmptyHealthThermometerService() + .then(({service}) => assert_promise_rejects_with_message( + service.getCharacteristics('battery_level'), + new DOMException( + `No Characteristics matching UUID ${battery_level.uuid} found ` + + `in Service with UUID ${health_thermometer.uuid}.`, + 'NotFoundError'))), + test_desc); + +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristics/gen-garbage-collection-ran-during-error-with-uuid.https.html b/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristics/gen-garbage-collection-ran-during-error-with-uuid.https.html new file mode 100644 index 00000000000..36ef29b6c5b --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristics/gen-garbage-collection-ran-during-error-with-uuid.https.html @@ -0,0 +1,30 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'Garbage Collection ran during getCharacteristics ' + + 'call that fails. Should not crash'; +const expected = new DOMException( + 'GATT Server is disconnected. Cannot retrieve characteristics. ' + + '(Re)connect first with `device.gatt.connect`.', + 'NetworkError'); +let promise; + +bluetooth_test(() => getHealthThermometerService() + .then(({service}) => { + promise = assert_promise_rejects_with_message( + service.getCharacteristics('measurement_interval'), expected); + // Disconnect called to clear attributeInstanceMap and allow the object to + // get garbage collected. + service.device.gatt.disconnect(); + }) + .then(runGarbageCollection) + .then(() => promise), + test_desc); + +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristics/gen-garbage-collection-ran-during-error.https.html b/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristics/gen-garbage-collection-ran-during-error.https.html new file mode 100644 index 00000000000..5768ff42abc --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristics/gen-garbage-collection-ran-during-error.https.html @@ -0,0 +1,30 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'Garbage Collection ran during getCharacteristics ' + + 'call that fails. Should not crash'; +const expected = new DOMException( + 'GATT Server is disconnected. Cannot retrieve characteristics. ' + + '(Re)connect first with `device.gatt.connect`.', + 'NetworkError'); +let promise; + +bluetooth_test(() => getHealthThermometerService() + .then(({service}) => { + promise = assert_promise_rejects_with_message( + service.getCharacteristics(), expected); + // Disconnect called to clear attributeInstanceMap and allow the object to + // get garbage collected. + service.device.gatt.disconnect(); + }) + .then(runGarbageCollection) + .then(() => promise), + test_desc); + +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristics/gen-get-same-object-with-uuid.https.html b/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristics/gen-get-same-object-with-uuid.https.html new file mode 100644 index 00000000000..917d84df4c7 --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristics/gen-get-same-object-with-uuid.https.html @@ -0,0 +1,31 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'Calls to getCharacteristics should return the same object.'; + +bluetooth_test(() => getHealthThermometerService() + .then(({service}) => Promise.all([ + service.getCharacteristics('measurement_interval'), + service.getCharacteristics('measurement_interval')])) + .then(([characteristics_first_call, characteristics_second_call]) => { + // Convert to arrays if necessary. + characteristics_first_call = [].concat(characteristics_first_call); + characteristics_second_call = [].concat(characteristics_second_call); + + let first_call_set = new Set(characteristics_first_call); + assert_equals(characteristics_first_call.length, first_call_set.size); + let second_call_set = new Set(characteristics_second_call); + assert_equals(characteristics_second_call.length, second_call_set.size); + + characteristics_first_call.forEach(characteristic => { + assert_true(second_call_set.has(characteristic)); + }); + }), test_desc); + +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristics/gen-get-same-object.https.html b/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristics/gen-get-same-object.https.html new file mode 100644 index 00000000000..ebdd803efa2 --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristics/gen-get-same-object.https.html @@ -0,0 +1,31 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'Calls to getCharacteristics should return the same object.'; + +bluetooth_test(() => getHealthThermometerService() + .then(({service}) => Promise.all([ + service.getCharacteristics(), + service.getCharacteristics()])) + .then(([characteristics_first_call, characteristics_second_call]) => { + // Convert to arrays if necessary. + characteristics_first_call = [].concat(characteristics_first_call); + characteristics_second_call = [].concat(characteristics_second_call); + + let first_call_set = new Set(characteristics_first_call); + assert_equals(characteristics_first_call.length, first_call_set.size); + let second_call_set = new Set(characteristics_second_call); + assert_equals(characteristics_second_call.length, second_call_set.size); + + characteristics_first_call.forEach(characteristic => { + assert_true(second_call_set.has(characteristic)); + }); + }), test_desc); + +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristics/gen-invalid-characteristic-name.https.html b/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristics/gen-invalid-characteristic-name.https.html new file mode 100644 index 00000000000..0bcb25cdf0c --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristics/gen-invalid-characteristic-name.https.html @@ -0,0 +1,30 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'Wrong Characteristic name. Reject with TypeError.'; +const expected = new DOMException( + "Failed to execute 'getCharacteristics' on " + + "'BluetoothRemoteGATTService': Invalid Characteristic name: " + + "'wrong_name'. " + + "It must be a valid UUID alias (e.g. 0x1234), " + + "UUID (lowercase hex characters e.g. " + + "'00001234-0000-1000-8000-00805f9b34fb'), " + + "or recognized standard name from " + + "https://www.bluetooth.com/specifications/gatt/characteristics" + + " e.g. 'aerobic_heart_rate_lower_limit'.", + 'TypeError'); + +bluetooth_test(() => getHealthThermometerService() + .then(({service}) => assert_promise_rejects_with_message( + service.getCharacteristics('wrong_name'), + expected, + 'Wrong Characteristic name passed.')), + test_desc); + +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristics/gen-reconnect-during-with-uuid.https.html b/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristics/gen-reconnect-during-with-uuid.https.html new file mode 100644 index 00000000000..4226bcbbfa2 --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristics/gen-reconnect-during-with-uuid.https.html @@ -0,0 +1,42 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'disconnect() and connect() called during ' + + 'getCharacteristics. Reject with NetworkError.'; +const expected = new DOMException( + 'GATT Server is disconnected. Cannot retrieve characteristics. ' + + '(Re)connect first with `device.gatt.connect`.', + 'NetworkError'); +let device; + +bluetooth_test(() => getHealthThermometerDeviceWithServicesDiscovered({ + filters: [{services: [health_thermometer.name]}], +}) + .then(_ => ({device} = _)) + .then(() => device.gatt.getPrimaryService(health_thermometer.name)) + .then(service => Promise.all([ + // 1. Make a call to service.getCharacteristics, while the service is still + // valid. + assert_promise_rejects_with_message(service.getCharacteristics(measurement_interval.name), expected), + + // 2. disconnect() and connect before the initial call completes. + // This is accomplished by making the calls without waiting for the + // earlier promises to resolve. + // connect() guarantees on OS-level connection, but disconnect() + // only disconnects the current instance. + // getHealthThermometerDeviceWithServicesDiscovered holds another + // connection in an iframe, so disconnect() and connect() are certain to + // reconnect. However, disconnect() will invalidate the service object so + // the subsequent calls made to it will fail, even after reconnecting. + device.gatt.disconnect(), + device.gatt.connect() + ])), + test_desc); + +</script> diff --git a/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristics/gen-reconnect-during.https.html b/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristics/gen-reconnect-during.https.html new file mode 100644 index 00000000000..9157275640c --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/service/getCharacteristics/gen-reconnect-during.https.html @@ -0,0 +1,42 @@ +<!-- Generated by //third_party/WebKit/LayoutTests/bluetooth/generate.py --> +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<script> +'use strict'; +const test_desc = 'disconnect() and connect() called during ' + + 'getCharacteristics. Reject with NetworkError.'; +const expected = new DOMException( + 'GATT Server is disconnected. Cannot retrieve characteristics. ' + + '(Re)connect first with `device.gatt.connect`.', + 'NetworkError'); +let device; + +bluetooth_test(() => getHealthThermometerDeviceWithServicesDiscovered({ + filters: [{services: [health_thermometer.name]}], +}) + .then(_ => ({device} = _)) + .then(() => device.gatt.getPrimaryService(health_thermometer.name)) + .then(service => Promise.all([ + // 1. Make a call to service.getCharacteristics, while the service is still + // valid. + assert_promise_rejects_with_message(service.getCharacteristics(), expected), + + // 2. disconnect() and connect before the initial call completes. + // This is accomplished by making the calls without waiting for the + // earlier promises to resolve. + // connect() guarantees on OS-level connection, but disconnect() + // only disconnects the current instance. + // getHealthThermometerDeviceWithServicesDiscovered holds another + // connection in an iframe, so disconnect() and connect() are certain to + // reconnect. However, disconnect() will invalidate the service object so + // the subsequent calls made to it will fail, even after reconnecting. + device.gatt.disconnect(), + device.gatt.connect() + ])), + test_desc); + +</script> diff --git a/tests/wpt/web-platform-tests/common/namespaces.js b/tests/wpt/web-platform-tests/common/namespaces.js new file mode 100644 index 00000000000..741bdc1d88a --- /dev/null +++ b/tests/wpt/web-platform-tests/common/namespaces.js @@ -0,0 +1,4 @@ +var NAMESPACES = { + "svg": "http://www.w3.org/2000/svg", + "xlink": "http://www.w3.org/1999/xlink", +}; diff --git a/tests/wpt/web-platform-tests/content-security-policy/embedded-enforcement/required_csp-header.html b/tests/wpt/web-platform-tests/content-security-policy/embedded-enforcement/required_csp-header.html index 3d8e337f2d4..9e7894b6b30 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/embedded-enforcement/required_csp-header.html +++ b/tests/wpt/web-platform-tests/content-security-policy/embedded-enforcement/required_csp-header.html @@ -50,7 +50,9 @@ { "name": "Wrong value of `csp` should not trigger sending Sec-Required-CSP Header - report-uri present", "csp": "script-src 'unsafe-inline'; report-uri resources/dummy-report.php", "expected": null }, - // TODO(andypaicu): when `report-to` is implemented, add tests here. + { "name": "Wrong value of `csp` should not trigger sending Sec-Required-CSP Header - report-to present", + "csp": "script-src 'unsafe-inline'; report-to resources/dummy-report.php", + "expected": null }, ]; tests.forEach(test => { diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/reporting-api-doesnt-send-reports-without-violation.https.sub.html b/tests/wpt/web-platform-tests/content-security-policy/reporting-api/reporting-api-doesnt-send-reports-without-violation.https.sub.html index cb3842854c8..cb3842854c8 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/reporting/reporting-api-doesnt-send-reports-without-violation.https.sub.html +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting-api/reporting-api-doesnt-send-reports-without-violation.https.sub.html diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/reporting-api-doesnt-send-reports-without-violation.https.sub.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/reporting-api/reporting-api-doesnt-send-reports-without-violation.https.sub.html.sub.headers index 9a025812946..15a42ec23fb 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/reporting/reporting-api-doesnt-send-reports-without-violation.https.sub.html.sub.headers +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting-api/reporting-api-doesnt-send-reports-without-violation.https.sub.html.sub.headers @@ -2,6 +2,6 @@ Expires: Mon, 26 Jul 1997 05:00:00 GMT Cache-Control: no-store, no-cache, must-revalidate Cache-Control: post-check=0, pre-check=0, false Pragma: no-cache -Set-Cookie: reporting-api-doesnt-send-reports-without-violation={{$id:uuid()}}; Path=/content-security-policy/reporting +Set-Cookie: reporting-api-doesnt-send-reports-without-violation={{$id:uuid()}}; Path=/content-security-policy/reporting-api Report-To: { "url": "https://{{host}}:{{ports[https][0]}}/content-security-policy/support/report.py?op=put&reportID={{$id}}", "group": "csp-group", "max-age": 10886400 } Content-Security-Policy: script-src 'self' 'unsafe-inline'; img-src 'self'; report-to csp-group diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/reporting-api-report-only-sends-reports-on-violation.https.sub.html b/tests/wpt/web-platform-tests/content-security-policy/reporting-api/reporting-api-report-only-sends-reports-on-violation.https.sub.html index 61658863a7f..61658863a7f 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/reporting/reporting-api-report-only-sends-reports-on-violation.https.sub.html +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting-api/reporting-api-report-only-sends-reports-on-violation.https.sub.html diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/reporting-api-report-only-sends-reports-on-violation.https.sub.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/reporting-api/reporting-api-report-only-sends-reports-on-violation.https.sub.html.sub.headers index 990cfafb090..e2810108a84 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/reporting/reporting-api-report-only-sends-reports-on-violation.https.sub.html.sub.headers +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting-api/reporting-api-report-only-sends-reports-on-violation.https.sub.html.sub.headers @@ -2,6 +2,6 @@ Expires: Mon, 26 Jul 1997 05:00:00 GMT Cache-Control: no-store, no-cache, must-revalidate Cache-Control: post-check=0, pre-check=0, false Pragma: no-cache -Set-Cookie: reporting-api-report-only-sends-reports-on-violation={{$id:uuid()}}; Path=/content-security-policy/reporting +Set-Cookie: reporting-api-report-only-sends-reports-on-violation={{$id:uuid()}}; Path=/content-security-policy/reporting-api Report-To: { "url": "https://{{host}}:{{ports[https][0]}}/content-security-policy/support/report.py?op=put&reportID={{$id}}", "group": "csp-group", "max-age": 10886400 } Content-Security-Policy-Report-Only: script-src 'self' 'unsafe-inline'; img-src 'none'; report-to csp-group diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/reporting-api-report-to-overrides-report-uri-1.https.sub.html b/tests/wpt/web-platform-tests/content-security-policy/reporting-api/reporting-api-report-to-overrides-report-uri-1.https.sub.html index 119a027c4ee..119a027c4ee 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/reporting/reporting-api-report-to-overrides-report-uri-1.https.sub.html +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting-api/reporting-api-report-to-overrides-report-uri-1.https.sub.html diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/reporting-api-report-to-overrides-report-uri-1.https.sub.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/reporting-api/reporting-api-report-to-overrides-report-uri-1.https.sub.html.sub.headers index c696384f349..4ab90061d67 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/reporting/reporting-api-report-to-overrides-report-uri-1.https.sub.html.sub.headers +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting-api/reporting-api-report-to-overrides-report-uri-1.https.sub.html.sub.headers @@ -2,6 +2,6 @@ Expires: Mon, 26 Jul 1997 05:00:00 GMT Cache-Control: no-store, no-cache, must-revalidate Cache-Control: post-check=0, pre-check=0, false Pragma: no-cache -Set-Cookie: reporting-api-report-to-overrides-report-uri-1={{$id:uuid()}}; Path=/content-security-policy/reporting +Set-Cookie: reporting-api-report-to-overrides-report-uri-1={{$id:uuid()}}; Path=/content-security-policy/reporting-api Content-Security-Policy: script-src 'self' 'unsafe-inline'; img-src 'none'; report-uri "/content-security-policy/support/report.py?op=put&reportID={{$id}}"; report-to csp-group Report-To: { "url": "https://{{host}}:{{ports[https][0]}}/content-security-policy/support/report.py?op=put&reportID={{$id:uuid()}}", "group": "csp-group", "max-age": 10886400 } diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/reporting-api-report-to-overrides-report-uri-2.https.sub.html b/tests/wpt/web-platform-tests/content-security-policy/reporting-api/reporting-api-report-to-overrides-report-uri-2.https.sub.html index 3c4d2446aee..3c4d2446aee 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/reporting/reporting-api-report-to-overrides-report-uri-2.https.sub.html +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting-api/reporting-api-report-to-overrides-report-uri-2.https.sub.html diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/reporting-api-report-to-overrides-report-uri-2.https.sub.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/reporting-api/reporting-api-report-to-overrides-report-uri-2.https.sub.html.sub.headers index 2ac676bae5e..f2eaaa5fe7e 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/reporting/reporting-api-report-to-overrides-report-uri-2.https.sub.html.sub.headers +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting-api/reporting-api-report-to-overrides-report-uri-2.https.sub.html.sub.headers @@ -2,6 +2,6 @@ Expires: Mon, 26 Jul 1997 05:00:00 GMT Cache-Control: no-store, no-cache, must-revalidate Cache-Control: post-check=0, pre-check=0, false Pragma: no-cache -Set-Cookie: reporting-api-report-to-overrides-report-uri-2={{$id:uuid()}}; Path=/content-security-policy/reporting +Set-Cookie: reporting-api-report-to-overrides-report-uri-2={{$id:uuid()}}; Path=/content-security-policy/reporting-api Content-Security-Policy: script-src 'self' 'unsafe-inline'; img-src 'none'; report-to csp-group; report-uri "/content-security-policy/support/report.py?op=put&reportID={{$id}}" Report-To: { "url": "https://{{host}}:{{ports[https][0]}}/content-security-policy/support/report.py?op=put&reportID={{$id:uuid()}}", "group": "csp-group", "max-age": 10886400 } diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/reporting-api-sends-reports-on-violation.https.sub.html b/tests/wpt/web-platform-tests/content-security-policy/reporting-api/reporting-api-sends-reports-on-violation.https.sub.html index b2c3adafbe5..b2c3adafbe5 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/reporting/reporting-api-sends-reports-on-violation.https.sub.html +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting-api/reporting-api-sends-reports-on-violation.https.sub.html diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/reporting-api-sends-reports-on-violation.https.sub.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/reporting-api/reporting-api-sends-reports-on-violation.https.sub.html.sub.headers index ff4b9e6fb7d..f262b72327e 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/reporting/reporting-api-sends-reports-on-violation.https.sub.html.sub.headers +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting-api/reporting-api-sends-reports-on-violation.https.sub.html.sub.headers @@ -2,6 +2,6 @@ Expires: Mon, 26 Jul 1997 05:00:00 GMT Cache-Control: no-store, no-cache, must-revalidate Cache-Control: post-check=0, pre-check=0, false Pragma: no-cache -Set-Cookie: reporting-api-sends-reports-on-violation={{$id:uuid()}}; Path=/content-security-policy/reporting +Set-Cookie: reporting-api-sends-reports-on-violation={{$id:uuid()}}; Path=/content-security-policy/reporting-api Report-To: { "url": "https://{{host}}:{{ports[https][0]}}/content-security-policy/support/report.py?op=put&reportID={{$id}}", "group": "csp-group", "max-age": 10886400 } Content-Security-Policy: script-src 'self' 'unsafe-inline'; img-src 'none'; report-to csp-group diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting-api/reporting-api-works-on-frame-src.https.sub.html b/tests/wpt/web-platform-tests/content-security-policy/reporting-api/reporting-api-works-on-frame-src.https.sub.html new file mode 100644 index 00000000000..d633e3b30a1 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting-api/reporting-api-works-on-frame-src.https.sub.html @@ -0,0 +1,22 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test that reports using the report-api service are sent when there's a violation</title> + <script src='/resources/testharness.js'></script> + <script src='/resources/testharnessreport.js'></script> +</head> +<body> + <script> + async_test(function(t2) { + window.addEventListener("securitypolicyviolation", t2.step_func(function(e) { + assert_equals(e.blockedURI, "{{location[scheme]}}://{{location[host]}}/content-security-policy/support/fail.html"); + assert_equals(e.violatedDirective, "frame-src"); + t2.done(); + })); + }, "Event is fired"); + </script> + <iframe src="../support/fail.html"></iframe> + + <script async defer src='../support/checkReport.sub.js?reportField=violated-directive&reportValue=frame-src%20%27none%27'></script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting-api/reporting-api-works-on-frame-src.https.sub.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/reporting-api/reporting-api-works-on-frame-src.https.sub.html.sub.headers new file mode 100644 index 00000000000..8da5216c4a1 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting-api/reporting-api-works-on-frame-src.https.sub.html.sub.headers @@ -0,0 +1,6 @@ +Expires: Mon, 26 Jul 1997 05:00:00 GMT +Cache-Control: no-store, no-cache, must-revalidate +Pragma: no-cache +Set-Cookie: reporting-api-works-on-frame-src={{$id:uuid()}}; Path=/content-security-policy/reporting-api +Report-To: { "url": "https://{{host}}:{{ports[https][0]}}/content-security-policy/support/report.py?op=put&reportID={{$id}}", "group": "csp-group", "max-age": 10886400 } +Content-Security-Policy: script-src 'self' 'unsafe-inline'; frame-src 'none'; report-to csp-group diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/multiple-report-policies.html b/tests/wpt/web-platform-tests/content-security-policy/reporting/multiple-report-policies.html new file mode 100644 index 00000000000..204c1f32024 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/multiple-report-policies.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<html> +<head> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <title>When multiple report-uri endpoints for multiple policies are specified, each gets a report</title> + <!-- CSP headers +Content-Security-Policy-Report-Only: img-src http://* https://*; default-src 'self'; script-src 'self' 'unsafe-inline'; report-uri ../support/report.py?op=put&reportID={{$id}} + +Content-Security-Policy-Report-Only: img-src http://*; default-src 'self'; script-src 'self' 'unsafe-inline'; report-uri ../support/report.py?op=put&reportID={{$id}} +--> +</head> +<body> + <img src="ftp://blah.test" /> + + <script async defer src='../support/checkReport.sub.js?reportField=violated-directive&reportValue=img-src%20http%3A%2F%2F%2A%20https%3A%2F%2F%2A&testName=1-Violation%20report%20status%20OK'></script> + <script async defer src='../support/checkReport.sub.js?reportField=violated-directive&reportValue=img-src%20http%3A%2F%2F%2A&reportCookieName=multiple-report-policies-2&testName=2-Violation%20report%20status%20OK'></script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/multiple-report-policies.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/reporting/multiple-report-policies.html.sub.headers new file mode 100644 index 00000000000..b7affbe7d41 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/multiple-report-policies.html.sub.headers @@ -0,0 +1,8 @@ +Expires: Mon, 26 Jul 1997 05:00:00 GMT +Cache-Control: no-store, no-cache, must-revalidate +Cache-Control: post-check=0, pre-check=0, false +Pragma: no-cache +Set-Cookie: multiple-report-policies={{$id:uuid()}}; Path=/content-security-policy/reporting/ +Content-Security-Policy-Report-Only: img-src http://* https://*; default-src 'self'; script-src 'self' 'unsafe-inline'; report-uri ../support/report.py?op=put&reportID={{$id}} +Set-Cookie: multiple-report-policies-2={{$id:uuid()}}; Path=/content-security-policy/reporting/ +Content-Security-Policy-Report-Only: img-src http://*; default-src 'self'; script-src 'self' 'unsafe-inline'; report-uri ../support/report.py?op=put&reportID={{$id}}
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/report-and-enforce.html b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-and-enforce.html new file mode 100644 index 00000000000..910df20a4c2 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-and-enforce.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html> +<head> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <title>Reporting and enforcing policies can be different</title> + <!-- CSP headers +Content-Security-Policy: img-src 'none'; style-src *; script-src 'self' 'unsafe-inline' + +Content-Security-Policy-Report-Only: img-src *; style-src 'none'; script-src 'self' 'unsafe-inline'; report-uri ../support/report.py?op=put&reportID={{$id}} +--> +</head> +<body> + <script> + var img_test = async_test("The image should be blocked"); + var sheet_test = async_test("The stylesheet should load"); + <!-- This image should be blocked, but should not generate a report--> + var i = document.createElement('img'); + i.onerror = img_test.step_func_done(); + i.onload = img_test.unreached_func("Should not have loaded the img"); + i.src = "../support/fail.png"; + document.body.appendChild(i); + <!-- This font should be loaded but should generate a report--> + var s = document.createElement('link'); + s.onerror = sheet_test.unreached_func("Should have loaded the font"); + s.onload = sheet_test.step_func_done(); + s.type = "text/css"; + s.rel="stylesheet"; + s.href = "../support/fonts.css"; + document.body.appendChild(s); + </script> + <script async defer src='../support/checkReport.sub.js?reportField=violated-directive&reportValue=style-src%20%27none%27'></script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/report-and-enforce.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-and-enforce.html.sub.headers new file mode 100644 index 00000000000..5d4c5dcc4f6 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-and-enforce.html.sub.headers @@ -0,0 +1,7 @@ +Expires: Mon, 26 Jul 1997 05:00:00 GMT +Cache-Control: no-store, no-cache, must-revalidate +Cache-Control: post-check=0, pre-check=0, false +Pragma: no-cache +Set-Cookie: report-and-enforce={{$id:uuid()}}; Path=/content-security-policy/reporting/ +Content-Security-Policy: img-src 'none'; style-src *; script-src 'self' 'unsafe-inline' +Content-Security-Policy-Report-Only: img-src *; style-src 'none'; script-src 'self' 'unsafe-inline'; report-uri ../support/report.py?op=put&reportID={{$id}} diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/report-blocked-data-uri.html b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-blocked-data-uri.html new file mode 100644 index 00000000000..5a75ea1c0a1 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-blocked-data-uri.html @@ -0,0 +1,15 @@ +<!DOCTYPE html> +<html> +<head> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <title>Data-uri images are reported correctly</title> + <!-- CSP headers +Content-Security-Policy: img-src 'none'; report-uri ../support/report.py?op=put&reportID={{$id}} +--> +</head> +<body> + <img src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="> + <script async defer src='../support/checkReport.sub.js?reportField=violated-directive&reportValue=img-src%20%27none%27'></script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/report-blocked-data-uri.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-blocked-data-uri.html.sub.headers new file mode 100644 index 00000000000..52e2f164415 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-blocked-data-uri.html.sub.headers @@ -0,0 +1,6 @@ +Expires: Mon, 26 Jul 1997 05:00:00 GMT +Cache-Control: no-store, no-cache, must-revalidate +Cache-Control: post-check=0, pre-check=0, false +Pragma: no-cache +Set-Cookie: report-blocked-data-uri={{$id:uuid()}}; Path=/content-security-policy/reporting/ +Content-Security-Policy: img-src 'none'; report-uri ../support/report.py?op=put&reportID={{$id}}
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/report-blocked-uri-cross-origin.sub.html b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-blocked-uri-cross-origin.sub.html new file mode 100644 index 00000000000..9d56cdbdd90 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-blocked-uri-cross-origin.sub.html @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<html> +<head> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <title>Cross-origin images are reported correctly</title> + <!-- CSP headers +Content-Security-Policy: script-src 'self' 'unsafe-inline' +Content-Security-Policy-Report-Only: img-src 'none'; script-src 'self' 'unsafe-inline'; report-uri ../support/report.py?op=put&reportID=$id +--> +</head> +<body> + <img src="http://{{domains[www1]}}:{{ports[http][0]}}/content-security-policy/support/pass.png"> + <script async defer src='../support/checkReport.sub.js?reportField=violated-directive&reportValue=img-src%20%27none%27'></script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/report-blocked-uri-cross-origin.sub.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-blocked-uri-cross-origin.sub.html.sub.headers new file mode 100644 index 00000000000..ef5073b3863 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-blocked-uri-cross-origin.sub.html.sub.headers @@ -0,0 +1,7 @@ +Expires: Mon, 26 Jul 1997 05:00:00 GMT +Cache-Control: no-store, no-cache, must-revalidate +Cache-Control: post-check=0, pre-check=0, false +Pragma: no-cache +Set-Cookie: report-blocked-uri-cross-origin={{$id:uuid()}}; Path=/content-security-policy/reporting/ +Content-Security-Policy: script-src 'self' 'unsafe-inline' +Content-Security-Policy-Report-Only: img-src 'none'; script-src 'self' 'unsafe-inline'; report-uri ../support/report.py?op=put&reportID={{$id}}
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/report-blocked-uri.html b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-blocked-uri.html new file mode 100644 index 00000000000..5eb9f297496 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-blocked-uri.html @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<html> +<head> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <title>Blocked relative images are reported correctly</title> + <!-- CSP headers +Content-Security-Policy: script-src 'self' 'unsafe-inline' +Content-Security-Policy-Report-Only: img-src 'none'; script-src 'self' 'unsafe-inline'; report-uri ../support/report.py?op=put&reportID={{$id}} +--> +</head> +<body> + <img src="../support/pass.png"> + <script async defer src='../support/checkReport.sub.js?reportField=violated-directive&reportValue=img-src%20%27none%27'></script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/report-blocked-uri.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-blocked-uri.html.sub.headers new file mode 100644 index 00000000000..6f4b37ef836 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-blocked-uri.html.sub.headers @@ -0,0 +1,7 @@ +Expires: Mon, 26 Jul 1997 05:00:00 GMT +Cache-Control: no-store, no-cache, must-revalidate +Cache-Control: post-check=0, pre-check=0, false +Pragma: no-cache +Set-Cookie: report-blocked-uri={{$id:uuid()}}; Path=/content-security-policy/reporting/ +Content-Security-Policy: script-src 'self' 'unsafe-inline' +Content-Security-Policy-Report-Only: img-src 'none'; script-src 'self' 'unsafe-inline'; report-uri ../support/report.py?op=put&reportID={{$id}}
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/report-cross-origin-no-cookies.sub.html b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-cross-origin-no-cookies.sub.html new file mode 100644 index 00000000000..2922894832d --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-cross-origin-no-cookies.sub.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> +<head> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <title>Cookies are not sent on cross origin violation reports</title> + <!-- CSP headers + Content-Security-Policy: script-src 'unsafe-inline' 'self'; img-src 'none'; report-uri http://{{domains[www1]}}:{{ports[http][0]}}/content-security-policy/support/report.py?op=put&reportID=$id + --> +</head> +<body> +<script> + var test = async_test("Image should not load"); + fetch( + "/cookies/resources/set-cookie.py?name=cspViolationReportCookie1&path=" + encodeURIComponent("{{domains[www1]}}:{{ports[http][0]}}/"), + {mode: 'no-cors', credentials: 'include'}) + .then(() => { + // This image will generate a CSP violation report. + const img = new Image(); + img.onerror = test.step_func_done(); + img.onload = test.unreached_func("Should not have loaded the image"); + + img.src = "../support/fail.png"; + document.body.appendChild(img); + }); +</script> +<script async defer src='../support/checkReport.sub.js?reportField=violated-directive&reportValue=img-src%20%27none%27&noCookies=true'></script> + +</body> +</html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/report-cross-origin-no-cookies.sub.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-cross-origin-no-cookies.sub.html.sub.headers new file mode 100644 index 00000000000..cb1acfcd121 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-cross-origin-no-cookies.sub.html.sub.headers @@ -0,0 +1,6 @@ +Expires: Mon, 26 Jul 1997 05:00:00 GMT +Cache-Control: no-store, no-cache, must-revalidate +Cache-Control: post-check=0, pre-check=0, false +Pragma: no-cache +Set-Cookie: report-cross-origin-no-cookies={{$id:uuid()}}; Path=/content-security-policy/reporting/ +Content-Security-Policy: script-src 'unsafe-inline' 'self'; img-src 'none'; report-uri http://{{domains[www1]}}:{{ports[http][0]}}/content-security-policy/support/report.py?op=put&reportID={{$id}}
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/report-multiple-violations-01.html b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-multiple-violations-01.html new file mode 100644 index 00000000000..7a92f1b9556 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-multiple-violations-01.html @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<html> +<head> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <title>Test multiple violations cause multiple reports</title> + <!-- CSP headers + Content-Security-Policy-Report-Only: script-src 'unsafe-inline' 'self'; img-src 'none'; report-uri ../support/report.py?op=put&reportID={{$id}} + --> +</head> +<body> + <img src="../support/pass.png"> + <img src="../support/pass2.png"> + <script async defer src='../support/checkReport.sub.js?reportField=violated-directive&reportValue=img-src%20%27none%27&reportCount=2'></script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/report-multiple-violations-01.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-multiple-violations-01.html.sub.headers new file mode 100644 index 00000000000..904e2c64aae --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-multiple-violations-01.html.sub.headers @@ -0,0 +1,6 @@ +Expires: Mon, 26 Jul 1997 05:00:00 GMT +Cache-Control: no-store, no-cache, must-revalidate +Cache-Control: post-check=0, pre-check=0, false +Pragma: no-cache +Set-Cookie: report-multiple-violations-01={{$id:uuid()}}; Path=/content-security-policy/reporting/ +Content-Security-Policy-Report-Only: script-src 'unsafe-inline' 'self'; img-src 'none'; report-uri ../support/report.py?op=put&reportID={{$id}}
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/report-multiple-violations-02.html b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-multiple-violations-02.html new file mode 100644 index 00000000000..f604e75cb89 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-multiple-violations-02.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<html> +<head> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <title>This tests that multiple violations on a page trigger multiple reports + if and only if the violations are distinct.</title> + <!-- CSP headers + Content-Security-Policy-Report-Only: script-src 'unsafe-inline' 'self'; report-uri ../support/report.py?op=put&reportID={{$id}} + --> +</head> +<body> + <script> + for (var i = 0; i<5; i++) + setTimeout("alert('PASS: setTimeout #" + i + " executed.');", 0); + </script> + <script async defer src='../support/checkReport.sub.js?reportField=violated-directive&reportValue=script-src%20%27unsafe-inline%27%20%27self%27&reportCount=1'></script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/report-multiple-violations-02.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-multiple-violations-02.html.sub.headers new file mode 100644 index 00000000000..e7bf84b9448 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-multiple-violations-02.html.sub.headers @@ -0,0 +1,6 @@ +Expires: Mon, 26 Jul 1997 05:00:00 GMT +Cache-Control: no-store, no-cache, must-revalidate +Cache-Control: post-check=0, pre-check=0, false +Pragma: no-cache +Set-Cookie: report-multiple-violations-02={{$id:uuid()}}; Path=/content-security-policy/reporting/ +Content-Security-Policy-Report-Only: script-src 'unsafe-inline' 'self'; report-uri ../support/report.py?op=put&reportID={{$id}} diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/report-only-in-meta.sub.html b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-only-in-meta.sub.html new file mode 100644 index 00000000000..d4e7b6fc4e7 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-only-in-meta.sub.html @@ -0,0 +1,39 @@ +<!DOCTYPE html> +<html> +<head> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <title>Report-only policy not allowed in meta tag</title> + <!-- CSP headers + Content-Security-Policy: script-src 'unsafe-inline' 'self' + --> + <!-- since we try to set the report-uri in the meta tag, we have to set the cookie with the reportID in here instead of in the headers file --> + <meta http-equiv="Content-Security-Policy-Report-Only" content="img-src 'none'; report-uri ../support/report.py?op=put&reportID={{$id:uuid()}}"> +</head> +<body> + <script> + var test = async_test("Image should load"); + + <!-- Set cookie for checking if the report exists + --> + fetch( + "support/set-cookie.py?name=report-only-in-meta&value={{$id}}&path=" + encodeURIComponent("/content-security-policy/reporting/"), + {mode: 'no-cors', credentials: 'include'}) + .then(() => { + const img = new Image(); + img.onload = test.step_func_done(); + img.onerror = test.unreached_func("Should have loaded the image"); + + img.src = "../support/pass.png"; + document.body.appendChild(img); + + <!-- this needs to be done after setting the cookie so we do it here --> + const script = document.createElement('script'); + script.async = true; + script.defer = true; + script.src = '../support/checkReport.sub.js?reportExists=false' + document.body.appendChild(script); + }); + </script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/report-only-in-meta.sub.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-only-in-meta.sub.html.sub.headers new file mode 100644 index 00000000000..b56292b4703 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-only-in-meta.sub.html.sub.headers @@ -0,0 +1,5 @@ +Expires: Mon, 26 Jul 1997 05:00:00 GMT +Cache-Control: no-store, no-cache, must-revalidate +Cache-Control: post-check=0, pre-check=0, false +Pragma: no-cache +Content-Security-Policy: script-src 'unsafe-inline' 'self' diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/report-original-url.sub.html b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-original-url.sub.html new file mode 100644 index 00000000000..45c1aeb2de8 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-original-url.sub.html @@ -0,0 +1,51 @@ +<!DOCTYPE html> +<html> +<head> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <!-- CSP headers + Content-Security-Policy: img-src {{location[scheme]}}://{{domains[www1]}}:{{ports[http][0]}}; script-src 'unsafe-inline' 'self'; report-uri ../support/report.py?op=put&reportID=$id + --> +</head> +<body> +<script> +function createListener(expectedURL, test) { + var listener = test.step_func(e => { + if (e.blockedURI == expectedURL) { + document.removeEventListener('securitypolicyviolation', listener); + test.done(); + } + }); + document.addEventListener('securitypolicyviolation', listener); +} + +async_test(t => { + var i = document.createElement('img'); + createListener("{{location[scheme]}}://{{location[host]}}/content-security-policy/support/fail.png?t=1", t); + i.src = "{{location[scheme]}}://{{location[host]}}/content-security-policy/support/fail.png?t=1"; +}, "Direct block, same-origin = full URL in report"); + +async_test(t => { + var i = document.createElement('img'); + createListener("{{location[scheme]}}://{{domains[www2]}}:{{ports[http][0]}}/content-security-policy/support/fail.png?t=2", t); + i.src = "{{location[scheme]}}://{{domains[www2]}}:{{ports[http][0]}}/content-security-policy/support/fail.png?t=2"; +}, "Direct block, cross-origin = full URL in report"); + +async_test(t => { + var i = document.createElement('img'); + var url = "{{location[scheme]}}://{{domains[www1]}}:{{ports[http][0]}}/common/redirect.py?location=" + encodeURIComponent("{{location[scheme]}}://{{location[host]}}/content-security-policy/support/fail.png?t=3"); + createListener("{{location[scheme]}}://{{location[host]}}/content-security-policy/support/fail.png?t=3", t); + i.src = url; +}, "Block after redirect, same-origin = original URL in report"); + +async_test(t => { + var i = document.createElement('img'); + var url = "{{location[scheme]}}://{{domains[www1]}}:{{ports[http][0]}}/common/redirect.py?location=" + encodeURIComponent("{{location[scheme]}}://{{domains[www2]}}:{{ports[http][0]}}/content-security-policy/support/fail.png?t=4"); + createListener("{{location[scheme]}}://{{domains[www2]}}:{{ports[http][0]}}", t); + i.src = url; +}, "Block after redirect, cross-origin = original URL in report"); +</script> + +<script async defer src='../support/checkReport.sub.js?reportField=violated-directive&reportValue=img-src {{location[scheme]}}%3A%2F%2F{{domains[www1]}}%3A{{ports[http][0]}}'></script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/report-original-url.sub.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-original-url.sub.html.sub.headers new file mode 100644 index 00000000000..1031a7a00a9 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-original-url.sub.html.sub.headers @@ -0,0 +1,6 @@ +Expires: Mon, 26 Jul 1997 05:00:00 GMT +Cache-Control: no-store, no-cache, must-revalidate +Cache-Control: post-check=0, pre-check=0, false +Pragma: no-cache +Set-Cookie: report-original-url={{$id:uuid()}}; Path=/content-security-policy/reporting/ +Content-Security-Policy: img-src {{location[scheme]}}://{{domains[www1]}}:{{ports[http][0]}}; script-src 'unsafe-inline' 'self'; report-uri ../support/report.py?op=put&reportID={{$id}} diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/report-same-origin-with-cookies.html b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-same-origin-with-cookies.html new file mode 100644 index 00000000000..515996c1dd3 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-same-origin-with-cookies.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> +<head> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <title>Cookies are sent on same origin violation reports</title> + <!-- CSP headers + Content-Security-Policy: script-src 'unsafe-inline' 'self'; img-src 'none'; report-uri /content-security-policy/support/report.py?op=put&reportID={{$id}} + --> +</head> +<body> +<script> + var test = async_test("Image should not load"); + fetch( + "/cookies/resources/set-cookie.py?name=cspViolationReportCookie2&path=" + encodeURIComponent("/"), + {mode: 'no-cors', credentials: 'include'}) + .then(() => { + // This image will generate a CSP violation report. + const img = new Image(); + img.onerror = test.step_func_done(); + img.onload = test.unreached_func("Should not have loaded the image"); + + img.src = "../support/fail.png"; + document.body.appendChild(img); + }); +</script> +<script async defer src='../support/checkReport.sub.js?reportField=violated-directive&reportValue=img-src%20%27none%27&cookiePresent=cspViolationReportCookie2'></script> + +</body> +</html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/report-same-origin-with-cookies.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-same-origin-with-cookies.html.sub.headers new file mode 100644 index 00000000000..356439db435 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-same-origin-with-cookies.html.sub.headers @@ -0,0 +1,6 @@ +Expires: Mon, 26 Jul 1997 05:00:00 GMT +Cache-Control: no-store, no-cache, must-revalidate +Cache-Control: post-check=0, pre-check=0, false +Pragma: no-cache +Set-Cookie: report-same-origin-with-cookies={{$id:uuid()}}; Path=/content-security-policy/reporting/ +Content-Security-Policy: script-src 'unsafe-inline' 'self'; img-src 'none'; report-uri /content-security-policy/support/report.py?op=put&reportID={{$id}} diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/report-strips-fragment.html b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-strips-fragment.html new file mode 100644 index 00000000000..4ecfa845ecb --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-strips-fragment.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<head> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/content-security-policy/support/testharness-helper.js"></script> + <meta http-equiv="Content-Security-Policy" content="img-src 'none'"> +</head> +<body> + <script> + async_test(t => { + waitUntilCSPEventForURL(t, "https://evil.com/img.png") + .then(t.step_func_done(e => { + var u = new URL(e.documentURI); + assert_equals(u.hash, ""); + })); + + window.location.hash = "should-not-appear-in-report"; + + var i = document.createElement("img"); + i.src = "https://evil.com/img.png#boo"; + }, "Reported document URI does not contain fragments."); + </script> +</body> diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-effective-directive.html b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-effective-directive.html new file mode 100644 index 00000000000..1d959fd4abc --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-effective-directive.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html> +<head> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <title>Violation report is sent if violation occurs.</title> + <!-- CSP headers + Content-Security-Policy: default-src 'self'; report-uri ../support/report.py?op=put&reportID={{$id}} + --> +</head> +<body> + <script> + // This script block will trigger a violation report. + alert('FAIL'); + </script> + <script async defer src='../support/checkReport.sub.js?reportField=violated-directive&reportValue=script-src%20%27self%27'></script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-effective-directive.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-effective-directive.html.sub.headers new file mode 100644 index 00000000000..1fb9842c8aa --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-effective-directive.html.sub.headers @@ -0,0 +1,6 @@ +Expires: Mon, 26 Jul 1997 05:00:00 GMT +Cache-Control: no-store, no-cache, must-revalidate +Cache-Control: post-check=0, pre-check=0, false +Pragma: no-cache +Set-Cookie: report-uri-effective-directive={{$id:uuid()}}; Path=/content-security-policy/reporting/ +Content-Security-Policy: default-src 'self'; report-uri ../support/report.py?op=put&reportID={{$id}} diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-from-child-frame.html b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-from-child-frame.html new file mode 100644 index 00000000000..92b1e1be543 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-from-child-frame.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html> +<head> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <title>Reporting works in child iframes.</title> + <meta http-equiv="Content-Security-Policy" content="script-src 'self' 'nonce-abc'"> +</head> +<body> + <script nonce="abc"> + var t1 = async_test("Check that we received a message from the child frame"); + + window.onmessage = function(e) { + if (e.data == 'cookie set') { + var s = document.createElement('script'); + s.async = true; + s.defer = true; + s.src = '../support/checkReport.sub.js?reportField=violated-directive&reportValue=script-src%20%27self%27%20%27nonce-abc%27&reportCookieName=generate-csp-report'; + document.body.appendChild(s); + + t1.done(); + } + } + </script> + <iframe src="support/generate-csp-report.html"/> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-from-inline-javascript.html b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-from-inline-javascript.html new file mode 100644 index 00000000000..ca65c9054a8 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-from-inline-javascript.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<html> +<head> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <title>Violation report is sent from inline javascript.</title> + <!-- CSP headers + Content-Security-Policy: img-src 'none'; report-uri ../support/report.py?op=put&reportID={{$id}} + --> +</head> +<body> + <script> + // This script block will trigger a violation report. + var i = document.createElement('img'); + i.src = '/security/resources/abe.png'; + document.body.appendChild(i); + </script> + <script async defer src='../support/checkReport.sub.js?reportField=violated-directive&reportValue=img-src%20%27none%27'></script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-from-inline-javascript.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-from-inline-javascript.html.sub.headers new file mode 100644 index 00000000000..07239a066a6 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-from-inline-javascript.html.sub.headers @@ -0,0 +1,6 @@ +Expires: Mon, 26 Jul 1997 05:00:00 GMT +Cache-Control: no-store, no-cache, must-revalidate +Cache-Control: post-check=0, pre-check=0, false +Pragma: no-cache +Set-Cookie: report-uri-from-inline-javascript={{$id:uuid()}}; Path=/content-security-policy/reporting/ +Content-Security-Policy: img-src 'none'; report-uri ../support/report.py?op=put&reportID={{$id}}
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-from-javascript.html b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-from-javascript.html new file mode 100644 index 00000000000..354c69644cf --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-from-javascript.html @@ -0,0 +1,15 @@ +<!DOCTYPE html> +<html> +<head> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <title>Violation report is sent from javascript resource.</title> + <!-- CSP headers + Content-Security-Policy: img-src 'none'; report-uri ../support/report.py?op=put&reportID={{$id}} + --> +</head> +<body> + <script src="../support/inject-image.js"></script> + <script async defer src='../support/checkReport.sub.js?reportField=violated-directive&reportValue=img-src%20%27none%27'></script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-from-javascript.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-from-javascript.html.sub.headers new file mode 100644 index 00000000000..9443226937a --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-from-javascript.html.sub.headers @@ -0,0 +1,6 @@ +Expires: Mon, 26 Jul 1997 05:00:00 GMT +Cache-Control: no-store, no-cache, must-revalidate +Cache-Control: post-check=0, pre-check=0, false +Pragma: no-cache +Set-Cookie: report-uri-from-javascript={{$id:uuid()}}; Path=/content-security-policy/reporting/ +Content-Security-Policy: img-src 'none'; report-uri ../support/report.py?op=put&reportID={{$id}} diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-multiple-reversed.html b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-multiple-reversed.html new file mode 100644 index 00000000000..499d1195370 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-multiple-reversed.html @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<html> +<head> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <title>Content-Security-Policy-Report-Only violation report is sent even when resource is blocked by actual policy.</title> + <!-- CSP headers + Content-Security-Policy-Report-Only: img-src http://*; report-uri ../support/report.py?op=put&reportID={{$id}} + Content-Security-Policy: img-src http://* + --> +</head> +<body> + <img src="ftp://blah.test" /> + <script async defer src='../support/checkReport.sub.js?reportField=violated-directive&reportValue=img-src%20http%3A%2F%2F%2A'></script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-multiple-reversed.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-multiple-reversed.html.sub.headers new file mode 100644 index 00000000000..0c128872102 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-multiple-reversed.html.sub.headers @@ -0,0 +1,7 @@ +Expires: Mon, 26 Jul 1997 05:00:00 GMT +Cache-Control: no-store, no-cache, must-revalidate +Cache-Control: post-check=0, pre-check=0, false +Pragma: no-cache +Set-Cookie: report-uri-multiple-reversed={{$id:uuid()}}; Path=/content-security-policy/reporting/ +Content-Security-Policy-Report-Only: img-src http://*; report-uri ../support/report.py?op=put&reportID={{$id}} +Content-Security-Policy: img-src http://*
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-multiple.html b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-multiple.html new file mode 100644 index 00000000000..268da91296d --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-multiple.html @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<html> +<head> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <title>Content-Security-Policy-Report-Only violation report is sent even when resource is blocked by actual policy.</title> + <!-- CSP headers + Content-Security-Policy: img-src http://* + Content-Security-Policy-Report-Only: img-src http://*; report-uri ../support/report.py?op=put&reportID={{$id}} + --> +</head> +<body> + <img src="ftp://blah.test" /> + <script async defer src='../support/checkReport.sub.js?reportField=violated-directive&reportValue=img-src%20http%3A%2F%2F%2A'></script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-multiple.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-multiple.html.sub.headers new file mode 100644 index 00000000000..d78c8e50fb4 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-multiple.html.sub.headers @@ -0,0 +1,7 @@ +Expires: Mon, 26 Jul 1997 05:00:00 GMT +Cache-Control: no-store, no-cache, must-revalidate +Cache-Control: post-check=0, pre-check=0, false +Pragma: no-cache +Set-Cookie: report-uri-multiple={{$id:uuid()}}; Path=/content-security-policy/reporting/ +Content-Security-Policy: img-src http://* +Content-Security-Policy-Report-Only: img-src http://*; report-uri ../support/report.py?op=put&reportID={{$id}}
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-scheme-relative.html b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-scheme-relative.html new file mode 100644 index 00000000000..e64d797f9a9 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-scheme-relative.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html> +<head> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <title>Relative scheme URIs are accepted as the report-uri.</title> + <!-- CSP headers + Content-Security-Policy: script-src 'self'; report-uri //{{location[host]}}/content-security-policy/support/report.py?op=put&reportID={{$id}} + --> +</head> +<body> + <script> + // This script block will trigger a violation report. + alert('FAIL'); + </script> + <script async defer src='../support/checkReport.sub.js?reportField=violated-directive&reportValue=script-src%20%27self%27'></script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-scheme-relative.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-scheme-relative.html.sub.headers new file mode 100644 index 00000000000..74f263dea50 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-scheme-relative.html.sub.headers @@ -0,0 +1,6 @@ +Expires: Mon, 26 Jul 1997 05:00:00 GMT +Cache-Control: no-store, no-cache, must-revalidate +Cache-Control: post-check=0, pre-check=0, false +Pragma: no-cache +Set-Cookie: report-uri-scheme-relative={{$id:uuid()}}; Path=/content-security-policy/reporting/ +Content-Security-Policy: script-src 'self'; report-uri //{{location[host]}}/content-security-policy/support/report.py?op=put&reportID={{$id}}
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/securitypolicyviolation-idl.html b/tests/wpt/web-platform-tests/content-security-policy/reporting/securitypolicyviolation-idl.html deleted file mode 100644 index e6b1e0dbfde..00000000000 --- a/tests/wpt/web-platform-tests/content-security-policy/reporting/securitypolicyviolation-idl.html +++ /dev/null @@ -1,61 +0,0 @@ -<!DOCTYPE html> -<meta charset="utf-8"> -<title>SecurityPolicyViolationEvent IDL Tests</title> -<link rel="author" title="Louay Bassbouss" href="http://www.fokus.fraunhofer.de"> -<link rel="help" href="http://w3c.github.io/presentation-api/#dfn-controlling-user-agent"> - -<script src=/resources/testharness.js></script> -<script src=/resources/testharnessreport.js></script> -<script src=/resources/WebIDLParser.js></script> -<script src=/resources/idlharness.js></script> - -<script id="idl" type="text/plain"> -[Constructor(DOMString type, optional SecurityPolicyViolationEventInit eventInitDict)] -interface SecurityPolicyViolationEvent : Event { - readonly attribute DOMString documentURI; - readonly attribute DOMString referrer; - readonly attribute DOMString blockedURI; - readonly attribute DOMString violatedDirective; - readonly attribute DOMString effectiveDirective; - readonly attribute DOMString originalPolicy; - readonly attribute DOMString disposition; - readonly attribute DOMString sourceFile; - readonly attribute unsigned short statusCode; - readonly attribute long lineNumber; - readonly attribute long columnNumber; -}; - -dictionary SecurityPolicyViolationEventInit : EventInit { - DOMString documentURI; - DOMString referrer; - DOMString blockedURI; - DOMString violatedDirective; - DOMString effectiveDirective; - DOMString originalPolicy; - DOMString disposition; - DOMString sourceFile; - unsigned short statusCode; - long lineNumber; - long columnNumber; -}; -</script> -<script> -function do_test(dom_idl) { - var idl_array = new IdlArray(); - idl_array.add_untested_idls(dom_idl); - var idls = document.getElementById('idl').textContent; - idl_array.add_idls(idls); - - window.event_to_test = new SecurityPolicyViolationEvent({}); - - idl_array.add_objects({ - SecurityPolicyViolationEvent: ['event_to_test'] - }); - idl_array.test(); -} - -promise_test(function() { - return fetch("/interfaces/dom.idl").then(response => response.text()) - .then(do_test); -}, "Test driver"); -</script> diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/support/generate-csp-report.html b/tests/wpt/web-platform-tests/content-security-policy/reporting/support/generate-csp-report.html new file mode 100644 index 00000000000..c2024c0a1b6 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/support/generate-csp-report.html @@ -0,0 +1,12 @@ +<!DOCTYPE html> +<html> +<body> + <script nonce='abc'> + top.postMessage('cookie set', '*'); + </script> + <script> + // This script block will trigger a violation report. + alert('FAIL'); + </script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/support/generate-csp-report.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/reporting/support/generate-csp-report.html.sub.headers new file mode 100644 index 00000000000..6d1eedb1fcb --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/support/generate-csp-report.html.sub.headers @@ -0,0 +1,6 @@ +Expires: Mon, 26 Jul 1997 05:00:00 GMT +Cache-Control: no-store, no-cache, must-revalidate +Cache-Control: post-check=0, pre-check=0, false +Pragma: no-cache +Set-Cookie: generate-csp-report={{$id:uuid()}}; Path=/content-security-policy/reporting/ +Content-Security-Policy: script-src 'self' 'nonce-abc'; report-uri ../../support/report.py?op=put&reportID={{$id}} diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/support/set-cookie.py b/tests/wpt/web-platform-tests/content-security-policy/reporting/support/set-cookie.py new file mode 100644 index 00000000000..7f321a5c39d --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/support/set-cookie.py @@ -0,0 +1,28 @@ +import sys +import urlparse + +def main(request, response): + """ + Returns cookie name and path from query params in a Set-Cookie header. + + e.g. + + > GET /cookies/resources/set-cookie.py?name=match-slash&path=%2F HTTP/1.1 + > Host: localhost:8000 + > User-Agent: curl/7.43.0 + > Accept: */* + > + < HTTP/1.1 200 OK + < Content-Type: application/json + < Set-Cookie: match-slash=1; Path=/; Expires=Wed, 09 Jun 2021 10:18:14 GMT + < Server: BaseHTTP/0.3 Python/2.7.12 + < Date: Tue, 04 Oct 2016 18:16:06 GMT + < Content-Length: 80 + """ + params = urlparse.parse_qs(request.url_parts.query) + headers = [ + ("Content-Type", "application/json"), + ("Set-Cookie", "{name[0]}={value[0]}; Path={path[0]}; Expires=Wed, 09 Jun 2021 10:18:14 GMT".format(**params)) + ] + body = "{}" + return headers, body diff --git a/tests/wpt/web-platform-tests/content-security-policy/support/inject-image.js b/tests/wpt/web-platform-tests/content-security-policy/support/inject-image.js index cc5b60079b4..a10d50a9839 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/support/inject-image.js +++ b/tests/wpt/web-platform-tests/content-security-policy/support/inject-image.js @@ -2,4 +2,3 @@ var i = document.createElement('img'); i.src = '/content-security-policy/support/fail.png'; document.body.appendChild(i); -log("TEST COMPLETE");
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/content-security-policy/support/pass2.png b/tests/wpt/web-platform-tests/content-security-policy/support/pass2.png Binary files differnew file mode 100644 index 00000000000..2fa1e0ac066 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/support/pass2.png diff --git a/tests/wpt/web-platform-tests/credential-management/require_securecontext.html b/tests/wpt/web-platform-tests/credential-management/require_securecontext.html new file mode 100644 index 00000000000..b1f3103da06 --- /dev/null +++ b/tests/wpt/web-platform-tests/credential-management/require_securecontext.html @@ -0,0 +1,13 @@ +<!doctype html> +<meta charset=utf-8> +<title>Test that Credential Management requires secure contexts</title> +<link rel="help" href="https://w3c.github.io/webappsec-credential-management/#idl-index"> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script> +"use strict"; + test(() => { + assert_false(isSecureContext); + assert_false('credentials' in navigator); + }, "Credential Management must not be accessible in insecure contexts"); +</script> diff --git a/tests/wpt/web-platform-tests/css/CSS2/floats-clear/clear-applies-to-008-ref.xht b/tests/wpt/web-platform-tests/css/CSS2/floats-clear/clear-applies-to-008-ref.xht index 6a17a53062f..e947a1a4c53 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/floats-clear/clear-applies-to-008-ref.xht +++ b/tests/wpt/web-platform-tests/css/CSS2/floats-clear/clear-applies-to-008-ref.xht @@ -9,6 +9,8 @@ <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <style type="text/css"><![CDATA[ + /* Disable kerning because kerning may differ for different node tree. */ + html { font-kerning: none; font-feature-settings: "kern" off; } body {margin-bottom: 0px;} div {height: 10em;} @@ -23,4 +25,4 @@ <div>PASS</div> </body> -</html>
\ No newline at end of file +</html> diff --git a/tests/wpt/web-platform-tests/css/CSS2/floats-clear/clear-applies-to-008.xht b/tests/wpt/web-platform-tests/css/CSS2/floats-clear/clear-applies-to-008.xht index 59a718af063..1ff09c6cc19 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/floats-clear/clear-applies-to-008.xht +++ b/tests/wpt/web-platform-tests/css/CSS2/floats-clear/clear-applies-to-008.xht @@ -11,6 +11,8 @@ <meta name="assert" content="The 'clear' property does not apply to elements with a display of 'inline'." /> <style type="text/css"> + /* Disable kerning because kerning may differ for different node tree. */ + html { font-kerning: none; font-feature-settings: "kern" off; } .float { float: left; height: 10em; } .clear { clear: left; } </style> diff --git a/tests/wpt/web-platform-tests/css/CSS2/floats-clear/clear-applies-to-012.xht b/tests/wpt/web-platform-tests/css/CSS2/floats-clear/clear-applies-to-012.xht index fb76e9134d8..ecff648e302 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/floats-clear/clear-applies-to-012.xht +++ b/tests/wpt/web-platform-tests/css/CSS2/floats-clear/clear-applies-to-012.xht @@ -42,8 +42,8 @@ <p>Test passes if there is a filled blue square to the right of this text.</p> <div> - <span class="block-descendant">a</span> - <span class="block-descendant">b</span> + <span class="block-descendant"> a</span> + <span class="block-descendant"> b</span> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/CSS2/floats-clear/float-applies-to-008-ref.xht b/tests/wpt/web-platform-tests/css/CSS2/floats-clear/float-applies-to-008-ref.xht index 1d7dde19948..addfe5eeaed 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/floats-clear/float-applies-to-008-ref.xht +++ b/tests/wpt/web-platform-tests/css/CSS2/floats-clear/float-applies-to-008-ref.xht @@ -10,17 +10,15 @@ <style type="text/css"><![CDATA[ div {text-align: right;} - - span {background-color: blue;} ]]></style> </head> <body> - <p>Test passes if there is a short blue stripe on the right side of the page.</p> + <p>Test passes if Filler Text can be seen on the right side of the page.</p> - <div><span>Filler Text</span></div> + <div>Filler Text</div> </body> </html> diff --git a/tests/wpt/web-platform-tests/css/CSS2/floats-clear/float-applies-to-008.xht b/tests/wpt/web-platform-tests/css/CSS2/floats-clear/float-applies-to-008.xht index 4c78d57bfff..04053482bc2 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/floats-clear/float-applies-to-008.xht +++ b/tests/wpt/web-platform-tests/css/CSS2/floats-clear/float-applies-to-008.xht @@ -1,26 +1,25 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> - <head> - <title>CSS Test: Float applied to element with 'display' set to inline</title> - <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> - <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-12-14 --> - <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#propdef-float" /> - <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#float-position" /> - <link rel="match" href="float-applies-to-008-ref.xht" /> + <head> + <title>CSS Test: Float applied to element with 'display' set to inline</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-12-14 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#propdef-float" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#float-position" /> + <link rel="match" href="float-applies-to-008-ref.xht" /> - <meta name="flags" content="" /> - <meta name="assert" content="The 'float' property applies to elements with a display of inline." /> - <style type="text/css"> - div - { - background: blue; - display: inline; - float: right; - } - </style> - </head> - <body> - <p>Test passes if there is a short blue stripe on the right side of the page.</p> - <div>Filler Text</div> - </body> + <meta name="flags" content="" /> + <meta name="assert" content="The 'float' property applies to elements with a display of inline." /> + <style type="text/css"> + div + { + display: inline; + float: right; + } + </style> + </head> + <body> + <p>Test passes if Filler Text can be seen on the right side of the page.</p> + <div>Filler Text</div> + </body> </html> diff --git a/tests/wpt/web-platform-tests/css/CSS2/floats-clear/float-applies-to-012.xht b/tests/wpt/web-platform-tests/css/CSS2/floats-clear/float-applies-to-012.xht index 9650741cc14..21bc2dc1e4b 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/floats-clear/float-applies-to-012.xht +++ b/tests/wpt/web-platform-tests/css/CSS2/floats-clear/float-applies-to-012.xht @@ -1,41 +1,41 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> - <head> - <title>CSS Test: Float applied to element with 'display' set to inline-block</title> - <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> - <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-12-14 --> - <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#propdef-float" /> - <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#float-position" /> - <link rel="match" href="../reference/float-applies-to-001-ref.xht" /> + <head> + <title>CSS Test: Float applied to element with 'display' set to inline-block</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-12-14 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#propdef-float" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#float-position" /> + <link rel="match" href="../reference/float-applies-to-001-ref.xht" /> - <meta name="flags" content="" /> - <meta name="assert" content="The 'float' property applies to elements with a display of inline-block." /> - <style type="text/css"> - span#inline-block - { - background: blue; - display: inline-block; - float: right; - height: 1in; - width: 1in; - } + <meta name="flags" content="" /> + <meta name="assert" content="The 'float' property applies to elements with a display of inline-block." /> + <style type="text/css"> + span#inline-block + { + background: blue; + display: inline-block; + float: right; + height: 1in; + width: 1in; + } - span.block-descendant - { - color: blue; - display: block; - } - </style> - </head> - <body> - <p>Test passes if there is a filled blue square on the right side of the page.</p> + span.block-descendant + { + color: blue; + display: block; + } + </style> + </head> + <body> + <p>Test passes if there is a filled blue square on the right side of the page.</p> - <div> - <span id="inline-block"> - <span class="block-descendant">a</span> - <span class="block-descendant">b</span> - </span> - </div> + <div> + <span id="inline-block"> + <span class="block-descendant"> a</span> + <span class="block-descendant"> b</span> + </span> + </div> - </body> + </body> </html> diff --git a/tests/wpt/web-platform-tests/css/CSS2/floats-clear/floats-028-ref.xht b/tests/wpt/web-platform-tests/css/CSS2/floats-clear/floats-028-ref.xht index e6fd0ff9abd..a975a6b5b10 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/floats-clear/floats-028-ref.xht +++ b/tests/wpt/web-platform-tests/css/CSS2/floats-clear/floats-028-ref.xht @@ -8,22 +8,20 @@ <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <style type="text/css"><![CDATA[ - div#wrapper - { - border: black solid 5px; - bottom: 17px; - height: 192px; - left: 24px; - position: relative; - width: 192px; - } - - div > div - { - background-color: blue; - height: 120px; - width: 120px; - } + div#wrapper { + border: solid 5px black; + height: 2in; + margin: 0.25in; + position: absolute; + top: 10px; + width: 2in; + } + + div > div { + background-color: blue; + height: 120px; + width: 120px; + } ]]></style> @@ -38,4 +36,4 @@ </div> </body> -</html>
\ No newline at end of file +</html> diff --git a/tests/wpt/web-platform-tests/css/CSS2/floats-clear/floats-028.xht b/tests/wpt/web-platform-tests/css/CSS2/floats-clear/floats-028.xht index 39006eab6d7..8dd14fb23d8 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/floats-clear/floats-028.xht +++ b/tests/wpt/web-platform-tests/css/CSS2/floats-clear/floats-028.xht @@ -33,4 +33,4 @@ <span>Filler Text</span> </div> </body> -</html>
\ No newline at end of file +</html> diff --git a/tests/wpt/web-platform-tests/css/CSS2/floats-clear/floats-036-ref.xht b/tests/wpt/web-platform-tests/css/CSS2/floats-clear/floats-036-ref.xht index 0c542011ec3..0de561abbde 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/floats-clear/floats-036-ref.xht +++ b/tests/wpt/web-platform-tests/css/CSS2/floats-clear/floats-036-ref.xht @@ -6,6 +6,10 @@ <title>CSS Reftest Reference</title> <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + <style> + /* Disable kerning because kerning may differ for different node tree. */ + html { font-kerning: none; font-feature-settings: "kern" off; } + </style> </head> @@ -16,4 +20,4 @@ <div>Filler TextFiller Text</div> </body> -</html>
\ No newline at end of file +</html> diff --git a/tests/wpt/web-platform-tests/css/CSS2/floats-clear/floats-036.xht b/tests/wpt/web-platform-tests/css/CSS2/floats-clear/floats-036.xht index de47a27b0d7..c0a91a86af2 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/floats-clear/floats-036.xht +++ b/tests/wpt/web-platform-tests/css/CSS2/floats-clear/floats-036.xht @@ -9,6 +9,8 @@ <meta name="flags" content="" /> <meta name="assert" content="A floated elements top edge will be aligned with the top of a line box." /> <style type="text/css"> + /* Disable kerning because kerning may differ for different node tree. */ + html { font-kerning: none; font-feature-settings: "kern" off; } div { width: 5in; @@ -26,4 +28,4 @@ <span id="span1">Filler Text</span> </div> </body> -</html>
\ No newline at end of file +</html> diff --git a/tests/wpt/web-platform-tests/css/CSS2/normal-flow/inline-table-002-ref.xht b/tests/wpt/web-platform-tests/css/CSS2/normal-flow/inline-table-002-ref.xht index c333d3a2cfa..42a4110fea7 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/normal-flow/inline-table-002-ref.xht +++ b/tests/wpt/web-platform-tests/css/CSS2/normal-flow/inline-table-002-ref.xht @@ -4,7 +4,5 @@ <link rel="author" title="Mozilla Corporation" href="http://mozilla.com/" /> </head> <body> -<p>abcde</p> - - -</body></html>
\ No newline at end of file +<p>a<span style="display:inline-table;">bcd</span>e</p> +</body></html> diff --git a/tests/wpt/web-platform-tests/css/CSS2/normal-flow/inline-table-valign-001-ref.xht b/tests/wpt/web-platform-tests/css/CSS2/normal-flow/inline-table-valign-001-ref.xht index 243ad0f77de..07d9f5e7fd4 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/normal-flow/inline-table-valign-001-ref.xht +++ b/tests/wpt/web-platform-tests/css/CSS2/normal-flow/inline-table-valign-001-ref.xht @@ -4,8 +4,6 @@ <link rel="author" title="Mozilla Corporation" href="http://mozilla.com/" /> <style type="text/css"> span#table { display: inline-table; } -span#rowgroup { display: table-row-group; } -span#row { display: table-row; } span#cell { display: table-cell; } span#table, span#rowgroup, span#row, span#cell { border: 4px solid white; @@ -19,8 +17,11 @@ span#block { display: block; visibility: hidden; } </head> <body> <table border=""><tbody><tr><td> -<p><span id="table"><span id="rowgroup"><span id="row"><span id="cell">abcde<span id="block">x</span></span></span></span></span></p> + <p> + a<span id="table"><span id="cell">bcd</span></span>e + <span id="block">x</span> + </p> </td></tr></tbody></table> -</body></html>
\ No newline at end of file +</body></html> diff --git a/tests/wpt/web-platform-tests/css/CSS2/normal-flow/width-inherit-001.xht b/tests/wpt/web-platform-tests/css/CSS2/normal-flow/width-inherit-001.xht index 18583f46220..c958d8b60e4 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/normal-flow/width-inherit-001.xht +++ b/tests/wpt/web-platform-tests/css/CSS2/normal-flow/width-inherit-001.xht @@ -23,6 +23,8 @@ background: orange; } .control { + position: absolute; + top: 82px; width: 9.375em; height: 1.875em; background: blue; diff --git a/tests/wpt/web-platform-tests/css/CSS2/positioning/abspos-011-ref.xht b/tests/wpt/web-platform-tests/css/CSS2/positioning/abspos-011-ref.xht index 0e421c4bb29..e14b766fe78 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/positioning/abspos-011-ref.xht +++ b/tests/wpt/web-platform-tests/css/CSS2/positioning/abspos-011-ref.xht @@ -32,7 +32,7 @@ <body> - <div id="first">____ ____</div> + <div id="first"> </div> <div id="second">FAIL PASS</div> diff --git a/tests/wpt/web-platform-tests/css/CSS2/positioning/abspos-011.xht b/tests/wpt/web-platform-tests/css/CSS2/positioning/abspos-011.xht index 111795b97e2..1900af45188 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/positioning/abspos-011.xht +++ b/tests/wpt/web-platform-tests/css/CSS2/positioning/abspos-011.xht @@ -16,9 +16,9 @@ </style> </head> <body> - <p>FAIL ____</p> - <p>#___ P___</p> - <p>_##_ _A__</p> - <p>___# __SS</p> + <p>FAIL </p> + <p># P </p> + <p> ## A </p> + <p> # SS</p> </body> </html> diff --git a/tests/wpt/web-platform-tests/css/CSS2/positioning/abspos-012.xht b/tests/wpt/web-platform-tests/css/CSS2/positioning/abspos-012.xht index 8aacf306693..03b47f92229 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/positioning/abspos-012.xht +++ b/tests/wpt/web-platform-tests/css/CSS2/positioning/abspos-012.xht @@ -18,10 +18,10 @@ </head> <body> <div> - <p>FAIL ____</p> - <p>#___ P___</p> - <p>_##_ _A__</p> - <p>___# __SS</p> + <p>FAIL </p> + <p># P </p> + <p> ## A </p> + <p> # SS</p> </div> diff --git a/tests/wpt/web-platform-tests/css/CSS2/positioning/abspos-027.xht b/tests/wpt/web-platform-tests/css/CSS2/positioning/abspos-027.xht index 20fcb2a3248..f9fecbe6cb7 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/positioning/abspos-027.xht +++ b/tests/wpt/web-platform-tests/css/CSS2/positioning/abspos-027.xht @@ -9,7 +9,7 @@ <link rel="match" href="../reference/ref-if-there-is-no-red.xht" /> <style type="text/css"> - body {margin-top: 1em; font: 1em/1.25 serif;} + body {margin-top: 1em; } .test { position: absolute; background: red; } table { background: white; color: black; margin: auto; border-spacing: 0px; } diff --git a/tests/wpt/web-platform-tests/css/CSS2/positioning/position-relative-031-ref.xht b/tests/wpt/web-platform-tests/css/CSS2/positioning/position-relative-031-ref.xht index 8e5300fe355..841ed974130 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/positioning/position-relative-031-ref.xht +++ b/tests/wpt/web-platform-tests/css/CSS2/positioning/position-relative-031-ref.xht @@ -8,6 +8,10 @@ <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + <style> + /* Disable kerning because kerning may differ for different node tree. */ + html { font-kerning: none; font-feature-settings: "kern" off; } + </style> </head> <body> @@ -17,4 +21,4 @@ <div>Filler Text Filler Text Filler Text Filler Text Filler Text</div> </body> -</html>
\ No newline at end of file +</html> diff --git a/tests/wpt/web-platform-tests/css/CSS2/positioning/position-relative-031.xht b/tests/wpt/web-platform-tests/css/CSS2/positioning/position-relative-031.xht index 235260bac86..11f53757929 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/positioning/position-relative-031.xht +++ b/tests/wpt/web-platform-tests/css/CSS2/positioning/position-relative-031.xht @@ -10,6 +10,8 @@ <meta name="flags" content="" /> <meta name="assert" content="Relatively positioned element with auto positioning render as though they were positioned in flow." /> <style type="text/css"> + /* Disable kerning because kerning may differ for different node tree. */ + html { font-kerning: none; font-feature-settings: "kern" off; } div { width: 5in; @@ -26,4 +28,4 @@ <span>Filler Text </span><span id="span1">Filler Text</span> Filler Text<span> Filler Text </span>Filler Text </div> </body> -</html>
\ No newline at end of file +</html> diff --git a/tests/wpt/web-platform-tests/css/CSS2/positioning/positioning-float-001-ref.xht b/tests/wpt/web-platform-tests/css/CSS2/positioning/positioning-float-001-ref.xht index 5655e5fe0f2..aaa2ce88563 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/positioning/positioning-float-001-ref.xht +++ b/tests/wpt/web-platform-tests/css/CSS2/positioning/positioning-float-001-ref.xht @@ -9,6 +9,9 @@ <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <style type="text/css"><![CDATA[ + /* Disable kerning because kerning may differ for different node tree. */ + html { font-kerning: none; font-feature-settings: "kern" off; } + div {font-size: 3em;} ]]></style> diff --git a/tests/wpt/web-platform-tests/css/CSS2/positioning/positioning-float-001.xht b/tests/wpt/web-platform-tests/css/CSS2/positioning/positioning-float-001.xht index 0b0ee551b71..ababe89a4fd 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/positioning/positioning-float-001.xht +++ b/tests/wpt/web-platform-tests/css/CSS2/positioning/positioning-float-001.xht @@ -9,6 +9,9 @@ <meta name="flags" content="" /> <meta name="assert" content="Floating a box will first lay out the box then shift it to the left." /> <style type="text/css"> + /* Disable kerning because kerning may differ for different node tree. */ + html { font-kerning: none; font-feature-settings: "kern" off; } + div { font-size: 3em; @@ -24,4 +27,4 @@ <p>Test passes if there is the word "P A S S".</p> <div>S <span>P A </span>S</div> </body> -</html>
\ No newline at end of file +</html> diff --git a/tests/wpt/web-platform-tests/css/CSS2/values/color-000-ref.xht b/tests/wpt/web-platform-tests/css/CSS2/values/color-000-ref.xht index 7dce9fe9c9b..9d463033b3e 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/values/color-000-ref.xht +++ b/tests/wpt/web-platform-tests/css/CSS2/values/color-000-ref.xht @@ -18,7 +18,5 @@ p { <p>This should be green</p> <p>This should be green</p> <p>This should be green</p> -<p>This should be green</p> -<p>This should be green</p> </body> </html> diff --git a/tests/wpt/web-platform-tests/css/CSS2/values/color-000.xht b/tests/wpt/web-platform-tests/css/CSS2/values/color-000.xht index 34d91318965..ea2e3f51d37 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/values/color-000.xht +++ b/tests/wpt/web-platform-tests/css/CSS2/values/color-000.xht @@ -16,11 +16,9 @@ p#percentpercentnum { color: rgb(100%, 0%, 0) } p#percentnumpercent { color: rgb(100%, 0, 0%) } p#numpercentnum { color: rgb(255, 0%, 0); } - p#floatnumnum { color: rgb(255.0, 0, 0) } - p#numfloatnum { color: rgb(0, 128.0, 0) } p#numnumnum { color: rgb(0, 128, 0) } p#percentpercentpercent1 { color: rgb(0%, 50%, 0%) } - p#percentpercentpercent2 { color: rgb(0%, 49.99%, 0%) } + p#percentpercentpercent2 { color: rgb(0%, 50.01%, 0%) } </style> </head> <body> @@ -29,8 +27,6 @@ <p class="incorrect" id="percentpercentnum">This should be green</p> <p class="incorrect" id="percentnumpercent">This should be green</p> <p class="incorrect" id="numpercentnum">This should be green</p> - <p class="incorrect" id="floatnumnum">This should be green</p> - <p class="incorrect" id="numfloatnum">This should be green</p> <p class="correct" id="numnumnum">This should be green</p> <p class="correct" id="percentpercentpercent1">This should be green</p> diff --git a/tests/wpt/web-platform-tests/css/css-align/content-distribution/parse-align-content-001.html b/tests/wpt/web-platform-tests/css/css-align/content-distribution/parse-align-content-001.html new file mode 100644 index 00000000000..c5cd4254f70 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-align/content-distribution/parse-align-content-001.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Content Distribution: align-content - setting values via CSS</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#content-distribution" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-align-content" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-content-position" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-content-distribution" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-baseline-position" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-overflow-position" /> +<link rel="stylesheet" href="../../support/alignment.css" > +<meta name="assert" content="Check that the computed value is the specified value and the JS value is empty."/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> +<div id="log"></div> +<script> + let classes = Object.assign({"Normal":"normal"}, contentPositionClasses, distributionClasses, + baselineClasses, overflowClasses); + + for (var key in classes) { + let specifiedValue = classes[key]; + element = document.createElement("div"); + element.className = "alignContent" + key; + document.body.appendChild(element); + test(function() { + if (specifiedValue === "first baseline") + checkValues(element, "alignContent", "align-content", "", "baseline"); + else + checkValues(element, "alignContent", "align-content", "", specifiedValue); + }, "Checking align-content: " + specifiedValue); + } +</script> diff --git a/tests/wpt/web-platform-tests/css/css-align/content-distribution/parse-align-content-002.html b/tests/wpt/web-platform-tests/css/css-align/content-distribution/parse-align-content-002.html new file mode 100644 index 00000000000..5d20062074c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-align/content-distribution/parse-align-content-002.html @@ -0,0 +1,57 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Content Distribution: align-content - 'initial' value</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#content-distribution" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-align-content" /> +<link rel="help" href="https://drafts.csswg.org/css-cascade/#initial-values" /> +<meta name="assert" content="Check the 'initial' value in diferent scenarios."/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> +<div id="log"></div> +<script> +container = document.createElement("div"); +element = document.createElement("div"); +container.appendChild(element); +document.body.appendChild(container); + +test(function() { + element = document.createElement("div"); + document.body.appendChild(element); + checkValues(element, "alignContent", "align-content", "", "normal"); +}, "Test 'initial' value when nothing is specified"); + +test(function() { + container.style.display = ""; + checkInitialValues(element, "alignContent", "align-content", "center", "normal"); +}, "Test align-content: 'initial'"); + +test(function() { + container.style.display = "grid"; + checkInitialValues(element, "alignContent", "align-content", "safe start", "normal"); +}, "Test grid items align-content: 'initial'"); + +test(function() { + container.style.display = "flex"; + checkInitialValues(element, "alignContent", "align-content", "unsafe end", "normal"); +}, "Test flex items align-content: 'initial'"); + +test(function() { + container.style.display = ""; + element.style.position = "absolute"; + checkInitialValues(element, "alignContent", "align-content", "start", "normal"); +}, "Test absolute positioned elements align-content: 'initial'"); + +test(function() { + container.style.display = "grid"; + element.style.position = "absolute"; + checkInitialValues(element, "alignContent", "align-content", "end", "normal"); +}, "Test absolute positioned grid items align-content: 'initial'"); + +test(function() { + container.style.display = "flex"; + element.style.position = "absolute"; + checkInitialValues(element, "alignContent", "align-content", "end", "normal"); +}, "Test absolute positioned flex items align-content: 'initial'"); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-align/content-distribution/parse-align-content-003.html b/tests/wpt/web-platform-tests/css/css-align/content-distribution/parse-align-content-003.html new file mode 100644 index 00000000000..b0da3588bf6 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-align/content-distribution/parse-align-content-003.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Content Disrtribution: align-content - setting values via JS</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#content-distribution" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-align-content" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-content-position" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-content-distribution" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-baseline-position" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-overflow-position" /> +<meta name="assert" content="Check that the computed value is the specified value and the same than the JS value."/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> +<div id="log"></div> +<script> + element = document.createElement("div"); + document.body.appendChild(element); + + let classes = Object.assign({"Normal":"normal"}, contentPositionClasses, distributionClasses, + baselineClasses, overflowClasses); + + for (var key in classes) { + let specifiedValue = classes[key]; + test(function() { + element.style.alignContent = ""; + element.style.alignContent = specifiedValue; + if (specifiedValue === "first baseline") + checkValues(element, "alignContent", "align-content", "baseline", "baseline"); + else + checkValues(element, "alignContent", "align-content", specifiedValue, specifiedValue); + }, "Checking align-content: " + specifiedValue); + } +</script> diff --git a/tests/wpt/web-platform-tests/css/css-align/content-distribution/parse-align-content-004.html b/tests/wpt/web-platform-tests/css/css-align/content-distribution/parse-align-content-004.html new file mode 100644 index 00000000000..6a6f5b9c76c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-align/content-distribution/parse-align-content-004.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Content Distribution: align-content - invalid values</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#content-distribution" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-align-content" /> +<meta name="assert" content="Check bad combinations of specified values."/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> +<div id="log"></div> +<script> + element = document.createElement("div"); + document.body.appendChild(element); + + let values = ["auto", "legacy", "self-start", "left", "safe right"].concat(invalidPositionValues, invalidDistributionValues); + + values.forEach(function(value) { + test(function() { + checkBadValues(element, "alignContent", "align-content", value); + }, "Checking invalid combination - align-content: " + value); + }); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-align/content-distribution/parse-align-content-005.html b/tests/wpt/web-platform-tests/css/css-align/content-distribution/parse-align-content-005.html new file mode 100644 index 00000000000..fd4fa3c4521 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-align/content-distribution/parse-align-content-005.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Content Distibution: align-content - inherit value</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#content-distribution" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-align-content" /> +<meta name="assert" content="Check bad cobinations of specified values."/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> +<div id="log"></div> +<script> +test(function() { + checkInheritValues("alignContent", "align-content", "end"); +}, "Test the value 'inherit' overrides current value ('end')"); +test(function() { + checkInheritValues("alignContent", "align-content", "safe start"); +}, "Test the value 'inherit' overrides current value ('safe start')"); +test(function() { + checkInheritValues("alignContent", "align-content", "unsafe center"); +}, "Test the value 'inherit' overrides current value ('unsafe center')"); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-align/content-distribution/parse-justify-content-001.html b/tests/wpt/web-platform-tests/css/css-align/content-distribution/parse-justify-content-001.html new file mode 100644 index 00000000000..df06ca920b1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-align/content-distribution/parse-justify-content-001.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Content Distribution: justify-content - setting values via CSS</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#content-distribution" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-justify-content" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-content-position" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-content-distribution" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-baseline-position" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-overflow-position" /> +<link rel="stylesheet" href="../../support/alignment.css" > +<meta name="assert" content="Check that the computed value is the specified value and the JS value is empty."/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> +<div id="log"></div> +<script> + let classes = Object.assign({"Normal":"normal", "Left":"left", "Right":"right"}, contentPositionClasses, + distributionClasses, overflowClasses); + + for (var key in classes) { + let specifiedValue = classes[key]; + element = document.createElement("div"); + element.className = "justifyContent" + key; + document.body.appendChild(element); + test(function() { + checkValues(element, "justifyContent", "justify-content", "", specifiedValue); + }, "Checking justify-content: " + specifiedValue); + } +</script> diff --git a/tests/wpt/web-platform-tests/css/css-align/content-distribution/parse-justify-content-002.html b/tests/wpt/web-platform-tests/css/css-align/content-distribution/parse-justify-content-002.html new file mode 100644 index 00000000000..3f48a2ac0ce --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-align/content-distribution/parse-justify-content-002.html @@ -0,0 +1,57 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Content Distribution: justify-content - 'initial' value</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#content-distribution" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-justify-content" /> +<link rel="help" href="https://drafts.csswg.org/css-cascade/#initial-values" /> +<meta name="assert" content="Check the 'initial' value in diferent scenarios."/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> +<div id="log"></div> +<script> +container = document.createElement("div"); +element = document.createElement("div"); +container.appendChild(element); +document.body.appendChild(container); + +test(function() { + element = document.createElement("div"); + document.body.appendChild(element); + checkValues(element, "justifyContent", "justify-content", "", "normal"); +}, "Test 'initial' value when nothing is specified"); + +test(function() { + container.style.display = ""; + checkInitialValues(element, "justifyContent", "justify-content", "center", "normal"); +}, "Test justify-content: 'initial'"); + +test(function() { + container.style.display = "grid"; + checkInitialValues(element, "justifyContent", "justify-content", "safe start", "normal"); +}, "Test grid items justify-content: 'initial'"); + +test(function() { + container.style.display = "flex"; + checkInitialValues(element, "justifyContent", "justify-content", "unsafe end", "normal"); +}, "Test flex items justify-content: 'initial'"); + +test(function() { + container.style.display = ""; + element.style.position = "absolute"; + checkInitialValues(element, "justifyContent", "justify-content", "start", "normal"); +}, "Test absolute positioned elements justify-content: 'initial'"); + +test(function() { + container.style.display = "grid"; + element.style.position = "absolute"; + checkInitialValues(element, "justifyContent", "justify-content", "end", "normal"); +}, "Test absolute positioned grid items justify-content: 'initial'"); + +test(function() { + container.style.display = "flex"; + element.style.position = "absolute"; + checkInitialValues(element, "justifyContent", "justify-content", "end", "normal"); +}, "Test absolute positioned flex items justify-content: 'initial'"); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-align/content-distribution/parse-justify-content-003.html b/tests/wpt/web-platform-tests/css/css-align/content-distribution/parse-justify-content-003.html new file mode 100644 index 00000000000..0dea6e55f5c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-align/content-distribution/parse-justify-content-003.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Content Disrtribution: justify-content - setting values via JS</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#content-distribution" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-justify-content" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-content-position" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-content-distribution" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-baseline-position" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-overflow-position" /> +<meta name="assert" content="Check that the computed value is the specified value and the same than the JS value."/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> +<div id="log"></div> +<script> + element = document.createElement("div"); + document.body.appendChild(element); + + let classes = Object.assign({"Normal":"normal", "Left":"left", "Right":"right"}, contentPositionClasses, + distributionClasses, overflowClasses); + + for (var key in classes) { + let specifiedValue = classes[key]; + test(function() { + element.style.justifyContent = ""; + element.style.justifyContent = specifiedValue; + checkValues(element, "justifyContent", "justify-content", specifiedValue, specifiedValue); + }, "Checking justify-content: " + specifiedValue); + } +</script> diff --git a/tests/wpt/web-platform-tests/css/css-align/content-distribution/parse-justify-content-004.html b/tests/wpt/web-platform-tests/css/css-align/content-distribution/parse-justify-content-004.html new file mode 100644 index 00000000000..22e78f84aed --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-align/content-distribution/parse-justify-content-004.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Content Distribution: justify-content - invalid values</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#content-distribution" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-justify-content" /> +<meta name="assert" content="Check bad combinations of specified values."/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> +<div id="log"></div> +<script> + element = document.createElement("div"); + document.body.appendChild(element); + + let values = ["auto", "legacy", "self-start", "baseline", "first baseline", "last baseline"].concat(invalidPositionValues, invalidDistributionValues); + + values.forEach(function(value) { + test(function() { + checkBadValues(element, "justifyContent", "justify-content", value); + }, "Checking invalid combination - justify-content: " + value); + }); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-align/content-distribution/parse-justify-content-005.html b/tests/wpt/web-platform-tests/css/css-align/content-distribution/parse-justify-content-005.html new file mode 100644 index 00000000000..32949e88a9c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-align/content-distribution/parse-justify-content-005.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Content Distibution: justify-content - inherit value</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#content-distribution" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-justify-content" /> +<meta name="assert" content="Check bad cobinations of specified values."/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> +<div id="log"></div> +<script> +test(function() { + checkInheritValues("justifyContent", "justify-content", "end"); +}, "Test the value 'inherit' overrides current value ('end')"); +test(function() { + checkInheritValues("justifyContent", "justify-content", "safe left"); +}, "Test the value 'inherit' overrides current value ('safe left')"); +test(function() { + checkInheritValues("justifyContent", "justify-content", "unsafe center"); +}, "Test the value 'inherit' overrides current value ('unsafe center')"); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-align/content-distribution/place-content-shorthand-001.html b/tests/wpt/web-platform-tests/css/css-align/content-distribution/place-content-shorthand-001.html index 6e62621d8f2..153f6dd3d71 100644 --- a/tests/wpt/web-platform-tests/css/css-align/content-distribution/place-content-shorthand-001.html +++ b/tests/wpt/web-platform-tests/css/css-align/content-distribution/place-content-shorthand-001.html @@ -5,13 +5,14 @@ <meta name="assert" content="Check that setting a single value to place-content expands to such value set in both 'align-content' and 'justify-content'." /> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> -<script src="../resources/alignment-parsing-utils.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> <div id="log"></div> <script> - var values = ["normal"].concat(contentPositionValues, distributionValues, baselineValues); - values.forEach(function(value) { + let classes = Object.assign({"Normal":"normal"}, contentPositionClasses, distributionClasses); + for (var key in classes) { + let value = classes[key]; test(function() { checkPlaceShorhandLonghands("place-content", "align-content", "justify-content", value); }, "Checking place-content: " + value); - }); + } </script> diff --git a/tests/wpt/web-platform-tests/css/css-align/content-distribution/place-content-shorthand-002.html b/tests/wpt/web-platform-tests/css/css-align/content-distribution/place-content-shorthand-002.html index 90fbb60dcb1..e8a7b33dae6 100644 --- a/tests/wpt/web-platform-tests/css/css-align/content-distribution/place-content-shorthand-002.html +++ b/tests/wpt/web-platform-tests/css/css-align/content-distribution/place-content-shorthand-002.html @@ -5,15 +5,18 @@ <meta name="assert" content="Check that setting two values to place-content sets the first one to 'align-content' and the second one to 'justify-content'." /> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> -<script src="../resources/alignment-parsing-utils.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> <div id="log"></div> <script> - var values = ["normal"].concat(contentPositionValues, distributionValues, baselineValues); - values.forEach(function(alignValue) { - values.forEach(function(justifyValue) { - test(function() { - checkPlaceShorhandLonghands("place-content", "align-content", "justify-content", alignValue, justifyValue); - }, "Checking place-content: " + alignValue + " " + justifyValue); - }); - }); + let classes = Object.assign({"Normal":"normal"}, contentPositionClasses, distributionClasses, baselineClasses); + for (var key1 in classes) { + let alignValue = classes[key1]; + let classes2 = Object.assign({"Normal":"normal", "Left":"left", "Right":"right"}, contentPositionClasses, distributionClasses); + for (var key2 in classes2) { + let justifyValue = classes2[key2]; + test(function() { + checkPlaceShorhandLonghands("place-content", "align-content", "justify-content", alignValue, justifyValue); + }, "Checking place-content: " + alignValue + " " + justifyValue); + } + } </script> diff --git a/tests/wpt/web-platform-tests/css/css-align/content-distribution/place-content-shorthand-004.html b/tests/wpt/web-platform-tests/css/css-align/content-distribution/place-content-shorthand-004.html index 8a1db87c538..30f45b686f4 100644 --- a/tests/wpt/web-platform-tests/css/css-align/content-distribution/place-content-shorthand-004.html +++ b/tests/wpt/web-platform-tests/css/css-align/content-distribution/place-content-shorthand-004.html @@ -5,7 +5,7 @@ <meta name="assert" content="Check that place-content's invalid values are properly detected at parsing time." /> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> -<script src="../resources/alignment-parsing-utils.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> <div id="log"></div> <script> function checkInvalidValues(value) @@ -14,8 +14,8 @@ } test(function() { - checkInvalidValues("center safe") - checkInvalidValues("true center") + checkInvalidValues("safe center") + checkInvalidValues("unsafe center") }, "Verify overflow keywords are invalid"); test(function() { @@ -23,15 +23,28 @@ }, "Verify fallback values are invalid"); test(function() { - checkInvalidValues("10px left") - checkInvalidValues("right 10%") + checkInvalidValues("left") + checkInvalidValues("left start") + checkInvalidValues("right center") + }, "Verify 'left' and 'right' values are invalid for block/cross axis alignment"); + + test(function() { + checkInvalidValues("baseline") + checkInvalidValues("first baseline") + checkInvalidValues("start baseline") + checkInvalidValues("end last baseline") + }, "Verify <baseline-position> values are invalid for the justify-content property"); + + test(function() { + checkInvalidValues("10px end") + checkInvalidValues("start 10%") }, "Verify numeric values are invalid"); test(function() { checkInvalidValues("auto") checkInvalidValues("auto right") checkInvalidValues("auto auto") - checkInvalidValues("left auto") + checkInvalidValues("start auto") }, "Verify 'auto' values are invalid"); test(function() { diff --git a/tests/wpt/web-platform-tests/css/css-align/content-distribution/place-content-shorthand-006.html b/tests/wpt/web-platform-tests/css/css-align/content-distribution/place-content-shorthand-006.html index aa9962191ac..2a5056d4136 100644 --- a/tests/wpt/web-platform-tests/css/css-align/content-distribution/place-content-shorthand-006.html +++ b/tests/wpt/web-platform-tests/css/css-align/content-distribution/place-content-shorthand-006.html @@ -5,17 +5,20 @@ <meta name="assert" content="Check the place-content's 'specified' and 'resolved' values serialization." /> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> -<script src="../resources/alignment-parsing-utils.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> <div id="log"></div> <div id="test"></div> <script> - var values = ["normal"].concat(contentPositionValues, distributionValues, baselineValues); - values.forEach(function(alignValue) { - [""].concat(values).forEach(function(justifyValue) { + let classes = Object.assign({"Normal":"normal"}, contentPositionClasses, distributionClasses, baselineClasses); + for (var key1 in classes) { + let alignValue = classes[key1]; + let classes2 = Object.assign({"Normal":"normal", "Left":"left", "Right":"right"}, contentPositionClasses, distributionClasses); + for (var key2 in classes2) { + let justifyValue = classes2[key2]; var value = (alignValue + " " + justifyValue).trim(); test(function() { - checkPlaceShorhand("place-content", alignValue, justifyValue) + checkPlaceShorhand("place-content", value, alignValue, justifyValue) }, "Checking place-content: " + value); - }); - }); + } + } </script> diff --git a/tests/wpt/web-platform-tests/css/css-align/content-distribution/place-content-shorthand-007-ref.html b/tests/wpt/web-platform-tests/css/css-align/content-distribution/place-content-shorthand-007-ref.html new file mode 100644 index 00000000000..67727f4fd26 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-align/content-distribution/place-content-shorthand-007-ref.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Test Reference</title> +<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io"> +<style> +div { + width: 400px; + height: 400px; + background: blue; + position: relative; +} +span { + background: green; + width: 200px; + height: 200px; + position: absolute; + bottom: 0; + left: 100px; +} +</style> +Should see a green square centered and at the bottom of the blue square. +<div><span></span></div> diff --git a/tests/wpt/web-platform-tests/css/css-align/content-distribution/place-content-shorthand-007.html b/tests/wpt/web-platform-tests/css/css-align/content-distribution/place-content-shorthand-007.html new file mode 100644 index 00000000000..be954c97121 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-align/content-distribution/place-content-shorthand-007.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Box Alignment: place-content shorthand with fallback</title> +<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io"> +<link rel="help" href="https://drafts.csswg.org/css-align/#propdef-place-content"> +<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1430622"> +<link rel="match" href="place-content-shorthand-007-ref.html"> +<style> +div { + display: grid; + grid: 200px / 200px; + width: 400px; + height: 400px; + background: blue; + place-content: end space-evenly; +} +span { + background: green; +} +</style> +Should see a green square centered and at the bottom of the blue square. +<div><span></span></div> diff --git a/tests/wpt/web-platform-tests/css/css-align/default-alignment/parse-align-items-001.html b/tests/wpt/web-platform-tests/css/css-align/default-alignment/parse-align-items-001.html new file mode 100644 index 00000000000..4a7d1b816c5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-align/default-alignment/parse-align-items-001.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Default-Alignment: align-items - setting values via CSS</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#default-alignment" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-align-items" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-self-position" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-baseline-position" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-overflow-position" /> +<link rel="stylesheet" href="../../support/alignment.css" > +<meta name="assert" content="Check that the computed value is the specified value and the JS value is empty."/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> +<div id="log"></div> +<script> + let classes = Object.assign({"Normal":"normal", "Stretch":"stretch"}, selfPositionClasses, + baselineClasses, overflowClasses); + + for (var key in classes) { + let specifiedValue = classes[key]; + element = document.createElement("div"); + element.className = "alignItems" + key; + document.body.appendChild(element); + test(function() { + if (specifiedValue === "first baseline") + checkValues(element, "alignItems", "align-items", "", "baseline"); + else + checkValues(element, "alignItems", "align-items", "", specifiedValue); + }, "Checking align-items: " + specifiedValue); + } +</script> diff --git a/tests/wpt/web-platform-tests/css/css-align/default-alignment/parse-align-items-002.html b/tests/wpt/web-platform-tests/css/css-align/default-alignment/parse-align-items-002.html new file mode 100644 index 00000000000..79b1d60b2f0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-align/default-alignment/parse-align-items-002.html @@ -0,0 +1,57 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Default-Alignment: align-items - 'initial' value</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#default-alignment" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-align-items" /> +<link rel="help" href="https://drafts.csswg.org/css-cascade/#initial-values" /> +<meta name="assert" content="Check the 'initial' value in diferent scenarios."/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> +<div id="log"></div> +<script> +container = document.createElement("div"); +element = document.createElement("div"); +container.appendChild(element); +document.body.appendChild(container); + +test(function() { + element = document.createElement("div"); + document.body.appendChild(element); + checkValues(element, "alignItems", "align-items", "", "normal"); +}, "Test 'initial' value when nothing is specified"); + +test(function() { + container.style.display = ""; + checkInitialValues(element, "alignItems", "align-items", "center", "normal"); +}, "Test align-items: 'initial'"); + +test(function() { + container.style.display = "grid"; + checkInitialValues(element, "alignItems", "align-items", "safe start", "normal"); +}, "Test grid items align-items: 'initial'"); + +test(function() { + container.style.display = "flex"; + checkInitialValues(element, "alignItems", "align-items", "unsafe end", "normal"); +}, "Test flex items align-items: 'initial'"); + +test(function() { + container.style.display = ""; + element.style.position = "absolute"; + checkInitialValues(element, "alignItems", "align-items", "start", "normal"); +}, "Test absolute positioned elements align-items: 'initial'"); + +test(function() { + container.style.display = "grid"; + element.style.position = "absolute"; + checkInitialValues(element, "alignItems", "align-items", "end", "normal"); +}, "Test absolute positioned grid items align-items: 'initial'"); + +test(function() { + container.style.display = "flex"; + element.style.position = "absolute"; + checkInitialValues(element, "alignItems", "align-items", "end", "normal"); +}, "Test absolute positioned flex items align-items: 'initial'"); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-align/default-alignment/parse-align-items-003.html b/tests/wpt/web-platform-tests/css/css-align/default-alignment/parse-align-items-003.html new file mode 100644 index 00000000000..aa6b295dc20 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-align/default-alignment/parse-align-items-003.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Default-Alignment: align-items - setting values via JS</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#default-alignment" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-align-items" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-self-position" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-baseline-position" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-overflow-position" /> +<meta name="assert" content="Check that the computed value is the specified value and the same than the JS value."/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> +<div id="log"></div> +<script> + element = document.createElement("div"); + document.body.appendChild(element); + + let classes = Object.assign({"Normal":"normal", "Stretch":"stretch"}, selfPositionClasses, + baselineClasses, overflowClasses); + + for (var key in classes) { + let specifiedValue = classes[key]; + test(function() { + element.style.alignItems = ""; + element.style.alignItems = specifiedValue; + if (specifiedValue === "first baseline") + checkValues(element, "alignItems", "align-items", "baseline", "baseline"); + else + checkValues(element, "alignItems", "align-items", specifiedValue, specifiedValue); + }, "Checking align-items: " + specifiedValue); + } +</script> diff --git a/tests/wpt/web-platform-tests/css/css-align/default-alignment/parse-align-items-004.html b/tests/wpt/web-platform-tests/css/css-align/default-alignment/parse-align-items-004.html new file mode 100644 index 00000000000..2cd306a759b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-align/default-alignment/parse-align-items-004.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Default-Alignment: align-items - invalid values</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#default-alignment" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-align-items" /> +<meta name="assert" content="Check bad combinations of specified values."/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> +<div id="log"></div> +<script> + element = document.createElement("div"); + document.body.appendChild(element); + + let values = ["auto", "legacy", "space-around", "left", "safe right"].concat(invalidPositionValues); + + values.forEach(function(value) { + test(function() { + checkBadValues(element, "alignItems", "align-items", value); + }, "Checking invalid combination - align-items: " + value); + }); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-align/default-alignment/parse-align-items-005.html b/tests/wpt/web-platform-tests/css/css-align/default-alignment/parse-align-items-005.html new file mode 100644 index 00000000000..6dc0ad684f8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-align/default-alignment/parse-align-items-005.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Default-Alignment: align-items - inherit value</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#default-alignment" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-align-items" /> +<meta name="assert" content="Check bad cobinations of specified values."/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> +<div id="log"></div> +<script> +test(function() { + checkInheritValues("alignItems", "align-items", "end"); +}, "Test the value 'inherit' overrides current value ('end')"); +test(function() { + checkInheritValues("alignItems", "align-items", "safe start"); +}, "Test the value 'inherit' overrides current value ('safe start')"); +test(function() { + checkInheritValues("alignItems", "align-items", "unsafe center"); +}, "Test the value 'inherit' overrides current value ('unsafe center')"); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-align/default-alignment/parse-justify-items-001.html b/tests/wpt/web-platform-tests/css/css-align/default-alignment/parse-justify-items-001.html new file mode 100644 index 00000000000..aa4b147352e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-align/default-alignment/parse-justify-items-001.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Default-Alignment: justify-items - setting values via CSS</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#default-alignment" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-justify-items" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-self-position" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-baseline-position" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-overflow-position" /> +<link rel="stylesheet" href="../../support/alignment.css" > +<meta name="assert" content="Check that the computed value is the specified value and the JS value is empty."/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> +<div id="log"></div> +<script> + let classes = Object.assign({"Normal":"normal", "Stretch":"stretch", "Left":"left", "Right":"right"}, + selfPositionClasses, baselineClasses, overflowClasses); + + for (var key in classes) { + let specifiedValue = classes[key]; + element = document.createElement("div"); + element.className = "justifyItems" + key; + document.body.appendChild(element); + test(function() { + if (specifiedValue === "first baseline") + checkValues(element, "justifyItems", "justify-items", "", "baseline"); + else + checkValues(element, "justifyItems", "justify-items", "", specifiedValue); + }, "Checking justify-items: " + specifiedValue); + } +</script> diff --git a/tests/wpt/web-platform-tests/css/css-align/default-alignment/parse-justify-items-002.html b/tests/wpt/web-platform-tests/css/css-align/default-alignment/parse-justify-items-002.html new file mode 100644 index 00000000000..6ba2c7c2e1f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-align/default-alignment/parse-justify-items-002.html @@ -0,0 +1,57 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Default-Alignment: justify-items - 'initial' value</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#default-alignment" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-justify-items" /> +<link rel="help" href="https://drafts.csswg.org/css-cascade/#initial-values" /> +<meta name="assert" content="Check the 'initial' value in diferent scenarios."/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> +<div id="log"></div> +<script> +container = document.createElement("div"); +element = document.createElement("div"); +container.appendChild(element); +document.body.appendChild(container); + +test(function() { + element = document.createElement("div"); + document.body.appendChild(element); + checkValues(element, "justifyItems", "justify-items", "", "legacy"); +}, "Test 'initial' value when nothing is specified"); + +test(function() { + container.style.display = ""; + checkInitialValues(element, "justifyItems", "justify-items", "center", "legacy"); +}, "Test justify-items: 'initial'"); + +test(function() { + container.style.display = "grid"; + checkInitialValues(element, "justifyItems", "justify-items", "safe start", "legacy"); +}, "Test grid items justify-items: 'initial'"); + +test(function() { + container.style.display = "flex"; + checkInitialValues(element, "justifyItems", "justify-items", "unsafe end", "legacy"); +}, "Test flex items justify-items: 'initial'"); + +test(function() { + container.style.display = ""; + element.style.position = "absolute"; + checkInitialValues(element, "justifyItems", "justify-items", "start", "legacy"); +}, "Test absolute positioned elements justify-items: 'initial'"); + +test(function() { + container.style.display = "grid"; + element.style.position = "absolute"; + checkInitialValues(element, "justifyItems", "justify-items", "end", "legacy"); +}, "Test absolute positioned grid items justify-items: 'initial'"); + +test(function() { + container.style.display = "flex"; + element.style.position = "absolute"; + checkInitialValues(element, "justifyItems", "justify-items", "end", "legacy"); +}, "Test absolute positioned flex items justify-items: 'initial'"); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-align/default-alignment/parse-justify-items-003.html b/tests/wpt/web-platform-tests/css/css-align/default-alignment/parse-justify-items-003.html new file mode 100644 index 00000000000..9ab5ee3099a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-align/default-alignment/parse-justify-items-003.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Default-Alignment: justify-items - setting values via JS</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#default-alignment" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-justify-items" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-self-position" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-baseline-position" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-overflow-position" /> +<meta name="assert" content="Check that the computed value is the specified value and the same than the JS value."/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> +<div id="log"></div> +<script> + element = document.createElement("div"); + document.body.appendChild(element); + + let classes = Object.assign({"Normal":"normal", "Stretch":"stretch", "Left":"left", "Right":"right"}, + selfPositionClasses, baselineClasses, overflowClasses); + + for (var key in classes) { + let specifiedValue = classes[key]; + test(function() { + element.style.justifyItems = ""; + element.style.justifyItems = specifiedValue; + if (specifiedValue === "first baseline") + checkValues(element, "justifyItems", "justify-items", "baseline", "baseline"); + else + checkValues(element, "justifyItems", "justify-items", specifiedValue, specifiedValue); + }, "Checking justify-items: " + specifiedValue); + } +</script> diff --git a/tests/wpt/web-platform-tests/css/css-align/default-alignment/parse-justify-items-004.html b/tests/wpt/web-platform-tests/css/css-align/default-alignment/parse-justify-items-004.html new file mode 100644 index 00000000000..70e80b2a421 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-align/default-alignment/parse-justify-items-004.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Default-Alignment: justify-items - invalid values</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#default-alignment" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-justify-items" /> +<meta name="assert" content="Check bad combinations of specified values."/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> +<div id="log"></div> +<script> + element = document.createElement("div"); + document.body.appendChild(element); + + let values = ["auto", "space-around"].concat(invalidPositionValues, invalidLegacyValues); + + values.forEach(function(value) { + test(function() { + checkBadValues(element, "justifyItems", "justify-items", value); + }, "Checking invalid combination - justify-items: " + value); + }); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-align/default-alignment/parse-justify-items-005.html b/tests/wpt/web-platform-tests/css/css-align/default-alignment/parse-justify-items-005.html new file mode 100644 index 00000000000..b4814da1aad --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-align/default-alignment/parse-justify-items-005.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Default-Alignment: justify-items - inherit value</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#default-alignment" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-justify-items" /> +<meta name="assert" content="Check the 'inherit' value in different scenarios."/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> +<div id="log"></div> +<script> +test(function() { + checkInheritValues("justifyItems", "justify-items", "end"); +}, "Test the value 'inherit' overrides current value ('end')"); +test(function() { + checkInheritValues("justifyItems", "justify-items", "safe left"); +}, "Test the value 'inherit' overrides current value ('safe left')"); +test(function() { + checkInheritValues("justifyItems", "justify-items", "unsafe center"); +}, "Test the value 'inherit' overrides current value ('unsafe center')"); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-align/default-alignment/parse-justify-items-006.html b/tests/wpt/web-platform-tests/css/css-align/default-alignment/parse-justify-items-006.html new file mode 100644 index 00000000000..f64b52e0f16 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-align/default-alignment/parse-justify-items-006.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Default-Alignment: justify-items - use of the 'legacy' keyword</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#default-alignment" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-justify-items" /> +<meta name="assert" content="Check the use of the 'legacy' keyword in different scenarios."/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> +<div id="log"></div> +<script> +test(function() { + checkLegacyValues("justifyItems", "justify-items", "legacy left"); +}, "Test the value justify-items: legacy left"); +test(function() { + checkLegacyValues("justifyItems", "justify-items", "legacy center"); +}, "Test the value justify-items: legacy center"); +test(function() { + checkLegacyValues("justifyItems", "justify-items", "legacy right"); +}, "Test the value justify-items: legacy right"); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-align/default-alignment/place-items-shorthand-001.html b/tests/wpt/web-platform-tests/css/css-align/default-alignment/place-items-shorthand-001.html index 8e1ac7a2df1..c67ca9cbaf2 100644 --- a/tests/wpt/web-platform-tests/css/css-align/default-alignment/place-items-shorthand-001.html +++ b/tests/wpt/web-platform-tests/css/css-align/default-alignment/place-items-shorthand-001.html @@ -5,13 +5,14 @@ <meta name="assert" content="Check that setting a single value to place-items expands to such value set in both 'align-items' and 'justify-items'." /> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> -<script src="../resources/alignment-parsing-utils.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> <div id="log"></div> <script> - var values = ["normal", "stretch"].concat(selfPositionValues, baselineValues); - values.forEach(function(value) { + let classes = Object.assign({"Normal":"normal", "Stretch":"stretch"}, selfPositionClasses, baselineClasses); + for (var key in classes) { + let value = classes[key]; test(function() { checkPlaceShorhandLonghands("place-items", "align-items", "justify-items", value); }, "Checking place-items: " + value); - }); + } </script> diff --git a/tests/wpt/web-platform-tests/css/css-align/default-alignment/place-items-shorthand-002.html b/tests/wpt/web-platform-tests/css/css-align/default-alignment/place-items-shorthand-002.html index 1608b702c93..61dab31b74e 100644 --- a/tests/wpt/web-platform-tests/css/css-align/default-alignment/place-items-shorthand-002.html +++ b/tests/wpt/web-platform-tests/css/css-align/default-alignment/place-items-shorthand-002.html @@ -5,15 +5,18 @@ <meta name="assert" content="Check that setting two values to place-items sets the first one to 'align-items' and the second one to 'justify-items'." /> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> -<script src="../resources/alignment-parsing-utils.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> <div id="log"></div> <script> - var values = ["normal", "stretch"].concat(selfPositionValues, baselineValues); - values.forEach(function(alignValue) { - ["auto"].concat(values).forEach(function(justifyValue) { + let classes = Object.assign({"Normal":"normal", "Stretch":"stretch"}, selfPositionClasses, baselineClasses); + for (var key1 in classes) { + let alignValue = classes[key1]; + let classes2 = Object.assign({"Left":"left", "Right":"right"}, classes); + for (var key2 in classes2) { + let justifyValue = classes2[key2]; test(function() { checkPlaceShorhandLonghands("place-items", "align-items", "justify-items", alignValue, justifyValue); }, "Checking place-items: " + alignValue + " " + justifyValue); - }); - }); + } + } </script> diff --git a/tests/wpt/web-platform-tests/css/css-align/default-alignment/place-items-shorthand-004.html b/tests/wpt/web-platform-tests/css/css-align/default-alignment/place-items-shorthand-004.html index 07f23ec10e5..c5d94726f2a 100644 --- a/tests/wpt/web-platform-tests/css/css-align/default-alignment/place-items-shorthand-004.html +++ b/tests/wpt/web-platform-tests/css/css-align/default-alignment/place-items-shorthand-004.html @@ -5,7 +5,7 @@ <meta name="assert" content="Check that place-items's invalid values are properly detected at parsing time." /> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> -<script src="../resources/alignment-parsing-utils.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> <div id="log"></div> <script> function checkInvalidValues(value) @@ -14,8 +14,8 @@ } test(function() { - checkInvalidValues("center safe") - checkInvalidValues("true center") + checkInvalidValues("safe center") + checkInvalidValues("unsafe center") }, "Verify overflow keywords are invalid"); test(function() { @@ -23,6 +23,12 @@ }, "Verify fallback values are invalid"); test(function() { + checkInvalidValues("left") + checkInvalidValues("left start") + checkInvalidValues("right center") + }, "Verify 'left' and 'right' values are invalid for block/cross axis alignment"); + + test(function() { checkInvalidValues("10px left") checkInvalidValues("right 10%") }, "Verify numeric values are invalid"); diff --git a/tests/wpt/web-platform-tests/css/css-align/default-alignment/place-items-shorthand-006.html b/tests/wpt/web-platform-tests/css/css-align/default-alignment/place-items-shorthand-006.html index 4af3ad5e7f2..4c55b1058da 100644 --- a/tests/wpt/web-platform-tests/css/css-align/default-alignment/place-items-shorthand-006.html +++ b/tests/wpt/web-platform-tests/css/css-align/default-alignment/place-items-shorthand-006.html @@ -5,16 +5,19 @@ <meta name="assert" content="Check the place-items's 'specified' and 'resolved' values serialization." /> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> -<script src="../resources/alignment-parsing-utils.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> <div id="log"></div> <script> - var values = ["normal", "stretch"].concat(selfPositionValues, baselineValues); - values.forEach(function(alignValue) { - [""].concat(values).forEach(function(justifyValue) { + let classes = Object.assign({"Normal":"normal", "Stretch":"stretch"}, selfPositionClasses, baselineClasses); + for (var key1 in classes) { + let alignValue = classes[key1]; + let classes2 = Object.assign({"Left":"left", "Right":"right"}, classes); + for (var key2 in classes2) { + let justifyValue = classes2[key2]; var value = (alignValue + " " + justifyValue).trim(); test(function() { - checkPlaceShorhand("place-items", alignValue, justifyValue) + checkPlaceShorhand("place-items", value, alignValue, justifyValue) }, "Checking place-items: " + value); - }); - }); + } + } </script> diff --git a/tests/wpt/web-platform-tests/css/css-align/resources/alignment-parsing-utils.js b/tests/wpt/web-platform-tests/css/css-align/resources/alignment-parsing-utils.js index 9084624e994..0cbb820ecb4 100644 --- a/tests/wpt/web-platform-tests/css/css-align/resources/alignment-parsing-utils.js +++ b/tests/wpt/web-platform-tests/css/css-align/resources/alignment-parsing-utils.js @@ -1,28 +1,43 @@ -var selfPositionValues = [ "start", "end", "self-start", "self-end", "left", "right", "center", "flex-start", "flex-end"]; -var contentPositionValues = [ "start", "end", "left", "right", "center", "flex-start", "flex-end"]; -var distributionValues = [ "stretch", "space-around", "space-between", "space-evenly"]; -var baselineValues = [ "baseline", "first baseline", "last baseline"]; +var selfPositionClasses = {"Start":"start", "End":"end", "SelfStart":"self-start", "SelfEnd":"self-end", "Center":"center", "FlexStart":"flex-start", "FlexEnd":"flex-end"}; +var contentPositionClasses = {"Start":"start", "End":"end", "Center":"center", "FlexStart":"flex-start", "FlexEnd":"flex-end"}; +var distributionClasses = {"Stretch":"stretch", "SpaceAround":"space-around", "SpaceBetween":"space-between", "SpaceEvenly":"space-evenly"}; +var baselineClasses = {"Baseline":"baseline", "FirstBaseline":"first baseline", "LastBaseline":"last baseline"}; +var overflowClasses = {"SafeFlexEnd":"safe flex-end", "UnsafeEnd":"unsafe end", "SafeEnd":"safe end", "UnsafeFlexStart":"unsafe flex-start", "SafeCenter":"safe center"}; +var legacyClasses = {"LegacyLeft":"legacy left", "LegacyCenter":"legacy center", "LegacyRight":"legacy right", "LeftLegacy":"left legacy", "CenterLegacy":"center legacy", "RightLegacy":"right legacy", "Legacy":"legacy"}; -function checkPlaceShorhand(shorthand, alignValue, justifyValue) +var invalidPositionValues = ["auto safe", "auto left", "normal unsafe", "normal stretch", "baseline normal", + "baseline center", "first baseline center", "last baseline center", "baseline last", + "baseline first", "stretch unsafe", "stretch right", "unsafe unsafe", "unsafe safe", + "center start", "unsafe stretch", "safe stretch", "baseline safe", "unsafe baseline", + "unsafe safe left", "unsafe left safe", "left safe unsafe safe", "start safe", "safe"]; +var invalidLegacyValues = ["legacy start", "legacy end", "legacy right unsafe", "legacy auto", "legacy stretch", + "legacy left right"]; +var invalidDistributionValues = ["space-between left", "space-around center", "space-evenly right", + "stretch safe start", "space-around unsafe", "space-evenly safe flex-start", + "space-between safe", "space-between stretch", "stretch start", + "stretch baseline", "first baseline space-around"]; + +function checkPlaceShorhand(shorthand, shorthandValue, alignValue, justifyValue) { var div = document.createElement("div"); - var specifiedValue = (alignValue + " " + justifyValue).trim(); - div.style[shorthand] = specifiedValue; + div.style[shorthand] = shorthandValue; document.body.appendChild(div); - if (alignValue === justifyValue) - specifiedValue = alignValue; - - var resolvedValue = getComputedStyle(div).getPropertyValue(shorthand); if (alignValue === "first baseline") alignValue = "baseline"; if (justifyValue === "first baseline") justifyValue = "baseline"; if (justifyValue === "") justifyValue = alignValue; - var expectedResolvedValue = (alignValue + " " + justifyValue).trim() - assert_equals(div.style[shorthand], specifiedValue, shorthand + " specified value"); + let specifiedValue = (alignValue + " " + justifyValue).trim(); + if (alignValue === justifyValue) + specifiedValue = alignValue; + + var resolvedValue = getComputedStyle(div).getPropertyValue(shorthand); + var expectedResolvedValue = (alignValue + " " + justifyValue).trim(); + + assert_equals(div.style[shorthand], specifiedValue, shorthandValue + " specified value"); // FIXME: We need https://github.com/w3c/csswg-drafts/issues/1041 to clarify which // value is expected for the shorthand's 'resolved value". assert_in_array(resolvedValue, ["", expectedResolvedValue], shorthand + " resolved value"); @@ -33,6 +48,10 @@ function checkPlaceShorhandLonghands(shorthand, alignLonghand, justifyLonghand, var div = document.createElement("div"); div.setAttribute("style", shorthand + ": " + alignValue + " " + justifyValue); document.body.appendChild(div); + if (alignValue === "first baseline") + alignValue = "baseline"; + if (justifyValue === "first baseline") + justifyValue = "baseline"; if (justifyValue === "") justifyValue = alignValue; assert_equals(div.style[alignLonghand], @@ -52,3 +71,60 @@ function checkPlaceShorthandInvalidValues(shorthand, alignLonghand, justifyLongh assert_equals(div.style[justifyLonghand], "end", justifyLonghand + " expanded value"); } + +function checkValues(element, property, propertyID, value, computedValue) +{ + window.element = element; + var elementID = element.id || "element"; + assert_equals(eval('element.style.' + property), value, propertyID + ' specified value is not what it should.'); + assert_equals(eval("window.getComputedStyle(" + elementID + ", '').getPropertyValue('" + propertyID + "')"), computedValue, propertyID + " computed style is not what is should."); +} + +function checkBadValues(element, property, propertyID, value) +{ + var elementID = element.id || "element"; + element.style[property] = ""; + var initialValue = eval("window.getComputedStyle(" + elementID + " , '').getPropertyValue('" + propertyID + "')"); + element.style[property] = value; + checkValues(element, property, propertyID, "", initialValue); +} + +function checkInitialValues(element, property, propertyID, value, initial) +{ + element.style[property] = value; + checkValues(element, property, propertyID, value, value); + element.style[property] = "initial"; + checkValues(element, property, propertyID, "initial", initial); +} + +function checkInheritValues(property, propertyID, value) +{ + var parentElement = document.createElement("div"); + document.body.appendChild(parentElement); + parentElement.style[property] = value; + checkValues(parentElement, property, propertyID, value, value); + + var element = document.createElement("div"); + parentElement.appendChild(element); + element.style[property] = "inherit"; + checkValues(element, property, propertyID, "inherit", value); +} + +function checkLegacyValues(property, propertyID, value) +{ + var parentElement = document.createElement("div"); + document.body.appendChild(parentElement); + parentElement.style[property] = value; + checkValues(parentElement, property, propertyID, value, value); + + var element = document.createElement("div"); + parentElement.appendChild(element); + checkValues(element, property, propertyID, "", value); +} + +function checkSupportedValues(elementID, property) +{ + var value = eval("window.getComputedStyle(" + elementID + " , '').getPropertyValue('" + property + "')"); + var value1 = eval("window.getComputedStyle(" + elementID + " , '')"); + shouldBeTrue("CSS.supports('" + property + "', '" + value + "')"); +} diff --git a/tests/wpt/web-platform-tests/css/css-align/self-alignment/parse-align-self-001.html b/tests/wpt/web-platform-tests/css/css-align/self-alignment/parse-align-self-001.html new file mode 100644 index 00000000000..b19372d503e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-align/self-alignment/parse-align-self-001.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Self-Alignment: align-self - setting values via CSS</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#self-alignment" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-align-self" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-self-position" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-baseline-position" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-overflow-position" /> +<link rel="stylesheet" href="../../support/alignment.css" > +<meta name="assert" content="Check that the computed value is the specified value and the JS value is empty."/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> +<div id="log"></div> +<script> + let classes = Object.assign({"Auto":"auto", "Normal":"normal", "Stretch":"stretch"}, selfPositionClasses, + baselineClasses, overflowClasses); + + for (var key in classes) { + let specifiedValue = classes[key]; + element = document.createElement("div"); + element.className = "alignSelf" + key; + document.body.appendChild(element); + test(function() { + if (specifiedValue === "first baseline") + checkValues(element, "alignSelf", "align-self", "", "baseline"); + else + checkValues(element, "alignSelf", "align-self", "", specifiedValue); + }, "Checking align-self: " + specifiedValue); + } +</script> diff --git a/tests/wpt/web-platform-tests/css/css-align/self-alignment/parse-align-self-002.html b/tests/wpt/web-platform-tests/css/css-align/self-alignment/parse-align-self-002.html new file mode 100644 index 00000000000..31af7806e02 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-align/self-alignment/parse-align-self-002.html @@ -0,0 +1,57 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Self-Alignment: align-self - 'initial' value</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#self-alignment" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-align-self" /> +<link rel="help" href="https://drafts.csswg.org/css-cascade/#initial-values" /> +<meta name="assert" content="Check the 'initial' value in diferent scenarios."/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> +<div id="log"></div> +<script> +container = document.createElement("div"); +element = document.createElement("div"); +container.appendChild(element); +document.body.appendChild(container); + +test(function() { + element = document.createElement("div"); + document.body.appendChild(element); + checkValues(element, "alignSelf", "align-self", "", "auto"); +}, "Test 'initial' value when nothing is specified"); + +test(function() { + container.style.display = ""; + checkInitialValues(element, "alignSelf", "align-self", "center", "auto"); +}, "Test align-self: 'initial'"); + +test(function() { + container.style.display = "grid"; + checkInitialValues(element, "alignSelf", "align-self", "safe start", "auto"); +}, "Test grid items align-self: 'initial'"); + +test(function() { + container.style.display = "flex"; + checkInitialValues(element, "alignSelf", "align-self", "unsafe end", "auto"); +}, "Test flex items align-self: 'initial'"); + +test(function() { + container.style.display = ""; + element.style.position = "absolute"; + checkInitialValues(element, "alignSelf", "align-self", "start", "auto"); +}, "Test absolute positioned elements align-self: 'initial'"); + +test(function() { + container.style.display = "grid"; + element.style.position = "absolute"; + checkInitialValues(element, "alignSelf", "align-self", "end", "auto"); +}, "Test absolute positioned grid items align-self: 'initial'"); + +test(function() { + container.style.display = "flex"; + element.style.position = "absolute"; + checkInitialValues(element, "alignSelf", "align-self", "end", "auto"); +}, "Test absolute positioned flex items align-self: 'initial'"); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-align/self-alignment/parse-align-self-003.html b/tests/wpt/web-platform-tests/css/css-align/self-alignment/parse-align-self-003.html new file mode 100644 index 00000000000..a2f3351fe2a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-align/self-alignment/parse-align-self-003.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Self-Alignment: align-self - setting values via JS</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#self-alignment" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-align-self" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-self-position" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-baseline-position" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-overflow-position" /> +<meta name="assert" content="Check that the computed value is the specified value and the same than the JS value."/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> +<div id="log"></div> +<script> + element = document.createElement("div"); + document.body.appendChild(element); + + let classes = Object.assign({"Auto":"auto", "Normal":"normal", "Stretch":"stretch"}, selfPositionClasses, + baselineClasses, overflowClasses); + + for (var key in classes) { + let specifiedValue = classes[key]; + test(function() { + element.style.alignSelf = ""; + element.style.alignSelf = specifiedValue; + if (specifiedValue === "first baseline") + checkValues(element, "alignSelf", "align-self", "baseline", "baseline"); + else + checkValues(element, "alignSelf", "align-self", specifiedValue, specifiedValue); + }, "Checking align-self: " + specifiedValue); + } +</script> diff --git a/tests/wpt/web-platform-tests/css/css-align/self-alignment/parse-align-self-004.html b/tests/wpt/web-platform-tests/css/css-align/self-alignment/parse-align-self-004.html new file mode 100644 index 00000000000..354994704ee --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-align/self-alignment/parse-align-self-004.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Self-Alignment: align-self - invalid values</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#self-alignment" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-align-self" /> +<meta name="assert" content="Check bad combinations of specified values."/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> +<div id="log"></div> +<script> + element = document.createElement("div"); + document.body.appendChild(element); + + let values = ["legacy", "space-around", "left", "safe right"].concat(invalidPositionValues); + + values.forEach(function(value) { + test(function() { + checkBadValues(element, "alignSelf", "align-self", value); + }, "Checking invalid combination - align-self: " + value); + }); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-align/self-alignment/parse-align-self-005.html b/tests/wpt/web-platform-tests/css/css-align/self-alignment/parse-align-self-005.html new file mode 100644 index 00000000000..37e15f85e44 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-align/self-alignment/parse-align-self-005.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Self-Alignment: align-self - inherit value</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#self-alignment" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-align-self" /> +<meta name="assert" content="Check bad cobinations of specified values."/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> +<div id="log"></div> +<script> +test(function() { + checkInheritValues("alignSelf", "align-self", "end"); +}, "Test the value 'inherit' overrides current value ('end')"); +test(function() { + checkInheritValues("alignSelf", "align-self", "safe start"); +}, "Test the value 'inherit' overrides current value ('safe start')"); +test(function() { + checkInheritValues("alignSelf", "align-self", "unsafe center"); +}, "Test the value 'inherit' overrides current value ('unsafe center')"); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-align/self-alignment/parse-justify-self-001.html b/tests/wpt/web-platform-tests/css/css-align/self-alignment/parse-justify-self-001.html new file mode 100644 index 00000000000..4b321d59858 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-align/self-alignment/parse-justify-self-001.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Self-Alignment: justify-self - setting values via CSS</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#self-alignment" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-justify-self" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-self-position" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-baseline-position" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-overflow-position" /> +<link rel="stylesheet" href="../../support/alignment.css" > +<meta name="assert" content="Check that the computed value is the specified value and the JS value is empty."/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> +<div id="log"></div> +<script> + let classes = Object.assign({"Auto":"auto", "Normal":"normal", "Stretch":"stretch", "Left":"left", + "Right":"right"}, selfPositionClasses, baselineClasses, overflowClasses); + + for (var key in classes) { + let specifiedValue = classes[key]; + element = document.createElement("div"); + element.className = "justifySelf" + key; + document.body.appendChild(element); + test(function() { + let value = specifiedValue; + if (specifiedValue === "first baseline") + checkValues(element, "justifySelf", "justify-self", "", "baseline"); + else + checkValues(element, "justifySelf", "justify-self", "", value); + }, "Checking justify-self: " + specifiedValue); + } +</script> diff --git a/tests/wpt/web-platform-tests/css/css-align/self-alignment/parse-justify-self-002.html b/tests/wpt/web-platform-tests/css/css-align/self-alignment/parse-justify-self-002.html new file mode 100644 index 00000000000..45403c7a0d9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-align/self-alignment/parse-justify-self-002.html @@ -0,0 +1,57 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Self-Alignment: justify-self - 'initial' value</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#self-alignment" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-justify-self" /> +<link rel="help" href="https://drafts.csswg.org/css-cascade/#initial-values" /> +<meta name="assert" content="Check the 'initial' value in diferent scenarios."/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> +<div id="log"></div> +<script> +container = document.createElement("div"); +element = document.createElement("div"); +container.appendChild(element); +document.body.appendChild(container); + +test(function() { + element = document.createElement("div"); + document.body.appendChild(element); + checkValues(element, "justifySelf", "justify-self", "", "auto"); +}, "Test 'initial' value when nothing is specified"); + +test(function() { + container.style.display = ""; + checkInitialValues(element, "justifySelf", "justify-self", "center", "auto"); +}, "Test justify-self: 'initial'"); + +test(function() { + container.style.display = "grid"; + checkInitialValues(element, "justifySelf", "justify-self", "safe start", "auto"); +}, "Test grid items justify-self: 'initial'"); + +test(function() { + container.style.display = "flex"; + checkInitialValues(element, "justifySelf", "justify-self", "unsafe end", "auto"); +}, "Test flex items justify-self: 'initial'"); + +test(function() { + container.style.display = ""; + element.style.position = "absolute"; + checkInitialValues(element, "justifySelf", "justify-self", "start", "auto"); +}, "Test absolute positioned elements justify-self: 'initial'"); + +test(function() { + container.style.display = "grid"; + element.style.position = "absolute"; + checkInitialValues(element, "justifySelf", "justify-self", "end", "auto"); +}, "Test absolute positioned grid items justify-self: 'initial'"); + +test(function() { + container.style.display = "flex"; + element.style.position = "absolute"; + checkInitialValues(element, "justifySelf", "justify-self", "end", "auto"); +}, "Test absolute positioned flex items justify-self: 'initial'"); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-align/self-alignment/parse-justify-self-003.html b/tests/wpt/web-platform-tests/css/css-align/self-alignment/parse-justify-self-003.html new file mode 100644 index 00000000000..96729166f15 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-align/self-alignment/parse-justify-self-003.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Self-Alignment: justify-self - setting values via JS</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#self-alignment" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-justify-self" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-self-position" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-baseline-position" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-overflow-position" /> +<meta name="assert" content="Check that the computed value is the specified value and the same than the JS value."/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> +<div id="log"></div> +<script> + element = document.createElement("div"); + document.body.appendChild(element); + + let classes = Object.assign({"Auto":"auto", "Normal":"normal", "Stretch":"stretch", "Left":"left", + "Right":"right"}, selfPositionClasses, baselineClasses, overflowClasses); + + for (var key in classes) { + let specifiedValue = classes[key]; + test(function() { + element.style.justifySelf = ""; + element.style.justifySelf = specifiedValue; + if (specifiedValue === "first baseline") + checkValues(element, "justifySelf", "justify-self", "baseline", "baseline"); + else + checkValues(element, "justifySelf", "justify-self", specifiedValue, specifiedValue); + }, "Checking justify-self: " + specifiedValue); + } +</script> diff --git a/tests/wpt/web-platform-tests/css/css-align/self-alignment/parse-justify-self-004.html b/tests/wpt/web-platform-tests/css/css-align/self-alignment/parse-justify-self-004.html new file mode 100644 index 00000000000..ab81bf954da --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-align/self-alignment/parse-justify-self-004.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Self-Alignment: justify-self - invalid values</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#self-alignment" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-justify-self" /> +<meta name="assert" content="Check bad combinations of specified values."/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> +<div id="log"></div> +<script> + element = document.createElement("div"); + document.body.appendChild(element); + + let values = ["legacy", "space-around"].concat(invalidPositionValues); + + values.forEach(function(value) { + test(function() { + checkBadValues(element, "justifySelf", "justify-self", value); + }, "Checking invalid combination - justify-self: " + value); + }); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-align/self-alignment/parse-justify-self-005.html b/tests/wpt/web-platform-tests/css/css-align/self-alignment/parse-justify-self-005.html new file mode 100644 index 00000000000..61b44be359c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-align/self-alignment/parse-justify-self-005.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Self-Alignment: justify-self - inherit value</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#self-alignment" /> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-justify-self" /> +<meta name="assert" content="Check bad cobinations of specified values."/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> +<div id="log"></div> +<script> +test(function() { + checkInheritValues("justifySelf", "justify-self", "end"); +}, "Test the value 'inherit' overrides current value ('end')"); +test(function() { + checkInheritValues("justifySelf", "justify-self", "safe left"); +}, "Test the value 'inherit' overrides current value ('safe left')"); +test(function() { + checkInheritValues("justifySelf", "justify-self", "unsafe center"); +}, "Test the value 'inherit' overrides current value ('unsafe center')"); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-align/self-alignment/place-self-shorthand-001.html b/tests/wpt/web-platform-tests/css/css-align/self-alignment/place-self-shorthand-001.html index ba2355e2bf1..d26df054d35 100644 --- a/tests/wpt/web-platform-tests/css/css-align/self-alignment/place-self-shorthand-001.html +++ b/tests/wpt/web-platform-tests/css/css-align/self-alignment/place-self-shorthand-001.html @@ -5,13 +5,15 @@ <meta name="assert" content="Check that setting a single value to place-self expands to such value set in both 'align-self' and 'justify-self'." /> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> -<script src="../resources/alignment-parsing-utils.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> <div id="log"></div> <script> - var values = ["auto", "normal", "stretch"].concat(selfPositionValues, baselineValues); - values.forEach(function(value) { + let classes = Object.assign({"Auto":"auto", "Normal":"normal", "Stretch":"stretch"}, selfPositionClasses, + baselineClasses); + for (var key in classes) { + let value = classes[key]; test(function() { checkPlaceShorhandLonghands("place-self", "align-self", "justify-self", value); }, "Checking place-self: " + value); - }); + } </script> diff --git a/tests/wpt/web-platform-tests/css/css-align/self-alignment/place-self-shorthand-002.html b/tests/wpt/web-platform-tests/css/css-align/self-alignment/place-self-shorthand-002.html index 16f807da8cb..3ba6c55b918 100644 --- a/tests/wpt/web-platform-tests/css/css-align/self-alignment/place-self-shorthand-002.html +++ b/tests/wpt/web-platform-tests/css/css-align/self-alignment/place-self-shorthand-002.html @@ -5,15 +5,19 @@ <meta name="assert" content="Check that setting two values to place-self sets the first one to 'align-self' and the second one to 'justify-self'." /> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> -<script src="../resources/alignment-parsing-utils.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> <div id="log"></div> <script> - var values = ["auto", "normal", "stretch"].concat(selfPositionValues, baselineValues); - values.forEach(function(alignValue) { - values.forEach(function(justifyValue) { + let classes = Object.assign({"Auto":"auto", "Normal":"normal", "Stretch":"stretch"}, selfPositionClasses, + baselineClasses); + for (var key1 in classes) { + let alignValue = classes[key1]; + let classes2 = Object.assign({"Left":"left", "Right":"right"}, classes); + for (var key2 in classes2) { + let justifyValue = classes2[key2]; test(function() { checkPlaceShorhandLonghands("place-self", "align-self", "justify-self", alignValue, justifyValue); }, "Checking place-self: " + alignValue + " " + justifyValue); - }); - }); + } + } </script> diff --git a/tests/wpt/web-platform-tests/css/css-align/self-alignment/place-self-shorthand-004.html b/tests/wpt/web-platform-tests/css/css-align/self-alignment/place-self-shorthand-004.html index b9baa6a7d7f..8434d778e0c 100644 --- a/tests/wpt/web-platform-tests/css/css-align/self-alignment/place-self-shorthand-004.html +++ b/tests/wpt/web-platform-tests/css/css-align/self-alignment/place-self-shorthand-004.html @@ -5,7 +5,7 @@ <meta name="assert" content="Check that place-self's invalid values are properly detected at parsing time." /> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> -<script src="../resources/alignment-parsing-utils.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> <div id="log"></div> <script> function checkInvalidValues(value) @@ -14,8 +14,8 @@ } test(function() { - checkInvalidValues("center safe") - checkInvalidValues("true center") + checkInvalidValues("safe center") + checkInvalidValues("unsafe center") }, "Verify overflow keywords are invalid"); test(function() { @@ -23,6 +23,12 @@ }, "Verify fallback values are invalid"); test(function() { + checkInvalidValues("left") + checkInvalidValues("left start") + checkInvalidValues("right center") + }, "Verify 'left' and 'right' values are invalid for block/cross axis alignment"); + + test(function() { checkInvalidValues("10px left") checkInvalidValues("right 10%") }, "Verify numeric values are invalid"); diff --git a/tests/wpt/web-platform-tests/css/css-align/self-alignment/place-self-shorthand-006.html b/tests/wpt/web-platform-tests/css/css-align/self-alignment/place-self-shorthand-006.html index 7e420f4a868..fb5dce1b134 100644 --- a/tests/wpt/web-platform-tests/css/css-align/self-alignment/place-self-shorthand-006.html +++ b/tests/wpt/web-platform-tests/css/css-align/self-alignment/place-self-shorthand-006.html @@ -5,16 +5,20 @@ <meta name="assert" content="Check the place-self's 'specified' and 'resolved' values serialization." /> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> -<script src="../resources/alignment-parsing-utils.js"></script> +<script src="/css/css-align/resources/alignment-parsing-utils.js"></script> <div id="log"></div> <script> - var values = ["auto", "normal", "stretch"].concat(selfPositionValues, baselineValues); - values.forEach(function(alignValue) { - [""].concat(values).forEach(function(justifyValue) { + let classes = Object.assign({"Auto":"auto", "Normal":"normal", "Stretch":"stretch"}, selfPositionClasses, + baselineClasses); + for (var key1 in classes) { + let alignValue = classes[key1]; + let classes2 = Object.assign({"Left":"left", "Right":"right"}, classes); + for (var key2 in classes2) { + let justifyValue = classes2[key2]; var value = (alignValue + " " + justifyValue).trim(); test(function() { - checkPlaceShorhand("place-self", alignValue, justifyValue) + checkPlaceShorhand("place-self", value, alignValue, justifyValue) }, "Checking place-self: " + value); - }); - }); + } + } </script> diff --git a/tests/wpt/web-platform-tests/css/css-color/rgb-002.html b/tests/wpt/web-platform-tests/css/css-color/rgb-002.html index d9ca6854d10..a50620b9b14 100644 --- a/tests/wpt/web-platform-tests/css/css-color/rgb-002.html +++ b/tests/wpt/web-platform-tests/css/css-color/rgb-002.html @@ -6,7 +6,7 @@ <link rel="match" href="greentext-ref.html"> <meta name="assert" content="rgb() with 8-bit numbers and no alpha, also no comma"> <style> - .test {color: rgb(0 80.0 0)} + .test {color: rgb(0 128.0 0)} </style> <body> <p class="test">Test passes if this text is green</p> diff --git a/tests/wpt/web-platform-tests/css/css-color/rgb-004.html b/tests/wpt/web-platform-tests/css/css-color/rgb-004.html index 7fab3173c88..7bace000ab3 100644 --- a/tests/wpt/web-platform-tests/css/css-color/rgb-004.html +++ b/tests/wpt/web-platform-tests/css/css-color/rgb-004.html @@ -6,7 +6,7 @@ <link rel="match" href="greentext-ref.html"> <meta name="assert" content="rgb() with 8-bit numbers and numeric alpha, also no comma"> <style> - .test {color: rgb(0 80.0 0 / 1)} + .test {color: rgb(0 128.0 0 / 1)} </style> <body> <p class="test">Test passes if this text is green</p> diff --git a/tests/wpt/web-platform-tests/css/css-color/rgb-006.html b/tests/wpt/web-platform-tests/css/css-color/rgb-006.html index 9b4d4fcf037..5ccb8ea135f 100644 --- a/tests/wpt/web-platform-tests/css/css-color/rgb-006.html +++ b/tests/wpt/web-platform-tests/css/css-color/rgb-006.html @@ -6,7 +6,7 @@ <link rel="match" href="greentext-ref.html"> <meta name="assert" content="rgb() with 8-bit numbers and percent alpha, also no comma"> <style> - .test {color: rgb(0 80.0 0 / 100%)} + .test {color: rgb(0 128.0 0 / 100%)} </style> <body> <p class="test">Test passes if this text is green</p> diff --git a/tests/wpt/web-platform-tests/css/css-color/rgb-008.html b/tests/wpt/web-platform-tests/css/css-color/rgb-008.html index f8114f00de1..bd3215d89fc 100644 --- a/tests/wpt/web-platform-tests/css/css-color/rgb-008.html +++ b/tests/wpt/web-platform-tests/css/css-color/rgb-008.html @@ -6,7 +6,7 @@ <link rel="match" href="greentext-ref.html"> <meta name="assert" content="legacy rgb() with 8-bit numbers and percent alpha, with commas"> <style> - .test {color: rgb(0, 80.0, 0, 100%)} + .test {color: rgb(0, 128.0, 0, 100%)} </style> <body> <p class="test">Test passes if this text is green</p> diff --git a/tests/wpt/web-platform-tests/css/css-color/rgb-rounding-001.html b/tests/wpt/web-platform-tests/css/css-color/rgb-rounding-001.html new file mode 100644 index 00000000000..ecf93f0e818 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-color/rgb-rounding-001.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Color 4: RGB Channel Rounding</title> +<link rel="author" title="Chris Nardi" href="mailto:cnardi@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#rgb-functions"> +<meta name="assert" content="Tests if RGB channels indicated as decimals are rounded correctly"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<div id="test" style="color: rgb(45, 23, 27)"></div> + +<script> + test(function() { + var element = document.getElementById('test'); + color = "rgb(2.5, 3.4, 4.6)"; + expected = ["rgb(3, 3, 5)", color]; + element.style.cssText = "color: " + color; + assert_in_array(getComputedStyle(element).color, expected); + }, 'Tests that RGB channels are rounded appropriately'); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-color/rgba-002.html b/tests/wpt/web-platform-tests/css/css-color/rgba-002.html index 3113985e801..14dd2b56e7f 100644 --- a/tests/wpt/web-platform-tests/css/css-color/rgba-002.html +++ b/tests/wpt/web-platform-tests/css/css-color/rgba-002.html @@ -6,7 +6,7 @@ <link rel="match" href="greentext-ref.html"> <meta name="assert" content="legacy rgba() with 8-bit numbers and no alpha, also no comma"> <style> - .test {color: rgba(0 80.0 0)} + .test {color: rgba(0 128.0 0)} </style> <body> <p class="test">Test passes if this text is green</p> diff --git a/tests/wpt/web-platform-tests/css/css-color/rgba-004.html b/tests/wpt/web-platform-tests/css/css-color/rgba-004.html index 0d75d4fb48c..22e5854e1a0 100644 --- a/tests/wpt/web-platform-tests/css/css-color/rgba-004.html +++ b/tests/wpt/web-platform-tests/css/css-color/rgba-004.html @@ -6,7 +6,7 @@ <link rel="match" href="greentext-ref.html"> <meta name="assert" content="legacy rgba() with 8-bit numbers and numeric alpha, also no comma"> <style> - .test {color: rgba(0 80.0 0 / 1)} + .test {color: rgba(0 128.0 0 / 1)} </style> <body> <p class="test">Test passes if this text is green</p> diff --git a/tests/wpt/web-platform-tests/css/css-color/rgba-006.html b/tests/wpt/web-platform-tests/css/css-color/rgba-006.html index e67956e11d1..3b397ab3111 100644 --- a/tests/wpt/web-platform-tests/css/css-color/rgba-006.html +++ b/tests/wpt/web-platform-tests/css/css-color/rgba-006.html @@ -6,7 +6,7 @@ <link rel="match" href="greentext-ref.html"> <meta name="assert" content="legacy rgba() with 8-bit numbers and percent alpha, also no comma"> <style> - .test {color: rgba(0 80.0 0 / 100%)} + .test {color: rgba(0 128.0 0 / 100%)} </style> <body> <p class="test">Test passes if this text is green</p> diff --git a/tests/wpt/web-platform-tests/css/css-color/rgba-008.html b/tests/wpt/web-platform-tests/css/css-color/rgba-008.html index 19bb95601db..65eab55794c 100644 --- a/tests/wpt/web-platform-tests/css/css-color/rgba-008.html +++ b/tests/wpt/web-platform-tests/css/css-color/rgba-008.html @@ -6,7 +6,7 @@ <link rel="match" href="greentext-ref.html"> <meta name="assert" content="legacy rgba() with 8-bit numbers and percent alpha, with commas"> <style> - .test {color: rgba(0, 80.0, 0, 100%)} + .test {color: rgba(0, 128.0, 0, 100%)} </style> <body> <p class="test">Test passes if this text is green</p> diff --git a/tests/wpt/web-platform-tests/css/css-display/display-contents-fieldset-nested-legend-ref.html b/tests/wpt/web-platform-tests/css/css-display/display-contents-fieldset-nested-legend-ref.html new file mode 100644 index 00000000000..6f547b3201c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-display/display-contents-fieldset-nested-legend-ref.html @@ -0,0 +1,6 @@ +<!doctype html> +<meta charset="utf-8"> +<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io"> +<link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> +<title>CSS Test Reference</title> +<fieldset style="color: green">P<legend style="padding: 0">legend</legend>ASS</fieldset> diff --git a/tests/wpt/web-platform-tests/css/css-display/display-contents-fieldset-nested-legend.html b/tests/wpt/web-platform-tests/css/css-display/display-contents-fieldset-nested-legend.html new file mode 100644 index 00000000000..a3bd2fc9983 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-display/display-contents-fieldset-nested-legend.html @@ -0,0 +1,24 @@ +<!doctype html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<meta charset="utf-8"> +<link rel="match" href="display-contents-fieldset-nested-legend-ref.html"> +<link rel="help" href="https://drafts.csswg.org/css-display/#unbox"> +<link rel="help" href="https://drafts.csswg.org/css-display/#valdef-display-contents"> +<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1427292"> +<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io"> +<link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> +<title>CSS Test: display: contents on legend</title> +<style> +fieldset { + color: red; +} +.contents { + display: contents; + color: green; + border: 10px solid red; +} +</style> +<fieldset><legend class="contents">P<legend>legend</legend>ASS</legend></fieldset> diff --git a/tests/wpt/web-platform-tests/css/css-fill-stroke/paint-order-001.tentative.html b/tests/wpt/web-platform-tests/css/css-fill-stroke/paint-order-001.tentative.html new file mode 100644 index 00000000000..c8c2b4239a8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fill-stroke/paint-order-001.tentative.html @@ -0,0 +1,42 @@ +<!DOCTYPE html> +<html> +<meta charset="utf-8"> +<title>webkit-text-stroke and paint-order</title> +<link rel="author" title="Jonathan Kew" href="jfkthame@gmail.com"> +<link rel="author" title="Mozilla" href="https://www.mozilla.org"> +<link rel="match" href="reference/paint-order-001-ref.tentative.html"> +<link rel="help" href="https://www.w3.org/TR/fill-stroke-3/#strokes"> +<style> +span { -webkit-text-stroke: 5px orange; } +span.i { paint-order: initial; } +span.f { paint-order: fill; } +span.fs { paint-order: fill stroke; } +span.s { paint-order: stroke; } +span.sf { paint-order: stroke fill; } +</style> +<body> +<div style="font: bold 32px serif;"> + <span class="i">initial</span> + <span class="f">fill</span> + <span class="s">stroke</span> + <span class="fs">f-s</span> + <span class="sf">s-f</span> +</div> + +<div style="font: bold 64px serif;"> + <span class="i">initial</span> + <span class="f">fill</span> + <span class="s">stroke</span> + <span class="fs">f-s</span> + <span class="sf">s-f</span> +</div> + +<div style="font: bold 96px serif;"> + <span class="i">initial</span><br> + <span class="f">fill</span> + <span class="s">stroke</span><br> + <span class="fs">f-s</span> + <span class="sf">s-f</span> +</div> +<body> +<html> diff --git a/tests/wpt/web-platform-tests/css/css-fill-stroke/reference/paint-order-001-ref.tentative.html b/tests/wpt/web-platform-tests/css/css-fill-stroke/reference/paint-order-001-ref.tentative.html new file mode 100644 index 00000000000..af56147f522 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fill-stroke/reference/paint-order-001-ref.tentative.html @@ -0,0 +1,42 @@ +<!DOCTYPE html> +<html> +<meta charset="utf-8"> +<title>webkit-text-stroke and paint-order: reference</title> +<link rel="author" title="Jonathan Kew" href="jfkthame@gmail.com"> +<link rel="author" title="Mozilla" href="https://www.mozilla.org"> +<style> +body>div { position: relative; clear: left; float: left; } +span.f { -webkit-text-stroke: 5px orange; } +span.s, +span.sf { display: inline-block; position: relative; } +span.s::before, +span.sf::before { -webkit-text-stroke: 5px orange; position: absolute; z-index: -1; } +span.s::before { content: "stroke"; } +span.sf::before { content: "s-f"; } +</style> +<body> +<div style="font: bold 32px serif;"> + <span class="f">initial</span> + <span class="f">fill</span> + <span class="s">stroke</span> + <span class="f">f-s</span> + <span class="sf">s-f</span> +</div> + +<div style="font: bold 64px serif;"> + <span class="f">initial</span> + <span class="f">fill</span> + <span class="s">stroke</span> + <span class="f">f-s</span> + <span class="sf">s-f</span> +</div> + +<div style="font: bold 96px serif;"> + <span class="f">initial</span><br> + <span class="f">fill</span> + <span class="s">stroke</span><br> + <span class="f">f-s</span> + <span class="sf">s-f</span> +</div> +<body> +<html> diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/support/100x100-green.png b/tests/wpt/web-platform-tests/css/css-flexbox/support/100x100-green.png Binary files differindex 3f07c9e3bb7..25b76c3c6f2 100644 --- a/tests/wpt/web-platform-tests/css/css-flexbox/support/100x100-green.png +++ b/tests/wpt/web-platform-tests/css/css-flexbox/support/100x100-green.png diff --git a/tests/wpt/web-platform-tests/css/css-fonts/font-feature-settings-serialization-001.html b/tests/wpt/web-platform-tests/css/css-fonts/font-feature-settings-serialization-001.html new file mode 100644 index 00000000000..025afa2e963 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts/font-feature-settings-serialization-001.html @@ -0,0 +1,26 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Test: font-feature-settings serialization</title> +<link rel="author" title="Chris Nardi" href="mailto:cnardi@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-fonts-3/#feature-tag-value"> +<link rel="help" href="https://drafts.csswg.org/cssom/#common-serializing-idioms"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> + #test { + font-feature-settings: "vert" 1; + } + #test1 { + font-feature-settings: 'vert' 1; + } +</style> +<div id="test"></div> +<div id="test1"></div> +<script> + const div = document.querySelector("#test"); + const div1 = document.querySelector("#test1"); + test(function() { + assert_equals(getComputedStyle(div).fontFeatureSettings, '"vert" 1'); + assert_equals(getComputedStyle(div1).fontFeatureSettings, '"vert" 1'); + }, "font-feature-settings should have its feature tag serialized with double quotes"); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-07.html b/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-07.html index 54359c277a5..fdcba5f699d 100644 --- a/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-07.html +++ b/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-07.html @@ -4,8 +4,8 @@ <title>CSS Test: font-variant-alternates: styleset(); low level equivalence</title> <link rel="author" title="Chris Lilley" href="chris@w3.org"> <link rel="match" href="font-variant-alternates-07-ref.html"> -<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-alternates-prop"> -<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop"> +<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-variant-alternates-prop"> +<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-feature-settings-prop"> <link rel="help" href="https://drafts.csswg.org/css-fonts/#font-feature-values"> <meta name="assert" content="Enables display with stylistic sets (font specific, OpenType feature: ss<feature-index>"> <style> diff --git a/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-08.html b/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-08.html index 5c5545cf8ed..4ec305b59d7 100644 --- a/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-08.html +++ b/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-08.html @@ -4,8 +4,8 @@ <title>CSS Test: font-variant-alternates: styleset(); low level equivalence</title> <link rel="author" title="Chris Lilley" href="chris@w3.org"> <link rel="match" href="font-variant-alternates-08-ref.html"> -<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-alternates-prop"> -<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop"> +<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-variant-alternates-prop"> +<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-feature-settings-prop"> <link rel="help" href="https://drafts.csswg.org/css-fonts/#font-feature-values"> <meta name="assert" content="Enables display with stylistic sets (font specific, OpenType feature: ss<feature-index>"> <style> diff --git a/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-09.html b/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-09.html index 6c98e62a56c..7cc6a1a30aa 100644 --- a/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-09.html +++ b/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-09.html @@ -4,8 +4,8 @@ <title>CSS Test: font-variant-alternates: character-variant(); low level equivalence</title> <link rel="author" title="Chris Lilley" href="chris@w3.org"> <link rel="match" href="font-variant-alternates-09-ref.html"> -<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-alternates-prop"> -<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop"> +<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-variant-alternates-prop"> +<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-feature-settings-prop"> <link rel="help" href="https://drafts.csswg.org/css-fonts/#font-feature-values"> <meta name="assert" content="Enables display of specific character variants (font specific, OpenType feature: cv<feature-index>"> <style> diff --git a/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-10.html b/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-10.html index 3e30504f2b8..ac8341d8aba 100644 --- a/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-10.html +++ b/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-10.html @@ -4,8 +4,8 @@ <title>CSS Test: font-variant-alternates: character-variant(); low level equivalence</title> <link rel="author" title="Chris Lilley" href="chris@w3.org"> <link rel="match" href="font-variant-alternates-10-ref.html"> -<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-alternates-prop"> -<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop"> +<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-variant-alternates-prop"> +<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-feature-settings-prop"> <link rel="help" href="https://drafts.csswg.org/css-fonts/#font-feature-values"> <meta name="assert" content="Enables display of specific character variants (font specific, OpenType feature: cv<feature-index>"> <style> diff --git a/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-11.html b/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-11.html index 0a8a2d72003..2e73fc07aec 100644 --- a/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-11.html +++ b/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-11.html @@ -4,8 +4,8 @@ <title>CSS Test: font-variant-alternates: character-variant(); low level equivalence</title> <link rel="author" title="Chris Lilley" href="chris@w3.org"> <link rel="match" href="font-variant-alternates-11-ref.html"> -<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-alternates-prop"> -<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop"> +<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-variant-alternates-prop"> +<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-feature-settings-prop"> <link rel="help" href="https://drafts.csswg.org/css-fonts/#font-feature-values"> <meta name="assert" content="Enables display of specific character variants (font specific, OpenType feature: cv<feature-index>"> <style> diff --git a/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-12.html b/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-12.html index 458840d7564..12f1cc75955 100644 --- a/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-12.html +++ b/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-12.html @@ -4,8 +4,8 @@ <title>CSS Test: font-variant-alternates: swash(); low level equivalence</title> <link rel="author" title="Chris Lilley" href="chris@w3.org"> <link rel="match" href="font-variant-alternates-12-ref.html"> -<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-alternates-prop"> -<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop"> +<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-variant-alternates-prop"> +<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-feature-settings-prop"> <link rel="help" href="https://drafts.csswg.org/css-fonts/#font-feature-values"> <meta name="assert" content="Enables display of swash glyphs (font specific, OpenType feature: swsh <feature-index>, cswh <feature-index>)."> <style> diff --git a/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-13.html b/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-13.html index 67b7e680a9d..872c7dd8272 100644 --- a/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-13.html +++ b/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-13.html @@ -4,8 +4,8 @@ <title>CSS Test: font-variant-alternates: swash(); low level equivalence</title> <link rel="author" title="Chris Lilley" href="chris@w3.org"> <link rel="match" href="font-variant-alternates-13-ref.html"> -<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-alternates-prop"> -<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop"> +<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-variant-alternates-prop"> +<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-feature-settings-prop"> <link rel="help" href="https://drafts.csswg.org/css-fonts/#font-feature-values"> <meta name="assert" content="Enables display of swash glyphs (font specific, OpenType feature: swsh <feature-index>, cswh <feature-index>)."> <style> diff --git a/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-14.html b/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-14.html index 0f78a5aca80..45c2d02302d 100644 --- a/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-14.html +++ b/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-14.html @@ -4,8 +4,8 @@ <title>CSS Test: font-variant-alternates: swash(); low level equivalence</title> <link rel="author" title="Chris Lilley" href="chris@w3.org"> <link rel="match" href="font-variant-alternates-14-ref.html"> -<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-alternates-prop"> -<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop"> +<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-variant-alternates-prop"> +<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-feature-settings-prop"> <link rel="help" href="https://drafts.csswg.org/css-fonts/#font-feature-values"> <meta name="assert" content="Enables display of swash glyphs (font specific, OpenType feature: swsh <feature-index>, cswh <feature-index>)."> <style> diff --git a/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-15.html b/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-15.html index 1c003a8e3cf..becb4d40b80 100644 --- a/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-15.html +++ b/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-15.html @@ -4,8 +4,8 @@ <title>CSS Test: font-variant-alternates: ornaments(); low level equivalence</title> <link rel="author" title="Chris Lilley" href="chris@w3.org"> <link rel="match" href="font-variant-alternates-15-ref.html"> -<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-alternates-prop"> -<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop"> +<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-variant-alternates-prop"> +<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-feature-settings-prop"> <link rel="help" href="https://drafts.csswg.org/css-fonts/#font-feature-values"> <meta name="assert" content="Enables replacement of default glyphs with ornaments, if provided in the font (font specific, OpenType feature: ornm <feature-index>)."> <style> diff --git a/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-16.html b/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-16.html index 176d8ff13e4..8353073ae1d 100644 --- a/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-16.html +++ b/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-16.html @@ -4,8 +4,8 @@ <title>CSS Test: font-variant-alternates: ornaments(); low level equivalence</title> <link rel="author" title="Chris Lilley" href="chris@w3.org"> <link rel="match" href="font-variant-alternates-16-ref.html"> -<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-alternates-prop"> -<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop"> +<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-variant-alternates-prop"> +<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-feature-settings-prop"> <link rel="help" href="https://drafts.csswg.org/css-fonts/#font-feature-values"> <meta name="assert" content="Enables replacement of default glyphs with ornaments, if provided in the font (font specific, OpenType feature: ornm <feature-index>)."> <style> diff --git a/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-17.html b/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-17.html index 558e2f45d04..799bf653f8e 100644 --- a/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-17.html +++ b/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-17.html @@ -4,8 +4,8 @@ <title>CSS Test: font-variant-alternates: ornaments(); low level equivalence</title> <link rel="author" title="Chris Lilley" href="chris@w3.org"> <link rel="match" href="font-variant-alternates-17-ref.html"> -<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-alternates-prop"> -<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop"> +<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-variant-alternates-prop"> +<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-feature-settings-prop"> <link rel="help" href="https://drafts.csswg.org/css-fonts/#font-feature-values"> <meta name="assert" content="Enables replacement of default glyphs with ornaments, if provided in the font (font specific, OpenType feature: ornm <feature-index>)."> <style> diff --git a/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-18.html b/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-18.html index 109ff58d954..8dfe0b86503 100644 --- a/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-18.html +++ b/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-18.html @@ -4,8 +4,8 @@ <title>CSS Test: font-variant-alternates: ornaments(); low level equivalence</title> <link rel="author" title="Chris Lilley" href="chris@w3.org"> <link rel="match" href="font-variant-alternates-18-ref.html"> -<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-alternates-prop"> -<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop"> +<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-variant-alternates-prop"> +<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-feature-settings-prop"> <link rel="help" href="https://drafts.csswg.org/css-fonts/#font-feature-values"> <meta name="assert" content="Enables display of alternate annotation forms (font specific, OpenType feature: nalt <feature-index>)."> <style> diff --git a/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-parsing.html b/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-parsing.html index a02bcedfb6b..f00fa53342c 100644 --- a/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-parsing.html +++ b/tests/wpt/web-platform-tests/css/css-fonts/font-variant-alternates-parsing.html @@ -2,7 +2,7 @@ <meta charset="utf-8"> <title>CSS Test: font-variant-alternates: historical-forms; parses case-insensitively</title> <link rel="author" title="Emilio Cobos Álvarez" href="emilio@crisal.io"> -<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-variant-alternates-prop"> +<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-variant-alternates-prop"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script> diff --git a/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-content-alignment-001.html b/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-content-alignment-001.html index d99dc537572..80b795dcc58 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-content-alignment-001.html +++ b/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-content-alignment-001.html @@ -6,7 +6,7 @@ <link rel="help" href="https://drafts.csswg.org/css-grid-1/#grid-align" title="10.5. Aligning the Grid: the justify-content and align-content properties"> <meta name="assert" content="This test checks the behavior of the positioned items in a grid using content alignment."> <link rel="stylesheet" href="../support/grid.css"> -<link rel="stylesheet" href="../support/grid-alignment.css"> +<link rel="stylesheet" href="../../support/alignment.css"> <style> .grid { diff --git a/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-content-alignment-rtl-001.html b/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-content-alignment-rtl-001.html index 40580eda72c..ad9147e22a1 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-content-alignment-rtl-001.html +++ b/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-content-alignment-rtl-001.html @@ -6,7 +6,7 @@ <link rel="help" href="https://drafts.csswg.org/css-grid-1/#grid-align" title="10.5. Aligning the Grid: the justify-content and align-content properties"> <meta name="assert" content="This test checks the behavior of the positioned items in a grid using content alignment in RTL."> <link rel="stylesheet" href="../support/grid.css"> -<link rel="stylesheet" href="../support/grid-alignment.css"> +<link rel="stylesheet" href="../../support/alignment.css"> <style> .grid { diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-011.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-011.html index ff184f16174..d219cab93b1 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-011.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-011.html @@ -37,6 +37,6 @@ function runTest() { </script> <body onload="runTest()"> <div class="grid" id="grid"> - <img data-expected-width="100" id="item" src="../grid-items/support/100x100-green.png"></img> + <img data-expected-width="100" id="item" src="support/100x100-green.png"></img> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-012.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-012.html index b9a9d9b43d3..d8b24be16fd 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-012.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-012.html @@ -37,6 +37,6 @@ function runTest() { </script> <body onload="runTest()"> <div class="grid" id="grid"> - <img data-expected-width="100" id="item" src="../grid-items/support/100x100-green.png"></img> + <img data-expected-width="100" id="item" src="support/100x100-green.png"></img> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-013.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-013.html index 356220b336b..5520a4c2d93 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-013.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-013.html @@ -37,6 +37,6 @@ function runTest() { </script> <body onload="runTest()"> <div class="grid" id="grid"> - <img data-expected-width="100" id="item" src="../grid-items/support/100x100-green.png"></img> + <img data-expected-width="100" id="item" src="support/100x100-green.png"></img> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-014.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-014.html index 3561ae3d80f..26ff656d971 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-014.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-014.html @@ -37,6 +37,6 @@ function runTest() { </script> <body onload="runTest()"> <div class="grid" id="grid"> - <img data-expected-width="100" id="item" src="../grid-items/support/100x100-green.png"></img> + <img data-expected-width="100" id="item" src="support/100x100-green.png"></img> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-015.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-015.html index c56c1397553..1a5e52c9d8a 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-015.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-015.html @@ -37,6 +37,6 @@ function runTest() { </script> <body onload="runTest()"> <div class="grid" id="grid"> - <img data-expected-width="100" id="item" src="../grid-items/support/100x100-green.png"></img> + <img data-expected-width="100" id="item" src="support/100x100-green.png"></img> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-016.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-016.html index 7815a05718f..66e7e2b4b21 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-016.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-016.html @@ -37,6 +37,6 @@ function runTest() { </script> <body onload="runTest()"> <div class="grid" id="grid"> - <img data-expected-width="100" id="item" src="../grid-items/support/100x100-green.png"></img> + <img data-expected-width="100" id="item" src="support/100x100-green.png"></img> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-017.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-017.html index c8a2ed8b2cc..d99476255f8 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-017.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-017.html @@ -37,6 +37,6 @@ function runTest() { </script> <body onload="runTest()"> <div class="grid" id="grid"> - <img data-expected-width="100" id="item" src="../grid-items/support/100x100-green.png"></img> + <img data-expected-width="100" id="item" src="support/100x100-green.png"></img> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-018.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-018.html index 547e6a42984..f6d0bcbe57e 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-018.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-018.html @@ -37,6 +37,6 @@ function runTest() { </script> <body onload="runTest()"> <div class="grid" id="grid"> - <img data-expected-width="100" id="item" src="../grid-items/support/100x100-green.png"></img> + <img data-expected-width="100" id="item" src="support/100x100-green.png"></img> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-029.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-029.html index 766db6baa37..52472475037 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-029.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-029.html @@ -37,6 +37,6 @@ function runTest() { </script> <body onload="runTest()"> <div class="grid" id="grid"> - <img data-expected-height="100" id="item" src="../grid-items/support/100x100-green.png"></img> + <img data-expected-height="100" id="item" src="support/100x100-green.png"></img> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-030.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-030.html index 3db3b8319f0..4254fd6661f 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-030.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-030.html @@ -37,6 +37,6 @@ function runTest() { </script> <body onload="runTest()"> <div class="grid" id="grid"> - <img data-expected-height="100" id="item" src="../grid-items/support/100x100-green.png"></img> + <img data-expected-height="100" id="item" src="support/100x100-green.png"></img> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-031.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-031.html index 7b0c26d644d..35d0dcc8efa 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-031.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-031.html @@ -37,6 +37,6 @@ function runTest() { </script> <body onload="runTest()"> <div class="grid" id="grid"> - <img data-expected-height="100" id="item" src="../grid-items/support/100x100-green.png"></img> + <img data-expected-height="100" id="item" src="support/100x100-green.png"></img> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-032.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-032.html index d161e19b018..152c64195e2 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-032.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-032.html @@ -37,6 +37,6 @@ function runTest() { </script> <body onload="runTest()"> <div class="grid" id="grid"> - <img data-expected-width="100" id="item" src="../grid-items/support/100x100-green.png"></img> + <img data-expected-width="100" id="item" src="support/100x100-green.png"></img> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-033.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-033.html index 92a74561889..5db0980710d 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-033.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-033.html @@ -37,6 +37,6 @@ function runTest() { </script> <body onload="runTest()"> <div class="grid" id="grid"> - <img data-expected-height="100" id="item" src="../grid-items/support/100x100-green.png"></img> + <img data-expected-height="100" id="item" src="support/100x100-green.png"></img> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-034.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-034.html index 78314406fe3..98e04369a00 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-034.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-034.html @@ -37,6 +37,6 @@ function runTest() { </script> <body onload="runTest()"> <div class="grid" id="grid"> - <img data-expected-height="100" id="item" src="../grid-items/support/100x100-green.png"></img> + <img data-expected-height="100" id="item" src="support/100x100-green.png"></img> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-035.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-035.html index 4293670f199..c9810b3f4ff 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-035.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-035.html @@ -37,6 +37,6 @@ function runTest() { </script> <body onload="runTest()"> <div class="grid" id="grid"> - <img data-expected-height="100" id="item" src="../grid-items/support/100x100-green.png"></img> + <img data-expected-height="100" id="item" src="support/100x100-green.png"></img> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-036.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-036.html index 23b01906619..634e5c7e1b5 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-036.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-036.html @@ -37,6 +37,6 @@ function runTest() { </script> <body onload="runTest()"> <div class="grid" id="grid"> - <img data-expected-height="100" id="item" src="../grid-items/support/100x100-green.png"></img> + <img data-expected-height="100" id="item" src="support/100x100-green.png"></img> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/support/100x100-green.png b/tests/wpt/web-platform-tests/css/css-grid/alignment/support/100x100-green.png Binary files differnew file mode 100644 index 00000000000..25b76c3c6f2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/support/100x100-green.png diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-items/support/100x100-green.png b/tests/wpt/web-platform-tests/css/css-grid/grid-items/support/100x100-green.png Binary files differindex 0dcda08b1b1..25b76c3c6f2 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/grid-items/support/100x100-green.png +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-items/support/100x100-green.png diff --git a/tests/wpt/web-platform-tests/css/css-grid/layout-algorithm/grid-find-fr-size-gutters-001.html b/tests/wpt/web-platform-tests/css/css-grid/layout-algorithm/grid-find-fr-size-gutters-001.html new file mode 100644 index 00000000000..25d236cebc6 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/layout-algorithm/grid-find-fr-size-gutters-001.html @@ -0,0 +1,165 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: Grid Track Sizing Algorithm Flexible Tracks and Gutters</title> +<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-grid/#gutters"> +<link rel="help" href="https://drafts.csswg.org/css-grid/#algo-find-fr-size"> +<meta name="assert" content="This test checks that the size of flexible tracks is properly computed when you have gaps (with and without spanning items)."> +<style> +.grid { + position: relative; + display: grid; + grid-gap: 10px 20px; + font: 10px/1 Ahem; + margin: 50px; +} + +.fixedSize { + width: 200px; + height: 100px; +} + +.contentBasedSize { + float: left; + height: auto; +} + +.grid div:nth-child(1) { background: magenta; } +.grid div:nth-child(2) { background: cyan; } +.grid div:nth-child(3) { background: yellow; } +.grid div:nth-child(4) { background: lime; } +</style> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> +<body onload="checkLayout('.grid')"> + +<div id="log"></div> + +<div class="grid fixedSize" style="grid: 50px 1fr / 100px 1fr;"> + <div data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="50"></div> + <div data-offset-x="120" data-offset-y="0" data-expected-width="80" data-expected-height="50"></div> + <div data-offset-x="0" data-offset-y="60" data-expected-width="100" data-expected-height="40"></div> + <div data-offset-x="120" data-offset-y="60" data-expected-width="80" data-expected-height="40"></div> +</div> + +<div class="grid fixedSize" style="grid: 50px 1fr / 100px 1fr;"> + <div style="grid-column: span 2;" + data-offset-x="0" data-offset-y="0" data-expected-width="200" data-expected-height="50"></div> + <div data-offset-x="0" data-offset-y="60" data-expected-width="100" data-expected-height="40"></div> + <div data-offset-x="120" data-offset-y="60" data-expected-width="80" data-expected-height="40"></div> +</div> + +<div class="grid fixedSize" style="grid: 50px 1fr / 100px 1fr;"> + <div style="grid-column: 1; grid-row: 1;" + data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="50"></div> + <div style="grid-column: 2; grid-row: 1;" + data-offset-x="120" data-offset-y="0" data-expected-width="80" data-expected-height="50"></div> + <div style="grid-column: span 2;" + data-offset-x="0" data-offset-y="60" data-expected-width="200" data-expected-height="40"></div> +</div> + +<div class="grid fixedSize" style="grid: 50px 1fr / 100px 1fr;"> + <div style="grid-row: span 2;" + data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="100"></div> + <div data-offset-x="120" data-offset-y="0" data-expected-width="80" data-expected-height="50"></div> + <div data-offset-x="120" data-offset-y="60" data-expected-width="80" data-expected-height="40"></div> +</div> + +<div class="grid fixedSize" style="grid: 50px 1fr / 100px 1fr;"> + <div style="grid-column: 1; grid-row: 1;" + data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="50"></div> + <div style="grid-column: 1; grid-row: 2;" + data-offset-x="0" data-offset-y="60" data-expected-width="100" data-expected-height="40"></div> + <div style="grid-row: span 2;" + data-offset-x="120" data-offset-y="0" data-expected-width="80" data-expected-height="100"></div> +</div> + +<div class="grid fixedSize" style="grid: 50px 1fr / 100px 1fr;"> + <div style="grid-row: span 2; grid-column: span 2;" + data-offset-x="0" data-offset-y="0" data-expected-width="200" data-expected-height="100"></div> +</div> + +<div class="grid contentBasedSize" style="grid: 50px 1fr / 100px 1fr;"> + <div data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="50"></div> + <div data-offset-x="120" data-offset-y="0" data-expected-width="80" data-expected-height="50">XXXXXXXX</div> + <div data-offset-x="0" data-offset-y="60" data-expected-width="100" data-expected-height="40">X<br>X<br>X<br>X</div> + <div data-offset-x="120" data-offset-y="60" data-expected-width="80" data-expected-height="40"></div> +</div> + +<div class="grid contentBasedSize" style="grid: 50px 1fr / 100px 1fr;"> + <div data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="50"></div> + <div data-offset-x="120" data-offset-y="0" data-expected-width="80" data-expected-height="50"></div> + <div data-offset-x="0" data-offset-y="60" data-expected-width="100" data-expected-height="40"></div> + <div data-offset-x="120" data-offset-y="60" data-expected-width="80" data-expected-height="40">XXXXXXXX<br>X<br>X<br>X</div> +</div> + +<div class="grid contentBasedSize" style="grid: 50px 1fr / 100px 1fr;"> + <div style="grid-column: span 2;" + data-offset-x="0" data-offset-y="0" data-expected-width="200" data-expected-height="50"></div> + <div data-offset-x="0" data-offset-y="60" data-expected-width="100" data-expected-height="40">X<br>X<br>X<br>X</div> + <div data-offset-x="120" data-offset-y="60" data-expected-width="80" data-expected-height="40">XXXXXXXX</div> +</div> + +<div class="grid contentBasedSize" style="grid: 50px 1fr / 100px 1fr;"> + <div style="grid-column: span 2;" + data-offset-x="0" data-offset-y="0" data-expected-width="200" data-expected-height="50">XXXXXXXXXXXXXXXXXXXX</div> + <div data-offset-x="0" data-offset-y="60" data-expected-width="100" data-expected-height="40">X<br>X<br>X<br>X</div> + <div data-offset-x="120" data-offset-y="60" data-expected-width="80" data-expected-height="40"></div> +</div> + +<div class="grid contentBasedSize" style="grid: 50px 1fr / 100px 1fr;"> + <div style="grid-column: 1; grid-row: 1;" + data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="50"></div> + <div style="grid-column: 2; grid-row: 1;" + data-offset-x="120" data-offset-y="0" data-expected-width="80" data-expected-height="50">XXXXXXXX</div> + <div style="grid-column: span 2;" + data-offset-x="0" data-offset-y="60" data-expected-width="200" data-expected-height="40">X<br>X<br>X<br>X</div> +</div> + +<div class="grid contentBasedSize" style="grid: 50px 1fr / 100px 1fr;"> + <div style="grid-column: 1; grid-row: 1;" + data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="50"></div> + <div style="grid-column: 2; grid-row: 1;" + data-offset-x="120" data-offset-y="0" data-expected-width="80" data-expected-height="50"></div> + <div style="grid-column: span 2;" + data-offset-x="0" data-offset-y="60" data-expected-width="200" data-expected-height="40">XXXXXXXXXXXXXXXXXXXX<br>X<br>X<br>X</div> +</div> + +<div class="grid contentBasedSize" style="grid: 50px 1fr / 100px 1fr;"> + <div style="grid-row: span 2;" + data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="100"></div> + <div data-offset-x="120" data-offset-y="0" data-expected-width="80" data-expected-height="50">XXXXXXXX</div> + <div data-offset-x="120" data-offset-y="60" data-expected-width="80" data-expected-height="40">X<br>X<br>X<br>X</div> +</div> + +<div class="grid contentBasedSize" style="grid: 50px 1fr / 100px 1fr;"> + <div style="grid-row: span 2;" + data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="100">X<br>X<br>X<br>X<br>X<br>X<br>X<br>X<br>X<br>X</div> + <div data-offset-x="120" data-offset-y="0" data-expected-width="80" data-expected-height="50">XXXXXXXX</div> + <div data-offset-x="120" data-offset-y="60" data-expected-width="80" data-expected-height="40"></div> +</div> + +<div class="grid contentBasedSize" style="grid: 50px 1fr / 100px 1fr;"> + <div style="grid-column: 1; grid-row: 1;" + data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="50"></div> + <div style="grid-column: 1; grid-row: 2;" + data-offset-x="0" data-offset-y="60" data-expected-width="100" data-expected-height="40">X<br>X<br>X<br>X</div> + <div style="grid-row: span 2;" + data-offset-x="120" data-offset-y="0" data-expected-width="80" data-expected-height="100">XXXXXXXX</div> +</div> + +<div class="grid contentBasedSize" style="grid: 50px 1fr / 100px 1fr;"> + <div style="grid-column: 1; grid-row: 1;" + data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="50"></div> + <div style="grid-column: 1; grid-row: 2;" + data-offset-x="0" data-offset-y="60" data-expected-width="100" data-expected-height="40"></div> + <div style="grid-row: span 2;" + data-offset-x="120" data-offset-y="0" data-expected-width="80" data-expected-height="100">XXXXXXXX<br>X<br>X<br>X<br>X<br>X<br>X<br>X<br>X<br>X</div> +</div> + +<div class="grid contentBasedSize" style="grid: 50px 1fr / 100px 1fr;"> + <div style="grid-row: span 2; grid-column: span 2;" + data-offset-x="0" data-offset-y="0" data-expected-width="200" data-expected-height="100"> +XXXXXXXXXXXXXXXXXXXX<br>X<br>X<br>X<br>X<br>X<br>X<br>X<br>X<br>X</div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-grid/layout-algorithm/grid-find-fr-size-gutters-002.html b/tests/wpt/web-platform-tests/css/css-grid/layout-algorithm/grid-find-fr-size-gutters-002.html new file mode 100644 index 00000000000..340fe82cfd2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/layout-algorithm/grid-find-fr-size-gutters-002.html @@ -0,0 +1,54 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: Grid Track Sizing Algorithm Flexible Tracks and Gutters</title> +<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-grid/#gutters"> +<link rel="help" href="https://drafts.csswg.org/css-grid/#algo-find-fr-size"> +<meta name="assert" content="This test checks that the size of flexible tracks is properly computed when the grid container is content based and you have items spanning flexbile tracks that are smaller than the gutter sizes."> +<style> +.grid { + position: relative; + display: inline-grid; + grid-gap: 50px 100px; + font: 10px/1 Ahem; + margin: 50px; +} + +.grid div:nth-child(1) { background: magenta; } +</style> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> +<body onload="checkLayout('.grid')"> + +<div id="log"></div> + +<div class="grid" style="grid: 50px 1fr / 100px 1fr;"> + <div style="grid-column: span 2;" + data-offset-x="0" data-offset-y="0" data-expected-width="200" data-expected-height="50">X</div> +</div> + +<div class="grid" style="grid: 50px 1fr / 100px 1fr;"> + <div style="grid-row: span 2;" + data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="100">X</div> +</div> + +<div class="grid" style="grid: 50px 1fr / 100px 1fr;"> + <div style="grid-column: span 2; grid-row: span 2;" + data-offset-x="0" data-offset-y="0" data-expected-width="200" data-expected-height="100">X</div> +</div> + +<div class="grid" style="grid: 0px 1fr / 0px 1fr;"> + <div style="grid-column: span 2;" + data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="0">X</div> +</div> + +<div class="grid" style="grid: 0px 1fr / 0px 1fr;"> + <div style="grid-row: span 2;" + data-offset-x="0" data-offset-y="0" data-expected-width="0" data-expected-height="50">X</div> +</div> + +<div class="grid" style="grid: 0px 1fr / 0px 1fr;"> + <div style="grid-column: span 2; grid-row: span 2;" + data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="50">X</div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-grid/support/grid-alignment.css b/tests/wpt/web-platform-tests/css/css-grid/support/grid-alignment.css deleted file mode 100644 index 4cf50154cf4..00000000000 --- a/tests/wpt/web-platform-tests/css/css-grid/support/grid-alignment.css +++ /dev/null @@ -1,240 +0,0 @@ -/* align-self */ -.alignSelfAuto { align-self: auto; } -.alignSelfStretch { align-self: stretch; } -.alignSelfStart { align-self: start; } -.alignSelfEnd { align-self: end; } -.alignSelfCenter { align-self: center; } -.alignSelfRight { align-self: right; } -.alignSelfLeft { align-self: left; } - -.alignSelfFlexStart { align-self: flex-start; } -.alignSelfFlexEnd { align-self: flex-end; } - -.alignSelfSelfStart { align-self: self-start; } -.alignSelfSelfEnd { align-self: self-end; } - -.alignSelfCenterSafe { align-self: center safe; } -.alignSelfCenterUnsafe { align-self: center unsafe; } -.alignSelfEndSafe { align-self: end safe; } -.alignSelfEndUnsafe { align-self: end unsafe; } - -.alignSelfBaseline { align-self: baseline; } - -/* align-items */ -.alignItemsAuto { align-items: auto; } -.alignItemsStretch { align-items: stretch; } -.alignItemsStart { align-items: start; } -.alignItemsCenter { align-items: center; } -.alignItemsEnd { align-items: end; } -.alignItemsBaseline { align-items: baseline; } - -.alignItemsCenterSafe { align-items: center safe; } -.alignItemsCenterUnsafe { align-items: center unsafe; } -.alignItemsEndSafe { align-items: end safe; } -.alignItemsEndUnsafe { align-items: end unsafe; } - -/* align-content */ -.alignContentBaseline { align-content: baseline; } -.alignContentLastBaseline { align-content: last-baseline; } -.alignContentStart { align-content: start; } -.alignContentEnd { align-content: end; } -.alignContentCenter { align-content: center; } -.alignContentLeft { align-content: left; } -.alignContentRight { align-content: right; } -.alignContentFlexStart { align-content: flex-start; } -.alignContentFlexEnd { align-content: flex-end; } -.alignContentSpaceBetween { align-content: space-between; } -.alignContentSpaceAround { align-content: space-around; } -.alignContentSpaceEvenly { align-content: space-evenly; } -.alignContentStretch { align-content: stretch; } - -/* justify-self */ -.justifySelfAuto { justify-self: auto; } -.justifySelfStretch { justify-self: stretch; } -.justifySelfStart { justify-self: start; } -.justifySelfCenter { justify-self: center; } -.justifySelfEnd { justify-self: end; } -.justifySelfRight { justify-self: right; } -.justifySelfLeft { justify-self: left; } - -.justifySelfFlexStart { justify-self: flex-start; } -.justifySelfFlexEnd { justify-self: flex-end; } - -.justifySelfSelfStart { justify-self: self-start; } -.justifySelfSelfEnd { justify-self: self-end; } - -.justifySelfCenterSafe { justify-self: center safe; } -.justifySelfCenterUnsafe { justify-self: center unsafe; } - -.justifySelfBaseline { justify-self: baseline; } - -/* justify-items */ -.justifyItemsAuto { justify-items: auto; } -.justifyItemsStretch { justify-items: stretch; } -.justifyItemsStart { justify-items: start; } -.justifyItemsCenter { justify-items: center; } -.justifyItemsEnd { justify-items: end; } - -.justifyItemsCenterSafe { justify-items: center safe; } -.justifyItemsCenterUnsafe { justify-items: center unsafe; } -.justifyItemsEndSafe { justify-items: end safe; } -.justifyItemsEndUnsafe { justify-items: end unsafe; } - -.justifyItemsBaseline { justify-items: baseline; } - -/* justify-content */ -.justifyContentBaseline { justify-content: baseline; } -.justifyContentLastBaseline { justify-content: last-baseline; } -.justifyContentStart { justify-content: start; } -.justifyContentEnd { justify-content: end; } -.justifyContentCenter { justify-content: center; } -.justifyContentLeft { justify-content: left; } -.justifyContentRight { justify-content: right; } -.justifyContentFlexStart { justify-content: flex-start; } -.justifyContentFlexEnd { justify-content: flex-end; } -.justifyContentSpaceBetween { justify-content: space-between; } -.justifyContentSpaceAround { justify-content: space-around; } -.justifyContentSpaceEvenly { justify-content: space-evenly; } -.justifyContentStretch { justify-content: stretch; } - -/* Both align-items and justify-items */ -.itemsNormal { - align-items: normal; - justify-items: normal; -} - -.itemsStretch { - align-items: stretch; - justify-items: stretch; -} - -.itemsStart { - align-items: start; - justify-items: start; -} - -.itemsCenter { - align-items: center; - justify-items: center; -} - -.itemsEnd { - align-items: end; - justify-items: end; -} - -.itemsLeft { - align-items: left; - justify-items: left; -} - -.itemsRight { - align-items: right; - justify-items: right; -} - -.itemsSelfStart { - align-items: self-start; - justify-items: self-start; -} - -.itemsSelfEnd { - align-items: self-end; - justify-items: self-end; -} -.itemsBaseline { - align-items: baseline; - justify-items: baseline; -} - -/* Both align-self and justify-self */ -.selfStretch { - align-self: stretch; - justify-self: stretch; -} -.selfStart { - align-self: start; - justify-self: start; -} -.selfEnd { - align-self: end; - justify-self: end; -} -.selfCenter { - align-self: center; - justify-self: center; -} -.selfRight { - align-self: right; - justify-self: right; -} -.selfLeft { - align-self: left; - justify-self: left; -} -.selfSelfStart { - align-self: self-start; - justify-self: self-start; -} -.selfSelfEnd { - align-self: self-end; - justify-self: self-end; -} -.selfBaseline { - align-self: baseline; - justify-self: baseline; -} - -/* Both align-content and justify-content */ -.contentStart { - align-content: start; - justify-content: start; -} -.contentCenter { - align-content: center; - justify-content: center; -} -.contentEnd { - align-content: end; - justify-content: end; -} - -.contentCenterSafe { - align-content: center safe; - justify-content: center safe; -} - -.contentCenterUnsafe { - align-content: center unsafe; - justify-content: center unsafe; -} - -.contentEndSafe { - align-content: end safe; - justify-content: end safe; -} - -.contentEndUnsafe { - align-content: end unsafe; - justify-content: end unsafe; -} - -.contentSpaceBetween { - justify-content: space-between; - align-content: space-between; -} - -.contentSpaceAround { - justify-content: space-around; - align-content: space-around; -} - -.contentSpaceEvenly { - justify-content: space-evenly; - align-content: space-evenly; -} - -.contentStretch { - justify-content: stretch; - align-content: stretch; -} diff --git a/tests/wpt/web-platform-tests/css/css-layout-api/OWNERS b/tests/wpt/web-platform-tests/css/css-layout-api/OWNERS new file mode 100644 index 00000000000..ade67083a0b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-layout-api/OWNERS @@ -0,0 +1,2 @@ +@bfgeek +@tabatkins diff --git a/tests/wpt/web-platform-tests/css/css-layout-api/at-supports-rule.https.html b/tests/wpt/web-platform-tests/css/css-layout-api/at-supports-rule.https.html new file mode 100644 index 00000000000..0f23325ce60 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-layout-api/at-supports-rule.https.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#valdef-display-layout"> +<meta name="assert" content="This test checks that a layout() function works correctly with an @supports rule." /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> +#test { + content: 'fail'; +} + +@supports (display: layout(foo)) { + #test { + content: 'pass'; + } +} +</style> +<div id="test"></div> +<script> +test(function() { + const element = document.getElementById('test'); + assert_equals(getComputedStyle(element).content, '"pass"'); +}); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-layout-api/computed-style-layout-function.https.html b/tests/wpt/web-platform-tests/css/css-layout-api/computed-style-layout-function.https.html new file mode 100644 index 00000000000..d115009c6ca --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-layout-api/computed-style-layout-function.https.html @@ -0,0 +1,50 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#valdef-display-layout"> +<meta name="assert" content="This test checks that a layout() function parses correctly and serializes correctly from computed style." /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> +#test1 { display: layout(test1); } +#test2 { display: layout(); } +#test3 { display: layout(test3, invalid); } +#test4 { --display: layout(test4); display: var(--display); } +</style> + +<div id=test1></div> +<div id=test2></div> +<div id=test3></div> +<div id=test4></div> +<div id=test5></div> +<script> +test(function() { + const test1 = document.getElementById('test1'); + assert_equals(getComputedStyle(test1).display, 'layout(test1)'); +}); + +test(function() { + // layout() should fail to parse. + const test2 = document.getElementById('test2'); + assert_equals(getComputedStyle(test2).display, 'block'); +}); + +test(function() { + // layout(test3, invalid) should fail to parse. + const test3 = document.getElementById('test3'); + assert_equals(getComputedStyle(test3).display, 'block'); +}); + +test(function() { + // Setting via a custom property should work. + const test4 = document.getElementById('test4'); + assert_equals(getComputedStyle(test4).display, 'layout(test4)'); +}); + +test(function() { + // Setting the inline style should reflect in the computed style. + const test5 = document.getElementById('test5'); + assert_equals(getComputedStyle(test5).display, 'block'); + + test5.style.display = 'layout(test5)'; + assert_equals(getComputedStyle(test5).display, 'layout(test5)'); +}); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-layout-api/inline-style-layout-function.https.html b/tests/wpt/web-platform-tests/css/css-layout-api/inline-style-layout-function.https.html new file mode 100644 index 00000000000..f11405b8e8c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-layout-api/inline-style-layout-function.https.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#valdef-display-layout"> +<meta name="assert" content="This test checks that a layout() function is parses and serializes correctly from inline style." /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<div id=test1></div> +<div id=test2></div> +<div id=test3></div> +<script> +test(function() { + const test1 = document.getElementById('test1'); + assert_equals(test1.style.display, ''); + + test1.style.display = 'layout(test1)'; + assert_equals(test1.style.display, 'layout(test1)'); +}); + +test(function() { + const test2 = document.getElementById('test2'); + assert_equals(test2.style.display, ''); + + // layout() should fail to parse. + test2.style.display = 'layout()'; + assert_equals(test2.style.display, ''); +}); + +test(function() { + const test3 = document.getElementById('test3'); + assert_equals(test3.style.display, ''); + + // layout(test3, invalid) should fail to parse. + test3.style.display = 'layout(test3, invalid)'; + assert_equals(test3.style.display, ''); +}); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-layout-api/supports.https.html b/tests/wpt/web-platform-tests/css/css-layout-api/supports.https.html new file mode 100644 index 00000000000..e269b292146 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-layout-api/supports.https.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#valdef-display-layout"> +<meta name="assert" content="This test checks that a layout() function works correctly with CSS.supports()." /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<script> +test(function() { + assert_true(CSS.supports('display', 'layout(foo)')); +}); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-gap-percentage-001.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-gap-percentage-001.html new file mode 100644 index 00000000000..b086eba2b5e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-gap-percentage-001.html @@ -0,0 +1,131 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Multi-column Layout Test: column-gap supports percentages</title> +<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> +<link rel="help" href="https://www.w3.org/TR/css-multicol-1/#column-gap"> +<meta name="assert" content="This test checks the behavior of precentage column-gap in different situations depending on the multicol container size."> +<style> +.multicol { + position: relative; + font: 20px/1 Ahem; + margin: 10px; + column-count: 2; + column-gap: 25%; + background: yellow; +} + +.fixed200 { + width: 200px; +} + +.inlineBlock { + display: inline-block; +} + +.wrapper200 { + width: 200px; +} + +.wrapper8 { + width: 8px; +} + +.marginTopBottom { + margin: 10px 0; +} + +.multicol > :nth-child(1) { background: magenta; } +.multicol > :nth-child(2) { background: cyan; } +</style> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> + +<body onload="checkLayout('.multicol')"> + +<div id="log"></div> + +<h3>Multicol container: fixed width</h3> + +<div class="multicol fixed200" data-expected-width="200" data-expected-height="20"> + <div data-offset-x="0" data-offset-y="0" data-expected-width="75" data-expected-height="20">X</div> + <div data-offset-x="125" data-offset-y="0" data-expected-width="75" data-expected-height="20">X</div> +</div> + +<div class="multicol fixed200" + data-expected-width="200" data-expected-height="40"> + <div data-offset-x="0" data-offset-y="0" data-expected-width="75" data-expected-height="40">XX X X</div> + <div data-offset-x="125" data-offset-y="0" data-expected-width="75" data-expected-height="40">XX X X</div> +</div> + +<div class="multicol fixed200" + data-expected-width="200" data-expected-height="20"> + <div data-offset-x="0" data-offset-y="0" data-expected-width="75" data-expected-height="20">XXXXX</div> + <div data-offset-x="125" data-offset-y="0" data-expected-width="75" data-expected-height="20">XXXXX</div> +</div> + +<h3>Multicol container: intrinsic width</h3> + +<div class="multicol inlineBlock" + data-expected-width="40" data-expected-height="20"> + <div data-offset-x="0" data-offset-y="0" data-expected-width="15" data-expected-height="20">X</div> + <div data-offset-x="25" data-offset-y="0" data-expected-width="15" data-expected-height="20">X</div> +</div> + +<div class="multicol inlineBlock" + data-expected-width="240" data-expected-height="40"> + <div data-offset-x="0" data-offset-y="0" data-expected-width="90" data-expected-height="40">XX X X</div> + <div data-offset-x="150" data-offset-y="0" data-expected-width="90" data-expected-height="40">XX X X</div> +</div> + +<div class="multicol inlineBlock" + data-expected-width="200" data-expected-height="20"> + <div data-offset-x="0" data-offset-y="0" data-expected-width="75" data-expected-height="20">XXXXX</div> + <div data-offset-x="125" data-offset-y="0" data-expected-width="75" data-expected-height="20">XXXXX</div> +</div> + +<h3>Multicol container: auto width</h3> + +<div class="wrapper200"> + + <div class="multicol marginTopBottom" + data-expected-width="200" data-expected-height="20"> + <div data-offset-x="0" data-offset-y="0" data-expected-width="75" data-expected-height="20">X</div> + <div data-offset-x="125" data-offset-y="0" data-expected-width="75" data-expected-height="20">X</div> + </div> + + <div class="multicol marginTopBottom" + data-expected-width="200" data-expected-height="40"> + <div data-offset-x="0" data-offset-y="0" data-expected-width="75" data-expected-height="40">XX X X</div> + <div data-offset-x="125" data-offset-y="0" data-expected-width="75" data-expected-height="40">XX X X</div> + </div> + + <div class="multicol marginTopBottom" + data-expected-width="200" data-expected-height="20"> + <div data-offset-x="0" data-offset-y="0" data-expected-width="75" data-expected-height="20">XXXXX</div> + <div data-offset-x="125" data-offset-y="0" data-expected-width="75" data-expected-height="20">XXXXX</div> + </div> + +</div> + +<div class="wrapper8"> + + <div class="multicol marginTopBottom" + data-expected-width="8" data-expected-height="20"> + <div data-offset-x="0" data-offset-y="0" data-expected-width="3" data-expected-height="20">X</div> + <div data-offset-x="5" data-offset-y="0" data-expected-width="3" data-expected-height="20">X</div> + </div> + + <div class="multicol marginTopBottom" + data-expected-width="8" data-expected-height="60"> + <div data-offset-x="0" data-offset-y="0" data-expected-width="3" data-expected-height="60">XX X X</div> + <div data-offset-x="5" data-offset-y="0" data-expected-width="3" data-expected-height="60">XX X X</div> + </div> + + <div class="multicol marginTopBottom" + data-expected-width="8" data-expected-height="20"> + <div data-offset-x="0" data-offset-y="0" data-expected-width="3" data-expected-height="20">XXXXX</div> + <div data-offset-x="5" data-offset-y="0" data-expected-width="3" data-expected-height="20">XXXXX</div> + </div> + +</div> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-constructor-error-ref.html b/tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-constructor-error-ref.html index b6a6dec6c60..5e4c5662afd 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-constructor-error-ref.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-constructor-error-ref.html @@ -1,6 +1,10 @@ <!DOCTYPE html> <html> -<body> -<div style="background: green; width: 100px; height: 100px"></div> -</body> +<canvas id="canvas" width="100" height="100"></canvas> +<script> + var canvas = document.getElementById("canvas"); + var ctx = canvas.getContext('2d'); + ctx.fillStyle = 'green'; + ctx.fillRect(50, 50, 50, 50); +</script> </html> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-constructor-error.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-constructor-error.https.html index 30a06eb5b26..022b915a650 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-constructor-error.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-constructor-error.https.html @@ -5,8 +5,7 @@ #output { width: 100px; height: 100px; - background-image: paint(error); - background-color: green; + background-image: paint(errorIndicator), paint(successIndicator); } </style> <script src="/common/reftest-wait.js"></script> @@ -15,11 +14,20 @@ <div id="output"></div> <script id="code" type="text/worklet"> -registerPaint('error', class { +registerPaint('errorIndicator', class { constructor() { throw Error('failed!'); } + // The paint function should not be executed because an error has been + // thrown. paint(ctx, geom) { ctx.fillStyle = 'red'; - ctx.fillRect(0, 0, geom.width, geom.height); + ctx.fillRect(0, 0, 50, 50); + } +}); + +registerPaint('successIndicator', class { + paint(ctx, geom) { + ctx.fillStyle = 'green'; + ctx.fillRect(50, 50, 50, 50); } }); </script> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-paint-error.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-paint-error.https.html index 6e117f87df3..c185d890ae5 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-paint-error.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-paint-error.https.html @@ -5,8 +5,7 @@ #output { width: 100px; height: 100px; - background-image: paint(error); - background-color: green; + background-image: paint(errorIndicator), paint(successIndicator); } </style> <script src="/common/reftest-wait.js"></script> @@ -15,13 +14,19 @@ <div id="output"></div> <script id="code" type="text/worklet"> -registerPaint('error', class { +registerPaint('errorIndicator', class { paint(ctx, geom) { ctx.fillStyle = 'red'; ctx.fillRect(0, 0, geom.width, geom.height); throw Error('failed!'); } }); +registerPaint('successIndicator', class { + paint(ctx, geom) { + ctx.fillStyle = 'green'; + ctx.fillRect(0, 0, geom.width, geom.height); + } +}); </script> <script> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-pending-script.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-pending-script.https.html index c4cf755f9b5..e19fa417e93 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-pending-script.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-pending-script.https.html @@ -5,16 +5,28 @@ #output { width: 100px; height: 100px; - background-image: paint(invalid); - background-color: green; + background-image: paint(invalid), paint(successIndicator); } </style> <script src="/common/reftest-wait.js"></script> <script src="/common/css-paint-tests.js"></script> <body> <div id="output"></div> + +<script id="code" type="text/worklet"> +// This is testing that even though there is no paint function registered for +// 'invalid', it won't cause any error, and the other painter (successIndicator) +// will paint as usual. +registerPaint('successIndicator', class { + paint(ctx, geom) { + ctx.fillStyle = 'green'; + ctx.fillRect(0, 0, geom.width, geom.height); + } +}); +</script> + <script> - importPaintWorkletAndTerminateTestAfterAsyncPaint(""); + importPaintWorkletAndTerminateTestAfterAsyncPaint(document.getElementById('code').textContent); </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-011.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-011.https.html index 8945f7ea801..e772a50e54e 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-011.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-011.https.html @@ -21,7 +21,7 @@ var testsPassed = false; try { registerPaint('foo7', class { }); } catch(ex) { - if (ex.name == 'TypeError' && ex.message == "Failed to execute 'registerPaint' on 'PaintWorkletGlobalScope': The 'paint' function on the prototype does not exist.") + if (ex.name == 'TypeError' && ex.message == "Failed to execute 'registerPaint' on 'PaintWorkletGlobalScope': The 'paint' property on the prototype does not exist.") testsPassed = true; } diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-018-ref.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-018-ref.html index 8222ab42fb3..05da4ed7880 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-018-ref.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-018-ref.html @@ -1,15 +1,17 @@ <!DOCTYPE html> <html> <body> -<p>The test result should show only one black rect border. It should not paint -any content in the rect because registerPaint will be called twice and the -inputArguments will return two different strings, that will throw an exception -and paint won't be executed.</p> +<p>This test result should show a rect with black border, where the rect is +filled with green on the lower right corner. The registerPaint('failureIndicator') +will be called twice and the inputArguments will return two different strings, +which will throw an exception and the paint function with 'failureIndicator' +should never be called. In other words, there should be no red painted in the result.</p> <canvas id ="canvas" width="100" height="100" style="border:1px solid black"></canvas> <script> var canvas = document.getElementById('canvas'); var context = canvas.getContext("2d"); -context.clearRect(0, 0, 100, 100); +context.fillStyle = 'green' +context.fillRect(50, 50, 50, 50); </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-018.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-018.https.html index 2cfac40bc2b..9d03a8d2ae6 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-018.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-018.https.html @@ -9,16 +9,17 @@ #canvas-geometry { border:1px solid black; - background-image: paint(geometry); + background-image: paint(failureIndicator), paint(geometry); } </style> <script src="/common/reftest-wait.js"></script> <script src="/common/css-paint-tests.js"></script> <body> -<p>The test result should show only one black rect border. It should not paint -any content in the rect because registerPaint will be called twice and the -inputArguments will return two different strings, that will throw an exception -and paint won't be executed.</p> +<p>This test result should show a rect with black border, where the rect is +filled with green on the lower right corner. The registerPaint('failureIndicator') +will be called twice and the inputArguments will return two different strings, +which will throw an exception and the paint function with 'failureIndicator' +should never be called. In other words, there should be no red painted in the result.</p> <div id="canvas-geometry" class="container"></div> <script id="code" type="text/worklet"> @@ -31,7 +32,7 @@ function generateRandString(length) { } try { - registerPaint('geometry', class { + registerPaint('failureIndicator', class { static get inputArguments() { // This test is testing the case where an exception should be thrown // when two paint definitions with different properties are registered @@ -42,14 +43,23 @@ try { var current_str = generateRandString(100); return [current_str]; } + // The paint function here should never be called because the inputArguments + // will generate two different properties, and that should throw an + // exception. paint(ctx, geom) { - ctx.strokeStyle = 'red'; - ctx.lineWidth = 4; - ctx.strokeRect(0, 0, geom.width, geom.height); + ctx.fillStyle = 'red'; + ctx.fillRect(0, 0, 50, 50); } }); } catch(ex) { } + +registerPaint('geometry', class { + paint(ctx, geom) { + ctx.fillStyle = 'green'; + ctx.fillRect(50, 50, 50, 50); + } +}); </script> <script> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/style-background-image.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/style-background-image.https.html index cb894e57f2d..785360730dc 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/style-background-image.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/style-background-image.https.html @@ -25,7 +25,7 @@ registerPaint('geometry', class { '--bar', '--foo', 'align-items', - 'border-radius', + 'border-top-left-radius', ]; } paint(ctx, geom, styleMap) { @@ -41,13 +41,13 @@ registerPaint('geometry', class { serializedStrings.push(serialized); } ctx.strokeStyle = 'green'; - if (serializedStrings[0] != "--bar: [null]") + if (serializedStrings[0] != "--bar: [CSSUnparsedValue=]") ctx.strokeStyle = 'red'; if (serializedStrings[1] != "--foo: [CSSUnparsedValue= bar]") ctx.strokeStyle = 'blue'; if (serializedStrings[2] != "align-items: [CSSKeywordValue=normal]") ctx.strokeStyle = 'yellow'; - if (serializedStrings[3] != "border-radius: [CSSStyleValue=2px]") + if (serializedStrings[3] != "border-top-left-radius: [CSSUnitValue=2px]") ctx.strokeStyle = 'cyan'; ctx.lineWidth = 4; ctx.strokeRect(0, 0, geom.width, geom.height); diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/style-before-pseudo.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/style-before-pseudo.https.html index 707d02ba41d..5249f58ecbf 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/style-before-pseudo.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/style-before-pseudo.https.html @@ -28,7 +28,7 @@ registerPaint('geometry', class { return [ '--bar', '--foo', - 'border-radius', + 'border-top-left-radius', ]; } paint(ctx, geom, styleMap) { @@ -44,11 +44,11 @@ registerPaint('geometry', class { serializedStrings.push(serialized); } ctx.strokeStyle = 'green'; - if (serializedStrings[0] != "--bar: [null]") + if (serializedStrings[0] != "--bar: [CSSUnparsedValue=]") ctx.strokeStyle = 'red'; if (serializedStrings[1] != "--foo: [CSSUnparsedValue= bar]") ctx.strokeStyle = 'blue'; - if (serializedStrings[2] != "border-radius: [CSSStyleValue=2px]") + if (serializedStrings[2] != "border-top-left-radius: [CSSUnitValue=2px]") ctx.strokeStyle = 'yellow'; ctx.lineWidth = 4; ctx.strokeRect(0, 0, geom.width, geom.height); diff --git a/tests/wpt/web-platform-tests/css/css-position/position-sticky-bottom-ref.html b/tests/wpt/web-platform-tests/css/css-position/position-sticky-bottom-ref.html deleted file mode 100644 index 7d4953d7797..00000000000 --- a/tests/wpt/web-platform-tests/css/css-position/position-sticky-bottom-ref.html +++ /dev/null @@ -1,69 +0,0 @@ -<!DOCTYPE html> -<title>Reference for position:sticky elements should respect the top constraint</title> - -<style> -.group { - display: inline-block; - position: relative; - width: 150px; - height: 250px; -} - -.scroller { - position: relative; - width: 100px; - height: 200px; - overflow-x: hidden; - overflow-y: auto; -} - -.contents { - height: 500px; -} - -.indicator { - background-color: green; - position: absolute; - left: 0; -} - -.box { - width: 100%; - height: 100px; -} - -</style> - -<script> -window.addEventListener('load', function() { - document.getElementById('scroller1').scrollTop = 100; - document.getElementById('scroller2').scrollTop = 175; - document.getElementById('scroller3').scrollTop = 250; -}); -</script> - -<div class="group"> - <div id="scroller1" class="scroller"> - <div class="contents"> - <div class="indicator box" style="top: 200px;"></div> - </div> - </div> -</div> - -<div class="group"> - <div id="scroller2" class="scroller"> - <div class="contents"> - <div class="indicator box" style="top: 250px;"></div> - </div> - </div> -</div> - -<div class="group"> - <div id="scroller3" class="scroller"> - <div class="contents"> - <div class="indicator box" style="top: 300px;"></div> - </div> - </div> -</div> - -<div>You should see three green boxes above. No red should be visible.</div> diff --git a/tests/wpt/web-platform-tests/css/css-position/position-sticky-bottom.html b/tests/wpt/web-platform-tests/css/css-position/position-sticky-bottom.html index 18c5cc415c5..ba23f0145cf 100644 --- a/tests/wpt/web-platform-tests/css/css-position/position-sticky-bottom.html +++ b/tests/wpt/web-platform-tests/css/css-position/position-sticky-bottom.html @@ -1,104 +1,41 @@ <!DOCTYPE html> <title>position:sticky elements should respect the bottom constraint</title> -<link rel="match" href="position-sticky-bottom-ref.html" /> <link rel="help" href="https://www.w3.org/TR/css-position-3/#sticky-pos" /> <meta name="assert" content="This test checks that position:sticky elements obey their bottom anchor after scrolling" /> -<style> -.group { - display: inline-block; - position: relative; - width: 150px; - height: 250px; -} +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> -.scroller { - position: relative; - width: 100px; - height: 200px; - overflow-x: hidden; - overflow-y: auto; -} +<script src="resources/sticky-util.js"></script> -.contents { - height: 500px; -} - -.prepadding { - height: 200px; -} - -.container { - height: 200px; -} - -.filler { - height: 100px; -} - -.indicator { - background-color: red; - position: absolute; - left: 0; -} - -.sticky { - background-color: green; - position: sticky; - bottom: 25px; -} - -.box { - width: 100%; - height: 100px; -} -</style> +<body></body> <script> -window.addEventListener('load', function() { - document.getElementById('scroller1').scrollTop = 100; - document.getElementById('scroller2').scrollTop = 175; - document.getElementById('scroller3').scrollTop = 250; -}); +test(() => { + const elements = setupStickyTest('bottom', 25); + elements.scroller.scrollTop = 300; + const nonStickyTopY = elements.container.offsetTop + + elements.filler.clientHeight; + assert_equals(elements.sticky.offsetTop, nonStickyTopY); +}, 'before reaching the sticking point the sticky box should not be offset'); + +test(() => { + const elements = setupStickyTest('bottom', 25); + elements.scroller.scrollTop = 100; + + const nonStickyTopY = elements.container.offsetTop + + elements.filler.clientHeight; + const nonStickyBottomY = nonStickyTopY + elements.sticky.clientHeight; + const targetBottomY = elements.scroller.clientHeight + + elements.scroller.scrollTop - 25; + const stickyOffset = nonStickyBottomY - targetBottomY; + + assert_equals(elements.sticky.offsetTop, nonStickyTopY - stickyOffset); +}, 'after reaching the sticking point the sticky box should be offset'); + +test(() => { + const elements = setupStickyTest('bottom', 25); + elements.scroller.scrollTop = 0; + assert_equals(elements.sticky.offsetTop, elements.container.offsetTop); +}, 'the sticky box should not be pushed outside its containing block'); </script> - -<div class="group"> - <div id="scroller1" class="scroller"> - <div class="indicator box" style="top: 200px;"></div> - <div class="contents"> - <div class="prepadding"></div> - <div class="container"> - <div class="filler"></div> - <div class="sticky box"></div> - </div> - </div> - </div> -</div> - -<div class="group"> - <div id="scroller2" class="scroller"> - <div class="indicator box" style="top: 250px;"></div> - <div class="contents"> - <div class="prepadding"></div> - <div class="container"> - <div class="filler"></div> - <div class="sticky box"></div> - </div> - </div> - </div> -</div> - -<div class="group"> - <div id="scroller3" class="scroller"> - <div class="indicator box" style="top: 300px;"></div> - <div class="contents"> - <div class="prepadding"></div> - <div class="container"> - <div class="filler"></div> - <div class="sticky box"></div> - </div> - </div> - </div> -</div> - -<div>You should see three green boxes above. No red should be visible.</div> diff --git a/tests/wpt/web-platform-tests/css/css-position/position-sticky-left-ref.html b/tests/wpt/web-platform-tests/css/css-position/position-sticky-left-ref.html deleted file mode 100644 index e0de6fbb812..00000000000 --- a/tests/wpt/web-platform-tests/css/css-position/position-sticky-left-ref.html +++ /dev/null @@ -1,68 +0,0 @@ -<!DOCTYPE html> -<title>Reference for position:sticky elements should respect the left constraint</title> - -<style> -.group { - position: relative; - width: 250px; - height: 150px; -} - -.scroller { - position: relative; - width: 200px; - height: 100px; - overflow-x: auto; - overflow-y: hidden; -} - -.contents { - height: 100%; - width: 500px; -} - -.indicator { - background-color: green; - position: absolute; - top: 0; -} - -.box { - height: 100%; - width: 100px; -} -</style> - -<script> -window.addEventListener('load', function() { - document.getElementById('scroller1').scrollLeft = 50; - document.getElementById('scroller2').scrollLeft = 125; - document.getElementById('scroller3').scrollLeft = 200; -}); -</script> - -<div class="group"> - <div id="scroller1" class="scroller"> - <div class="contents"> - <div class="indicator box" style="left: 150px;"></div> - </div> - </div> -</div> - -<div class="group"> - <div id="scroller2" class="scroller"> - <div class="contents"> - <div class="indicator box" style="left: 175px;"></div> - </div> - </div> -</div> - -<div class="group"> - <div id="scroller3" class="scroller"> - <div class="contents"> - <div class="indicator box" style="left: 200px;"></div> - </div> - </div> -</div> - -<div>You should see three green boxes above. No red should be visible.</div> diff --git a/tests/wpt/web-platform-tests/css/css-position/position-sticky-left.html b/tests/wpt/web-platform-tests/css/css-position/position-sticky-left.html index 40a4d7282db..0c8bb58b7cd 100644 --- a/tests/wpt/web-platform-tests/css/css-position/position-sticky-left.html +++ b/tests/wpt/web-platform-tests/css/css-position/position-sticky-left.html @@ -1,103 +1,44 @@ <!DOCTYPE html> <title>position:sticky elements should respect the left constraint</title> -<link rel="match" href="position-sticky-left-ref.html" /> <link rel="help" href="https://www.w3.org/TR/css-position-3/#sticky-pos" /> <meta name="assert" content="This test checks that position:sticky elements obey their left anchor after scrolling" /> -<style> -.group { - position: relative; - width: 250px; - height: 150px; -} +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> -.scroller { - position: relative; - width: 200px; - height: 100px; - overflow-x: auto; - overflow-y: hidden; -} +<script src="resources/sticky-util.js"></script> -.contents { - height: 100%; - width: 500px; -} - -.prepadding { - display: inline-block; - height: 100%; - width: 100px; -} - -.container { - display: inline-block; - height: 100%; - width: 200px; -} - -.innerpadding { - display: inline-block; - height: 100%; - width: 50px; -} - -.indicator { - background-color: red; - position: absolute; - top: 0; -} - -.sticky { - background-color: green; - position: sticky; - left: 50px; -} - -.box { - display: inline-block; - height: 100%; - width: 100px; -} - -</style> +<body></body> <script> -window.addEventListener('load', function() { - document.getElementById('scroller1').scrollLeft = 50; - document.getElementById('scroller2').scrollLeft = 125; - document.getElementById('scroller3').scrollLeft = 200; -}); +test(() => { + const elements = setupStickyTest('left', 50, true); + elements.scroller.scrollLeft = 100; + const nonStickyLeftY = elements.container.offsetLeft + + elements.filler.clientWidth; + assert_equals(elements.sticky.offsetLeft, nonStickyLeftY); +}, 'before reaching the sticking point the sticky box should not be offset'); + +test(() => { + const elements = setupStickyTest('left', 50, true); + elements.scroller.scrollLeft = 200; + + // This math actually cancels to sticky.offsetLeft == (scroller.scrollLeft + 50), + // but for clarity the calculations are left explicit. + const nonStickyLeftY = elements.container.offsetLeft + + elements.filler.clientWidth; + const targetLeftY = elements.scroller.scrollLeft + 50; + const stickyOffset = targetLeftY - nonStickyLeftY; + + assert_equals(elements.sticky.offsetLeft, nonStickyLeftY + stickyOffset); +}, 'after reaching the sticking point the sticky box should be offset'); + +test(() => { + const elements = setupStickyTest('left', 50, true); + elements.scroller.scrollLeft = 300; + const maxOffsetInContainer = elements.container.offsetLeft + + elements.container.clientWidth - elements.sticky.clientWidth; + assert_equals(elements.sticky.offsetLeft, maxOffsetInContainer); +}, 'the sticky box should not be pushed outside its containing block'); </script> -<div class="group"> - <div id="scroller1" class="scroller"> - <div class="indicator box" style="left: 150px;"></div> - <div class="contents"> - <!-- As these elements are inline, they are whitespace sensitive. --> - <div class="prepadding"></div><div class="container"><div class="innerpadding"></div><div class="sticky box"></div></div> - </div> - </div> -</div> - -<div class="group"> - <div id="scroller2" class="scroller"> - <div class="indicator box" style="left: 175px;"></div> - <div class="contents"> - <!-- As these elements are inline, they are whitespace sensitive. --> - <div class="prepadding"></div><div class="container"><div class="innerpadding"></div><div class="sticky box"></div></div> - </div> - </div> -</div> - -<div class="group"> - <div id="scroller3" class="scroller"> - <div class="indicator box" style="left: 200px;"></div> - <div class="contents"> - <!-- As these elements are inline, they are whitespace sensitive. --> - <div class="prepadding"></div><div class="container"><div class="innerpadding"></div><div class="sticky box"></div></div> - </div> - </div> -</div> - -<div>You should see three green boxes above. No red should be visible.</div> diff --git a/tests/wpt/web-platform-tests/css/css-position/position-sticky-rendering-ref.html b/tests/wpt/web-platform-tests/css/css-position/position-sticky-rendering-ref.html new file mode 100644 index 00000000000..a052eae5624 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position/position-sticky-rendering-ref.html @@ -0,0 +1,104 @@ +<!DOCTYPE html> +<title>Reference for position:sticky elements should be rendered at their sticky offset</title> + +<style> +.group { + display: inline-block; + position: relative; + width: 150px; + height: 250px; +} + +.inlineGroup { + display: inline-block; + position: relative; + width: 250px; + height: 150px; +} + +.scroller { + position: relative; + width: 100px; + height: 200px; + overflow-x: hidden; + overflow-y: auto; +} + +.inlineGroup .scroller { + position: relative; + width: 200px; + height: 100px; + overflow-x: auto; + overflow-y: hidden; +} + +.contents { + height: 500px; +} + +.inlineGroup .contents { + height: 100%; + width: 500px; +} + +.indicator { + background-color: green; + position: absolute; +} + +.box { + width: 100%; + height: 100px; +} + +.inlineGroup .box { + height: 100%; + width: 100px; +} +</style> + +<script> +window.addEventListener('load', function() { + document.getElementById('scroller1').scrollTop = 125; + document.getElementById('scroller2').scrollTop = 50; + document.getElementById('scroller3').scrollLeft = 125; + document.getElementById('scroller4').scrollLeft = 75; +}); +</script> + +<div class="group"> + <div id="scroller1" class="scroller"> + <div class="contents"> + <div class="indicator box" style="top: 175px;"></div> + </div> + </div> +</div> + +<div class="group"> + <div id="scroller2" class="scroller"> + <div class="contents"> + <div class="indicator box" style="top: 125px;"></div> + </div> + </div> +</div> + +<!-- Force break to make sure we are within 800px wide. --> +<div></div> + +<div class="inlineGroup"> + <div id="scroller3" class="scroller"> + <div class="contents"> + <div class="indicator box" style="left: 175px;"></div> + </div> + </div> +</div> + +<div class="inlineGroup"> + <div id="scroller4" class="scroller"> + <div class="contents"> + <div class="indicator box" style="left: 150px;"></div> + </div> + </div> +</div> + +<div>You should see four green squares above. No red should be visible.</div> diff --git a/tests/wpt/web-platform-tests/css/css-position/position-sticky-rendering.html b/tests/wpt/web-platform-tests/css/css-position/position-sticky-rendering.html new file mode 100644 index 00000000000..39afca170a9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position/position-sticky-rendering.html @@ -0,0 +1,156 @@ +<!DOCTYPE html> +<title>position:sticky elements should be rendered at their sticky offset</title> +<link rel="match" href="position-sticky-rendering-ref.html" /> +<link rel="help" href="https://www.w3.org/TR/css-position-3/#sticky-pos" /> +<meta name="assert" content="This test checks that position:sticky elements are rendered correctly" /> + +<style> +.group { + display: inline-block; + position: relative; + width: 150px; + height: 250px; +} + +.inlineGroup { + display: inline-block; + position: relative; + width: 250px; + height: 150px; +} + +.scroller { + position: relative; + width: 100px; + height: 200px; + overflow-x: hidden; + overflow-y: auto; +} + +.inlineGroup .scroller { + position: relative; + width: 200px; + height: 100px; + overflow-x: auto; + overflow-y: hidden; +} + +.contents { + height: 500px; +} + +.inlineGroup .contents { + height: 100%; + width: 500px; +} + +.prepadding { + height: 100px; +} + +.inlineGroup .prepadding { + display: inline-block; + height: 100%; + width: 100px; +} + +.container { + height: 200px; +} + +.inlineGroup .container { + display: inline-block; + height: 100%; + width: 200px; +} + +.filler { + height: 100px; +} + +.inlineGroup .filler { + display: inline-block; + height: 100%; + width: 100px; +} + +.indicator { + background-color: red; + position: absolute; +} + +.sticky { + background-color: green; + position: sticky; +} + +.box { + width: 100%; + height: 100px; +} + +.inlineGroup .box { + display: inline-block; + height: 100%; + width: 100px; +} +</style> + +<script> +window.addEventListener('load', function() { + document.getElementById('scroller1').scrollTop = 125; + document.getElementById('scroller2').scrollTop = 50; + document.getElementById('scroller3').scrollLeft = 125; + document.getElementById('scroller4').scrollLeft = 75; +}); +</script> + +<div class="group"> + <div id="scroller1" class="scroller"> + <div class="indicator box" style="top: 175px;"></div> + <div class="contents"> + <div class="prepadding"></div> + <div class="container"> + <div style="top: 50px;" class="sticky box"></div> + </div> + </div> + </div> +</div> + +<div class="group"> + <div id="scroller2" class="scroller"> + <div class="indicator box" style="top: 125px;"></div> + <div class="contents"> + <div class="prepadding"></div> + <div class="container"> + <div class="filler"></div> + <div style="bottom: 25px;" class="sticky box"></div> + </div> + </div> + </div> +</div> + +<!-- Force break to make sure we are within 800px wide. --> +<div></div> + +<div class="inlineGroup"> + <div id="scroller3" class="scroller"> + <div class="indicator box" style="left: 175px;"></div> + <div class="contents"> + <!-- As these elements are inline, they are whitespace sensitive. --> + <div class="prepadding"></div><div class="container"><div style="left: 50px;" class="sticky box"></div></div> + </div> + </div> +</div> + +<div class="inlineGroup"> + <div id="scroller4" class="scroller"> + <div class="indicator box" style="left: 150px;"></div> + <div class="contents"> + <!-- As these elements are inline, they are whitespace sensitive. --> + <div class="prepadding"></div><div class="container"><div class="filler"></div><div style="right: 25px;" class="sticky box"></div></div> + </div> + </div> +</div> + +<div>You should see four green squares above. No red should be visible.</div> diff --git a/tests/wpt/web-platform-tests/css/css-position/position-sticky-right-ref.html b/tests/wpt/web-platform-tests/css/css-position/position-sticky-right-ref.html deleted file mode 100644 index 14ed476834b..00000000000 --- a/tests/wpt/web-platform-tests/css/css-position/position-sticky-right-ref.html +++ /dev/null @@ -1,68 +0,0 @@ -<!DOCTYPE html> -<title>Reference for position:sticky elements should respect the right constraint</title> - -<style> -.group { - position: relative; - width: 250px; - height: 150px; -} - -.scroller { - position: relative; - width: 200px; - height: 100px; - overflow-x: auto; - overflow-y: hidden; -} - -.contents { - height: 100%; - width: 500px; -} - -.indicator { - background-color: green; - position: absolute; - top: 0; -} - -.box { - height: 100%; - width: 100px; -} -</style> - -<script> -window.addEventListener('load', function() { - document.getElementById('scroller1').scrollLeft = 100; - document.getElementById('scroller2').scrollLeft = 175; - document.getElementById('scroller3').scrollLeft = 250; -}); -</script> - -<div class="group"> - <div id="scroller1" class="scroller"> - <div class="contents"> - <div class="indicator box" style="left: 200px;"></div> - </div> - </div> -</div> - -<div class="group"> - <div id="scroller2" class="scroller"> - <div class="contents"> - <div class="indicator box" style="left: 250px;"></div> - </div> - </div> -</div> - -<div class="group"> - <div id="scroller3" class="scroller"> - <div class="contents"> - <div class="indicator box" style="left: 300px;"></div> - </div> - </div> -</div> - -<div>You should see three green boxes above. No red should be visible.</div> diff --git a/tests/wpt/web-platform-tests/css/css-position/position-sticky-right.html b/tests/wpt/web-platform-tests/css/css-position/position-sticky-right.html index 6c4e696de8d..afa0f8807ce 100644 --- a/tests/wpt/web-platform-tests/css/css-position/position-sticky-right.html +++ b/tests/wpt/web-platform-tests/css/css-position/position-sticky-right.html @@ -1,102 +1,41 @@ <!DOCTYPE html> <title>position:sticky elements should respect the right constraint</title> -<link rel="match" href="position-sticky-right-ref.html" /> <link rel="help" href="https://www.w3.org/TR/css-position-3/#sticky-pos" /> <meta name="assert" content="This test checks that position:sticky elements obey their right anchor after scrolling" /> -<style> -.group { - position: relative; - width: 250px; - height: 150px; -} +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> -.scroller { - position: relative; - width: 200px; - height: 100px; - overflow-x: auto; - overflow-y: hidden; -} +<script src="resources/sticky-util.js"></script> -.contents { - height: 100%; - width: 500px; -} - -.prepadding { - display: inline-block; - height: 100%; - width: 200px; -} - -.container { - display: inline-block; - height: 100%; - width: 200px; -} - -.filler { - display: inline-block; - height: 100%; - width: 100px; -} - -.indicator { - background-color: red; - position: absolute; - top: 0; -} - -.sticky { - background-color: green; - position: sticky; - right: 25px; -} - -.box { - display: inline-block; - height: 100%; - width: 100px; -} -</style> +<body></body> <script> -window.addEventListener('load', function() { - document.getElementById('scroller1').scrollLeft = 100; - document.getElementById('scroller2').scrollLeft = 175; - document.getElementById('scroller3').scrollLeft = 250; -}); +test(() => { + const elements = setupStickyTest('right', 25, true); + elements.scroller.scrollLeft = 200; + const nonStickyLeftY = elements.container.offsetLeft + + elements.filler.clientWidth; + assert_equals(elements.sticky.offsetLeft, nonStickyLeftY); +}, 'before reaching the sticking point the sticky box should not be offset'); + +test(() => { + const elements = setupStickyTest('right', 25, true); + elements.scroller.scrollLeft = 75; + + const nonStickyLeftY = elements.container.offsetLeft + + elements.filler.clientWidth; + const nonStickyBottomY = nonStickyLeftY + elements.sticky.clientWidth; + const targetBottomY = elements.scroller.clientWidth + + elements.scroller.scrollLeft - 25; + const stickyOffset = nonStickyBottomY - targetBottomY; + + assert_equals(elements.sticky.offsetLeft, nonStickyLeftY - stickyOffset); +}, 'after reaching the sticking point the sticky box should be offset'); + +test(() => { + const elements = setupStickyTest('right', 25, true); + elements.scroller.scrollLeft = 15; + assert_equals(elements.sticky.offsetLeft, elements.container.offsetLeft); +}, 'the sticky box should not be pushed outside its containing block'); </script> - -<div class="group"> - <div id="scroller1" class="scroller"> - <div class="indicator box" style="left: 200px;"></div> - <div class="contents"> - <!-- As these elements are inline, they are whitespace sensitive. --> - <div class="prepadding"></div><div class="container"><div class="filler"></div><div class="sticky box"></div></div> - </div> - </div> -</div> - -<div class="group"> - <div id="scroller2" class="scroller"> - <div class="indicator box" style="left: 250px;"></div> - <div class="contents"> - <!-- As these elements are inline, they are whitespace sensitive. --> - <div class="prepadding"></div><div class="container"><div class="filler"></div><div class="sticky box"></div></div> - </div> - </div> -</div> - -<div class="group"> - <div id="scroller3" class="scroller"> - <div class="indicator box" style="left: 300px;"></div> - <div class="contents"> - <!-- As these elements are inline, they are whitespace sensitive. --> - <div class="prepadding"></div><div class="container"><div class="filler"></div><div class="sticky box"></div></div> - </div> - </div> -</div> - -<div>You should see three green boxes above. No red should be visible.</div> diff --git a/tests/wpt/web-platform-tests/css/css-position/position-sticky-top-ref.html b/tests/wpt/web-platform-tests/css/css-position/position-sticky-top-ref.html deleted file mode 100644 index 3003b94e5db..00000000000 --- a/tests/wpt/web-platform-tests/css/css-position/position-sticky-top-ref.html +++ /dev/null @@ -1,68 +0,0 @@ -<!DOCTYPE html> -<title>Reference for position:sticky elements should respect the top constraint</title> - -<style> -.group { - display: inline-block; - position: relative; - width: 150px; - height: 250px; -} - -.scroller { - position: relative; - width: 100px; - height: 200px; - overflow-x: hidden; - overflow-y: auto; -} - -.contents { - height: 500px; -} - -.indicator { - background-color: green; - position: absolute; - left: 0; -} - -.box { - width: 100%; - height: 100px; -} -</style> - -<script> -window.addEventListener('load', function() { - document.getElementById('scroller1').scrollTop = 50; - document.getElementById('scroller2').scrollTop = 125; - document.getElementById('scroller3').scrollTop = 200; -}); -</script> - -<div class="group"> - <div id="scroller1" class="scroller"> - <div class="contents"> - <div class="indicator box" style="top: 150px;"></div> - </div> - </div> -</div> - -<div class="group"> - <div id="scroller2" class="scroller"> - <div class="contents"> - <div class="indicator box" style="top: 175px;"></div> - </div> - </div> -</div> - -<div class="group"> - <div id="scroller3" class="scroller"> - <div class="contents"> - <div class="indicator box" style="top: 200px;"></div> - </div> - </div> -</div> - -<div>You should see three green boxes above. No red should be visible.</div> diff --git a/tests/wpt/web-platform-tests/css/css-position/position-sticky-top.html b/tests/wpt/web-platform-tests/css/css-position/position-sticky-top.html index fc07313a20d..e4889d14802 100644 --- a/tests/wpt/web-platform-tests/css/css-position/position-sticky-top.html +++ b/tests/wpt/web-platform-tests/css/css-position/position-sticky-top.html @@ -1,104 +1,43 @@ <!DOCTYPE html> <title>position:sticky elements should respect the top constraint</title> -<link rel="match" href="position-sticky-top-ref.html" /> <link rel="help" href="https://www.w3.org/TR/css-position-3/#sticky-pos" /> <meta name="assert" content="This test checks that position:sticky elements obey their top anchor after scrolling" /> -<style> -.group { - display: inline-block; - position: relative; - width: 150px; - height: 250px; -} +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> -.scroller { - position: relative; - width: 100px; - height: 200px; - overflow-x: hidden; - overflow-y: auto; -} +<script src="resources/sticky-util.js"></script> -.contents { - height: 500px; -} - -.prepadding { - height: 100px; -} - -.container { - height: 200px; -} - -.innerpadding { - height: 50px; -} - -.indicator { - background-color: red; - position: absolute; - left: 0; -} - -.sticky { - background-color: green; - position: sticky; - top: 50px; -} - -.box { - width: 100%; - height: 100px; -} -</style> +<body></body> <script> -window.addEventListener('load', function() { - document.getElementById('scroller1').scrollTop = 50; - document.getElementById('scroller2').scrollTop = 125; - document.getElementById('scroller3').scrollTop = 200; -}); +test(() => { + const elements = setupStickyTest('top', 50); + elements.scroller.scrollTop = 100; + const nonStickyTopY = elements.container.offsetTop + + elements.filler.clientHeight; + assert_equals(elements.sticky.offsetTop, nonStickyTopY); +}, 'before reaching the sticking point the sticky box should not be offset'); + +test(() => { + const elements = setupStickyTest('top', 50); + elements.scroller.scrollTop = 200; + + // This math cancels to sticky.offsetTop == (scroller.scrollTop + 50), but + // for clarity the calculations are left explicit. + const nonStickyTopY = elements.container.offsetTop + + elements.filler.clientHeight; + const targetTopY = elements.scroller.scrollTop + 50; + const stickyOffset = targetTopY - nonStickyTopY; + + assert_equals(elements.sticky.offsetTop, nonStickyTopY + stickyOffset); +}, 'after reaching the sticking point the sticky box should be offset'); + +test(() => { + const elements = setupStickyTest('top', 50); + elements.scroller.scrollTop = 300; + const maxOffsetInContainer = elements.container.offsetTop + + elements.container.clientHeight - elements.sticky.clientHeight; + assert_equals(elements.sticky.offsetTop, maxOffsetInContainer); +}, 'the sticky box should not be pushed outside its containing block'); </script> - -<div class="group"> - <div id="scroller1" class="scroller"> - <div class="indicator box" style="top: 150px;"></div> - <div class="contents"> - <div class="prepadding"></div> - <div class="container"> - <div class="innerpadding"></div> - <div class="sticky box"></div> - </div> - </div> - </div> -</div> - -<div class="group"> - <div id="scroller2" class="scroller"> - <div class="indicator box" style="top: 175px;"></div> - <div class="contents"> - <div class="prepadding"></div> - <div class="container"> - <div class="innerpadding"></div> - <div class="sticky box"></div> - </div> - </div> - </div> -</div> - -<div class="group"> - <div id="scroller3" class="scroller"> - <div class="indicator box" style="top: 200px;"></div> - <div class="contents"> - <div class="prepadding"></div> - <div class="container"> - <div class="innerpadding"></div> - <div class="sticky box"></div> - </div> - </div> - </div> -</div> - -<div>You should see three green boxes above. No red should be visible.</div> diff --git a/tests/wpt/web-platform-tests/css/css-position/resources/sticky-util.js b/tests/wpt/web-platform-tests/css/css-position/resources/sticky-util.js new file mode 100644 index 00000000000..821fa9b59a4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position/resources/sticky-util.js @@ -0,0 +1,69 @@ +/** + * Builds a generic structure that looks like: + * + * <div class="scroller"> // 100x200 viewport + * <div class="contents"> // 100x500 + * <div class="prepadding"></div> // 100x100 + * <div class="container"> // 300x300 containing block + * <div class="filler"></div> // 100x100 + * <div class="sticky box"></div> // 100x100 + * </div> + * </div> + * </div> + * + * If 'inline' is true, the necessary blocks will be marked as inline-block, + * and the dimensions above are flipped. + * + * Returns an 'elements' object which has each of the above elements as an + * accessible property. + */ +function setupStickyTest(stickyDirection, stickyOffset, inline = false) { + const elements = {}; + + elements.scroller = document.createElement('div'); + elements.scroller.style.position = 'relative'; + elements.scroller.style.width = (inline ? '200px' : '100px'); + elements.scroller.style.height = (inline ? '100px' : '200px'); + elements.scroller.style.overflow = 'scroll'; + + elements.contents = document.createElement('div'); + elements.contents.style.height = (inline ? '100%' : '500px'); + elements.contents.style.width = (inline ? '500px' : '100%'); + + elements.prepadding = document.createElement('div'); + elements.prepadding.style.height = (inline ? '100%' : '100px'); + elements.prepadding.style.width = (inline ? '100px' : '100%'); + if (inline) + elements.prepadding.style.display = 'inline-block'; + + elements.container = document.createElement('div'); + elements.container.style.height = (inline ? '100%' : '300px'); + elements.container.style.width = (inline ? '300px' : '100%'); + if (inline) + elements.container.style.display = 'inline-block'; + + elements.filler = document.createElement('div'); + elements.filler.style.height = (inline ? '100%' : '100px'); + elements.filler.style.width = (inline ? '100px' : '100%'); + if (inline) + elements.filler.style.display = 'inline-block'; + + elements.sticky = document.createElement('div'); + elements.sticky.style = `${stickyDirection}: ${stickyOffset}px;`; + elements.sticky.style.position = 'sticky'; + elements.sticky.style.height = (inline ? '100%' : '100px'); + elements.sticky.style.width = (inline ? '100px' : '100%'); + elements.sticky.style.backgroundColor = 'green'; + if (inline) + elements.sticky.style.display = 'inline-block'; + + elements.scroller.appendChild(elements.contents); + elements.contents.appendChild(elements.prepadding); + elements.contents.appendChild(elements.container); + elements.container.appendChild(elements.filler); + elements.container.appendChild(elements.sticky); + + document.body.appendChild(elements.scroller); + + return elements; +} diff --git a/tests/wpt/web-platform-tests/css/css-scoping/slotted-invalidation.html b/tests/wpt/web-platform-tests/css/css-scoping/slotted-invalidation.html new file mode 100644 index 00000000000..f8471062e1d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-scoping/slotted-invalidation.html @@ -0,0 +1,35 @@ +<!doctype html> +<title>CSS Test: Style invalidation for ::slotted()</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<link rel="author" title="Rune Lillesveen" href="mailto:futhark@chromium.org"> +<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io"> +<link rel="help" href="https://drafts.csswg.org/css-scoping/#slotted-pseudo"> +<div id="host"> + <div> + <span></span> + <span></span> + </div> + <div id="slotted"> + <span></span> + <span></span> + </div> + <div> + <span></span> + <span></span> + </div> +</div> +<script> +test(function() { + var root = host.attachShadow({"mode":"open"}); + root.innerHTML = '<style>.outer ::slotted(#slotted) { background-color: red } .outer .inner::slotted(#slotted) { background-color: green }</style><div id="outer"><slot id="inner"></slot></div>'; + + assert_equals(window.getComputedStyle(slotted).backgroundColor, "rgba(0, 0, 0, 0)"); + + root.querySelector("#outer").className = "outer"; + assert_equals(window.getComputedStyle(slotted).backgroundColor, "rgb(255, 0, 0)"); + + root.querySelector("#inner").className = "inner"; + assert_equals(window.getComputedStyle(slotted).backgroundColor, "rgb(0, 128, 0)"); +}) +</script> diff --git a/tests/wpt/web-platform-tests/css/css-scoping/slotted-slot.html b/tests/wpt/web-platform-tests/css/css-scoping/slotted-slot.html new file mode 100644 index 00000000000..1f4aa75ae60 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-scoping/slotted-slot.html @@ -0,0 +1,17 @@ +<!DOCTYPE html> +<title>CSS Test: ::slotted() not matching slot elements</title> +<link rel="author" title="Rune Lillesveen" href="mailto:futhark@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-scoping/#slotted-pseudo"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="host" style="color:green">This text should be green.</div> +<script> + test(() => { + let root = host.attachShadow({mode:"open"}); + root.innerHTML = '<div><slot id="slot"></slot><div>'; + let innerHost = root.firstChild; + let innerRoot = innerHost.attachShadow({mode:"open"}); + innerRoot.innerHTML = "<style>::slotted(#slot){color:red}</style><slot></slot>"; + assert_equals(getComputedStyle(root.querySelector("#slot")).color, "rgb(0, 128, 0)"); + }, "Check that ::slotted does not match slot elements"); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-text/astral-bidi/adlam-anti-ref.html b/tests/wpt/web-platform-tests/css/css-text/astral-bidi/adlam-anti-ref.html new file mode 100644 index 00000000000..db4c2fdfea2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/astral-bidi/adlam-anti-ref.html @@ -0,0 +1,13 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <title>Adlam</title> + <link href="support/adlam.css" rel="stylesheet"> + <link href="adlam.html" rel="mismatch"> +</head> +<body> +<p><bdo dir="ltr">𞤀𞤁𞤂𞤁𞤄</bdo></p> +<p>U+1E900 U+1E901 U+1E902 U+1E901 U+1E904</p> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/astral-bidi/adlam-ref.html b/tests/wpt/web-platform-tests/css/css-text/astral-bidi/adlam-ref.html new file mode 100644 index 00000000000..d039127044e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/astral-bidi/adlam-ref.html @@ -0,0 +1,12 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <title>Adlam</title> + <link href="support/adlam.css" rel="stylesheet"> +</head> +<body> +<p><bdo dir="rtl">𞤀𞤁𞤂𞤁𞤄</bdo></p> +<p>U+1E900 U+1E901 U+1E902 U+1E901 U+1E904</p> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/astral-bidi/adlam.html b/tests/wpt/web-platform-tests/css/css-text/astral-bidi/adlam.html new file mode 100644 index 00000000000..613aa3ce793 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/astral-bidi/adlam.html @@ -0,0 +1,15 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <title>Adlam</title> + <link href="support/adlam.css" rel="stylesheet"> + <link href="adlam-ref.html" rel="match"> + <link href="https://www.unicode.org/roadmaps/smp/" rel="help"> + <meta name="assert" content="Upper astral RTL range is treated as RTL."> +</head> +<body> +<p>𞤀𞤁𞤂𞤁𞤄</p> +<p>U+1E900 U+1E901 U+1E902 U+1E901 U+1E904</p> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/astral-bidi/cypriot-anti-ref.html b/tests/wpt/web-platform-tests/css/css-text/astral-bidi/cypriot-anti-ref.html new file mode 100644 index 00000000000..66ffc082759 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/astral-bidi/cypriot-anti-ref.html @@ -0,0 +1,13 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <title>Cypriot</title> + <link href="support/cypriot.css" rel="stylesheet"> + <link href="cypriot.html" rel="mismatch"> +</head> +<body> +<p><bdo dir="ltr">𐠀𐠰𐠦𐠡𐠩</bdo></p> +<p>U+10800 U+10830 U+10826 U+10821 U+10829</p> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/astral-bidi/cypriot-ref.html b/tests/wpt/web-platform-tests/css/css-text/astral-bidi/cypriot-ref.html new file mode 100644 index 00000000000..ad8accd3a09 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/astral-bidi/cypriot-ref.html @@ -0,0 +1,12 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <title>Cypriot</title> + <link href="support/cypriot.css" rel="stylesheet"> +</head> +<body> +<p><bdo dir="rtl">𐠀𐠰𐠦𐠡𐠩</bdo></p> +<p>U+10800 U+10830 U+10826 U+10821 U+10829</p> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/astral-bidi/cypriot.html b/tests/wpt/web-platform-tests/css/css-text/astral-bidi/cypriot.html new file mode 100644 index 00000000000..e8dcbceea24 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/astral-bidi/cypriot.html @@ -0,0 +1,15 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <title>Cypriot</title> + <link href="support/cypriot.css" rel="stylesheet"> + <link href="cypriot-ref.html" rel="match"> + <link href="https://www.unicode.org/roadmaps/smp/" rel="help"> + <meta name="assert" content="Lower astral RTL range is treated as RTL."> +</head> +<body> +<p>𐠀𐠰𐠦𐠡𐠩</p> +<p>U+10800 U+10830 U+10826 U+10821 U+10829</p> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/astral-bidi/support/adlam.css b/tests/wpt/web-platform-tests/css/css-text/astral-bidi/support/adlam.css new file mode 100644 index 00000000000..56020cae603 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/astral-bidi/support/adlam.css @@ -0,0 +1,9 @@ +@font-face { + font-family: "Noto Sans Adlam"; + font-weight: normal; + font-style: normal; + src: url("../../../fonts/noto/NotoSansAdlam-hinted/NotoSansAdlam-Regular.ttf") format("truetype"); +} +p { + font-family: "Noto Sans Adlam"; +} diff --git a/tests/wpt/web-platform-tests/css/css-text/astral-bidi/support/cypriot.css b/tests/wpt/web-platform-tests/css/css-text/astral-bidi/support/cypriot.css new file mode 100644 index 00000000000..23fcb7db5d3 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/astral-bidi/support/cypriot.css @@ -0,0 +1,9 @@ +@font-face { + font-family: "Noto Sans Cypriot"; + font-weight: normal; + font-style: normal; + src: url("../../../fonts/noto/NotoSansCypriot-hinted/NotoSansCypriot-Regular.ttf") format("truetype"); +} +p { + font-family: "Noto Sans Cypriot"; +} diff --git a/tests/wpt/web-platform-tests/css/css-transforms/parsing/perspective-origin-parsing-invalid.html b/tests/wpt/web-platform-tests/css/css-transforms/parsing/perspective-origin-parsing-invalid.html new file mode 100644 index 00000000000..e9bb1740ba4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transforms/parsing/perspective-origin-parsing-invalid.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Transform Module Level 2: parsing perspective-origin with invalid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-transforms-2/#perspective-origin-property"> +<meta name="assert" content="perspective-origin supports only the '<position>' grammar."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_invalid_value("perspective-origin", "auto"); +test_invalid_value("perspective-origin", "1px 2px 3px"); +test_invalid_value("perspective-origin", "left right"); +test_invalid_value("perspective-origin", "bottom 10% top 20%"); + +// The following were supported in an earlier version of the spec. +// https://github.com/w3c/csswg-drafts/issues/2140 +// Deprecated in Blink with support to be removed in M68, around July 2018. +test_invalid_value("perspective-origin", "center left 1px"); +test_invalid_value("perspective-origin", "center top 2px"); +test_invalid_value("perspective-origin", "right 3% center"); +test_invalid_value("perspective-origin", "left 4px top"); +test_invalid_value("perspective-origin", "right top 5px"); +test_invalid_value("perspective-origin", "bottom 6% center"); +test_invalid_value("perspective-origin", "bottom 7% left"); +test_invalid_value("perspective-origin", "bottom right 8%"); + +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-transforms/parsing/perspective-origin-parsing-valid.html b/tests/wpt/web-platform-tests/css/css-transforms/parsing/perspective-origin-parsing-valid.html new file mode 100644 index 00000000000..8421376002a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transforms/parsing/perspective-origin-parsing-valid.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Transform Module Level 2: parsing perspective-origin with valid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-transforms-2/#perspective-origin-property"> +<meta name="assert" content="perspective-origin supports the full '<position>' grammar."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/parsing-testcommon.js"></script> +</head> +<body> +<script> +// Blink and WebKit append center. Edge and Firefox append 50% +test_valid_value("perspective-origin", "10%", ["10% center", "10% 50%"]); +test_valid_value("perspective-origin", "20% 30px"); +test_valid_value("perspective-origin", "30px center"); +test_valid_value("perspective-origin", "40px top"); +test_valid_value("perspective-origin", "bottom 10% right 20%", "right 20% bottom 10%"); +test_valid_value("perspective-origin", "bottom right", "right bottom"); +test_valid_value("perspective-origin", "center", ["center center", "center 50%"]); +test_valid_value("perspective-origin", "center 50px"); +test_valid_value("perspective-origin", "center bottom"); +test_valid_value("perspective-origin", "center center"); +test_valid_value("perspective-origin", "center left", "left center"); +test_valid_value("perspective-origin", "left", ["left center", "left 50%"]); +test_valid_value("perspective-origin", "left bottom"); +test_valid_value("perspective-origin", "left center"); +test_valid_value("perspective-origin", "right 40%"); +test_valid_value("perspective-origin", "right 30% top 60px"); +test_valid_value("perspective-origin", "top", ["center top", "50% top"]); +test_valid_value("perspective-origin", "top center", "center top"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-transforms/parsing/resources/parsing-testcommon.js b/tests/wpt/web-platform-tests/css/css-transforms/parsing/resources/parsing-testcommon.js index 688356bd0f9..9427f53d81b 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms/parsing/resources/parsing-testcommon.js +++ b/tests/wpt/web-platform-tests/css/css-transforms/parsing/resources/parsing-testcommon.js @@ -1,5 +1,8 @@ 'use strict'; +// serializedValue can be the expected serialization of value, +// or an array of permitted serializations, +// or omitted if value should serialize as value. function test_valid_value(property, value, serializedValue) { if (arguments.length < 3) serializedValue = value; @@ -9,17 +12,20 @@ function test_valid_value(property, value, serializedValue) { test(function(){ var div = document.createElement('div'); div.style[property] = value; - assert_not_equals(div.style[property], ""); - }, "e.style['" + property + "'] = " + stringifiedValue + " should set the property value"); + assert_not_equals(div.style[property], "", "property should be set"); - test(function(){ var div = document.createElement('div'); div.style[property] = value; var readValue = div.style[property]; - assert_equals(readValue, serializedValue); + if (serializedValue instanceof Array) + assert_true(serializedValue.includes(readValue), "serialization should be sound"); + else + assert_equals(readValue, serializedValue, "serialization should be canonical"); + div.style[property] = readValue; - assert_equals(div.style[property], readValue); - }, "Serialization should round-trip after setting e.style['" + property + "'] = " + stringifiedValue); + assert_equals(div.style[property], readValue, "serialization should round-trip"); + + }, "e.style['" + property + "'] = " + stringifiedValue + " should set the property value"); } function test_invalid_value(property, value) { diff --git a/tests/wpt/web-platform-tests/css/css-transforms/parsing/translate-parsing-valid.html b/tests/wpt/web-platform-tests/css/css-transforms/parsing/translate-parsing-valid.html index beab0debf2e..b117d27ce4f 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms/parsing/translate-parsing-valid.html +++ b/tests/wpt/web-platform-tests/css/css-transforms/parsing/translate-parsing-valid.html @@ -23,7 +23,7 @@ test_valid_value("translate", "100% 200px"); test_valid_value("translate", "100px 200px 300px"); test_valid_value("translate", "100% 200% 300px"); -test_valid_value("translate", "calc(10px + 10%) calc(20px + 20%) calc(30px + 30em)"); +test_valid_value("translate", "calc(10% + 10px) calc(20% + 20px) calc(30em + 30px)"); test_valid_value("translate", "0", "0px"); test_valid_value("translate", "1px 2px 0", "1px 2px 0px"); diff --git a/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-caption-contains-fixed-position-ref.html b/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-caption-contains-fixed-position-ref.html new file mode 100644 index 00000000000..5400f2a70dd --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-caption-contains-fixed-position-ref.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> + <head> + <title>CSS Test (Transforms): Transformed caption contains fixed position elements reference.</title> + <link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> + <style> + body { + overflow: hidden; + } + .pad { + height: 50px; + } + .container { + transform: translateX(20px) rotate(45deg); + transform-origin: left; + } + .fixed { + position: fixed; + top: 15px; + left: 10px; + background-color: lightblue; + } + </style> + </head> + <body> + <div class='pad'></div> + <div class='container'>some text<div class='fixed'>fixed</div> + </div> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-caption-contains-fixed-position.html b/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-caption-contains-fixed-position.html new file mode 100644 index 00000000000..69de54b900f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-caption-contains-fixed-position.html @@ -0,0 +1,38 @@ +<!DOCTYPE html> +<html> + <head> + <title>CSS Test (Transforms): Transformed caption contains fixed position elements.</title> + <link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> + <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#transform-rendering"> + <meta name="assert" content='This test ensures that transformed caption element is a containing block for fixed position elements.'> + <link rel="match" href="transform-transformed-caption-contains-fixed-position-ref.html"> + <style> + table, caption { + margin: 0; + padding: 0; + border-spacing: 0; + text-align: left; + } + .pad { + height: 50px; + } + .container { + transform: translateX(20px) rotate(45deg); + transform-origin: left; + } + .fixed { + position: fixed; + top: 15px; + left: 10px; + background-color: lightblue; + } + </style> + </head> + <body> + <div class='pad'></div> + <table style='width: 100px;'> + <caption class='container'>some text<div class='fixed'>fixed</div> + </caption> + </table> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-tbody-contains-fixed-position-ref.html b/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-tbody-contains-fixed-position-ref.html new file mode 100644 index 00000000000..f8db1643d62 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-tbody-contains-fixed-position-ref.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> + <head> + <title>CSS Test (Transforms): Transformed tbody contains fixed position elements reference.</title> + <link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> + <style> + body { + overflow: hidden; + } + .pad { + height: 50px; + } + .container { + transform: translateX(20px) rotate(45deg); + transform-origin: left; + } + .fixed { + position: fixed; + top: 15px; + left: 10px; + background-color: lightblue; + } + </style> + </head> + <body> + <div class='pad'></div> + <div class='container'>some text<div class='fixed'>fixed</div> + </div> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-tbody-contains-fixed-position.html b/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-tbody-contains-fixed-position.html new file mode 100644 index 00000000000..b96e94ed23d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-tbody-contains-fixed-position.html @@ -0,0 +1,41 @@ +<!DOCTYPE html> +<html> + <head> + <title>CSS Test (Transforms): Transformed tbody contains fixed position elements.</title> + <link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> + <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#transform-rendering"> + <meta name="assert" content='This test ensures that transformed tbody element is a containing block for fixed position elements.'> + <link rel="match" href="transform-transformed-tbody-contains-fixed-position-ref.html"> + <style> + table, tbody, tr, td { + margin: 0; + padding: 0; + border-spacing: 0; + } + .pad { + height: 50px; + } + .container { + transform: translateX(20px) rotate(45deg); + transform-origin: left; + } + .fixed { + position: fixed; + top: 15px; + left: 10px; + background-color: lightblue; + } + </style> + </head> + <body> + <div class='pad'></div> + <table> + <tbody class='container'> + <tr> + <td>some text<div class='fixed'>fixed</div> + </td> + </tr> + </tbody> + </table> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-td-contains-fixed-position-ref.html b/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-td-contains-fixed-position-ref.html new file mode 100644 index 00000000000..27981a65410 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-td-contains-fixed-position-ref.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> + <head> + <title>CSS Test (Transforms): Transformed td contains fixed position elements reference.</title> + <link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> + <style> + body { + overflow: hidden; + } + .pad { + height: 50px; + } + .container { + transform: translateX(20px) rotate(45deg); + transform-origin: left; + } + .fixed { + position: fixed; + top: 15px; + left: 10px; + background-color: lightblue; + } + </style> + </head> + <body> + <div class='pad'></div> + <div class='container'>some text<div class='fixed'>fixed</div> + </div> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-td-contains-fixed-position.html b/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-td-contains-fixed-position.html new file mode 100644 index 00000000000..7e43d2adde4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-td-contains-fixed-position.html @@ -0,0 +1,39 @@ +<!DOCTYPE html> +<html> + <head> + <title>CSS Test (Transforms): Transformed td contains fixed position elements.</title> + <link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> + <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#transform-rendering"> + <meta name="assert" content='This test ensures that transformed td element is a containing block for fixed position elements.'> + <link rel="match" href="transform-transformed-td-contains-fixed-position-ref.html"> + <style> + table, tbody, tr, td { + margin: 0; + padding: 0; + border-spacing: 0; + } + .pad { + height: 50px; + } + .container { + transform: translateX(20px) rotate(45deg); + transform-origin: left; + } + .fixed { + position: fixed; + top: 15px; + left: 10px; + background-color: lightblue; + } + </style> + </head> + <body> + <div class='pad'></div> + <table> + <tr> + <td class='container'>some text<div class='fixed'>fixed</div> + </td> + </tr> + </table> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-tfoot-contains-fixed-position-ref.html b/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-tfoot-contains-fixed-position-ref.html new file mode 100644 index 00000000000..9b4628d1a73 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-tfoot-contains-fixed-position-ref.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> + <head> + <title>CSS Test (Transforms): Transformed tfoot contains fixed position elements reference.</title> + <link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> + <style> + body { + overflow: hidden; + } + .pad { + height: 50px; + } + .container { + transform: translateX(20px) rotate(45deg); + transform-origin: left; + } + .fixed { + position: fixed; + top: 15px; + left: 10px; + background-color: lightblue; + } + </style> + </head> + <body> + <div class='pad'></div> + <div class='container'>some text<div class='fixed'>fixed</div> + </div> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-tfoot-contains-fixed-position.html b/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-tfoot-contains-fixed-position.html new file mode 100644 index 00000000000..a04bba3b6de --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-tfoot-contains-fixed-position.html @@ -0,0 +1,41 @@ +<!DOCTYPE html> +<html> + <head> + <title>CSS Test (Transforms): Transformed tfoot contains fixed position elements.</title> + <link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> + <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#transform-rendering"> + <meta name="assert" content='This test ensures that transformed tfoot element is a containing block for fixed position elements.'> + <link rel="match" href="transform-transformed-tfoot-contains-fixed-position-ref.html"> + <style> + table, tfoot, tr, td { + margin: 0; + padding: 0; + border-spacing: 0; + } + .pad { + height: 50px; + } + .container { + transform: translateX(20px) rotate(45deg); + transform-origin: left; + } + .fixed { + position: fixed; + top: 15px; + left: 10px; + background-color: lightblue; + } + </style> + </head> + <body> + <div class='pad'></div> + <table> + <tfoot class='container'> + <tr> + <td>some text<div class='fixed'>fixed</div> + </td> + </tr> + </tfoot> + </table> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-th-contains-fixed-position-ref.html b/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-th-contains-fixed-position-ref.html new file mode 100644 index 00000000000..1c2d3bdf045 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-th-contains-fixed-position-ref.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<html> + <head> + <title>CSS Test (Transforms): Transformed th contains fixed position elements reference.</title> + <link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> + <style> + body { + overflow: hidden; + } + .pad { + height: 50px; + } + .container { + font-weight: bold; + text-align: left; + transform: translateX(20px) rotate(45deg); + transform-origin: left; + } + .fixed { + position: fixed; + top: 15px; + left: 10px; + background-color: lightblue; + } + </style> + </head> + <body> + <div class='pad'></div> + <div class='container'>some text<div class='fixed'>fixed</div> + </div> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-th-contains-fixed-position.html b/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-th-contains-fixed-position.html new file mode 100644 index 00000000000..4ddde403e38 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-th-contains-fixed-position.html @@ -0,0 +1,41 @@ +<!DOCTYPE html> +<html> + <head> + <title>CSS Test (Transforms): Transformed th contains fixed position elements.</title> + <link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> + <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#transform-rendering"> + <meta name="assert" content='This test ensures that transformed th element is a containing block for fixed position elements.'> + <link rel="match" href="transform-transformed-th-contains-fixed-position-ref.html"> + <style> + table, tr, td, th { + margin: 0; + padding: 0; + border-spacing: 0; + font-weight: bold; + text-align: left; + } + .pad { + height: 50px; + } + .container { + transform: translateX(20px) rotate(45deg); + transform-origin: left; + } + .fixed { + position: fixed; + top: 15px; + left: 10px; + background-color: lightblue; + } + </style> + </head> + <body> + <div class='pad'></div> + <table> + <tr> + <th class='container'>some text<div class='fixed'>fixed</div> + </th> + </tr> + </table> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-thead-contains-fixed-position-ref.html b/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-thead-contains-fixed-position-ref.html new file mode 100644 index 00000000000..e5e4217c820 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-thead-contains-fixed-position-ref.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> + <head> + <title>CSS Test (Transforms): Transformed thead contains fixed position elements reference.</title> + <link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> + <style> + body { + overflow: hidden; + } + .pad { + height: 50px; + } + .container { + transform: translateX(20px) rotate(45deg); + transform-origin: left; + } + .fixed { + position: fixed; + top: 15px; + left: 10px; + background-color: lightblue; + } + </style> + </head> + <body> + <div class='pad'></div> + <div class='container'>some text<div class='fixed'>fixed</div> + </div> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-thead-contains-fixed-position.html b/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-thead-contains-fixed-position.html new file mode 100644 index 00000000000..2270cff6725 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-thead-contains-fixed-position.html @@ -0,0 +1,41 @@ +<!DOCTYPE html> +<html> + <head> + <title>CSS Test (Transforms): Transformed thead contains fixed position elements.</title> + <link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> + <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#transform-rendering"> + <meta name="assert" content='This test ensures that transformed thead element is a containing block for fixed position elements.'> + <link rel="match" href="transform-transformed-thead-contains-fixed-position-ref.html"> + <style> + table, thead, tr, td { + margin: 0; + padding: 0; + border-spacing: 0; + } + .pad { + height: 50px; + } + .container { + transform: translateX(20px) rotate(45deg); + transform-origin: left; + } + .fixed { + position: fixed; + top: 15px; + left: 10px; + background-color: lightblue; + } + </style> + </head> + <body> + <div class='pad'></div> + <table> + <thead class='container'> + <tr> + <td>some text<div class='fixed'>fixed</div> + </td> + </tr> + </thead> + </table> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-tr-contains-fixed-position-ref.html b/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-tr-contains-fixed-position-ref.html new file mode 100644 index 00000000000..b0b630999d4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-tr-contains-fixed-position-ref.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> + <head> + <title>CSS Test (Transforms): Transformed tr contains fixed position elements reference.</title> + <link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> + <style> + body { + overflow: hidden; + } + .pad { + height: 50px; + } + .container { + transform: translateX(20px) rotate(45deg); + transform-origin: left; + } + .fixed { + position: fixed; + top: 15px; + left: 10px; + background-color: lightblue; + } + </style> + </head> + <body> + <div class='pad'></div> + <div class='container'>some text<div class='fixed'>fixed</div> + </div> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-tr-contains-fixed-position.html b/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-tr-contains-fixed-position.html new file mode 100644 index 00000000000..52f015d2923 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transforms/transform-transformed-tr-contains-fixed-position.html @@ -0,0 +1,39 @@ +<!DOCTYPE html> +<html> + <head> + <title>CSS Test (Transforms): Transformed tr contains fixed position elements.</title> + <link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> + <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#transform-rendering"> + <meta name="assert" content='This test ensures that transformed tr element is a containing block for fixed position elements.'> + <link rel="match" href="transform-transformed-tr-contains-fixed-position-ref.html"> + <style> + table, tbody, tr, td { + margin: 0; + padding: 0; + border-spacing: 0; + } + .pad { + height: 50px; + } + .container { + transform: translateX(20px) rotate(45deg); + transform-origin: left; + } + .fixed { + position: fixed; + top: 15px; + left: 10px; + background-color: lightblue; + } + </style> + </head> + <body> + <div class='pad'></div> + <table> + <tr class='container'> + <td>some text<div class='fixed'>fixed</div> + </td> + </tr> + </table> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/OWNERS b/tests/wpt/web-platform-tests/css/css-typed-om/OWNERS new file mode 100644 index 00000000000..c1510aad350 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/OWNERS @@ -0,0 +1 @@ +@darrnshn diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/resources/testhelper.js b/tests/wpt/web-platform-tests/css/css-typed-om/resources/testhelper.js index 50b93302525..f7c7e03d93e 100644 --- a/tests/wpt/web-platform-tests/css/css-typed-om/resources/testhelper.js +++ b/tests/wpt/web-platform-tests/css/css-typed-om/resources/testhelper.js @@ -40,10 +40,10 @@ function assert_style_value_equals(a, b) { case 'CSSTransformValue': assert_style_value_array_equals(a, b); break; - case 'CSSRotation': + case 'CSSRotate': assert_style_value_equals(a.angle, b.angle); // fallthrough - case 'CSSTranslation': + case 'CSSTranslate': case 'CSSScale': assert_style_value_equals(a.x, b.x); assert_style_value_equals(a.y, b.y); @@ -105,25 +105,39 @@ function createDivWithStyle(test, cssText) { // Creates a new div element with inline style |cssText| and returns // its inline style property map. function createInlineStyleMap(test, cssText) { - return createDivWithStyle(test, cssText).attributeStyleMap; + return createElementWithInlineStyleMap(test, cssText)[1] +} +// Same as createInlineStyleMap but also returns the element itself. +function createElementWithInlineStyleMap(test, cssText) { + let elem = createDivWithStyle(test, cssText); + return [elem, elem.attributeStyleMap]; } // Creates a new div element with inline style |cssText| and returns // its computed style property map. function createComputedStyleMap(test, cssText) { - return createDivWithStyle(test, cssText).computedStyleMap(); + return createElementWithComputedStyleMap(test, cssText)[1]; +} +// Same as createComputedStyleMap but also returns the element itself. +function createElementWithComputedStyleMap(test, cssText) { + let elem = createDivWithStyle(test, cssText); + return [elem, elem.computedStyleMap()]; } // Creates a new style element with a rule |cssText| and returns // its declared style property map. function createDeclaredStyleMap(test, cssText) { + return createRuleWithDeclaredStyleMap(test, cssText)[1]; +} +// Same as createDeclaredStyleMap but also returns the rule itself. +function createRuleWithDeclaredStyleMap(test, cssText) { const style = document.createElement('style'); document.head.appendChild(style); const rule = style.sheet.cssRules[style.sheet.insertRule('#test { ' + cssText + '}')]; test.add_cleanup(() => { style.remove(); }); - return rule.attributeStyleMap; + return [rule, rule.styleMap]; } // Creates a new element with background image set to |imageValue| diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-normalization/transformvalue-normalization.tentative.html b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-normalization/transformvalue-normalization.tentative.html index 5725f4677d0..25b980b02b2 100644 --- a/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-normalization/transformvalue-normalization.tentative.html +++ b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-normalization/transformvalue-normalization.tentative.html @@ -35,32 +35,32 @@ test(t => { const gTestCases = [ { cssText: 'translate(1px)', - expected: new CSSTranslation(CSS.px(1), CSS.px(0)), + expected: new CSSTranslate(CSS.px(1), CSS.px(0)), desc: 'translate() with X' }, { cssText: 'translate(1%, 1px)', - expected: new CSSTranslation(CSS.percent(1), CSS.px(1)), + expected: new CSSTranslate(CSS.percent(1), CSS.px(1)), desc: 'translate() with X and Y' }, { cssText: 'translateX(1%)', - expected: new CSSTranslation(CSS.percent(1), CSS.px(0)), + expected: new CSSTranslate(CSS.percent(1), CSS.px(0)), desc: 'translateX()' }, { cssText: 'translateY(1px)', - expected: new CSSTranslation(CSS.px(0), CSS.px(1)), + expected: new CSSTranslate(CSS.px(0), CSS.px(1)), desc: 'translateY()' }, { cssText: 'translate3d(1px, 2%, 3px)', - expected: new CSSTranslation(CSS.px(1), CSS.percent(2), CSS.px(3)), + expected: new CSSTranslate(CSS.px(1), CSS.percent(2), CSS.px(3)), desc: 'translate3d()' }, { cssText: 'translateZ(1px)', - expected: new CSSTranslation(CSS.px(0), CSS.px(0), CSS.px(1)), + expected: new CSSTranslate(CSS.px(0), CSS.px(0), CSS.px(1)), desc: 'translateZ()' }, { @@ -95,27 +95,27 @@ const gTestCases = [ }, { cssText: 'rotate(90deg)', - expected: new CSSRotation(CSS.deg(90)), + expected: new CSSRotate(CSS.deg(90)), desc: 'rotate()' }, { cssText: 'rotate3d(1, 2, 3, 90deg)', - expected: new CSSRotation(CSS.number(1), CSS.number(2), CSS.number(3), CSS.deg(90)), + expected: new CSSRotate(CSS.number(1), CSS.number(2), CSS.number(3), CSS.deg(90)), desc: 'rotate3d()' }, { cssText: 'rotateX(90deg)', - expected: new CSSRotation(CSS.number(1), CSS.number(0), CSS.number(0), CSS.deg(90)), + expected: new CSSRotate(CSS.number(1), CSS.number(0), CSS.number(0), CSS.deg(90)), desc: 'rotateX()' }, { cssText: 'rotateY(90deg)', - expected: new CSSRotation(CSS.number(0), CSS.number(1), CSS.number(0), CSS.deg(90)), + expected: new CSSRotate(CSS.number(0), CSS.number(1), CSS.number(0), CSS.deg(90)), desc: 'rotateY()' }, { cssText: 'rotateZ(90deg)', - expected: new CSSRotation(CSS.number(0), CSS.number(0), CSS.number(1), CSS.deg(90)), + expected: new CSSRotate(CSS.number(0), CSS.number(0), CSS.number(1), CSS.deg(90)), desc: 'rotateZ()' }, { @@ -155,8 +155,8 @@ test(t => { test_transform_normalization(t, 'translate(1px) rotateX(90deg) perspective(1px) skew(90deg) scale3d(1, 2, 3)', new CSSTransformValue([ - new CSSTranslation(CSS.px(1), CSS.px(0)), - new CSSRotation(CSS.number(1), CSS.number(0), CSS.number(0), CSS.deg(90)), + new CSSTranslate(CSS.px(1), CSS.px(0)), + new CSSRotate(CSS.number(1), CSS.number(0), CSS.number(0), CSS.deg(90)), new CSSPerspective(CSS.px(1)), new CSSSkew(CSS.deg(90), CSS.deg(0)), new CSSScale(CSS.number(1), CSS.number(2), CSS.number(3)), @@ -167,7 +167,7 @@ test(t => { test_transform_normalization(t, 'translate(calc(1px + 1em)) perspective(calc(1px + 1em))', new CSSTransformValue([ - new CSSTranslation(new CSSMathSum(CSS.px(1), CSS.em(1)), CSS.px(0)), + new CSSTranslate(new CSSMathSum(CSS.px(1), CSS.em(1)), CSS.px(0)), new CSSPerspective(new CSSMathSum(CSS.px(1), CSS.em(1))), ])); }, 'Normalizing transforms with calc values contains CSSMathValues'); diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-serialization/cssMathValue.tentative.html b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-serialization/cssMathValue.tentative.html index 6ce739b6943..814812e6a8d 100644 --- a/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-serialization/cssMathValue.tentative.html +++ b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-serialization/cssMathValue.tentative.html @@ -1,6 +1,8 @@ <!doctype html> <meta charset="utf-8"> <title>IDL-constructed CSSMathValue serialization tests</title> +<!-- Tentative because this depends on css-values-4 spec, which is still WIP: + https://drafts.csswg.org/css-values-4/#calc-notation --> <link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#calc-serialization"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> @@ -10,72 +12,76 @@ const gTestCases = [ { + description: 'CSSMathSum with 1 argument', value: new CSSMathSum(CSS.px(1)), cssText: 'calc(1px)', - desc: 'CSSMathSum with 1 argument' }, { + description: 'CSSMathSum with 2 arguments', value: new CSSMathSum(CSS.px(1), CSS.px(2)), cssText: 'calc(1px + 2px)', - desc: 'CSSMathSum with 2 arguments' }, { + description: 'CSSMathSum with more than 2 arguments', value: new CSSMathSum(CSS.px(1), CSS.px(2), CSS.px(3)), cssText: 'calc((1px + 2px) + 3px)', - desc: 'CSSMathSum with more than 2 arguments' }, { + description: 'CSSMathProduct with 1 argument', value: new CSSMathProduct(CSS.px(1)), cssText: 'calc(1px)', - desc: 'CSSMathProduct with 1 argument' }, { + description: 'CSSMathProduct with 2 arguments', value: new CSSMathProduct(CSS.px(1), 2), cssText: 'calc(1px * 2)', - desc: 'CSSMathProduct with 2 arguments' }, { + description: 'CSSMathProduct with more than 2 arguments', value: new CSSMathProduct(CSS.px(1), 2, 3), cssText: 'calc((1px * 2) * 3)', - desc: 'CSSMathProduct with more than 2 arguments' }, -]; - -for (const {value, cssText, desc} of gTestCases) { - test(() => { - assert_equals(value.toString(), cssText); - }, desc + ' serializes correctly'); -} - -// TODO(crbug.com/782103): Convert these to actual tests once we have spec -// for these. For now, let's just test that they don't crash. -const gInvalidTestCases = [ { + description: 'CSSMathProduct of two different base types', value: new CSSMathProduct(CSS.px(1), CSS.s(1)), - desc: 'CSSMathProduct of two different base types' + cssText: 'calc(1px * 1s)', }, { + description: 'CSSMathMax with one argument', + value: new CSSMathMax(CSS.px(2)), + cssText: 'max(1px)', + }, + { + description: 'CSSMathMax with more than one argument', value: new CSSMathMax(CSS.px(2), CSS.px(1)), - desc: 'CSSMathMax' + cssText: 'max(1px, 1s)', }, { + description: 'CSSMathMin with one argument', + value: new CSSMathMin(CSS.px(1)), + cssText: 'min(1px)', + }, + { + description: 'CSSMathMin with more than one argument', value: new CSSMathMin(CSS.px(1), CSS.px(2)), - desc: 'CSSMathMin' + cssText: 'min(1px, 2px)', }, { + description: 'CSSMathNegate', value: new CSSMathNegate(CSS.px(1)), - desc: 'CSSMathNegate' + cssText: 'calc(- 1px)', }, { + description: 'CSSMathInvert', value: new CSSMathInvert(CSS.px(1)), - desc: 'CSSMathInvert' + cssText: 'calc(1 / 1px)', }, ]; -for (const {value, desc} of gInvalidTestCases) { +for (const {value, cssText, description} of gTestCases) { test(() => { - value.toString(); - }, 'Serializing ' + desc + ' does not crash'); + assert_equals(value.toString(), cssText); + }, description + ' serializes correctly'); } </script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-serialization/cssTransformValue.tentative.html b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-serialization/cssTransformValue.tentative.html index 5f09cfdc77e..8662b4fd2af 100644 --- a/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-serialization/cssTransformValue.tentative.html +++ b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-serialization/cssTransformValue.tentative.html @@ -10,14 +10,14 @@ const gTestCases = [ { - value: new CSSTranslation(CSS.percent(1), CSS.px(1)), + value: new CSSTranslate(CSS.percent(1), CSS.px(1)), cssText: 'translate(1%, 1px)', - desc: 'CSSTranslation with 2 arguments' + desc: 'CSSTranslate with 2 arguments' }, { - value: new CSSTranslation(CSS.px(1), CSS.percent(2), CSS.px(3)), + value: new CSSTranslate(CSS.px(1), CSS.percent(2), CSS.px(3)), cssText: 'translate3d(1px, 2%, 3px)', - desc: 'CSSTranslation with 3 arguments' + desc: 'CSSTranslate with 3 arguments' }, { value: new CSSScale(CSS.number(2), CSS.number(3)), @@ -30,14 +30,14 @@ const gTestCases = [ desc: 'CSSScale with 3 arguments' }, { - value: new CSSRotation(CSS.deg(90)), + value: new CSSRotate(CSS.deg(90)), cssText: 'rotate(90deg)', - desc: 'CSSRotation with 1 argument' + desc: 'CSSRotate with 1 argument' }, { - value: new CSSRotation(CSS.number(1), CSS.number(2), CSS.number(3), CSS.deg(90)), + value: new CSSRotate(CSS.number(1), CSS.number(2), CSS.number(3), CSS.deg(90)), cssText: 'rotate3d(1, 2, 3, 90deg)', - desc: 'CSSRotation with 4 arguments' + desc: 'CSSRotate with 4 arguments' }, { value: new CSSSkew(CSS.deg(90), CSS.deg(45)), @@ -56,8 +56,8 @@ const gTestCases = [ }, { value: new CSSTransformValue([ - new CSSTranslation(CSS.px(1), CSS.px(0)), - new CSSRotation(CSS.deg(90)), + new CSSTranslate(CSS.px(1), CSS.px(0)), + new CSSRotate(CSS.deg(90)), new CSSPerspective(CSS.px(1)), new CSSSkew(CSS.deg(90), CSS.deg(45)), new CSSScale(CSS.number(1), CSS.number(2), CSS.number(3)), @@ -67,8 +67,8 @@ const gTestCases = [ }, { value: new CSSTransformValue([ - new CSSTranslation(new CSSMathSum(CSS.px(1), CSS.em(1)), CSS.px(0)), - new CSSRotation(new CSSMathSum(CSS.deg(90), CSS.turn(1))), + new CSSTranslate(new CSSMathSum(CSS.px(1), CSS.em(1)), CSS.px(0)), + new CSSRotate(new CSSMathSum(CSS.deg(90), CSS.turn(1))), new CSSPerspective(new CSSMathSum(CSS.px(1), CSS.em(1))), new CSSSkew(new CSSMathProduct(CSS.deg(90), 2), new CSSMathProduct(CSS.turn(1), 2)), new CSSScale( @@ -100,8 +100,8 @@ for (const {value, cssText, desc} of gTestCases) { test(() => { let result = new CSSTransformValue([ - new CSSTranslation(CSS.px(1), CSS.px(2), CSS.px(3)), - new CSSRotation(1, 2, 3, CSS.deg(90)), + new CSSTranslate(CSS.px(1), CSS.px(2), CSS.px(3)), + new CSSRotate(1, 2, 3, CSS.deg(90)), new CSSScale(1, 2, 3), ]); diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssMatrixComponent.tentative.html b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssMatrixComponent.tentative.html new file mode 100644 index 00000000000..2f1fcc1408e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssMatrixComponent.tentative.html @@ -0,0 +1,61 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSSMatrixComponent tests</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-cssmatrixcomponent-cssmatrixcomponent"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../resources/testhelper.js"></script> +<script src="../resources/comparisons.js"></script> +<script> +'use strict'; + +const EPSILON = 1e-6; + +const gTestMatrices = [ + { + matrix: new DOMMatrix([0, -1, 3.14, -3.14, 10, 0]), + desc: 'a 2D matrix' + }, + { + matrix: new DOMMatrix([1.1, 1.2, -13, -1.4, 2, 0, -2, 4, 3.1, 3, 3, 3.4, -4.1, 42, 43, 4.4]), + desc: 'a 3D matrix' + }, +]; + +for (const {matrix, desc} of gTestMatrices) { + test(() => { + const component = new CSSMatrixComponent(matrix, { is2D: true }); + assert_matrix_approx_equals(component.matrix, matrix, EPSILON); + assert_true(component.is2D); + }, 'CSSMatrixComponent can be constructed from ' + desc + ' with is2D true'); + + test(() => { + const component = new CSSMatrixComponent(matrix, { is2D: false }); + assert_matrix_approx_equals(component.matrix, matrix, EPSILON); + assert_false(component.is2D); + }, 'CSSMatrixComponent can be constructed from ' + desc + ' with is2D false'); + + test(() => { + const component = new CSSMatrixComponent(matrix); + assert_matrix_approx_equals(component.matrix, matrix, EPSILON); + assert_equals(component.is2D, matrix.is2D); + }, 'CSSMatrixComponent can be constructed from ' + desc + ' without a CSSMatrixComponentOptions'); + + test(() => { + const component = new CSSMatrixComponent(matrix, null); + assert_matrix_approx_equals(component.matrix, matrix, EPSILON); + assert_equals(component.is2D, matrix.is2D); + }, 'CSSMatrixComponent can be constructed from ' + desc + ' with an invalid CSSMatrixComponentOptions'); + + test(() => { + let component = new CSSMatrixComponent(new DOMMatrixReadOnly([ + 0, 0, 0, 0, 0, 0 + ])); + + component.matrix = matrix; + assert_matrix_approx_equals(component.matrix, matrix, EPSILON); + }, 'CSSMatrixComponent.matrix can be updated to ' + desc); +} + +</script> + diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssPerspective.tentative.html b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssPerspective.tentative.html new file mode 100644 index 00000000000..4fbd7ca0ae4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssPerspective.tentative.html @@ -0,0 +1,60 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSSPerspective tests</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#cssperspective"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../resources/testhelper.js"></script> +<script> +'use strict'; + +const gInvalidTestCases = [ + { length: 'auto', desc: 'a keyword'}, + { length: 3.14, desc: 'a double'}, + { length: 0, desc: 'a unitless zero'}, + { length: '10px', desc: 'a string length'}, + { length: CSS.number(10), desc: 'a number CSSUnitValue'}, + { length: CSS.s(10), desc: 'a time dimension CSSUnitValue'}, + { length: new CSSMathSum(CSS.deg(1)), desc: 'a CSSMathValue of angle type' }, +]; + +for (const {length, desc} of gInvalidTestCases) { + test(() => { + assert_throws(new TypeError(), () => new CSSPerspective(length)); + }, 'Constructing a CSSPerspective with ' + desc + ' throws a TypeError'); +} + +for (const {length, desc} of gInvalidTestCases) { + test(() => { + let perspective = new CSSPerspective(CSS.px(0)); + assert_throws(new TypeError(), () => perspective.length = length); + assert_style_value_equals(perspective.length, CSS.px(0)); + }, 'Updating CSSPerspective.length with ' + desc + ' throws a TypeError'); +} + +const gValidTestCases = [ + { length: CSS.px(-3.14), desc: 'a length CSSUnitValue' }, + { length: new CSSMathSum(CSS.px(1)), desc: 'a CSSMathValue of length type' }, +]; + +for (const {length, desc} of gValidTestCases) { + test(() => { + const perspective = new CSSPerspective(length); + assert_equals(perspective.length, length); + assert_false(perspective.is2D); + }, 'CSSPerspective can be constructed from ' + desc); + + test(() => { + let perspective = new CSSPerspective(CSS.px(0), CSS.px(0)); + perspective.length = length; + assert_style_value_equals(perspective.length, length); + }, 'CSSPerspective.length can be updated to ' + desc); +} + +test(() => { + let perspective = new CSSPerspective(CSS.px(0), CSS.px(0)); + perspective.is2D = true; + assert_false(perspective.is2D); +}, 'Modifying CSSPerspective.is2D is a no-op'); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssPositionValue-invalid.html b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssPositionValue-invalid.html new file mode 100644 index 00000000000..d63c0c78694 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssPositionValue-invalid.html @@ -0,0 +1,67 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSSPositionValue Error Handling</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#positionvalue-objects"> +<meta name="assert" content="Test CSSPositionValue constructor and attributes error handling" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<body> +<div id="log"> +<script> +'use strict'; + +const gTestArguments = [ + { + description: 'a keyword', + value: 'auto', + }, + { + description: 'a double', + value: 3.14, + }, + { + description: 'a unitless zero', + value: 0, + }, + { + description: 'a string length', + value: '10px', + }, + { + description: 'a number CSSUnitValue', + value: CSS.number(10), + }, + { + description: 'a time CSSUnitValue', + value: CSS.s(10), + }, + { + description: 'a CSSMathValue of angle type', + value: new CSSMathSum(CSS.deg(1)), + }, +]; + +for (const {value, description} of gTestArguments) { + test(() => { + assert_throws(new TypeError(), () => new CSSPositionValue(value, CSS.px(0))); + assert_throws(new TypeError(), () => new CSSPositionValue(CSS.px(0), value)); + }, `Constructing a CSSPositionValue with ${description} throws a TypeError`); + + test(() => { + let position = new CSSPositionValue(CSS.px(0), CSS.px(0)); + assert_throws(new TypeError(), () => position.x = value); + + assert_equals(position.x.value, 0, + 'X member should not have changed'); + }, `Updating CSSPositionValue.x with ${description} throws a TypeError`); + + test(() => { + let position = new CSSPositionValue(CSS.px(0), CSS.px(0)); + assert_throws(new TypeError(), () => position.y = value); + + assert_equals(position.y.value, 0, + 'Y member should not have changed'); + }, `Updating CSSPositionValue.y with ${description} throws a TypeError`); +} + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssPositionValue.html b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssPositionValue.html new file mode 100644 index 00000000000..a780a86e0b2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssPositionValue.html @@ -0,0 +1,61 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSSPositionValue</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#positionvalue-objects"> +<meta name="assert" content="Test CSSPositionValue constructor and attributes" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../resources/testhelper.js"></script> +<body> +<div id="log"> +<script> +'use strict'; + +const gTestArguments = [ + { + description: 'a length CSSUnitValue' , + value: CSS.px(1), + }, + { + description: 'a percent CSSUnitValue' , + value: CSS.percent(10), + }, + { + description: 'a CSSMathValue of length type' , + value: new CSSMathSum(CSS.px(1)), + }, + { + description: 'a CSSMathValue of percent type' , + value: new CSSMathSum(CSS.percent(1)), + }, +]; + +for (const {value, description} of gTestArguments) { + test(() => { + const position = new CSSPositionValue(value, value); + assert_style_value_equals(position.x, value, + 'X member should be same as passed in constructor'); + assert_style_value_equals(position.y, value, + 'Y member should be same as passed in constructor'); + }, 'CSSPositionValue can be constructed from ' + description); +} + +for (const {value, description} of gTestArguments) { + test(() => { + let position = new CSSPositionValue(CSS.px(0), CSS.px(0)); + position.x = value; + + assert_style_value_equals(position.x, value, + 'X member should be updated to new value'); + }, 'CSSPositionValue.x can be updated to ' + description); + + test(() => { + let position = new CSSPositionValue(CSS.px(0), CSS.px(0)); + position.y = value; + + assert_style_value_equals(position.y, value, + 'Y member should be updated to new value'); + }, 'CSSPositionValue.y can be updated to ' + description); +} + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssRotate.tentative.html b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssRotate.tentative.html new file mode 100644 index 00000000000..17490dcea90 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssRotate.tentative.html @@ -0,0 +1,126 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSSRotate tests</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#cssrotate"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../resources/testhelper.js"></script> +<script> +'use strict'; + +const gInvalidAngleTestCases = [ + { angle: CSS.number(10), desc: 'a CSSUnitValue with type other than angle'}, + { angle: new CSSMathSum(CSS.s(10)), desc: 'a CSSMathValue that doesn\'t match <angle>'}, +]; + +const gInvalidCoordTestCases = [ + { coord: CSS.px(10), desc: 'a CSSUnitValue with type other than number'}, + { coord: new CSSMathSum(CSS.px(10)), desc: 'a CSSMathValue that doesn\'t match <number>'}, +]; + +for (const {angle, desc} of gInvalidAngleTestCases) { + test(() => { + assert_throws(new TypeError(), () => new CSSRotate(angle)); + assert_throws(new TypeError(), () => new CSSRotate(0, 0, 0, angle)); + }, 'Constructing a CSSRotate with ' + desc + ' for the angle throws a TypeError'); +} + +for (const {coord, desc} of gInvalidCoordTestCases) { + test(() => { + assert_throws(new TypeError(), () => new CSSRotate(coord, 0, 0, CSS.deg(0))); + assert_throws(new TypeError(), () => new CSSRotate(0, coord, 0, CSS.deg(0))); + assert_throws(new TypeError(), () => new CSSRotate(0, 0, coord, CSS.deg(0))); + }, 'Constructing a CSSRotate with ' + desc + ' for the coordinates throws a TypeError'); +} + +for (const attr of ['x', 'y', 'z']) { + for (const {value, desc} of gInvalidCoordTestCases) { + test(() => { + let result = new CSSRotate(0, 0, 0, CSS.deg(0)); + assert_throws(new TypeError(), () => result[attr] = value); + assert_style_value_equals(result[attr], CSS.number(0)); + }, 'Updating CSSRotate.' + attr + ' to ' + desc + ' throws a TypeError'); + } +} + +for (const {angle, desc} of gInvalidAngleTestCases) { + test(() => { + let result = new CSSRotate(CSS.deg(0)); + assert_throws(new TypeError(), () => result.angle = angle); + assert_style_value_equals(result.angle, CSS.deg(0)); + }, 'Updating CSSRotate.angle to ' + desc + ' throws a TypeError'); +} + +test(() => { + const result = new CSSRotate(CSS.deg(3.14)); + assert_style_value_equals(result.x, CSS.number(0)); + assert_style_value_equals(result.y, CSS.number(0)); + assert_style_value_equals(result.z, CSS.number(1)); + assert_style_value_equals(result.angle, CSS.deg(3.14)); + assert_true(result.is2D); +}, 'CSSRotate can be constructed from a single angle'); + +test(() => { + const result = new CSSRotate(-3.14, CSS.number(3.14), 3.14, CSS.deg(3.14)); + assert_style_value_equals(result.x, CSS.number(-3.14)); + assert_style_value_equals(result.y, CSS.number(3.14)); + assert_style_value_equals(result.z, CSS.number(3.14)); + assert_style_value_equals(result.angle, CSS.deg(3.14)); + assert_false(result.is2D); +}, 'CSSRotate can be constructed from numberish coordinates'); + +test(() => { + const result = new CSSRotate( + new CSSMathSum(-3.14), + new CSSMathProduct(3.14), + new CSSMathNegate(-3.14), + new CSSMathMax(CSS.deg(3.14)) + ); + assert_style_value_equals(result.x, new CSSMathSum(-3.14)); + assert_style_value_equals(result.y, new CSSMathProduct(3.14)); + assert_style_value_equals(result.z, new CSSMathNegate(-3.14)); + assert_style_value_equals(result.angle, new CSSMathMax(CSS.deg(3.14))); + assert_false(result.is2D); +}, 'CSSRotate can be constructed from CSSMathValues'); + +for (const attr of ['x', 'y', 'z']) { + test(() => { + let result = new CSSRotate(0, 0, 0, CSS.deg(0)); + result[attr] = 3.14; + assert_style_value_equals(result[attr], CSS.number(3.14)); + }, 'CSSRotate.' + attr + ' can be updated to a double'); + + test(() => { + let result = new CSSRotate(0, 0, 0, CSS.deg(0)); + result[attr] = CSS.number(3.14); + assert_style_value_equals(result[attr], CSS.number(3.14)); + }, 'CSSRotate.' + attr + ' can be updated to a number CSSUnitValue'); + + test(() => { + let result = new CSSRotate(0, 0, 0, CSS.deg(0)); + result[attr] = new CSSMathSum(3.14); + assert_style_value_equals(result[attr], new CSSMathSum(3.14)); + }, 'CSSRotate.' + attr + ' can be updated to a CSSMathValue matching <number>'); +} + +test(() => { + let rotation = new CSSRotate(CSS.deg(0)); + rotation.angle = CSS.deg(6); + assert_style_value_equals(rotation.angle, CSS.deg(6)); +}, 'CSSRotate.angle can be updated to a degree CSSUnitValue'); + +test(() => { + let rotation = new CSSRotate(CSS.deg(0)); + rotation.angle = new CSSMathSum(CSS.deg(3.14)); + assert_style_value_equals(rotation.angle, new CSSMathSum(CSS.deg(3.14))); +}, 'CSSRotate.angle can be updated to a CSSMathValue matching <angle>'); + +test(() => { + let rotation = new CSSRotate(CSS.deg(0)); + rotation.is2D = true; + assert_true(rotation.is2D); + rotation.is2D = false; + assert_false(rotation.is2D); +}, 'Modifying CSSRotate.is2D can be updated to true or false'); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssScale.tentative.html b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssScale.tentative.html new file mode 100644 index 00000000000..d52a8f1a226 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssScale.tentative.html @@ -0,0 +1,88 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSSScale tests</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#cssscale"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../resources/testhelper.js"></script> +<script> +'use strict'; + +const gInvalidCoordTestCases = [ + { coord: CSS.deg(1), desc: 'an angle CSSUnitValue'}, + { coord: new CSSMathSum(CSS.px(1)), desc: 'a CSSMathValue that doesn\'t match <number>'}, +]; + +for (const {coord, desc} of gInvalidCoordTestCases) { + test(() => { + assert_throws(new TypeError(), () => new CSSScale(coord, 0)); + assert_throws(new TypeError(), () => new CSSScale(0, coord)); + assert_throws(new TypeError(), () => new CSSScale(coord, 0, 0)); + assert_throws(new TypeError(), () => new CSSScale(0, coord, 0)); + assert_throws(new TypeError(), () => new CSSScale(0, 0, coord)); + }, 'Constructing a CSSScale with ' + desc + ' for the coordinates throws a TypeError'); +} + +for (const attr of ['x', 'y', 'z']) { + for (const {value, desc} of gInvalidCoordTestCases) { + test(() => { + let result = new CSSScale(0, 0, 0); + assert_throws(new TypeError(), () => result[attr] = value); + assert_style_value_equals(result[attr], CSS.number(0)); + }, 'Updating CSSScale.' + attr + ' to ' + desc + ' throws a TypeError'); + } +} + +test(() => { + const result = new CSSScale(-3.14, CSS.number(3.14)); + assert_style_value_equals(result.x, CSS.number(-3.14)); + assert_style_value_equals(result.y, CSS.number(3.14)); + assert_style_value_equals(result.z, CSS.number(1)); + assert_true(result.is2D); +}, 'CSSScale can be constructed from two number coordinates'); + +test(() => { + const result = new CSSScale(-3.14, CSS.number(3.14), -3.14); + assert_style_value_equals(result.x, CSS.number(-3.14)); + assert_style_value_equals(result.y, CSS.number(3.14)); + assert_style_value_equals(result.z, CSS.number(-3.14)); + assert_false(result.is2D); +}, 'CSSScale can be constructed from three number coordinates'); + +test(() => { + const result = new CSSScale(new CSSMathSum(-3.14), new CSSMathMax(3.14), new CSSMathNegate(-3.14)); + assert_style_value_equals(result.x, new CSSMathSum(-3.14)); + assert_style_value_equals(result.y, new CSSMathMax(3.14)); + assert_style_value_equals(result.z, new CSSMathNegate(-3.14)); + assert_false(result.is2D); +}, 'CSSScale can be constructed from CSSMathValue coordinates'); + +for (const attr of ['x', 'y', 'z']) { + test(() => { + let result = new CSSScale(0, 0, 0); + result[attr] = 3.14; + assert_style_value_equals(result[attr], CSS.number(3.14)); + }, 'CSSScale.' + attr + ' can be updated to a number'); + + test(() => { + let result = new CSSScale(0, 0, 0); + result[attr] = CSS.number(3.14); + assert_style_value_equals(result[attr], CSS.number(3.14)); + }, 'CSSScale.' + attr + ' can be updated to a numberish'); + + test(() => { + let result = new CSSScale(0, 0, 0); + result[attr] = new CSSMathSum(3.14); + assert_style_value_equals(result[attr], new CSSMathSum(3.14)); + }, 'CSSScale.' + attr + ' can be updated to a CSSMathValue'); +} + +test(() => { + let rotation = new CSSScale(0, 0, 0); + rotation.is2D = true; + assert_true(rotation.is2D); + rotation.is2D = false; + assert_false(rotation.is2D); +}, 'Modifying CSSScale.is2D can be updated to true or false'); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssSkew.tentative.html b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssSkew.tentative.html new file mode 100644 index 00000000000..2b22d9bcd21 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssSkew.tentative.html @@ -0,0 +1,70 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSSSkew tests</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#cssskew"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../resources/testhelper.js"></script> +<script> +'use strict'; + +const gInvalidTestCases = [ + { value: 'auto', desc: 'a keyword'}, + { value: 3.14, desc: 'a double'}, + { value: 0, desc: 'a unitless zero'}, + { value: '10deg', desc: 'a string angle'}, + { value: CSS.number(10), desc: 'a number CSSUnitValue'}, + { value: CSS.s(10), desc: 'a time dimension CSSUnitValue'}, + { value: new CSSMathSum(CSS.px(1)), desc: 'a CSSMathValue of length type' }, +]; + +for (const {value, desc} of gInvalidTestCases) { + test(() => { + assert_throws(new TypeError(), () => new CSSSkew(value, CSS.deg(0))); + assert_throws(new TypeError(), () => new CSSSkew(CSS.deg(0), value)); + }, 'Constructing a CSSSkew with ' + desc + ' throws a TypeError'); +} + +for (const attr of ['ax', 'ay']) { + for (const {value, desc} of gInvalidTestCases) { + test(() => { + let skew = new CSSSkew(CSS.deg(0), CSS.deg(0)); + assert_throws(new TypeError(), () => skew[attr] = value); + assert_style_value_equals(skew[attr], CSS.deg(0)); + }, 'Updating CSSSkew.' + attr + ' with ' + desc + ' throws a TypeError'); + } +} + +const gValidTestCases = [ + { value: CSS.deg(-3.14), desc: 'an angle CSSUnitValue' }, + { value: new CSSMathSum(CSS.deg(1)), desc: 'a CSSMathValue of angle type' }, +]; + +for (const {value: ax, desc: axDesc} of gValidTestCases) { + for (const {value: ay, desc: ayDesc} of gValidTestCases) { + test(() => { + const skew = new CSSSkew(ax, ay); + assert_equals(skew.ax, ax); + assert_equals(skew.ay, ay); + assert_true(skew.is2D); + }, 'CSSSkew can be constructed from ' + axDesc + ' and ' + ayDesc); + } +} + +for (const attr of ['ax', 'ay']) { + for (const {value, desc} of gValidTestCases) { + test(() => { + let skew = new CSSSkew(CSS.deg(0), CSS.deg(0)); + skew[attr] = value; + assert_style_value_equals(skew[attr], value); + }, 'CSSSkew.' + attr + ' can be updated to ' + desc); + } +} + +test(() => { + let skew = new CSSSkew(CSS.deg(0), CSS.deg(0)); + skew.is2D = false; + assert_true(skew.is2D); +}, 'Modifying CSSSkew.is2D is a no-op'); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssTransformValue.tentative.html b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssTransformValue.tentative.html new file mode 100644 index 00000000000..b16d7369c2c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssTransformValue.tentative.html @@ -0,0 +1,166 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSSTransformValue tests</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#transformvalue-objects"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../resources/testhelper.js"></script> +<script src="../resources/comparisons.js"></script> +<script> +'use strict'; + +const EPSILON = 1e-6; + +test(() => { + assert_throws(new TypeError(), () => new CSSTransformValue()); + assert_throws(new TypeError(), () => new CSSTransformValue([])); +}, 'Constructing a CSSTransformValue with no components throws TypeError'); + +test(() => { + const values = [ + new CSSScale(1, 1), + new CSSTranslate(CSS.px(1), CSS.px(1)), + new CSSRotate(CSS.deg(90)) + ]; + + const transform = new CSSTransformValue(values); + assert_style_value_array_equals(transform, values); +}, 'CSSTransformValue can be constructed with multiple transforms'); + +test(() => { + const transform = new CSSTransformValue([ + new CSSScale(1, 1), + new CSSTranslate(CSS.px(1), CSS.px(1), CSS.px(1)), + new CSSScale(1, 1) + ]); + assert_equals(transform.is2D, false); +}, 'CSSTransformValue.is2D is false when given mix of 2D and 3D transforms'); + +test(() => { + const transform = new CSSTransformValue([ + new CSSScale(1, 1), + new CSSTranslate(CSS.px(1), CSS.px(1)), + new CSSScale(1, 1) + ]); + assert_equals(transform.is2D, true); +}, 'CSSTransformValue.is2D is true when given only 2D transforms'); + +test(() => { + let transform = new CSSTransformValue([new CSSScale(1, 2)]); + assert_throws(new TypeError(), () => transform.is2D = false); + assert_equals(transform.is2D, true); +}, 'CSSTransformValue.is2D is readonly'); + +test(() => { + assert_throws(new TypeError(), () => new CSSTransformValue([new CSSTranslate(CSS.px(1), CSS.em(1))]).toMatrix()); + assert_throws(new TypeError(), () => new CSSTransformValue([new CSSPerspective(CSS.em(1))]).toMatrix()); +}, 'Calling CSSTransformValue.toMatrix containing relative units throws TypeError'); + +test(() => { + const transform = new CSSTransformValue([ + new CSSTranslate(CSS.px(1), CSS.px(2), CSS.px(3)) + ]); + const expectedMatrix = (new DOMMatrixReadOnly()).translate(1, 2, 3); + assert_matrix_approx_equals(transform.toMatrix(), expectedMatrix, 1e-8); +}, 'CSSTransformValue.toMatrix returns correct matrix for CSSTranslate'); + +test(() => { + const transform = new CSSTransformValue([ + new CSSRotate(CSS.number(1), CSS.number(2), CSS.number(3), CSS.deg(90)) + ]); + const expectedMatrix = (new DOMMatrixReadOnly()).rotateAxisAngle(1, 2, 3, 90); + assert_matrix_approx_equals(transform.toMatrix(), expectedMatrix, EPSILON); +}, 'CSSTransformValue.toMatrix returns correct matrix for CSSRotate'); + +test(() => { + const transform = new CSSTransformValue([ + new CSSScale(CSS.number(1), CSS.number(2), CSS.number(3)) + ]); + const expectedMatrix = (new DOMMatrixReadOnly()).scale(1, 2, 3); + assert_matrix_approx_equals(transform.toMatrix(), expectedMatrix, EPSILON); +}, 'CSSTransformValue.toMatrix returns correct matrix for CSSScale'); + +test(() => { + const alpha = 10; + const beta = 20; + const transform = new CSSTransformValue([ + new CSSSkew(CSS.rad(alpha), CSS.rad(beta)) + ]); + const expectedMatrix = new DOMMatrixReadOnly( + [1, Math.tan(beta), 0, 0, Math.tan(alpha), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]); + assert_matrix_approx_equals(transform.toMatrix(), expectedMatrix, EPSILON); +}, 'CSSTransformValue.toMatrix returns correct matrix for CSSSkew'); + +test(() => { + const length = 10; + const transform = new CSSTransformValue([ + new CSSPerspective(CSS.px(length)) + ]); + const expectedMatrix = new DOMMatrixReadOnly( + [1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, -1/length, + 0, 0, 0, 1]); + assert_matrix_approx_equals(transform.toMatrix(), expectedMatrix, EPSILON); +}, 'CSSTransformValue.toMatrix returns correct matrix for CSSPerspective'); + +test(() => { + const matrix = new DOMMatrixReadOnly( + [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]); + const transform = new CSSTransformValue([ + new CSSMatrixComponent(matrix) + ]); + assert_matrix_approx_equals(transform.toMatrix(), matrix, EPSILON); +}, 'CSSTransformValue.toMatrix returns correct matrix for CSSMatrixComponent'); + +test(() => { + const transformMatrix = new DOMMatrixReadOnly([1, 1, 1, 1, 1, 1]); + const transformArray = [ + new CSSScale(2, 2), + new CSSMatrixComponent(transformMatrix), + new CSSScale(5, 6) + ]; + + let expectedMatrix = new DOMMatrix(); + expectedMatrix.scaleSelf(2, 2); + expectedMatrix.multiplySelf(transformMatrix); + expectedMatrix.scaleSelf(5, 6); + + const transform = new CSSTransformValue(transformArray); + assert_matrix_approx_equals(transform.toMatrix(), expectedMatrix, EPSILON); +}, 'CSSTransformValue.toMatrix multiplies its component matrices'); + +test(() => { + const transformMatrix = new DOMMatrixReadOnly([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]); + let transformArray = [ + new CSSTranslate(CSS.px(1), CSS.px(1), CSS.px(1)), + new CSSRotate(1, 2, 3, CSS.deg(90)), + new CSSScale(2, 3, 2), + new CSSMatrixComponent(transformMatrix), + ]; + + transformArray.forEach(transform => transform.is2D = true); + + let expectedMatrix = new DOMMatrix(); + expectedMatrix.translateSelf(1, 1); + expectedMatrix.rotateSelf(90); + expectedMatrix.scaleSelf(2, 3); + expectedMatrix.multiplySelf(new DOMMatrixReadOnly([1, 2, 5, 6, 13, 14])); + + const transform = new CSSTransformValue(transformArray); + assert_matrix_approx_equals(transform.toMatrix(), expectedMatrix, EPSILON); +}, 'CSSTransformValue.toMatrix respects is2D changes in its components'); + +test(() => { + const transformArray = [ + new CSSScale(2, 2), + new CSSMatrixComponent(new DOMMatrixReadOnly([1, 1, 1, 1, 1, 1])), + new CSSScale(5, 6) + ]; + + const transformValue = new CSSTransformValue(transformArray); + + const newTransformArray = [...transformValue]; + assert_style_value_array_equals([...transformValue], transformArray); +}, 'Can iterate through CSSTransformValue components'); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssTranslate.tentative.html b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssTranslate.tentative.html new file mode 100644 index 00000000000..7ce281d43b6 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssTranslate.tentative.html @@ -0,0 +1,110 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSSTranslate tests</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#csstranslate"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../resources/testhelper.js"></script> +<script> +'use strict'; + +const gInvalidCoordTestCases = [ + { coord: CSS.deg(1), desc: 'a CSSUnitValue with type other than length or percent'}, + { coord: new CSSMathSum(CSS.deg(1)), desc: 'a CSSMathValue that doesn\'t match <length-percentage>'}, +]; + +for (const {coord, desc} of gInvalidCoordTestCases) { + test(() => { + assert_throws(new TypeError(), () => new CSSTranslate(coord, CSS.px(0), CSS.px(0))); + assert_throws(new TypeError(), () => new CSSTranslate(CSS.px(0), coord, CSS.px(0))); + assert_throws(new TypeError(), () => new CSSTranslate(CSS.px(0), CSS.px(0), coord)); + }, 'Constructing a CSSTranslate with ' + desc + ' for the coordinates throws a TypeError'); +} + +test(() => { + assert_throws(new TypeError(), () => new CSSTranslate(CSS.px(0), CSS.px(0), CSS.percent(0))); +}, 'Constructing a CSSTranslate with a percent for the Z coordinate throws a TypeError'); + +for (const attr of ['x', 'y', 'z']) { + for (const {value, desc} of gInvalidCoordTestCases) { + test(() => { + let result = new CSSTranslate(CSS.px(0), CSS.px(0), CSS.px(0)); + assert_throws(new TypeError(), () => result[attr] = value); + assert_style_value_equals(result[attr], CSS.px(0)); + }, 'Updating CSSTranslate.' + attr + ' to ' + desc + ' throws a TypeError'); + } +} + +test(() => { + let result = new CSSTranslate(CSS.px(0), CSS.px(0), CSS.px(0)); + assert_throws(new TypeError(), () => result.z = CSS.percent(0)); + assert_style_value_equals(result.z, CSS.px(0)); +}, 'Updating CSSTranslate.z to a percent throws a TypeError'); + +test(() => { + const result = new CSSTranslate(CSS.px(-3.14), CSS.percent(3.14)); + assert_style_value_equals(result.x, CSS.px(-3.14)); + assert_style_value_equals(result.y, CSS.percent(3.14)); + assert_style_value_equals(result.z, CSS.px(0)); + assert_true(result.is2D); +}, 'CSSTranslate can be constructed from two length or percent coordinates'); + +test(() => { + const result = new CSSTranslate(CSS.px(-3.14), CSS.percent(3.14), CSS.px(10)); + assert_style_value_equals(result.x, CSS.px(-3.14)); + assert_style_value_equals(result.y, CSS.percent(3.14)); + assert_style_value_equals(result.z, CSS.px(10)); + assert_false(result.is2D); +}, 'CSSTranslate can be constructed from three length or percent coordinates'); + +test(() => { + const result = new CSSTranslate(new CSSMathSum(CSS.px(-3.14)), new CSSMathSum(CSS.percent(3.14))); + assert_style_value_equals(result.x, new CSSMathSum(CSS.px(-3.14))); + assert_style_value_equals(result.y, new CSSMathSum(CSS.percent(3.14))); + assert_style_value_equals(result.z, CSS.px(0)); + assert_true(result.is2D); +}, 'CSSTranslate can be constructed from CSSMathValues'); + +for (const attr of ['x', 'y']) { + test(() => { + let result = new CSSTranslate(CSS.px(0), CSS.px(0), CSS.px(0)); + result[attr] = CSS.px(3.14); + assert_style_value_equals(result[attr], CSS.px(3.14)); + }, 'CSSTranslate.' + attr + ' can be updated to a length'); + + test(() => { + let result = new CSSTranslate(CSS.px(0), CSS.px(0), CSS.px(0)); + result[attr] = CSS.percent(3.14); + assert_style_value_equals(result[attr], CSS.percent(3.14)); + }, 'CSSTranslate.' + attr + ' can be updated to a percent'); + + test(() => { + let result = new CSSTranslate(CSS.px(0), CSS.px(0), CSS.px(0)); + result[attr] = new CSSMathSum(CSS.px(3.14)); + assert_style_value_equals(result[attr], new CSSMathSum(CSS.px(3.14))); + result[attr] = new CSSMathSum(CSS.percent(3.14)); + assert_style_value_equals(result[attr], new CSSMathSum(CSS.percent(3.14))); + }, 'CSSTranslate.' + attr + ' can be updated to a CSSMathValue'); +} + +test(() => { + let result = new CSSTranslate(CSS.px(0), CSS.px(0), CSS.px(0)); + result.z = CSS.px(3.14); + assert_style_value_equals(result.z, CSS.px(3.14)); +}, 'CSSTranslate.z can be updated to a length'); + +test(() => { + let result = new CSSTranslate(CSS.px(0), CSS.px(0), CSS.px(0)); + result.z = new CSSMathSum(CSS.px(3.14)); + assert_style_value_equals(result.z, new CSSMathSum(CSS.px(3.14))); +}, 'CSSTranslate.z can be updated to a CSSMathValue'); + +test(() => { + let result = new CSSTranslate(CSS.px(0), CSS.px(0)); + result.is2D = true; + assert_true(result.is2D); + result.is2D = false; + assert_false(result.is2D); +}, 'Modifying CSSTranslate.is2D can be updated to true or false'); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssUnparsedValue-interface.html b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssUnparsedValue-interface.html new file mode 100644 index 00000000000..b20d0549b39 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssUnparsedValue-interface.html @@ -0,0 +1,30 @@ +<!doctype html> +<meta charset=utf-8> +<title>CSSUnparsedValue IDL</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#cssunparsedvalue"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/WebIDLParser.js"></script> +<script src="/resources/idlharness.js"></script> +<script type="text/plain" id="idl"> +[Constructor((DOMString or CSSVariableReferenceValue)... members)] +interface CSSUnparsedValue : CSSStyleValue { + iterable<(DOMString or CSSVariableReferenceValue)>; + readonly attribute unsigned long length; + getter (DOMString or CSSVariableReferenceValue) (unsigned long index); +}; +</script> +<script> +'use strict'; +const idlArray = new IdlArray(); +idlArray.add_untested_idls('interface CSSStyleValue { stringifier; };'); +idlArray.add_untested_idls('interface CSSVariableReferenceValue : CSSStyleValue { };'); +idlArray.add_idls(document.getElementById('idl').textContent); +idlArray.add_objects({ + CSSUnparsedValue: [ + 'new CSSUnparsedValue()', + 'new CSSUnparsedValue("foo")', + ] +}); +idlArray.test(); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssUnparsedValue.html b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssUnparsedValue.html new file mode 100644 index 00000000000..3a994dd5861 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssUnparsedValue.html @@ -0,0 +1,50 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSSUnparsedValue</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#unparsedvalue-objects"> +<meta name="assert" content="Test CSSUnparsedValue constructor and members"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<body> +<div id="log"> +<script> +'use strict'; + +const gTestArguments = [ + { + description: 'no arguments', + args: [], + }, + { + description: 'an empty string', + args: [''], + }, + { + description: 'a CSSVariableReferenceValue', + args: [new CSSVariableReferenceValue('--foo')], + }, + { + description: 'mix of strings and CSSVariableReferenceValues', + args: [ + 'foo', + 'bar', + new CSSVariableReferenceValue('--A'), + 'baz', + new CSSVariableReferenceValue('--B') + ], + }, +]; + +for (const {args, description} of gTestArguments) { + test(() => { + const result = new CSSUnparsedValue(...args); + + assert_not_equals(result, null, + 'A CSSUnparsedValue should be created'); + assert_array_equals(result, args, + 'Content of CSSUnparsedValue should be same as the arguments ' + + 'passed in the constructor'); + }, 'CSSUnparsedValue can be constructed from ' + description); +} + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssUrlImageValue.tentative.html b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssUrlImageValue.tentative.html new file mode 100644 index 00000000000..0f0625b4231 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssUrlImageValue.tentative.html @@ -0,0 +1,73 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSSURLImageValue tests</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#imagevalue-objects"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../resources/testhelper.js"></script> +<body> +<script> +'use strict'; + +const gTestUrl = '../resources/1x1-green.png'; +const gBase64TestUrl = 'data:image/gif;base64,R0lGODlhAQABAAAAACwAAAAAAQABAAA='; +const gBadTestUrl = document.location.href; + +test(() => { + assert_throws(new TypeError(), () => new CSSURLImageValue("file://:This is invalid url")); +}, 'Constructing a CSSURLImageValue with an invalid URL throws a TypeError'); + +test(() => { + const result = new CSSURLImageValue(gTestUrl); + assert_equals(result.url, gTestUrl); + assert_equals(result.intrinsicWidth, null); + assert_equals(result.intrinsicHeight, null); + assert_equals(result.intrinsicRatio, null); + assert_equals(result.state, 'unloaded'); +}, 'Constructing a CSSURLImageValue with a valid URL puts it in an unloaded state'); + +test(() => { + let result = new CSSURLImageValue(gTestUrl); + assert_throws(new TypeError(), () => result.url = gBase64TestUrl); +}, 'CSSURLImageValue.url is readonly'); + +async_test(t => { + const result = new CSSURLImageValue(gTestUrl); + let image = loadImageResource(t, result); + + image.addEventListener('load', t.step_func_done(() => { + assert_equals(result.url, gTestUrl); + assert_equals(result.state, 'loaded'); + assert_equals(result.intrinsicWidth, 1); + assert_equals(result.intrinsicHeight, 1); + assert_equals(result.intrinsicRatio, 1); + })); +}, 'Loading a CSSURLImageValue from a URL sets its state to loaded'); + +async_test(t => { + const result = new CSSURLImageValue(gBase64TestUrl); + let image = loadImageResource(t, result); + + image.addEventListener('load', t.step_func_done(() => { + assert_equals(result.url, gBase64TestUrl); + assert_equals(result.state, 'loaded'); + assert_equals(result.intrinsicWidth, 1); + assert_equals(result.intrinsicHeight, 1); + assert_equals(result.intrinsicRatio, 1); + })); +}, 'Loading a CSSURLImageValue from a base64 URL sets its state to loaded'); + +async_test(t => { + const result = new CSSURLImageValue(gBadTestUrl); + let image = loadImageResource(t, result); + + image.addEventListener('error', t.step_func_done(() => { + assert_equals(result.url, gBadTestUrl); + assert_equals(result.state, 'error'); + assert_equals(result.intrinsicWidth, null); + assert_equals(result.intrinsicHeight, null); + assert_equals(result.intrinsicRatio, null); + })); +}, 'Loading a CSSURLImageValue from a URL to an invalid image sets its state to error'); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssVariableReferenceValue-interface.html b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssVariableReferenceValue-interface.html new file mode 100644 index 00000000000..15db3276fb4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssVariableReferenceValue-interface.html @@ -0,0 +1,26 @@ +<!doctype html> +<meta charset=utf-8> +<title>CSSVariableReferenceValue IDL</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#cssvariablereferencevalue"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/WebIDLParser.js"></script> +<script src="/resources/idlharness.js"></script> +<script type="text/plain" id="idl"> +[Constructor(DOMString variable, optional CSSUnparsedValue fallback)] +interface CSSVariableReferenceValue { + attribute DOMString variable; + readonly attribute CSSUnparsedValue? fallback; +}; +</script> +<script> +'use strict'; +const idlArray = new IdlArray(); +idlArray.add_idls(document.getElementById('idl').textContent); +idlArray.add_objects({ + CSSVariableReferenceValue: [ + 'new CSSVariableReferenceValue("--foo")', + ] +}); +idlArray.test(); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssVariableReferenceValue-invalid.html b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssVariableReferenceValue-invalid.html new file mode 100644 index 00000000000..c58bf76bac3 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssVariableReferenceValue-invalid.html @@ -0,0 +1,41 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSSVariableReferenceValue Error Handling</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#cssvariablereferencevalue"> +<meta name="assert" content="Test CSSVariableReferenceValue constructor and attributes error handling" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<body> +<div id="log"> +<script> +'use strict'; + +test(() => { + assert_throws(new TypeError(), () => new CSSVariableReferenceValue('')); +}, 'Constructing a CSSVariableReferenceValue with an empty variable name ' + + 'throws a TypeError'); + +test(() => { + assert_throws(new TypeError(), () => new CSSVariableReferenceValue('bar')); +}, 'Constructing a CSSVariableReferenceValue with an invalid variable name ' + + 'throws SyntaxError'); + +test(() => { + let result = new CSSVariableReferenceValue('--foo'); + assert_throws(new TypeError(), () => result.variable = ''); + + assert_equals(result.variable, '--foo', + 'Variable member should not have changed'); +}, 'Updating CSSVariableReferenceValue.variable to an empty variable name ' + + 'throws TypeError'); + +test(() => { + let result = new CSSVariableReferenceValue('--foo'); + assert_throws(new TypeError(), () => result.variable = 'bar'); + + assert_equals(result.variable, '--foo', + 'Variable member should not have changed'); +}, 'Updating CSSVariableReferenceValue.variable to an invalid variable name ' + + 'throws TypeError'); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssVariableReferenceValue.html b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssVariableReferenceValue.html new file mode 100644 index 00000000000..24082ebc71d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/cssVariableReferenceValue.html @@ -0,0 +1,45 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSSVariableReferenceValue tests</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#cssvariablereferencevalue"> +<meta name="assert" content="Test CSSVariableReferenceValue constructor and attributes" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../resources/testhelper.js"></script> +<script> +'use strict'; + +test(() => { + const result = new CSSVariableReferenceValue('--foo'); + + assert_not_equals(result, null, + 'A CSSVariableReferenceValue should be created'); + assert_equals(result.variable, '--foo', + 'Variable member should be same as passed in the constructor'); + assert_equals(result.fallback, null, + 'Fallback member should be null'); +}, 'CSSVariableReferenceValue can be constructed with no fallback'); + +test(() => { + const result = new CSSVariableReferenceValue('--foo', + new CSSUnparsedValue('lemon')); + + assert_not_equals(result, null, + 'A CSSVariableReferenceValue should be created'); + assert_equals(result.variable, '--foo', + 'Variable member should be same as passed in the constructor'); + assert_not_equals(result.fallback, null, + 'Fallback member should not be null'); + assert_style_value_equals(result.fallback, new CSSUnparsedValue('lemon'), + 'Fallback member should be as same as passed in the constructor'); +}, 'CSSVariableReferenceValue can be constructed with fallback'); + +test(() => { + let result = new CSSVariableReferenceValue('--foo'); + result.variable = '--bar'; + + assert_equals(result.variable, '--bar', + 'Variable member should be updated to new value'); +}, 'CSSVariableReferenceValue.variable can updated to a valid variable name'); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/add-two-types.tentative.html b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/add-two-types.tentative.html new file mode 100644 index 00000000000..313ff5acfdb --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/add-two-types.tentative.html @@ -0,0 +1,60 @@ +<!doctype html> +<meta charset="utf-8"> +<title>Adding Two Numeric Types</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#add-two-types"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/testhelper.js"></script> +<body> +<div id="log"> +<script> +'use strict'; + +test(() => { + const a = new CSSUnitValue(0, 'number'); + const b = new CSSUnitValue(0, 'px'); + assert_throws(new TypeError(), () => new CSSMathSum(a, b)); +}, 'Adding two types with different non-null percent hints throws TypeError'); + +test(() => { + const a = new CSSUnitValue(0, 'px'); + const b = new CSSUnitValue(0, 'px'); + const result = new CSSMathSum(a, b); + assert_numeric_type_equals(result.type(), { length: 1 }); +}, 'Adding two types with the same nonzero values returns same type'); + +test(() => { + const a = new CSSUnitValue(0, 'number'); + const b = new CSSUnitValue(0, 'number'); + const result = new CSSMathSum(a, b); + assert_numeric_type_equals(result.type(), { }); +}, 'Adding two types with empty maps with returns empty map'); + +test(() => { + const a = new CSSUnitValue(0, 'px'); + const b = new CSSUnitValue(0, 'percent'); + const result = new CSSMathSum(a, b); + assert_numeric_type_equals(result.type(), { length: 1, percentHint: 'length' }); +}, 'Adding a type with percent returns type with percent hint'); + +test(() => { + const a = new CSSMathProduct(new CSSUnitValue(0, 'px'), new CSSUnitValue(0, 'px')); + const b = new CSSUnitValue(0, 'percent'); + assert_throws(new TypeError(), () => new CSSMathSum(a, b)); +}, 'Adding a type with percent 2 returns type with percent hint throws TypeError'); + +test(() => { + const a = new CSSMathSum(new CSSUnitValue(0, 'px'), new CSSUnitValue(0, 'percent')); + const b = new CSSUnitValue(0, 'px'); + const result = new CSSMathSum(a, b); + assert_numeric_type_equals(result.type(), { length: 1, percentHint: 'length' }); +}, 'Adding a type with a percent hint returns a type with the percent hint'); + +test(() => { + const a = new CSSMathSum(new CSSUnitValue(0, 'px'), new CSSUnitValue(0, 'percent')); + const b = new CSSMathSum(new CSSUnitValue(0, 'px'), new CSSUnitValue(0, 'percent')); + const result = new CSSMathSum(a, b); + assert_numeric_type_equals(result.type(), { length: 1, percentHint: 'length' }); +}, 'Adding two types with the same percent hint returns a type with the percent hint'); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/arithmetic.tentative.html b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/arithmetic.tentative.html new file mode 100644 index 00000000000..4ba27517976 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/arithmetic.tentative.html @@ -0,0 +1,147 @@ +<!doctype html> +<meta charset="utf-8"> +<title>Arithmetic operations on CSSNumericValue tests</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-cssnumericvalue-add"> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-cssnumericvalue-sub"> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-cssnumericvalue-mul"> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-cssnumericvalue-div"> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-cssnumericvalue-min"> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-cssnumericvalue-max"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../../resources/testhelper.js"></script> +<script> +'use strict'; + +const gArithmeticOps = [ + { methodName: 'add', mathType: CSSMathSum }, + { methodName: 'sub', mathType: CSSMathSum }, + { methodName: 'mul', mathType: CSSMathProduct }, + { methodName: 'div', mathType: CSSMathProduct }, + { methodName: 'min', mathType: CSSMathMin }, + { methodName: 'max', mathType: CSSMathMax }, +]; + +for (const {methodName, mathType} of gArithmeticOps) { + test(() => { + const result = CSS.number(1)[methodName](); + assert_style_value_equals(result, CSS.number(1)); + }, 'Calling CSSUnitValue.' + methodName + ' with no arguments returns itself'); + + test(() => { + // Use an arithmetic expression that can't be simplified to a CSSUnitValue + const mathValue = new mathType(CSS.px(1), CSS.percent(1)); + const result = mathValue[methodName](); + assert_style_value_equals(result, mathValue); + }, 'Calling CSSMathValue.' + methodName + ' with no arguments returns itself'); + + test(() => { + const result = CSS.px(1)[methodName](CSS.percent(1)); + assert_equals(result.constructor.name, mathType.name); + }, 'Calling CSSNumericValue.' + methodName + ' with a single CSSNumericValue returns correct type'); + + test(() => { + const result = new mathType(CSS.px(1))[methodName](CSS.percent(1)); + assert_equals(result.constructor.name, mathType.name); + }, 'Calling CSSMathValue.' + methodName + ' with a single CSSNumericValue returns correct type'); + + test(() => { + const result = CSS.percent(1)[methodName](CSS.px(1), CSS.px(2), CSS.px(3)); + assert_equals(result.constructor.name, mathType.name); + }, 'Calling CSSNumericValue.' + methodName + ' with more than one number CSSNumericValues returns correct type'); + + test(() => { + const result = CSS.number(1)[methodName](1, CSS.number(2), 3); + assert_equals(result.constructor.name, CSSUnitValue.name); + }, 'Calling CSSNumericValue.' + methodName + ' can take numberish values'); + + test(() => { + const result = new mathType(CSS.number(1))[methodName](CSS.number(2), CSS.number(3)); + assert_equals(result.constructor.name, CSSUnitValue.name); + assert_equals(result.unit, 'number'); + }, 'Calling ' + mathType.name + '.' + methodName + ' with number CSSUnitValues simplifies to a CSSUnitValue'); + + test(() => { + assert_throws(new TypeError(), () => new CSS.px(0)[methodName](CSS.px(1), CSS.s(2))); + }, 'Calling CSSNumericValue.' + methodName + ' with incompatible types throws TypeError'); +} + +test(() => { + const result = CSS.px(10).add(CSS.px(5), CSS.px(2)); + assert_equals(result.constructor.name, CSSUnitValue.name); + assert_equals(result.value, 17); + assert_equals(result.unit, 'px'); +}, 'Calling CSSUnitValue.add with CSSUnitValues with same unit simplifies to a CSSUnitValue'); + +test(() => { + const result = CSS.px(10).sub(CSS.px(5), CSS.px(2)); + assert_equals(result.constructor.name, CSSUnitValue.name); + assert_equals(result.value, 3); + assert_equals(result.unit, 'px'); +}, 'Calling CSSUnitValue.sub with CSSUnitValues with same unit simplifies to a CSSUnitValue'); + +test(() => { + const result = CSS.number(10).mul(CSS.number(5), CSS.number(2)); + assert_equals(result.constructor.name, CSSUnitValue.name); + assert_equals(result.value, 100); + assert_equals(result.unit, 'number'); +}, 'Calling CSSUnitValue.mul with all numbers simplifies to a CSSUnitValue'); + +test(() => { + const result = CSS.number(10).mul(CSS.px(5), CSS.number(2)); + assert_equals(result.constructor.name, CSSUnitValue.name); + assert_equals(result.value, 100); + assert_equals(result.unit, 'px'); +}, 'Calling CSSUnitValue.mul with only one non-number simplifies to a CSSUnitValue'); + +test(() => { + const result = CSS.number(10).mul(CSS.px(5), CSS.px(2)); + assert_equals(result.constructor.name, CSSMathProduct.name); +}, 'Calling CSSUnitValue.mul with more than one non-number does not simplify to a CSSUnitValue'); + +test(() => { + const result = CSS.number(10).div(CSS.number(5), CSS.number(2)); + assert_equals(result.constructor.name, CSSUnitValue.name); + assert_equals(result.value, 1); + assert_equals(result.unit, 'number'); +}, 'Calling CSSUnitValue.div with all numbers simplifies to a CSSUnitValue'); + +test(() => { + const result = CSS.px(10).div(CSS.number(5), CSS.number(2)); + assert_equals(result.constructor.name, CSSUnitValue.name); + assert_equals(result.value, 1); + assert_equals(result.unit, 'px'); +}, 'Calling CSSUnitValue.div on a non-number value simplifies to a CSSUnitValue'); + +test(() => { + const result = CSS.number(10).div(CSS.px(5), CSS.number(2)); + assert_equals(result.constructor.name, CSSMathProduct.name); +}, 'Calling CSSUnitValue.div with a non-number value in the arguments does not simplify to a CSSUnitValue'); + +test(() => { + const result = CSS.px(10).min(CSS.px(5), CSS.px(2)); + assert_equals(result.constructor.name, CSSUnitValue.name); + assert_equals(result.value, 2); + assert_equals(result.unit, 'px'); +}, 'Calling CSSUnitValue.min with CSSUnitValues with same unit simplifies to a CSSUnitValue'); + +test(() => { + const result = CSS.px(10).max(CSS.px(5), CSS.px(2)); + assert_equals(result.constructor.name, CSSUnitValue.name); + assert_equals(result.value, 10); + assert_equals(result.unit, 'px'); +}, 'Calling CSSUnitValue.max with CSSUnitValues with same unit simplifies to a CSSUnitValue'); + +test(() => { + const result = CSS.number(1).sub(CSS.number(1), new CSSMathNegate(1), new CSSMathSum(1)); + assert_style_value_equals(result, + new CSSMathSum(CSS.number(1), CSS.number(-1), CSS.number(1), new CSSMathNegate(new CSSMathSum(1)))); +}, 'Calling CSSNumericValue.sub negates all argument values'); + +test(() => { + const result = CSS.number(2).div(CSS.number(2), CSS.px(2), new CSSMathInvert(2), new CSSMathSum(2)); + assert_style_value_equals(result, + new CSSMathProduct(CSS.number(2), CSS.number(0.5), new CSSMathInvert(CSS.px(2)), CSS.number(2), new CSSMathInvert(new CSSMathSum(2)))); +}, 'Calling CSSNumericValue.div inverts all argument values'); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/create-a-type.tentative.html b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/create-a-type.tentative.html new file mode 100644 index 00000000000..bad9eba8afa --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/create-a-type.tentative.html @@ -0,0 +1,51 @@ +<!doctype html> +<meta charset="utf-8"> +<title>Creating Type From A Unit</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#create-a-type"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/testhelper.js"></script> +<script> +'use strict'; + +test(() => { + const value = new CSSUnitValue(0, 'number'); + assert_numeric_type_equals(value.type(), {}); +}, 'Creating a type from "number" returns {}'); + +test(() => { + const value = new CSSUnitValue(0, 'percent'); + assert_numeric_type_equals(value.type(), { percent: 1 }); +}, 'Creating a type from "percent" returns { percent: 1 }'); + +test(() => { + const value = new CSSUnitValue(0, 'px'); + assert_numeric_type_equals(value.type(), { length: 1 }); +}, 'Creating a type from <length> returns { length: 1 }'); + +test(() => { + const value = new CSSUnitValue(0, 'deg'); + assert_numeric_type_equals(value.type(), { angle: 1 }); +}, 'Creating a type from <angle> returns { angle: 1 }'); + +test(() => { + const value = new CSSUnitValue(0, 's'); + assert_numeric_type_equals(value.type(), { time: 1 }); +}, 'Creating a type from <time> returns { time: 1 }'); + +test(() => { + const value = new CSSUnitValue(0, 'Hz'); + assert_numeric_type_equals(value.type(), { frequency: 1 }); +}, 'Creating a type from <frequency> returns { frequency: 1 }'); + +test(() => { + const value = new CSSUnitValue(0, 'dpi'); + assert_numeric_type_equals(value.type(), { resolution: 1 }); +}, 'Creating a type from <resolution> returns { resolution: 1 }'); + +test(() => { + const value = new CSSUnitValue(0, 'fr'); + assert_numeric_type_equals(value.type(), { flex: 1 }); +}, 'Creating a type from <flex> returns { flex: 1 }'); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/cssMathInvert-type.html b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/cssMathInvert-type.html new file mode 100644 index 00000000000..61814e34e10 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/cssMathInvert-type.html @@ -0,0 +1,30 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSSMathInvert.type</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#type-of-a-cssmathvalue"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/testhelper.js"></script> +<body> +<div id="log"> +<script> +'use strict'; + +test(() => { + const result = new CSSMathInvert(new CSSUnitValue(0, 'number')); + assert_numeric_type_equals(result.type(), { }); +}, 'Inverting a type with empty map returns the empty map'); + +test(() => { + const x = new CSSMathProduct(new CSSUnitValue(0, 'px'), new CSSUnitValue(0, 's')); + const result = new CSSMathInvert(x); + assert_numeric_type_equals(result.type(), { length: -1, time: -1 }); +}, 'Inverting a type negates all its exponents'); + +test(() => { + const x = new CSSUnitValue(0, 'px'); + const result = new CSSMathInvert(new CSSMathInvert(x)); + assert_numeric_type_equals(result.type(), { length: 1 }); +}, 'Inverting an inverted type returns the original type'); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/cssMathNegate-type.html b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/cssMathNegate-type.html new file mode 100644 index 00000000000..f1fc73d1408 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/cssMathNegate-type.html @@ -0,0 +1,23 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSSMathNegate.type</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#type-of-a-cssmathvalue"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/testhelper.js"></script> +<body> +<div id="log"> +<script> +'use strict'; + +test(() => { + const result = new CSSMathNegate(new CSSUnitValue(0, 'number')); + assert_numeric_type_equals(result.type(), { }); +}, 'Negating a type with empty map returns the empty map'); + +test(() => { + const result = new CSSMathNegate(new CSSUnitValue(0, 'px')); + assert_numeric_type_equals(result.type(), { length: 1 }); +}, 'Negating a type returns the same type'); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/cssMathValue.tentative.html b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/cssMathValue.tentative.html new file mode 100644 index 00000000000..574043e84d8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/cssMathValue.tentative.html @@ -0,0 +1,64 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSSMathValue subclass tests</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#complex-numeric"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../../resources/testhelper.js"></script> +<script> +'use strict'; + +const gVariadicMathValueSubclasses = [ + { subclass: CSSMathSum, operator: 'sum' }, + { subclass: CSSMathProduct, operator: 'product' }, + { subclass: CSSMathMin, operator: 'min' }, + { subclass: CSSMathMax, operator: 'max' }, +]; + +for (const {subclass, operator} of gVariadicMathValueSubclasses) { + test(() => { + assert_throws(new SyntaxError(), () => new subclass()); + }, 'Constructing a ' + subclass.name + ' with no arguments throws a SyntaxError'); + + test(() => { + const result = new subclass(CSS.number(0)); + assert_equals(result.operator, operator); + assert_style_value_array_equals(result.values, [CSS.number(0)]); + }, subclass.name + ' can be constructed from a single number CSSUnitValue'); + + test(() => { + const args = [CSS.number(1), CSS.number(2), CSS.number(3), CSS.number(4), CSS.number(5)] + const result = new subclass(...args); + assert_equals(result.operator, operator); + assert_style_value_array_equals(result.values, args); + }, subclass.name + ' can be constructed from more than one number CSSUnitValue'); + + test(() => { + let result = new subclass(CSS.number(1), CSS.number(2)); + assert_throws(new TypeError(), () => result.operator = 'foo'); + }, subclass.name + '.operator is readonly'); +} + +const gUnaryMathValueSubclasses = [ + { subclass: CSSMathNegate, operator: 'negate' }, + { subclass: CSSMathInvert, operator: 'invert' }, +] + +for (const {subclass, operator} of gUnaryMathValueSubclasses) { + test(() => { + const result1 = new subclass(CSS.number(0)); + assert_equals(result1.operator, operator); + assert_style_value_equals(result1.value, CSS.number(0)); + + const result2 = new subclass(0); + assert_equals(result2.operator, operator); + assert_style_value_equals(result2.value, CSS.number(0)); + }, subclass.name + ' can be constructed from a single numberish value'); + + test(() => { + let result = new subclass(CSS.number(1)); + assert_throws(new TypeError(), () => result.operator = 'foo'); + }, subclass.name + '.operator is readonly'); +} + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/cssUnitValue.tentative.html b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/cssUnitValue.tentative.html new file mode 100644 index 00000000000..9e7401293e3 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/cssUnitValue.tentative.html @@ -0,0 +1,44 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSSUnitValue tests</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#simple-numeric"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../../resources/testhelper.js"></script> +<script> +'use strict'; + +const gInvalidTestUnits = [ + { value: '', desc: 'an empty string' }, + { value: 'lemon', desc: 'an invalid unit' }, +]; + +for (const {unit, desc} of gInvalidTestUnits) { + test(() => { + assert_throws(new TypeError(), () => new CSSUnitValue(0, unit)); + }, 'Constructing CSSUnitValue with ' + desc + ' as the unit throws a TypeError'); +} + +for (const {unit, desc} of gInvalidTestUnits) { + test(() => { + let result = new CSSUnitValue(0, 'px'); + assert_throws(new TypeError(), () => result.unit = unit); + assert_equals(result.unit, 'px'); + }, 'Updating CSSUnitValue.unit with ' + desc + ' throws a TypeError'); +} + +for (const unit of gValidUnits) { + test(() => { + const result = new CSSUnitValue(-3.14, unit); + assert_equals(result.value, -3.14); + assert_equals(result.unit, unit.toLowerCase()); + }, 'CSSUnitValue can be constructed with ' + unit); + + test(() => { + let result = new CSSUnitValue(-3.14, 'px'); + result.unit = unit + assert_equals(result.unit, unit.toLowerCase()); + }, 'CSSUnitValue.unit can be updated to ' + unit); +} + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/cssnumericvalue-multiply-two-types.tentative.html b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/cssnumericvalue-multiply-two-types.tentative.html new file mode 100644 index 00000000000..38045ee0fe5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/cssnumericvalue-multiply-two-types.tentative.html @@ -0,0 +1,61 @@ +<!doctype html> +<meta charset="utf-8"> +<title>Multiplying Two Numeric Types</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#cssnumericvalue-multiply-two-types"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/testhelper.js"></script> +<body> +<div id="log"> +<script> +'use strict'; + +test(() => { + const a = new CSSMathSum(new CSSUnitValue(0, 'px'), new CSSUnitValue(0, 'percent')); + const b = new CSSMathSum(new CSSUnitValue(0, 's'), new CSSUnitValue(0, 'percent')); + assert_throws(new TypeError(), () => new CSSMathProduct(a, b)); +}, 'Multiplying two types with different non-null percent hints throws TypeError'); + +test(() => { + const a = new CSSUnitValue(0, 'px'); + const b = new CSSUnitValue(0, 'px'); + const result = new CSSMathProduct(a, b); + assert_numeric_type_equals(result.type(), { length: 2 }); +}, 'Multiplying two types with same base types adds exponents'); + +test(() => { + const a = new CSSUnitValue(0, 'px'); + const b = new CSSUnitValue(0, 's'); + const result = new CSSMathProduct(a, b); + assert_numeric_type_equals(result.type(), { length: 1, time: 1 }); +}, 'Multiplying two types with different base types adds exponents'); + +test(() => { + const a = new CSSUnitValue(0, 'px'); + const b = new CSSMathInvert(new CSSUnitValue(0, 's')); + const result = new CSSMathProduct(a, b); + assert_numeric_type_equals(result.type(), { length: 1, time: -1 }); +}, 'Multiplying two types respects the sign of the exponents'); + +test(() => { + const a = new CSSUnitValue(0, 'px'); + const b = new CSSUnitValue(0, 'number'); + const result = new CSSMathProduct(a, b); + assert_numeric_type_equals(result.type(), { length: 1 }); +}, 'Multiplying a type with no exponents is a no-op'); + +test(() => { + const a = new CSSMathSum(new CSSUnitValue(0, 'px'), new CSSUnitValue(0, 'percent')); + const b = new CSSUnitValue(0, 'px'); + const result = new CSSMathProduct(a, b); + assert_numeric_type_equals(result.type(), { length: 2, percentHint: 'length' }); +}, 'Multiplying a type with percent hint applies the percent hint'); + +test(() => { + const a = new CSSMathSum(new CSSUnitValue(0, 'px'), new CSSUnitValue(0, 'percent')); + const b = new CSSMathSum(new CSSUnitValue(0, 'px'), new CSSUnitValue(0, 'percent')); + const result = new CSSMathProduct(a, b); + assert_numeric_type_equals(result.type(), { length: 2, percentHint: 'length' }); +}, 'Multiplying two types with same percent hint applies the percent hint'); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/equals.tentative.html b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/equals.tentative.html new file mode 100644 index 00000000000..180d3deaf4a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/equals.tentative.html @@ -0,0 +1,62 @@ +<meta charset="utf-8"> +<title>CSSNumericValue.equals tests</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-cssnumericvalue-equals"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../../resources/testhelper.js"></script> +<script> +'use strict'; + +test(() => { + assert_true(CSS.px(1).equals(CSS.px(1))); +}, 'Two CSSUnitValues with same value and unit are equal'); + +test(() => { + assert_false(CSS.px(0).equals(CSS.px(1))); +}, 'Two CSSUnitValues with different values are not equal'); + +test(() => { + assert_false(CSS.px(1).equals(CSS.number(1))); +}, 'Two CSSUnitValues with different units are not equal'); + +test(() => { + const a = new CSSMathSum(0, new CSSMathNegate(0)); + const b = new CSSMathProduct(0, new CSSMathNegate(0)); + assert_false(a.equals(b)); +}, 'Two CSSMathValues with different types are not equal'); + +test(() => { + const a = new CSSMathSum(0, new CSSMathNegate(0)); + const b = new CSSMathSum(0); + assert_false(a.equals(b)); +}, 'Two CSSMathValues with different number of values are not equal'); + +test(() => { + const a = new CSSMathSum(0, new CSSMathNegate(0)); + const b = new CSSMathSum(0, new CSSMathNegate(1)); + assert_false(a.equals(b)); +}, 'Two CSSMathValues with different values are not equal'); + +test(() => { + const a = new CSSMathSum(0, new CSSMathNegate(0)); + const b = new CSSMathSum(0, new CSSMathNegate(0)); + assert_true(a.equals(b)); +}, 'Two CSSMathValues with same structure are equal'); + +test(() => { + const a = new CSSMathSum(0, new CSSMathNegate(0)); + const b = new CSSMathSum(0, new CSSMathNegate(0)); + const c = new CSSMathSum(0, new CSSMathNegate(0)); + const d = new CSSMathSum(0, new CSSMathNegate(0)); + assert_true(a.equals(b, c, d)); +}, 'Multiple CSSMathValues with same structure are equal'); + +test(() => { + const a = new CSSMathSum(0, new CSSMathNegate(0)); + const b = new CSSMathSum(0, new CSSMathNegate(0)); + const c = new CSSMathSum(0, new CSSMathNegate(1)); + const d = new CSSMathSum(0, new CSSMathNegate(0)); + assert_false(a.equals(b, c, d)); +}, 'Multiple CSSMathValues with one different are not equal'); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/numeric-factory.tentative.html b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/numeric-factory.tentative.html new file mode 100644 index 00000000000..51b282b6ea2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/numeric-factory.tentative.html @@ -0,0 +1,21 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS numeric factory function tests</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#numeric-factory"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../../resources/testhelper.js"></script> +<script> +'use strict'; + +for (const unit of gValidUnits) { + test(() => { + const result = CSS[unit](12.3); + assert_not_equals(result, null); + assert_equals(result.constructor.name, CSSUnitValue.name); + assert_equals(result.value, 12.3); + assert_equals(result.unit, unit.toLowerCase()); + }, 'CSS.' + unit + ' returns a CSSUnitValue with correct value and unit'); +} + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/parse.tentative.html b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/parse.tentative.html new file mode 100644 index 00000000000..6b623c22c77 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/parse.tentative.html @@ -0,0 +1,26 @@ +<meta charset="utf-8"> +<title>CSSNumericValue.parse tests</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-cssnumericvalue-parse"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../../resources/testhelper.js"></script> +<script> +'use strict'; + +test(() => { + assert_throws(new SyntaxError(), () => CSSNumericValue.parse('%#(')); +}, 'Parsing an invalid string throws SyntaxError'); + +test(() => { + assert_throws(new SyntaxError(), () => CSSNumericValue.parse('auto')); +}, 'Parsing a string with a non numeric token throws SyntaxError'); + +test(() => { + assert_throws(new SyntaxError(), () => CSSNumericValue.parse('1 2')); +}, 'Parsing a string with left over numeric tokens throws SyntaxError'); + +test(() => { + assert_throws(new SyntaxError(), () => CSSNumericValue.parse('calc(calc(1px * 2s) + 3%)')); +}, 'Parsing a calc with incompatible units throws a SyntaxError'); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/resources/testhelper.js b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/resources/testhelper.js new file mode 100644 index 00000000000..42f2c6616df --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/resources/testhelper.js @@ -0,0 +1,9 @@ +function assert_numeric_type_equals(type, expectedType) { + const baseTypes = [ + 'length', 'angle', 'time', 'frequency', 'resolution', 'flex', 'percent' + ]; + for (const baseType of baseTypes) { + assert_equals(type[baseType], expectedType[baseType], baseType); + } + assert_equals(type.percentHint, expectedType.percentHint); +} diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/to.tentative.html b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/to.tentative.html new file mode 100644 index 00000000000..57ac63118c4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/to.tentative.html @@ -0,0 +1,101 @@ +<meta charset="utf-8"> +<title>CSSNumericValue.to tests</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-cssnumericvalue-to"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../../resources/testhelper.js"></script> +<script> +'use strict'; + +test(() => { + assert_throws(new SyntaxError(), () => CSS.px(1).to('lemon')); +}, 'Converting a CSSUnitValue to an invalid unit throws SyntaxError'); + +test(() => { + assert_throws(new TypeError(), () => new CSSMathMax(1, CSS.px(1)).to('number')); +}, 'Converting a CSSNumericValue with invalid sum value throws TypeError'); + +test(() => { + assert_throws(new TypeError(), () => new CSSMathProduct(CSS.px(1), CSS.s(1)).to('number')); +}, 'Converting a CSSNumericValue with sum value containing more than one value throws TypeError'); + +test(() => { + assert_throws(new TypeError(), () => CSS.px(1).to('number')); +}, 'Converting a CSSUnitValue to an incompatible unit throws TypeError'); + +test(() => { + for (const unit of gValidUnits) { + // FIXME(778495): Remove this check onec all the units are supported. + if (CSS[unit]) + assert_style_value_equals(CSS[unit](1).to(unit), CSS[unit](1)); + } +}, 'Converting a CSSUnitValue to its own unit returns itself'); + +// TODO(776173): cssUnitValue_toMethod.html has more comprehensive tests of converting +// within the same base type. Merge those tests into here. +test(() => { + assert_style_value_equals(CSS.cm(1).to('px'), CSS.px(37.7952755)); +}, 'Converting a CSSUnitValue to its canonical unit returns correct value'); + +test(() => { + assert_style_value_equals(new CSSMathSum(CSS.px(1), CSS.px(1)).to('px'), CSS.px(2)); + assert_style_value_equals(new CSSMathSum(CSS.px(1), CSS.px(1), CSS.px(1)).to('px'), CSS.px(3)); +}, 'Converting a CSSMathSum to a single unit adds the values'); + +test(() => { + assert_style_value_equals(new CSSMathProduct(CSS.px(2), 3).to('px'), CSS.px(6)); + assert_style_value_equals(new CSSMathProduct(-1, CSS.px(2), 3).to('px'), CSS.px(-6)); +}, 'Converting a CSSMathProduct to a single unit multiplies the values'); + +test(() => { + assert_style_value_equals(new CSSMathMin(CSS.cm(1), CSS.mm(1)).to('mm'), CSS.mm(1)); +}, 'Converting a CSSMathMin to a single unit finds the min value'); + +test(() => { + assert_throws(new TypeError(), () => new CSSMathMin(CSS.px(2), CSS.s(3)).to('px')); + assert_throws(new TypeError(), () => new CSSMathMin(CSS.px(2), 3).to('px')); +}, 'Converting a CSSMathMin to a single unit with different units throws a TypeError'); + +test(() => { + assert_style_value_equals(new CSSMathMax(CSS.cm(1), CSS.mm(1)).to('mm'), CSS.mm(10)); +}, 'Converting a CSSMathMax to a single unit finds the max value'); + +test(() => { + assert_throws(new TypeError(), () => new CSSMathMax(CSS.px(2), CSS.s(3)).to('px')); + assert_throws(new TypeError(), () => new CSSMathMax(CSS.px(2), 3).to('px')); +}, 'Converting a CSSMathMax to a single unit with different units throws a TypeError'); + +test(() => { + assert_style_value_equals(new CSSMathNegate(CSS.px(1)).to('px'), CSS.px(-1)); +}, 'Converting a CSSMathNegate to a single unit negates its value'); + +test(() => { + const expr = new CSSMathProduct(CSS.px(4), new CSSMathInvert(CSS.px(2))); + assert_style_value_equals(expr.to('number'), CSS.number(2)); +}, 'Converting a CSSMathInvert to a single unit inverts its value and units'); + +test(() => { + // max((1s * 1s * 1px * 1px) / (1s * 1px), 2000ms * 2em) / 1em - min(500ms, 1s) + const expr = new CSSMathSum( + new CSSMathProduct( + new CSSMathMax( + new CSSMathProduct( + new CSSMathProduct(CSS.s(1), CSS.s(1), CSS.px(1), CSS.px(1)), + new CSSMathInvert(new CSSMathProduct(CSS.s(1), CSS.px(1))), + ), + new CSSMathProduct(CSS.ms(2000), CSS.cm(2)) + ), + new CSSMathInvert(CSS.cm(1)) + ), + new CSSMathNegate( + new CSSMathMin( + CSS.ms(500), + CSS.s(1) + ) + ) + ); + + assert_style_value_equals(expr.to('ms'), CSS.ms(3500)); +}, 'Converting a complex expression to a single unit'); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/toSum.tentative.html b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/toSum.tentative.html new file mode 100644 index 00000000000..3d67f7d88bc --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/stylevalue-subclasses/numeric-objects/toSum.tentative.html @@ -0,0 +1,71 @@ +<meta charset="utf-8"> +<title>CSSNumericValue.toSum tests</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-cssnumericvalue-tosum"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../../resources/testhelper.js"></script> +<script> +'use strict'; + +test(() => { + assert_throws(new SyntaxError(), () => CSS.px(1).toSum('px', 'lemon')); +}, 'Converting a CSSNumericValue to a sum with invalid units throws SyntaxError'); + +test(() => { + assert_throws(new TypeError(), () => new CSSMathMax(1, CSS.px(1)).toSum('number')); +}, 'Converting a CSSNumericValue with an invalid sum value to a sum throws TypeError'); + +test(() => { + assert_throws(new TypeError(), () => new CSSMathProduct(CSS.px(1), CSS.px(1)).to('px')); +}, 'Converting a CSSNumericValue with compound units to a sum throws TypeError'); + +test(() => { + assert_throws(new TypeError(), () => CSS.px(1).toSum('number')); +}, 'Converting a CSSNumericValue to a sum with an incompatible unit throws TypeError'); + +test(() => { + assert_throws(new TypeError(), () => CSS.px(1).toSum('px', 's')); +}, 'Converting a CSSNumericValue to a sum with units that are not addable throws TypeError'); + +test(() => { + assert_throws(new TypeError(), () => new CSSMathSum(CSS.px(1), CSS.em(1)).toSum('px')); +}, 'Converting a CSSNumericValue with leftover units to a sum throws TypeError'); + +test(() => { + assert_style_value_equals(CSS.number(1).toSum('number'), new CSSMathSum(CSS.number(1))); + assert_style_value_equals(CSS.px(1).toSum('px'), new CSSMathSum(CSS.px(1))); +}, 'Converting CSSNumericValue to a sum with its own unit returns itself'); + +test(() => { + assert_style_value_equals( + new CSSMathSum(CSS.px(1), CSS.em(1), CSS.vw(1), CSS.rem(1)).toSum(), + new CSSMathSum(CSS.em(1), CSS.px(1), CSS.rem(1), CSS.vw(1)) + ); +}, 'Converting CSSNumericValue to a sum with no arguments returns all the units in sorted order'); + +// TODO(776173): cssUnitValue_toMethod.html has more comprehensive tests of converting +// within the same base type. Merge those tests into here. +test(() => { + assert_style_value_equals(CSS.cm(2).toSum('mm'), new CSSMathSum(CSS.mm(20))); +}, 'Converting CSSNumericValue to a sum with a relative unit converts correctly'); + +test(() => { + assert_style_value_equals( + CSS.px(1).toSum('em', 'px', 'vw'), + new CSSMathSum(CSS.em(0), CSS.px(1), CSS.vw(0)) + ); +}, 'Converting CSSNumericValue to a sum containing extra units returns zero for those units'); + +test(() => { + assert_style_value_equals( + new CSSMathSum(CSS.cm(1), CSS.mm(10)).toSum('cm', 'mm'), + new CSSMathSum(CSS.cm(2), CSS.mm(0)) + ); + + assert_style_value_equals( + new CSSMathSum(CSS.cm(1), CSS.mm(10)).toSum('mm', 'cm'), + new CSSMathSum(CSS.mm(20), CSS.cm(0)) + ); +}, 'CSSNumericValue.toSum converts greedily'); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/computed/get-invalid.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/computed/get-invalid.html new file mode 100644 index 00000000000..8117d18b764 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/computed/get-invalid.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset="utf-8"> +<title>Computed StylePropertyMap.get Error Handling</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#get-a-value-from-a-stylepropertymap"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../../resources/testhelper.js"></script> +<body> +<div id="log"> +<script> +'use strict'; + +test(t => { + const styleMap = createComputedStyleMap(t); + assert_throws(new TypeError(), () => styleMap.get('lemon')); +}, 'Calling StylePropertyMap.get with an unsupported property throws a TypeError'); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/computed/get.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/computed/get.html new file mode 100644 index 00000000000..c11ca73e546 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/computed/get.html @@ -0,0 +1,51 @@ +<!doctype html> +<meta charset="utf-8"> +<title>Computed StylePropertyMap.get</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#get-a-value-from-a-stylepropertymap"> +<meta name="assert" content="Test computed StylePropertyMap.get" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../../resources/testhelper.js"></script> +<body> +<div id="log"> +<script> +'use strict'; + +test(t => { + const styleMap = createComputedStyleMap(t, '--foo: auto'); + assert_equals(styleMap.get('--Foo'), null); +}, 'Getting a custom property not in the computed style returns null'); + +test(t => { + const styleMap = createComputedStyleMap(t, 'width: 10px; height: 20px'); + assert_style_value_equals(styleMap.get('width'), new CSSUnitValue(10, 'px')); +}, 'Getting a valid property from computed style returns the correct entry'); + +test(t => { + const styleMap = createComputedStyleMap(t, '--foo: auto; --bar: 10px'); + assert_style_value_equals(styleMap.get('--foo'), + new CSSUnparsedValue(' auto')); +}, 'Getting a valid custom property from computed style returns the ' + + 'correct entry'); + +test(t => { + const styleMap = createComputedStyleMap(t, + 'width: 10px; transition-duration: 1s, 2s; height: 10px;'); + assert_style_value_equals(styleMap.get('transition-duration'), + new CSSUnitValue(1, 's')); +}, 'Getting a list-valued property from computed style returns only ' + + 'the first value'); + +test(t => { + const styleMap = createComputedStyleMap(t, 'height: 20px; width: 10px;'); + assert_style_value_equals(styleMap.get('wIdTh'), new CSSUnitValue(10, 'px')); +}, 'Computed StylePropertyMap.get is not case-sensitive'); + +test(t => { + const [elem, styleMap] = createElementWithComputedStyleMap(t, 'width: 10px;'); + assert_style_value_equals(styleMap.get('width'), new CSSUnitValue(10, 'px')); + elem.style.width = '20px'; + assert_style_value_equals(styleMap.get('width'), new CSSUnitValue(20, 'px')); +}, 'Computed StylePropertyMap.get reflects updates in inline style'); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/computed/get.tentative.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/computed/get.tentative.html deleted file mode 100644 index 98a519ad827..00000000000 --- a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/computed/get.tentative.html +++ /dev/null @@ -1,42 +0,0 @@ -<!doctype html> -<meta charset="utf-8"> -<title>StylePropertyMap.get tests</title> -<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#get-a-value-from-a-stylepropertymap"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="../../resources/testhelper.js"></script> -<body> -<script> -'use strict'; - -test(t => { - const styleMap = createComputedStyleMap(t); - assert_throws(new TypeError(), () => styleMap.get('lemon')); -}, 'Calling StylePropertyMap.get with an unsupported property throws a TypeError'); - -test(t => { - const styleMap = createComputedStyleMap(t, '--foo: auto'); - assert_equals(styleMap.get('--Foo'), null); -}, 'Calling StylePropertyMap.get with a custom property not in the property model returns null'); - -test(t => { - const styleMap = createComputedStyleMap(t, 'width: 10px; height: 20px'); - assert_style_value_equals(styleMap.get('width'), CSS.px(10)); -}, 'Calling StylePropertyMap.get with a valid property returns the correct entry'); - -test(t => { - const styleMap = createComputedStyleMap(t, 'height: 20px; width: 10px;'); - assert_style_value_equals(styleMap.get('wIdTh'), CSS.px(10)); -}, 'StylePropertyMap.get with a valid property in mixed case returns the correct entry'); - -test(t => { - const styleMap = createComputedStyleMap(t, '--foo: auto; --bar: 10px'); - assert_style_value_equals(styleMap.get('--foo'), new CSSUnparsedValue(' auto')); -}, 'Calling StylePropertyMap.get with a valid custom property returns the correct entry'); - -test(t => { - const styleMap = createComputedStyleMap(t, 'width: 10px; transition-duration: 1s, 2s; height: 10px;'); - assert_style_value_equals(styleMap.get('transition-duration'), CSS.s(1)); -}, 'Calling StylePropertyMap.get with a list-valued property returns only the first value'); - -</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/declared/declared.tentative.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/declared/declared.tentative.html index 96c1e3e8ff6..355a5093983 100644 --- a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/declared/declared.tentative.html +++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/declared/declared.tentative.html @@ -28,7 +28,7 @@ div { 'use strict'; const target = document.getElementById('target'); -const styleMap = document.styleSheets[0].rules[0].attributeStyleMap; +const styleMap = document.styleSheets[0].rules[0].styleMap; test(() => { const properties = styleMap.getProperties(); @@ -63,7 +63,7 @@ test(() => { style.sheet.insertRule('.test { width: 10px; }'); let rule = style.sheet.rules[0]; - let styleMap = rule.attributeStyleMap; + let styleMap = rule.styleMap; assert_style_value_equals(styleMap.get('width'), CSS.px(10)); rule.style.width = '20px'; diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/declared/delete-invalid.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/declared/delete-invalid.html new file mode 100644 index 00000000000..547ea269762 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/declared/delete-invalid.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset="utf-8"> +<title>Declared StylePropertyMap.delete Error Handling</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#delete-a-stylepropertymap"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../../resources/testhelper.js"></script> +<body> +<div id="log"> +<script> +'use strict'; + +test(t => { + let styleMap = createDeclaredStyleMap(t, ''); + assert_throws(new TypeError(), () => styleMap.delete('lemon')); +}, 'Deleting an unsupported property name throws a TypeError'); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/declared/delete.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/declared/delete.html new file mode 100644 index 00000000000..48ac3dc63c0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/declared/delete.html @@ -0,0 +1,56 @@ +<!doctype html> +<meta charset="utf-8"> +<title>Declared StylePropertyMap.delete</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#delete-a-stylepropertymap"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../../resources/testhelper.js"></script> +<body> +<div id="log"> +<script> +'use strict'; + +test(t => { + let [rule, styleMap] = createRuleWithDeclaredStyleMap(t, ''); + assert_equals(rule.style.getPropertyValue('width'), ''); + + styleMap.delete('width'); + assert_equals(rule.style.getPropertyValue('width'), ''); +}, 'Deleting a property not in the css rule is a no-op'); + +test(t => { + let [rule, styleMap] = createRuleWithDeclaredStyleMap(t, 'width: 10px'); + assert_not_equals(rule.style.getPropertyValue('width'), ''); + + styleMap.delete('width'); + assert_equals(rule.style.getPropertyValue('width'), ''); +}, 'Deleting a property in the css rule removes it from the css rule'); + +test(t => { + let [rule, styleMap] = createRuleWithDeclaredStyleMap(t, '--Foo: 10px'); + assert_not_equals(rule.style.getPropertyValue('--Foo'), ''); + + styleMap.delete('--Foo'); + assert_equals(rule.style.getPropertyValue('--Foo'), ''); +}, 'Deleting a custom property in the css rule removes it from the ' + + 'css rule'); + +test(t => { + let [rule, styleMap] = createRuleWithDeclaredStyleMap(t, + 'transition-duration: 1s, 2s'); + assert_not_equals(rule.style.getPropertyValue('transition-duration'), ''); + + styleMap.delete('transition-duration'); + assert_equals(rule.style.getPropertyValue('transition-duration'), ''); +}, 'Deleting a list-valued property in the css rule removes it from ' + + 'the css rule'); + +test(t => { + let [rule, styleMap] = createRuleWithDeclaredStyleMap(t, 'width: 10px'); + assert_not_equals(rule.style.getPropertyValue('width'), ''); + + styleMap.delete('wIdTh'); + assert_equals(rule.style.getPropertyValue('width'), ''); +}, 'Declared StylePropertyMap.delete is not case-sensitive'); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/declared/get-invalid.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/declared/get-invalid.html new file mode 100644 index 00000000000..a91d1978130 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/declared/get-invalid.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset="utf-8"> +<title>Declared StylePropertyMap.get Error Handling</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#get-a-value-from-a-stylepropertymap"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../../resources/testhelper.js"></script> +<body> +<div id="log"> +<script> +'use strict'; + +test(t => { + const styleMap = createDeclaredStyleMap(t); + assert_throws(new TypeError(), () => styleMap.get('lemon')); +}, 'Calling StylePropertyMap.get with an unsupported property throws a TypeError'); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/declared/get.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/declared/get.html new file mode 100644 index 00000000000..aa649df4459 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/declared/get.html @@ -0,0 +1,56 @@ +<!doctype html> +<meta charset="utf-8"> +<title>Declared StylePropertyMap.get</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#get-a-value-from-a-stylepropertymap"> +<meta name="assert" content="Test declared StylePropertyMap.get" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../../resources/testhelper.js"></script> +<body> +<div id="log"> +<script> +'use strict'; + +test(t => { + const styleMap = createDeclaredStyleMap(t, '--foo: auto'); + assert_equals(styleMap.get('--Foo'), null); +}, 'Getting a custom property not in the CSS rule returns null'); + +test(t => { + const styleMap = createDeclaredStyleMap(t, ''); + assert_equals(styleMap.get('width'), null); +}, 'Getting a valid property not in the CSS rule returns null'); + +test(t => { + const styleMap = createDeclaredStyleMap(t, 'width: 10px; height: 20px'); + assert_style_value_equals(styleMap.get('width'), new CSSUnitValue(10, 'px')); +}, 'Getting a valid property from CSS rule returns the correct entry'); + +test(t => { + const styleMap = createDeclaredStyleMap(t, '--foo: auto; --bar: 10px'); + assert_style_value_equals(styleMap.get('--foo'), + new CSSUnparsedValue(' auto')); +}, 'Getting a valid custom property from CSS rule returns the ' + + 'correct entry'); + +test(t => { + const styleMap = createDeclaredStyleMap(t, + 'width: 10px; transition-duration: 1s, 2s; height: 10px;'); + assert_style_value_equals(styleMap.get('transition-duration'), + new CSSUnitValue(1, 's')); +}, 'Getting a list-valued property from CSS rule returns only ' + + 'the first value'); + +test(t => { + const styleMap = createDeclaredStyleMap(t, 'height: 20px; width: 10px;'); + assert_style_value_equals(styleMap.get('wIdTh'), new CSSUnitValue(10, 'px')); +}, 'Declared StylePropertyMap.get is not case-sensitive'); + +test(t => { + const [rule, styleMap] = createRuleWithDeclaredStyleMap(t, 'width: 10px;'); + assert_style_value_equals(styleMap.get('width'), new CSSUnitValue(10, 'px')); + rule.style.width = '20px'; + assert_style_value_equals(styleMap.get('width'), new CSSUnitValue(20, 'px')); +}, 'Declared StylePropertyMap.get reflects changes in the CSS rule'); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/declared/get.tentative.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/declared/get.tentative.html deleted file mode 100644 index e50fb6ea9ce..00000000000 --- a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/declared/get.tentative.html +++ /dev/null @@ -1,47 +0,0 @@ -<!doctype html> -<meta charset="utf-8"> -<title>StylePropertyMap.get tests</title> -<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#get-a-value-from-a-stylepropertymap"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="../../resources/testhelper.js"></script> -<body> -<script> -'use strict'; - -test(t => { - const styleMap = createDeclaredStyleMap(t); - assert_throws(new TypeError(), () => styleMap.get('lemon')); -}, 'Calling StylePropertyMap.get with an unsupported property throws a TypeError'); - -test(t => { - const styleMap = createDeclaredStyleMap(t); - assert_equals(styleMap.get('height'), null); -}, 'Calling StylePropertyMap.get with a property not in the property model returns null'); - -test(t => { - const styleMap = createDeclaredStyleMap(t, '--foo: auto'); - assert_equals(styleMap.get('--Foo'), null); -}, 'Calling StylePropertyMap.get with a custom property not in the property model returns null'); - -test(t => { - const styleMap = createDeclaredStyleMap(t, 'width: 10px; height: 20px'); - assert_style_value_equals(styleMap.get('width'), CSS.px(10)); -}, 'Calling StylePropertyMap.get with a valid property returns the correct entry'); - -test(t => { - const styleMap = createDeclaredStyleMap(t, 'height: 20px; width: 10px;'); - assert_style_value_equals(styleMap.get('wIdTh'), CSS.px(10)); -}, 'StylePropertyMap.get with a valid property in mixed case returns the correct entry'); - -test(t => { - const styleMap = createDeclaredStyleMap(t, '--foo: auto; --bar: 10px'); - assert_style_value_equals(styleMap.get('--foo'), new CSSUnparsedValue(' auto')); -}, 'Calling StylePropertyMap.get with a valid custom property returns the correct entry'); - -test(t => { - const styleMap = createDeclaredStyleMap(t, 'width: 10px; transition-duration: 1s, 2s; height: 10px;'); - assert_style_value_equals(styleMap.get('transition-duration'), CSS.s(1)); -}, 'Calling StylePropertyMap.get with a list-valued property returns only the first value'); - -</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/declared/test.tentative.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/declared/test.tentative.html deleted file mode 100644 index c171769dc17..00000000000 --- a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/declared/test.tentative.html +++ /dev/null @@ -1,24 +0,0 @@ -<!doctype html> -<meta charset="utf-8"> -<title>Declared StylePropertyMap tests</title> -<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#declared-stylepropertymap-objects"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="../../resources/testhelper.js"></script> -<style> -#target { width: 100px; height: 100px; background: red; } -</style> -<body> -<div id="target"> -<script> -'use strict'; - -test(() => { - let rule = document.styleSheets[0].rules[0]; - rule.attributeStyleMap.set('width', CSS.px(200)); - assert_equals(getComputedStyle(target).width, '200px') - rule.attributeStyleMap.set('width', CSS.px(150)); - assert_equals(getComputedStyle(target).width, '150px') -}); -</script> -</body> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/inline/delete-invalid.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/inline/delete-invalid.html new file mode 100644 index 00000000000..cc2657ecbdc --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/inline/delete-invalid.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset="utf-8"> +<title>Inline StylePropertyMap.delete Error Handling</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#delete-a-stylepropertymap"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../../resources/testhelper.js"></script> +<body> +<div id="log"> +<script> +'use strict'; + +test(t => { + let styleMap = createInlineStyleMap(t, ''); + assert_throws(new TypeError(), () => styleMap.delete('lemon')); +}, 'Deleting an unsupported property name throws a TypeError'); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/inline/delete.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/inline/delete.html new file mode 100644 index 00000000000..82b419bfeef --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/inline/delete.html @@ -0,0 +1,56 @@ +<!doctype html> +<meta charset="utf-8"> +<title>Inline StylePropertyMap.delete</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#delete-a-stylepropertymap"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../../resources/testhelper.js"></script> +<body> +<div id="log"> +<script> +'use strict'; + +test(t => { + let [elem, styleMap] = createElementWithInlineStyleMap(t, ''); + assert_equals(elem.style.getPropertyValue('width'), ''); + + styleMap.delete('width'); + assert_equals(elem.style.getPropertyValue('width'), ''); +}, 'Deleting a property not in the inline style is a no-op'); + +test(t => { + let [elem, styleMap] = createElementWithInlineStyleMap(t, 'width: 10px'); + assert_not_equals(elem.style.getPropertyValue('width'), ''); + + styleMap.delete('width'); + assert_equals(elem.style.getPropertyValue('width'), ''); +}, 'Deleting a property in the inline style removes it from the inline style'); + +test(t => { + let [elem, styleMap] = createElementWithInlineStyleMap(t, '--Foo: 10px'); + assert_not_equals(elem.style.getPropertyValue('--Foo'), ''); + + styleMap.delete('--Foo'); + assert_equals(elem.style.getPropertyValue('--Foo'), ''); +}, 'Deleting a custom property in the inline style removes it from the ' + + 'inline style'); + +test(t => { + let [elem, styleMap] = createElementWithInlineStyleMap(t, + 'transition-duration: 1s, 2s'); + assert_not_equals(elem.style.getPropertyValue('transition-duration'), ''); + + styleMap.delete('transition-duration'); + assert_equals(elem.style.getPropertyValue('transition-duration'), ''); +}, 'Deleting a list-valued property in the inline style removes it from ' + + 'the inline style'); + +test(t => { + let [elem, styleMap] = createElementWithInlineStyleMap(t, 'width: 10px'); + assert_not_equals(elem.style.getPropertyValue('width'), ''); + + styleMap.delete('wIdTh'); + assert_equals(elem.style.getPropertyValue('width'), ''); +}, 'Inline StylePropertyMap.delete is not case-sensitive'); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/inline/delete.tentative.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/inline/delete.tentative.html deleted file mode 100644 index 1f6ec74aad7..00000000000 --- a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/inline/delete.tentative.html +++ /dev/null @@ -1,41 +0,0 @@ -<!doctype html> -<meta charset="utf-8"> -<title>StylePropertyMap.delete tests</title> -<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#delete-a-stylepropertymap"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="../../resources/testhelper.js"></script> -<body> -<script> -'use strict'; - -test(t => { - let styleMap = createInlineStyleMap(t, ''); - assert_throws(new TypeError(), () => styleMap.delete('lemon')); - assert_throws(new TypeError(), () => styleMap.delete(null)); -}, 'Calling StylePropertyMap.delete with an unsupported property name throws a TypeError'); - -test(t => { - const styleMap = createInlineStyleMap(t, ''); - assert_false(styleMap.has('width')); - styleMap.delete('width'); - assert_false(styleMap.has('width')); -}, 'Deleting a property not in a StylePropertyMap is a no-op'); - -const gTestCases = [ - { style: 'width: 10px', property: 'width', desc: 'a property' }, - { style: '--foo: auto', property: '--foo', desc: 'a custom property' }, - { style: 'transition-duration: 1s, 2s, 3s', property: 'transition-duration', desc: 'a list-valued property' }, - { style: 'width: 10px', property: 'wIdTh', desc: 'a mixed-case property' }, -]; - -for (const {style, property, desc} of gTestCases) { - test(t => { - const styleMap = createInlineStyleMap(t, style); - assert_true(styleMap.has(property)); - styleMap.delete(property); - assert_false(styleMap.has(property)); - }, 'Deleting ' + desc + ' in the property model removes it from the property model'); -} - -</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/inline/get-invalid.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/inline/get-invalid.html new file mode 100644 index 00000000000..b847567008c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/inline/get-invalid.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset="utf-8"> +<title>Inline StylePropertyMap.get Error Handling</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#get-a-value-from-a-stylepropertymap"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../../resources/testhelper.js"></script> +<body> +<div id="log"> +<script> +'use strict'; + +test(t => { + const styleMap = createInlineStyleMap(t); + assert_throws(new TypeError(), () => styleMap.get('lemon')); +}, 'Calling StylePropertyMap.get with an unsupported property throws a TypeError'); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/inline/get.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/inline/get.html new file mode 100644 index 00000000000..ac7c6e44a5a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/inline/get.html @@ -0,0 +1,56 @@ +<!doctype html> +<meta charset="utf-8"> +<title>Inline StylePropertyMap.get</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#get-a-value-from-a-stylepropertymap"> +<meta name="assert" content="Test inline StylePropertyMap.get" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../../resources/testhelper.js"></script> +<body> +<div id="log"> +<script> +'use strict'; + +test(t => { + const styleMap = createInlineStyleMap(t, '--foo: auto'); + assert_equals(styleMap.get('--Foo'), null); +}, 'Getting a custom property not in the inline style returns null'); + +test(t => { + const styleMap = createInlineStyleMap(t, ''); + assert_equals(styleMap.get('width'), null); +}, 'Getting a valid property not in the inline style returns null'); + +test(t => { + const styleMap = createInlineStyleMap(t, 'width: 10px; height: 20px'); + assert_style_value_equals(styleMap.get('width'), new CSSUnitValue(10, 'px')); +}, 'Getting a valid property from inline style returns the correct entry'); + +test(t => { + const styleMap = createInlineStyleMap(t, '--foo: auto; --bar: 10px'); + assert_style_value_equals(styleMap.get('--foo'), + new CSSUnparsedValue(' auto')); +}, 'Getting a valid custom property from inline style returns the ' + + 'correct entry'); + +test(t => { + const styleMap = createInlineStyleMap(t, + 'width: 10px; transition-duration: 1s, 2s; height: 10px;'); + assert_style_value_equals(styleMap.get('transition-duration'), + new CSSUnitValue(1, 's')); +}, 'Getting a list-valued property from inline style returns only ' + + 'the first value'); + +test(t => { + const styleMap = createInlineStyleMap(t, 'height: 20px; width: 10px;'); + assert_style_value_equals(styleMap.get('wIdTh'), new CSSUnitValue(10, 'px')); +}, 'Declared StylePropertyMap.get is not case-sensitive'); + +test(t => { + const [elem, styleMap] = createElementWithInlineStyleMap(t, 'width: 10px;'); + assert_style_value_equals(styleMap.get('width'), new CSSUnitValue(10, 'px')); + elem.style.width = '20px'; + assert_style_value_equals(styleMap.get('width'), new CSSUnitValue(20, 'px')); +}, 'Declared StylePropertyMap.get reflects changes in the inline style'); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/inline/get.tentative.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/inline/get.tentative.html deleted file mode 100644 index 6494a26d1bf..00000000000 --- a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/inline/get.tentative.html +++ /dev/null @@ -1,47 +0,0 @@ -<!doctype html> -<meta charset="utf-8"> -<title>StylePropertyMap.get tests</title> -<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#get-a-value-from-a-stylepropertymap"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="../../resources/testhelper.js"></script> -<body> -<script> -'use strict'; - -test(t => { - const styleMap = createInlineStyleMap(t); - assert_throws(new TypeError(), () => styleMap.get('lemon')); -}, 'Calling StylePropertyMap.get with an unsupported property throws a TypeError'); - -test(t => { - const styleMap = createInlineStyleMap(t); - assert_equals(styleMap.get('height'), null); -}, 'Calling StylePropertyMap.get with a property not in the property model returns null'); - -test(t => { - const styleMap = createInlineStyleMap(t, '--foo: auto'); - assert_equals(styleMap.get('--Foo'), null); -}, 'Calling StylePropertyMap.get with a custom property not in the property model returns null'); - -test(t => { - const styleMap = createInlineStyleMap(t, 'width: 10px; height: 20px'); - assert_style_value_equals(styleMap.get('width'), CSS.px(10)); -}, 'Calling StylePropertyMap.get with a valid property returns the correct entry'); - -test(t => { - const styleMap = createInlineStyleMap(t, 'height: 20px; width: 10px;'); - assert_style_value_equals(styleMap.get('wIdTh'), CSS.px(10)); -}, 'StylePropertyMap.get with a valid property in mixed case returns the correct entry'); - -test(t => { - const styleMap = createInlineStyleMap(t, '--foo: auto; --bar: 10px'); - assert_style_value_equals(styleMap.get('--foo'), new CSSUnparsedValue(' auto')); -}, 'Calling StylePropertyMap.get with a valid custom property returns the correct entry'); - -test(t => { - const styleMap = createInlineStyleMap(t, 'width: 10px; transition-duration: 1s, 2s; height: 10px;'); - assert_style_value_equals(styleMap.get('transition-duration'), CSS.s(1)); -}, 'Calling StylePropertyMap.get with a list-valued property returns only the first value'); - -</script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/interface.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/interface.html index 3e884909184..6e0301093b1 100644 --- a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/interface.html +++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/interface.html @@ -30,7 +30,7 @@ partial interface Element { }; partial interface CSSStyleRule { - [SameObject] readonly attribute StylePropertyMap attributeStyleMap; + [SameObject] readonly attribute StylePropertyMap styleMap; }; partial interface Element { diff --git a/tests/wpt/web-platform-tests/css/css-ui/text-overflow-024-ref.html b/tests/wpt/web-platform-tests/css/css-ui/text-overflow-024-ref.html new file mode 100644 index 00000000000..2e9b8301f46 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-ui/text-overflow-024-ref.html @@ -0,0 +1,26 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>Reference: text-overflow on tr::before with overflow:hidden</title> + <style type="text/css"> + + td { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } + + </style> +</head> +<body> +PASS if there is an ellipsis at the end of the text below. + <table style="table-layout: fixed; width: 130px" cellpadding="0" cellspacing="0"> + <tr><td>Some long text here that overflows and whatnot.</td></tr> + </table> + +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-ui/text-overflow-024.html b/tests/wpt/web-platform-tests/css/css-ui/text-overflow-024.html new file mode 100644 index 00000000000..0ca5b428cb4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-ui/text-overflow-024.html @@ -0,0 +1,31 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>Test: text-overflow on tr::before with overflow:hidden</title> + <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"> + <link rel="help" href="https://www.w3.org/TR/css3-ui/#text-overflow" title="5.2. the 'text-overflow' property"> + <link rel="match" href="text-overflow-024-ref.html"> + <style type="text/css"> + + tr::before { + content: "Some long text here that overflows and whatnot."; + display: table-cell; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } + + </style> +</head> +<body> +PASS if there is an ellipsis at the end of the text below. + <table style="table-layout: fixed; width: 130px" cellpadding="0" cellspacing="0"> + <tr></tr> + </table> + +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-ui/text-overflow-025-ref.html b/tests/wpt/web-platform-tests/css/css-ui/text-overflow-025-ref.html new file mode 100644 index 00000000000..c8acd479603 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-ui/text-overflow-025-ref.html @@ -0,0 +1,24 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>Reference: text-overflow on tr::before without overflow:hidden</title> + <style type="text/css"> + + td { + white-space: nowrap; + } + + </style> +</head> +<body> +PASS if there is no ellipsis below. + <table style="table-layout: fixed; width: 130px" cellpadding="0" cellspacing="0"> + <tr><td>Some long text here that overflows and whatnot.</td></tr> + </table> + +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-ui/text-overflow-025.html b/tests/wpt/web-platform-tests/css/css-ui/text-overflow-025.html new file mode 100644 index 00000000000..3e0fce0afb0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-ui/text-overflow-025.html @@ -0,0 +1,33 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>Test: text-overflow on tr::before without overflow:hidden</title> + <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"> + <link rel="help" href="https://www.w3.org/TR/css3-ui/#text-overflow" title="5.2. the 'text-overflow' property"> + <link rel="match" href="text-overflow-025-ref.html"> + <style type="text/css"> + + tr::before { + content: "Some long text here that overflows and whatnot."; + display: table-cell; + white-space: nowrap; + text-overflow: ellipsis; + } + tr { + overflow: hidden; + } + + </style> +</head> +<body> +PASS if there is no ellipsis below. + <table style="table-layout: fixed; width: 130px" cellpadding="0" cellspacing="0"> + <tr></tr> + </table> + +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-ui/text-overflow-026-ref.html b/tests/wpt/web-platform-tests/css/css-ui/text-overflow-026-ref.html new file mode 100644 index 00000000000..f2db8c747fa --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-ui/text-overflow-026-ref.html @@ -0,0 +1,62 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>Reference: text-overflow with leading white-space</title> + <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1403986"> + <style type="text/css"> +html,body { + color:black; background-color:white; font:16px/1 monospace; +} + +.ellipsize { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + width: 100px; + border: 1px solid; +} + +.inline-block { + display: inline-block; + background: red; +} + </style> +</head> +<body> + +<pre> +The test PASS if all of the following are true: +1. there are no red areas +2. the first two blocks display "PASS" but no ellipsis +3. the last three blocks display an ellipsis +</pre> + +<div class="ellipsize" style="text-overflow: clip"> + <span style="margin-left:5px"></span><span class="inline-block" style="background:lime"> + PASS PASS PASS PASS PASS</span> +</div> + +<div class="ellipsize" style="text-overflow: clip"> + <span style="margin-left:5px"></span> + <span class="inline-block" style="background:lime"> + PASS PASS PASS PASS PASS</span> +</div> + +<div class="ellipsize"> + <span style="margin-left:10px"></span> … +</div> + +<div class="ellipsize"> + … +</div> + +<div class="ellipsize"> + a… +</div> + +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-ui/text-overflow-026.html b/tests/wpt/web-platform-tests/css/css-ui/text-overflow-026.html new file mode 100644 index 00000000000..2d1aa57cc89 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-ui/text-overflow-026.html @@ -0,0 +1,67 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>Test: text-overflow with leading white-space</title> + <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1403986"> + <link rel="help" href="https://www.w3.org/TR/css3-ui/#text-overflow" title="5.2. the 'text-overflow' property"> + <link rel="match" href="text-overflow-026-ref.html"> + <style type="text/css"> +html,body { + color:black; background-color:white; font:16px/1 monospace; +} + +.ellipsize { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + width: 100px; + border: 1px solid; +} + +.inline-block { + display: inline-block; + background: red; +} + </style> +</head> +<body> + +<pre> +The test PASS if all of the following are true: +1. there are no red areas +2. the first two blocks display "PASS" but no ellipsis +3. the last three blocks display an ellipsis +</pre> + +<div class="ellipsize"> + <span style="margin-left:5px"></span><span class="inline-block" style="background:lime"> + PASS PASS PASS PASS PASS</span> +</div> + +<div class="ellipsize"> + <span style="margin-left:5px"></span> + <span class="inline-block" style="background:lime"> + PASS PASS PASS PASS PASS</span> +</div> + +<div class="ellipsize"> + <span style="margin-left:10px"></span> <span class="inline-block"> + FAIL FAIL FAIL FAIL FAIL FAIL FAIL FAIL </span> +</div> + +<div class="ellipsize"> + <span class="inline-block"> + FAIL FAIL FAIL FAIL FAIL FAIL FAIL FAIL </span> +</div> + +<div class="ellipsize"> + a<span class="inline-block"> + FAIL FAIL FAIL FAIL FAIL FAIL FAIL FAIL </span> +</div> + +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-values/calc-ch-ex-lang-ref.html b/tests/wpt/web-platform-tests/css/css-values/calc-ch-ex-lang-ref.html new file mode 100644 index 00000000000..e0ac1ead1e5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-values/calc-ch-ex-lang-ref.html @@ -0,0 +1,12 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Test Reference</title> +<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io"> +<style> +div { + width: calc(1ex + 1ch + 1em); + height: calc(1ex + 1ch + 1em); + background: green; +} +</style> +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-values/calc-ch-ex-lang.html b/tests/wpt/web-platform-tests/css/css-values/calc-ch-ex-lang.html new file mode 100644 index 00000000000..eb447475d52 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-values/calc-ch-ex-lang.html @@ -0,0 +1,16 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Test: Calc in font-size with ch / ex units across lang changes</title> +<link rel="help" href="https://drafts.csswg.org/css-values/#ch"> +<link rel="help" href="https://drafts.csswg.org/css-values/#ex"> +<link rel="help" href="https://drafts.csswg.org/css-values/#funcdef-calc"> +<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1431031"> +<link rel="match" href="calc-ch-ex-lang-ref.html"> +<style> +div[lang] { + font-size: calc(1ex + 1ch + 1em); +} +</style> +<div lang="en"> + <div style="width: 1em; height: 1em; background: green;"></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-values/calc-in-font-feature-settings.html b/tests/wpt/web-platform-tests/css/css-values/calc-in-font-feature-settings.html new file mode 100644 index 00000000000..0ce8d7e5c77 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-values/calc-in-font-feature-settings.html @@ -0,0 +1,22 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Test: calc() function in font-feature-settings</title> +<link rel="author" title="Chris Nardi" href="mailto:cnardi@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-values/#funcdef-calc"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> + #test { + font-feature-settings: "vert" calc(2); + } +</style> +<div id="test"></div> +<script> + const div = document.querySelector("#test"); + // Chrome serializes font-feature-settings with single quotes vs. double quotes + // in other browsers, but that's not the issue being tested. + const expected = ["'vert' 2", "\"vert\" 2"]; + test(function() { + assert_in_array(getComputedStyle(div).fontFeatureSettings, expected); + }, "calc() in font-feature-settings"); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-values/calc-rem-lang-ref.html b/tests/wpt/web-platform-tests/css/css-values/calc-rem-lang-ref.html new file mode 100644 index 00000000000..a0f6add684a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-values/calc-rem-lang-ref.html @@ -0,0 +1,6 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Test Reference</title> +<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io"> +<p>You should see a green box twice-the-initial-font-size wide.</p> +<div style="width: 2em; height: 2em; background: green;"></div> diff --git a/tests/wpt/web-platform-tests/css/css-values/calc-rem-lang.html b/tests/wpt/web-platform-tests/css/css-values/calc-rem-lang.html new file mode 100644 index 00000000000..3994efc003b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-values/calc-rem-lang.html @@ -0,0 +1,17 @@ +<!doctype html> +<html lang="en"><!-- The lang is important! --> +<meta charset="utf-8"> +<title>CSS Test: Calc with rem and relative units on the root element</title> +<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io"> +<link rel="help" href="https://drafts.csswg.org/css-values/#rem"> +<link rel="help" href="https://drafts.csswg.org/css-values/#funcdef-calc"> +<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1431031"> +<link rel="match" href="calc-rem-lang-ref.html"> +<style> + html { + font-size: calc(1rem + 1em); + } +</style> +<p style="font-size: initial">You should see a green box twice-the-initial-font-size wide.</p> +<div style="width: 1em; height: 1em; background: green;"></div> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/available-size-001.html b/tests/wpt/web-platform-tests/css/css-writing-modes/available-size-001.html new file mode 100644 index 00000000000..956c831a29f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/available-size-001.html @@ -0,0 +1,43 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Testing Available Space in Orthogonal Flows / max-height / content height</title> +<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> +<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#orthogonal-auto"> +<link rel="match" href="reference/available-size-001-ref.html"> +<meta name="assert" content="When an orthogonal flow's parent doesn't have a definite block size and the nearest ancestor scroller does not have a fixed height but does have a fixed max-height, use that, making sure you stick with the content height."> +<meta name="flags" content=""> +<style> +body > div { + font-family: monospace; /* to be able to reliably measure things in ch*/ + font-size: 20px; + max-height: 8ch; /* **max**-height does not give the element a definite block size */ + overflow: hidden; + color: transparent; + position: relative; /* to act as a container of #red */ + padding: 1ch 0; +} + +div > div { writing-mode: vertical-rl; } + +span { + background: green; + display: inline-block; /* This should not change it's size or position, but makes the size of the background predictable*/ +} + +#red { /* Not necessary when when comparing to the reference, but makes human judgement easier */ + position: absolute; + background: red; + left: 0; top: 1ch; + writing-mode: vertical-rl; + z-index: -1; +} +</style> + +<p>Test passes if there is a <strong>green rectangle</strong> below and <strong>no red</strong>. + +<div> + <aside id="red">0</aside> + <div>0 0 0 0 <span>0</span> 0 0 0</div> <!-- If this div take its height from + the max-height of its parent, it should wrap just right for the green 0 to + overlap with the red one. --> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/available-size-002.html b/tests/wpt/web-platform-tests/css/css-writing-modes/available-size-002.html new file mode 100644 index 00000000000..adc5c52de70 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/available-size-002.html @@ -0,0 +1,44 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Testing Available Space in Orthogonal Flows / max-height / no scroller</title> +<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> +<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#orthogonal-auto"> +<link rel="match" href="reference/available-size-002-ref.html"> +<meta name="assert" content="When an orthogonal flow's ancestor doesn't have a definite block size but does have a fixed max-height, but isn't a scroller, do not use that size."> +<meta name="flags" content=""> +<style> +body > div { + font-family: monospace; /* to be able to reliably measure things in ch*/ + font-size: 20px; + max-height: 8ch; /* **max**-height does not give the element a definite block size */ + color: transparent; + position: relative; /* to act as a container of #green */ +} + +div > div > div { writing-mode: vertical-rl; } + +span { + background: white; + display: inline-block; /* This should not change it's size or position, but makes the size of the background predictable*/ +} + +#green { + position: absolute; + background: green; + left: 0; + writing-mode: vertical-rl; + z-index: -1; +} +</style> + +<p>Test passes if there is a <strong>green rectangle</strong> below and <strong>no red</strong>. + +<div> + <div> + <aside id="green">0</aside> + <div>0 0 0 0 <span>0</span> 0 0 0</div> <!-- If this div takes its height from + the max-height of its parent (which it shouldn't, since it's not a scroller), + it should wrap just right for the white 0 to + overlap with the green one. --> + </div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/available-size-003.html b/tests/wpt/web-platform-tests/css/css-writing-modes/available-size-003.html new file mode 100644 index 00000000000..c938c905ae0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/available-size-003.html @@ -0,0 +1,46 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Testing Available Space in Orthogonal Flows / height / content height</title> +<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> +<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#orthogonal-auto"> +<link rel="match" href="reference/available-size-001-ref.html"> +<meta name="assert" content="When an orthogonal flow's parent doesn't have a definite block size and the nearest ancestor scroller does have a fixed height, use that, making sure you stick with the content height."> +<meta name="flags" content=""> +<style> +body > div { + font-family: monospace; /* to be able to reliably measure things in ch*/ + font-size: 20px; + height: 8ch; + width: 300px; /* Shrinkwrapping this div is not what we're interested in testing here, so give it a width. See nested-orthogonal-001.html for that. */ + overflow: hidden; + color: transparent; + position: relative; /* to act as a container of #red */ + writing-mode: vertical-lr; + padding: 1ch 0; +} + +div > div { padding-bottom: 2ch; } /* so that the content height of the parent and of the fixed size scrolling ancestor are different */ +div > div > div { writing-mode: vertical-rl; } + +span { + background: green; + display: inline-block; /* This should not change it's size or position, but makes the size of the background predictable*/ +} + +#red { /* Not necessary when when comparing to the reference, but makes human judgement easier */ + position: absolute; + background: red; + left: 0; top: 1ch; + writing-mode: vertical-rl; + z-index: -1; +} +</style> + +<p>Test passes if there is a <strong>green rectangle</strong> below and <strong>no red</strong>. + +<div> + <aside id="red">0</aside> + <div><div>0 0 0 0 <span>0</span> 0 0 0</div></div> <!-- If this div take its height from + the height of its scrollable ancestor, it should wrap just right for the green 0 to + overlap with the red one. --> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/available-size-004.html b/tests/wpt/web-platform-tests/css/css-writing-modes/available-size-004.html new file mode 100644 index 00000000000..e4c11874977 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/available-size-004.html @@ -0,0 +1,43 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Testing Available Space in Orthogonal Flows / height / no scroller</title> +<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> +<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#orthogonal-auto"> +<link rel="match" href="reference/available-size-002-ref.html"> +<meta name="assert" content="When an orthogonal flow's parent doesn't have a definite block size but an ancestor that is **not** a scroller does have a fixed height, do not use that."> +<meta name="flags" content=""> +<style> +body > div { + font-family: monospace; /* to be able to reliably measure things in ch*/ + font-size: 20px; + height: 8ch; + width: 300px; /* Shrinkwrapping this div is not what we're interested in testing here, so give it a width. See nested-orthogonal-001.html for that. */ + color: transparent; + position: relative; /* to act as a container of #green */ +} + +div > div { padding-bottom: 2ch; } /* so that the content height of the parent and of the fixed size ancestor are different */ +div > div > div { writing-mode: vertical-rl; } + +span { + background: white; + display: inline-block; /* This should not change it's size or position, but makes the size of the background predictable*/ +} + +#green { /* Not necessary when when comparing to the reference, but makes human judgement easier */ + position: absolute; + background: green; + left: 0; + writing-mode: vertical-rl; + z-index: -1; +} +</style> + +<p>Test passes if there is a <strong>green rectangle</strong> below and <strong>no red</strong>. + +<div> + <aside id="green">0</aside> + <div><div>0 0 0 0 <span>0</span> 0 0 0</div></div> <!-- If this div take its height from + the height of its fixed height non scrollable ancestor (which is should not), + it should wrap just right for the white 0 to overlap with the green one. --> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/available-size-005.html b/tests/wpt/web-platform-tests/css/css-writing-modes/available-size-005.html new file mode 100644 index 00000000000..ee324898ffe --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/available-size-005.html @@ -0,0 +1,52 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Testing Available Space in Orthogonal Flows / height / not remaining size</title> +<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> +<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#orthogonal-auto"> +<link rel="match" href="reference/available-size-001-ref.html"> +<meta name="assert" content="When an orthogonal flow's parent doesn't have a definite block size and the nearest ancestor scroller does a have fixed height, use that whole height, even if some other content already consumes some of it."> +<meta name="flags" content=""> +<style> +body > div { + font-family: monospace; /* to be able to reliably measure things in ch*/ + font-size: 20px; + height: 8ch; + width: 300px; /* Shrinkwrapping this div is not what we're interested in testing here, so give it a width. See nested-orthogonal-001.html for that. */ + overflow: hidden; + color: transparent; + position: relative; /* to act as a container of #red */ +} + +div > div { padding-bottom: 2ch; } /* so that the content height of the parent and of the fixed size scrolling ancestor are different */ +div > div > div { writing-mode: vertical-rl; } + +span { + background: green; + display: inline-block; /* This should not change it's size or position, but makes the size of the background predictable*/ +} + +#red { /* Not necessary when when comparing to the reference, but makes human judgement easier */ + position: absolute; + background: red; + left: 0; + writing-mode: vertical-rl; + z-index: -1; + top: 1ch; +} +#spacer { /* shrinks the remaining space of the parent div. */ + height: 1ch; + width: 100%; +} +</style> + +<p>Test passes if there is a <strong>green rectangle</strong> below and <strong>no red</strong>. + +<div> + <aside id="red">0</aside> + <div><aside id="spacer"></aside><div>0 0 0 0 <span>0</span> 0 0 0</div></div> + <!-- If the inner div take its height from the height of its scrollable + ancestor, it should wrap just right for the green 0 to overlap with the red + one. If instead it takes it size from the remaining height after having + removed #spacer, or does some other calculation that takes #spacer into + account, it won't line up with #red.--> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/available-size-006.html b/tests/wpt/web-platform-tests/css/css-writing-modes/available-size-006.html new file mode 100644 index 00000000000..e884f76f203 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/available-size-006.html @@ -0,0 +1,44 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Testing Available Space in Orthogonal Flows / ICB</title> +<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> +<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#orthogonal-auto"> +<link rel="match" href="reference/available-size-002-ref.html"> +<meta name="assert" content="When an orthogonal flow's parent doesn't have a definite block size, and there's no scroller among ancestors, use the ICB instead."> +<meta name="flags" content=""> +<style> +body { margin-top: 0; margin-bottom: 0; } /* Shouldn't matter, but in some browsers does. -007 tests this aspect specifically. */ +div { + writing-mode: vertical-rl; + font-family: monospace; + font-size: 20px; + position: relative; /* to be a container for #red*/ +} +.spacer { /* using 5 spacers of 20vh each instead of a single large one, so + that the line would wrap between spacers if it ends up being + shorter thatn 100vh*/ + display: inline-block; + height: calc(20vh - 0.1px); /*Using this instead of 20vh, to account for accumulation of rounding errors, that might make 5*20vh taller than 100vh in some browsers*/ +} + +span { + background: green; + display: inline-block; /* This should not change it's size or position, but makes the size of the background predictable*/ + color: transparent; +} + +#red { /* Not necessary when when comparing to the reference, but makes human judgement easier */ + position: absolute; + background: red; + writing-mode: vertical-rl; + z-index: -1; + font-family: monospace; + font-size: 20px; + left: 0; top: 0; +} + +</style> + +<p>Test passes if there is a <strong>green rectangle</strong> below and <strong>no red</strong>. + +<div><aside id="red">0</aside><aside class="spacer"></aside><aside class="spacer"></aside><aside class="spacer"></aside><aside class="spacer"></aside><aside class="spacer"></aside> <span>0</span></div> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/available-size-007.html b/tests/wpt/web-platform-tests/css/css-writing-modes/available-size-007.html new file mode 100644 index 00000000000..c8cfea23b2e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/available-size-007.html @@ -0,0 +1,43 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Testing Available Space in Orthogonal Flows / ICB</title> +<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> +<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#orthogonal-auto"> +<link rel="match" href="reference/available-size-002-ref.html"> +<meta name="assert" content="When an orthogonal flow's parent doesn't have a definite block size, and there's no scroller among ancestors, use the ICB instead (not the content height of the body element, which is the ICB reduced by body's margins)."> +<meta name="flags" content=""> +<style> +div { + writing-mode: vertical-rl; + font-family: monospace; + font-size: 20px; + position: relative; /* to be a container for #red*/ +} +.spacer { /* using 5 spacers of 20vh each instead of a single large one, so + that the line would wrap between spacers if it ends up being + shorter thatn 100vh*/ + display: inline-block; + height: calc(20vh - 0.1px); /*Using this instead of 20vh, to account for accumulation of rounding errors, that might make 5*20 taller than 100vh in some browsers*/ +} + +span { + background: green; + display: inline-block; /* This should not change it's size or position, but makes the size of the background predictable*/ + color: transparent; +} + +#red { /* Not necessary when when comparing to the reference, but makes human judgement easier */ + position: absolute; + background: red; + writing-mode: vertical-rl; + z-index: -1; + font-family: monospace; + font-size: 20px; + left: 0; top: 0; +} + +</style> + +<p>Test passes if there is a <strong>green rectangle</strong> below and <strong>no red</strong>. + +<div><aside id="red">0</aside><aside class="spacer"></aside><aside class="spacer"></aside><aside class="spacer"></aside><aside class="spacer"></aside><aside class="spacer"></aside> <span>0</span></div> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/available-size-008.html b/tests/wpt/web-platform-tests/css/css-writing-modes/available-size-008.html new file mode 100644 index 00000000000..2fcfbac45a7 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/available-size-008.html @@ -0,0 +1,50 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Testing Available Space in Orthogonal Flows / ICB / tall max-height scroller</title> +<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> +<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#orthogonal-auto"> +<link rel="match" href="reference/available-size-002-ref.html"> +<meta name="assert" content="When an orthogonal flow's parent doesn't have a definite block size, and there's a scroller with max-height, but that scroller has a taller max-height than the ICB, use the ICB instead."> +<meta name="flags" content=""> +<style> +body { margin-top: 0; margin-bottom: 0; } /* Shouldn't matter, but in some browsers does. -007 tests this aspect specifically. */ +div { + writing-mode: vertical-rl; + font-family: monospace; + font-size: 20px; + position: relative; /* to be a container for #red*/ +} +.spacer { /* using 5 spacers of 20vh each instead of a single large one, so + that the line would wrap between spacers if it ends up being + shorter thatn 100vh*/ + display: inline-block; + height: calc(20vh - 0.1px); /*Using this instead of 20vh, to account for accumulation of rounding errors, that might make 5*20vh taller than 100vh in some browsers*/ +} + +span { + background: green; + display: inline-block; /* This should not change it's size or position, but makes the size of the background predictable*/ + color: transparent; +} + +#red { /* Not necessary when when comparing to the reference, but makes human judgement easier */ + position: absolute; + background: red; + writing-mode: vertical-rl; + z-index: -1; + font-family: monospace; + font-size: 20px; + left: 0; top: 0; +} + +section { + overflow: hidden; + max-height: 120vh; +} +</style> + +<p>Test passes if there is a <strong>green rectangle</strong> below and <strong>no red</strong>. + +<section> +<div><aside id="red">0</aside><aside class="spacer"></aside><aside class="spacer"></aside><aside class="spacer"></aside><aside class="spacer"></aside><aside class="spacer"></aside> <span>0</span></div> +</section> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/available-size-009.html b/tests/wpt/web-platform-tests/css/css-writing-modes/available-size-009.html new file mode 100644 index 00000000000..9d7a2c8288d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/available-size-009.html @@ -0,0 +1,54 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Testing Available Space in Orthogonal Flows / ICB / tall height scroller</title> +<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> +<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#orthogonal-auto"> +<link rel="match" href="reference/available-size-002-ref.html"> +<meta name="assert" content="When an orthogonal flow's parent doesn't have a definite block size, and there's a scroller with height, but that scroller is taller than the ICB, use the ICB instead."> +<meta name="flags" content=""> +<style> +body { margin-top: 0; margin-bottom: 0; } /* Shouldn't matter, but in some browsers does. -007 tests this aspect specifically. */ +div { + writing-mode: vertical-rl; + font-family: monospace; + font-size: 20px; + position: relative; /* to be a container for #red*/ +} +.spacer { /* using 5 spacers of 20vh each instead of a single large one, so + that the line would wrap between spacers if it ends up being + shorter thatn 100vh*/ + display: inline-block; + height: calc(20vh - 0.1px); /*Using this instead of 20vh, to account for accumulation of rounding errors, that might make 5*20vh taller than 100vh in some browsers*/ +} + +span { + background: green; + display: inline-block; /* This should not change it's size or position, but makes the size of the background predictable*/ + color: transparent; +} + +#red { /* Not necessary when when comparing to the reference, but makes human judgement easier */ + position: absolute; + background: red; + writing-mode: vertical-rl; + z-index: -1; + font-family: monospace; + font-size: 20px; + left: 0; top: 0; +} + +section { + overflow: hidden; + writing-mode: vertical-rl; + height: 120vh; +} +section > section { + writing-mode: horizontal-tb; +} +</style> + +<p>Test passes if there is a <strong>green rectangle</strong> below and <strong>no red</strong>. + +<section> +<div><aside id="red">0</aside><aside class="spacer"></aside><aside class="spacer"></aside><aside class="spacer"></aside><aside class="spacer"></aside><aside class="spacer"></aside><aside class="spacer"></aside><aside class="spacer"></aside><aside class="spacer"></aside><aside class="spacer"></aside><aside class="spacer"></aside> <span>0</span></div> +</section> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/available-size-010.html b/tests/wpt/web-platform-tests/css/css-writing-modes/available-size-010.html new file mode 100644 index 00000000000..f6452cc957e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/available-size-010.html @@ -0,0 +1,52 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Testing Available Space in Orthogonal Flows / ICB / tall max-height scroller</title> +<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> +<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#orthogonal-auto"> +<link rel="match" href="reference/available-size-002-ref.html"> +<meta name="assert" content="When an orthogonal flow's parent doesn't have a definite block size, and the nearest scroller goes not have a fixed height or max-height, use the ICB, even if there is another scroller ancestor up the chain that does have fixed dimensions."> +<meta name="flags" content=""> +<style> +body { margin-top: 0; margin-bottom: 0; } /* Shouldn't matter, but in some browsers does. -007 tests this aspect specifically. */ +div { + writing-mode: vertical-rl; + font-family: monospace; + font-size: 20px; + position: relative; /* to be a container for #red*/ +} +.spacer { /* using 5 spacers of 20vh each instead of a single large one, so + that the line would wrap between spacers if it ends up being + shorter thatn 100vh*/ + display: inline-block; + height: calc(20vh - 0.1px); /*Using this instead of 20vh, to account for accumulation of rounding errors, that might make 5*20vh taller than 100vh in some browsers*/ +} + +span { + background: green; + display: inline-block; /* This should not change it's size or position, but makes the size of the background predictable*/ + color: transparent; +} + +#red { /* Not necessary when when comparing to the reference, but makes human judgement easier */ + position: absolute; + background: red; + writing-mode: vertical-rl; + z-index: -1; + font-family: monospace; + font-size: 20px; + left: 0; top: 0; +} + +section { overflow: hidden; } +body > section { height: 20ch; } +</style> + +<p>Test passes if there is a <strong>green rectangle</strong> below and <strong>no red</strong>. + +<section> +<section> +<section> +<div><aside id="red">0</aside><aside class="spacer"></aside><aside class="spacer"></aside><aside class="spacer"></aside><aside class="spacer"></aside><aside class="spacer"></aside> <span>0</span></div> +</section> +</section> +</section> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/ch-units-vrl-001.html b/tests/wpt/web-platform-tests/css/css-writing-modes/ch-units-vrl-001.html new file mode 100644 index 00000000000..5591465b0a7 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/ch-units-vrl-001.html @@ -0,0 +1,56 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>upright vertical writing mode and ch unit on table rows</title> +<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#placement"> +<link rel="match" href="reference/ch-units-vrl-001-ref.html" +<meta name="assert" content="The font-metric dependent ch unit on table rows takes the writing mode (with upright text-orientation) into account, + even though theses properties do not apply to that element."> +<style> +table { + font-size: 20px; + border-collapse: collapse; + border: none; +} +td { + padding: 0; + background: green; + height: 5ch; +} +tr { + writing-mode: vertical-rl; + text-orientation: upright; + line-height: 5ch; /* using the inherited line-height (which the affects the content of the td) + instead of directly using the height property, + because sizing on table cells is complicated and out of scope for this. */ +} + +div { + font-size: 20px; + color: transparent; +} + +/* Sizing the reference divs using the actual 0 (after which the ch unit is based) in the inline dimensions, + and using the ch unit in the block dimension, + to make sure that the ch unit itself works well in the general case. + If it doesn't, or if writing modes don't work, the divs won't be square. + */ +div:nth-of-type(1) { + background: blue; + writing-mode: vertical-rl; + text-orientation: upright; + width: 5ch; +} +div:nth-of-type(2) { + background: orange; + height: 5ch; + display: inline-block; /* shrinkwrap */ +} +</style> +<body> + <p>Test passes if there is a <strong>green square</strong> below, and if it is the <strong>same size as the blue</strong> one, not the orange one. + <p>If any of the 3 colored shapes is not a square, or if the orange and blue squares are the same size, the test fails. + <table><tbody><tr><td> </td></tr></tbody></table> + <div>00000</div> + <div>00000</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/ch-units-vrl-002.html b/tests/wpt/web-platform-tests/css/css-writing-modes/ch-units-vrl-002.html new file mode 100644 index 00000000000..d1ff259c588 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/ch-units-vrl-002.html @@ -0,0 +1,56 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>upright vertical writing mode and ch unit on table row groups</title> +<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#placement"> +<link rel="match" href="reference/ch-units-vrl-001-ref.html" +<meta name="assert" content="The font-metric dependent ch unit on table row groups takes the writing mode (with upright text-orientatino) into account, + even though these properties do not apply to that element."> +<style> +table { + font-size: 20px; + border-collapse: collapse; + border: none; +} +td { + padding: 0; + background: green; + height: 5ch; +} +tbody { + writing-mode: vertical-rl; + text-orientation: upright; + line-height: 5ch; /* using the inherited line-height (which the affects the content of the td) + instead of directly using the height property, + because sizing on table cells is complicated and out of scope for this. */ +} + +div { + font-size: 20px; + color: transparent; +} + +/* Sizing the reference divs using the actual 0 (after which the ch unit is based) in the inline dimensions, + and using the ch unit in the block dimension, + to make sure that the ch unit itself works well in the general case. + If it doesn't, or if writing modes don't work, the divs won't be square. + */ +div:nth-of-type(1) { + background: blue; + writing-mode: vertical-rl; + text-orientation: upright; + width: 5ch; +} +div:nth-of-type(2) { + background: orange; + height: 5ch; + display: inline-block; /* shrinkwrap */ +} +</style> +<body> + <p>Test passes if there is a <strong>green square</strong> below, and if it is the <strong>same size as the blue</strong> one, not the orange one. + <p>If any of the 3 colored shapes is not a square, or if the orange and blue squares are the same size, the test fails. + <table><tbody><tr><td> </td></tr></tbody></table> + <div>00000</div> + <div>00000</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/ch-units-vrl-003.html b/tests/wpt/web-platform-tests/css/css-writing-modes/ch-units-vrl-003.html new file mode 100644 index 00000000000..5f7de3c96de --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/ch-units-vrl-003.html @@ -0,0 +1,56 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>upright vertical writing mode and ch unit on table columns</title> +<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#placement"> +<link rel="match" href="reference/ch-units-vrl-001-ref.html" +<meta name="assert" content="The font-metric dependent ch unit on table columns takes the writing mode (with upright orientation) into account, + even though these properties do no apply to that element."> +<style> +table { + font-size: 20px; + border-collapse: collapse; + border: none; +} +td { + padding: 0; + background: green; + height: 5ch; + writing-mode: vertical-rl; + text-orientation: upright; +} +col { + writing-mode: vertical-rl; + text-orientation: upright; + width: 5ch; +} + +div { + font-size: 20px; + color: transparent; +} + +/* Sizing the reference divs using the actual 0 (after which the ch unit is based) in the inline dimensions, + and using the ch unit in the block dimension, + to make sure that the ch unit itself works well in the general case. + If it doesn't, or if writing modes don't work, the divs won't be square. + */ +div:nth-of-type(1) { + background: blue; + writing-mode: vertical-rl; + text-orientation: upright; + width: 5ch; +} +div:nth-of-type(2) { + background: orange; + height: 5ch; + display: inline-block; /* shrinkwrap */ +} +</style> +<body> + <p>Test passes if there is a <strong>green square</strong> below, and if it is the <strong>same size as the blue</strong> one, not the orange one. + <p>If any of the 3 colored shapes is not a square, or if the orange and blue squares are the same size, the test fails. + <table><col><tbody><tr><td> </td></tr></tbody></table> + <div>00000</div> + <div>00000</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/ch-units-vrl-004.html b/tests/wpt/web-platform-tests/css/css-writing-modes/ch-units-vrl-004.html new file mode 100644 index 00000000000..4264afd7182 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/ch-units-vrl-004.html @@ -0,0 +1,56 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>upright vertical writing mode and ch unit on table column groups</title> +<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#placement"> +<link rel="match" href="reference/ch-units-vrl-001-ref.html" +<meta name="assert" content="The font-metric dependent ch unit on table column groups takes the writing mode (with upright text-orientation) into account, + even though these properties do not apply to that element."> +<style> +table { + font-size: 20px; + border-collapse: collapse; + border: none; +} +td { + padding: 0; + background: green; + height: 5ch; + writing-mode: vertical-rl; + text-orientation: upright; +} +colgroup { + writing-mode: vertical-rl; + text-orientation: upright; + width: 5ch; +} + +div { + font-size: 20px; + color: transparent; +} + +/* Sizing the reference divs using the actual 0 (after which the ch unit is based) in the inline dimensions, + and using the ch unit in the block dimension, + to make sure that the ch unit itself works well in the general case. + If it doesn't, or if writing modes don't work, the divs won't be square. + */ +div:nth-of-type(1) { + background: blue; + writing-mode: vertical-rl; + text-orientation: upright; + width: 5ch; +} +div:nth-of-type(2) { + background: orange; + height: 5ch; + display: inline-block; /* shrinkwrap */ +} +</style> +<body> + <p>Test passes if there is a <strong>green square</strong> below, and if it is the <strong>same size as the blue</strong> one, not the orange one. + <p>If any of the 3 colored shapes is not a square, or if the orange and blue squares are the same size, the test fails. + <table><colgroup><tbody><tr><td> </td></tr></tbody></table> + <div>00000</div> + <div>00000</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/ch-units-vrl-005.html b/tests/wpt/web-platform-tests/css/css-writing-modes/ch-units-vrl-005.html new file mode 100644 index 00000000000..6348b0099be --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/ch-units-vrl-005.html @@ -0,0 +1,56 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>sideways vertical writing mode and ch unit on table rows</title> +<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#placement"> +<link rel="match" href="reference/ch-units-vrl-005-ref.html" +<meta name="assert" content="The font-metric dependent ch unit on table rows takes the writing mode (with a sideways text-orientation) into account, + even though theese properties do not apply to that element."> +<style> +table { + font-size: 20px; + border-collapse: collapse; + border: none; +} +td { + padding: 0; + background: green; + height: 5ch; +} +tr { + writing-mode: vertical-rl; + text-orientation: sideways; + line-height: 5ch; /* using the inherited line-height (which the affects the content of the td) + instead of directly using the height property, + because sizing on table cells is complicated and out of scope for this. */ +} + +div { + font-size: 20px; + color: transparent; +} + +/* Sizing the reference divs using the actual 0 (after which the ch unit is based) in the inline dimensions, + and using the ch unit in the block dimension, + to make sure that the ch unit itself works well in the general case. + If it doesn't, or if writing modes don't work, the divs won't be square. + */ +div:nth-of-type(2) { + background: orange; + writing-mode: vertical-rl; + text-orientation: upright; + width: 5ch; +} +div:nth-of-type(1) { + background: blue; + height: 5ch; + display: inline-block; /* shrinkwrap */ +} +</style> +<body> + <p>Test passes if there is a <strong>green square</strong> below, and if it is the <strong>same size as the blue</strong> one, not the orange one. + <p>If any of the 3 colored shapes is not a square, or if the orange and blue squares are the same size, the test fails. + <table><tbody><tr><td> </td></tr></tbody></table> + <div>00000</div> + <div>00000</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/ch-units-vrl-006.html b/tests/wpt/web-platform-tests/css/css-writing-modes/ch-units-vrl-006.html new file mode 100644 index 00000000000..1395606be49 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/ch-units-vrl-006.html @@ -0,0 +1,56 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>sideways vertical writing mode and ch unit on table row groups</title> +<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#placement"> +<link rel="match" href="reference/ch-units-vrl-005-ref.html" +<meta name="assert" content="The font-metric dependent ch unit on table row groups takes the writing mode (with a sideways text-orientation) into account, + even though these properties do not apply to that element."> +<style> +table { + font-size: 20px; + border-collapse: collapse; + border: none; +} +td { + padding: 0; + background: green; + height: 5ch; +} +tbody { + writing-mode: vertical-rl; + text-orientation: sideways; + line-height: 5ch; /* using the inherited line-height (which the affects the content of the td) + instead of directly using the height property, + because sizing on table cells is complicated and out of scope for this. */ +} + +div { + font-size: 20px; + color: transparent; +} + +/* Sizing the reference divs using the actual 0 (after which the ch unit is based) in the inline dimensions, + and using the ch unit in the block dimension, + to make sure that the ch unit itself works well in the general case. + If it doesn't, or if writing modes don't work, the divs won't be square. + */ +div:nth-of-type(2) { + background: orange; + writing-mode: vertical-rl; + text-orientation: upright; + width: 5ch; +} +div:nth-of-type(1) { + background: orange; + height: 5ch; + display: inline-block; /* shrinkwrap */ +} +</style> +<body> + <p>Test passes if there is a <strong>green square</strong> below, and if it is the <strong>same size as the blue</strong> one, not the orange one. + <p>If any of the 3 colored shapes is not a square, or if the orange and blue squares are the same size, the test fails. + <table><tbody><tr><td> </td></tr></tbody></table> + <div>00000</div> + <div>00000</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/ch-units-vrl-007.html b/tests/wpt/web-platform-tests/css/css-writing-modes/ch-units-vrl-007.html new file mode 100644 index 00000000000..978e5ba3c20 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/ch-units-vrl-007.html @@ -0,0 +1,56 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>sideways vertical writing mode and ch unit on table columns</title> +<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#placement"> +<link rel="match" href="reference/ch-units-vrl-005-ref.html" +<meta name="assert" content="The font-metric dependent ch unit on table columns takes the writing mode (with a sideways orientation) into account, + even though these properties do not apply to that element."> +<style> +table { + font-size: 20px; + border-collapse: collapse; + border: none; +} +td { + padding: 0; + background: green; + height: 5ch; + writing-mode: vertical-rl; + text-orientation: upright; +} +col { + writing-mode: vertical-rl; + text-orientation: sideways; + width: 5ch; +} + +div { + font-size: 20px; + color: transparent; +} + +/* Sizing the reference divs using the actual 0 (after which the ch unit is based) in the inline dimensions, + and using the ch unit in the block dimension, + to make sure that the ch unit itself works well in the general case. + If it doesn't, or if writing modes don't work, the divs won't be square. + */ +div:nth-of-type(2) { + background: orange; + writing-mode: vertical-rl; + text-orientation: upright; + width: 5ch; +} +div:nth-of-type(1) { + background: blue; + height: 5ch; + display: inline-block; /* shrinkwrap */ +} +</style> +<body> + <p>Test passes if there is a <strong>green square</strong> below, and if it is the <strong>same size as the blue</strong> one, not the orange one. + <p>If any of the 3 colored shapes is not a square, or if the orange and blue squares are the same size, the test fails. + <table><col><tbody><tr><td> </td></tr></tbody></table> + <div>00000</div> + <div>00000</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/ch-units-vrl-008.html b/tests/wpt/web-platform-tests/css/css-writing-modes/ch-units-vrl-008.html new file mode 100644 index 00000000000..eece5974bfb --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/ch-units-vrl-008.html @@ -0,0 +1,56 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>sideways vertical writing mode and ch unit on table column groups</title> +<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#placement"> +<link rel="match" href="reference/ch-units-vrl-005-ref.html" +<meta name="assert" content="The font-metric dependent ch unit on table column groups takes the writing mode (with a sideways orientation) into account, + even though theses properties do not apply to that element."> +<style> +table { + font-size: 20px; + border-collapse: collapse; + border: none; +} +td { + padding: 0; + background: green; + height: 5ch; + writing-mode: vertical-rl; + text-orientation: upright; +} +colgroup { + writing-mode: vertical-rl; + text-orientation: sideways; + width: 5ch; +} + +div { + font-size: 20px; + color: transparent; +} + +/* Sizing the reference divs using the actual 0 (after which the ch unit is based) in the inline dimensions, + and using the ch unit in the block dimension, + to make sure that the ch unit itself works well in the general case. + If it doesn't, or if writing modes don't work, the divs won't be square. + */ +div:nth-of-type(2) { + background: orange; + writing-mode: vertical-rl; + text-orientation: upright; + width: 5ch; +} +div:nth-of-type(1) { + background: blue; + height: 5ch; + display: inline-block; /* shrinkwrap */ +} +</style> +<body> + <p>Test passes if there is a <strong>green square</strong> below, and if it is the <strong>same size as the blue</strong> one, not the orange one. + <p>If any of the 3 colored shapes is not a square, or if the orange and blue squares are the same size, the test fails. + <table><colgroup><tbody><tr><td> </td></tr></tbody></table> + <div>00000</div> + <div>00000</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/logical-props-001.html b/tests/wpt/web-platform-tests/css/css-writing-modes/logical-props-001.html new file mode 100644 index 00000000000..599c80edc90 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/logical-props-001.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>writing-modes and logical props: tr</title> +<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#placement"> +<link rel="match" href="reference/logical-props-001-ref.html" +<meta name="assert" content="The logical properties on table rows are resolved taking the writing mode of the element into account, + even though the writing mode property does not apply to that element."> +<style> +table { border-collapse: collapse; } +td { + padding: 0; + height: 100px; + width: 100px; +} +tr { + writing-mode: vertical-rl; + border-inline-start: 5px green solid; +} + +.red { + position: absolute; + width: 100px; + height: 5px; + background: red; + z-index: -1; +} + +</style> +<body> + <p>Test passes if there is a <strong>horizontal green stripe</strong> below and <strong>no red</strong>. + <div class=red></div> + <table><tbody><tr><td> </td></tr></tbody></table> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/logical-props-002.html b/tests/wpt/web-platform-tests/css/css-writing-modes/logical-props-002.html new file mode 100644 index 00000000000..a018e59853d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/logical-props-002.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>writing-modes and logical props: tbody</title> +<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#placement"> +<link rel="match" href="reference/logical-props-001-ref.html" +<meta name="assert" content="The logical properties on table row groups are resolved taking the writing mode of the element into account, + even though the writing mode property does not apply to that element."> +<style> +table { border-collapse: collapse; } +td { + padding: 0; + height: 100px; + width: 100px; +} +tbody { + writing-mode: vertical-rl; + border-inline-start: 5px green solid; +} + +.red { + position: absolute; + width: 100px; + height: 5px; + background: red; + z-index: -1; +} + +</style> +<body> + <p>Test passes if there is a <strong>horizontal green stripe</strong> below and <strong>no red</strong>. + <div class=red></div> + <table><tbody><tr><td> </td></tr></tbody></table> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/logical-props-003.html b/tests/wpt/web-platform-tests/css/css-writing-modes/logical-props-003.html new file mode 100644 index 00000000000..64e272d4514 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/logical-props-003.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>writing-modes and logical props: col</title> +<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#placement"> +<link rel="match" href="reference/logical-props-001-ref.html" +<meta name="assert" content="The logical properties on table columns are resolved taking the writing mode of the element into account, + even though the writing mode property does not apply to that element."> +<style> +table { border-collapse: collapse; } +td { + padding: 0; + height: 100px; + width: 100px; +} +col { + writing-mode: vertical-rl; + border-inline-start: 5px green solid; +} + +.red { + position: absolute; + width: 100px; + height: 5px; + background: red; + z-index: -1; +} + +</style> +<body> + <p>Test passes if there is a <strong>horizontal green stripe</strong> below and <strong>no red</strong>. + <div class=red></div> + <table><col><tbody><tr><td> </td></tr></tbody></table> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/logical-props-004.html b/tests/wpt/web-platform-tests/css/css-writing-modes/logical-props-004.html new file mode 100644 index 00000000000..556794d7fa8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/logical-props-004.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>writing-modes and logical props: colgroup</title> +<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#placement"> +<link rel="match" href="reference/logical-props-001-ref.html" +<meta name="assert" content="The logical properties on table column groups are resolved taking the writing mode of the element into account, + even though the writing mode property does not apply to that element."> +<style> +table { border-collapse: collapse; } +td { + padding: 0; + height: 100px; + width: 100px; +} +colgroup { + writing-mode: vertical-rl; + border-inline-start: 5px green solid; +} + +.red { + position: absolute; + width: 100px; + height: 5px; + background: red; + z-index: -1; +} + +</style> +<body> + <p>Test passes if there is a <strong>horizontal green stripe</strong> below and <strong>no red</strong>. + <div class=red></div> + <table><colgroup><tbody><tr><td> </td></tr></tbody></table> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/mongolian-orientation-001.html b/tests/wpt/web-platform-tests/css/css-writing-modes/mongolian-orientation-001.html new file mode 100644 index 00000000000..0c3271c0dc0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/mongolian-orientation-001.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Writing Modes Test: orientation of mongolian</title> +<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> +<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#text-orientation"> +<link rel="match" href="reference/mongolian-orientation-001-ref.html"> +<meta name="assert" content="Mongolian is intrinsicly vertical, mixed and upright text-orientation are expected to be the same."> +<style> +div { + font-family: "Mongolian White"; /* Not required for the test to work, +but it helps make it look not ugly if you have the font installed.*/ + font-size: 2em; + margin: 1em; + writing-mode: vertical-lr; + float: left; +} +div:nth-of-type(1) { text-orientation: mixed; } +div:nth-of-type(2) { text-orientation: upright; } +</style> + +<p>The test passes if you see two identical lines of vertical text (in Mongolian). + +<div>ᠮᠣᠨᠭᠭᠣᠯ ᠬᠡᠯᠡ</div> +<div>ᠮᠣᠨᠭᠭᠣᠯ ᠬᠡᠯᠡ</div> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/mongolian-orientation-002.html b/tests/wpt/web-platform-tests/css/css-writing-modes/mongolian-orientation-002.html new file mode 100644 index 00000000000..66dde36ac09 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/mongolian-orientation-002.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Writing Modes Test: orientation of mongolian</title> +<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> +<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#text-orientation"> +<link rel="match" href="reference/mongolian-orientation-001-ref.html"> +<meta name="assert" content="In Mongolian, in horizontal text, glyphs are typeset in a 90° counter-clockwise rotation from their intrisic vertical orientation. text-orientation:sideways causes all text to be typeset sideways, as if in a horizontal layout, but rotated 90° clockwise. text-orientation:mixed causes typographic character units from vertical scripts are typeset with their intrinsic orientation. These two should therefore result in the same thing"> +<style> +div { + font-family: "Mongolian White"; /* Not required for the test to work, +but it helps make it look not ugly if you have the font installed.*/ + font-size: 2em; + margin: 1em; + writing-mode: vertical-lr; + float: left; +} +div:nth-of-type(1) { text-orientation: mixed; } +div:nth-of-type(2) { text-orientation: sideways; } +</style> + +<p>The test passes if you see two identical lines of vertical text (in Mongolian). + +<div>ᠮᠣᠨᠭᠭᠣᠯ ᠬᠡᠯᠡ</div> +<div>ᠮᠣᠨᠭᠭᠣᠯ ᠬᠡᠯᠡ</div> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/nested-orthogonal-001.html b/tests/wpt/web-platform-tests/css/css-writing-modes/nested-orthogonal-001.html new file mode 100644 index 00000000000..bcd2e2aff24 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/nested-orthogonal-001.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Writing mode</title> +<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> +<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#orthogonal-flows"> +<link rel="match" href="../reference/ref-filled-green-100px-square.xht"> +<meta name="assert" content="In the face of multiple levels of orthogonal flow nesting, children's sizes propagate up to parents."> +<meta name="flags" content=""> +<style> +body > div { + background: green; + writing-mode: vertical-lr; +} + +div > div { writing-mode: horizontal-tb; } + +div > div > div { + writing-mode: vertical-rl; + height: 100px; + font-size: 100px; + line-height: 1; +} +</style> + +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> + +<div> + <div><div> </div></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/reference/available-size-001-ref.html b/tests/wpt/web-platform-tests/css/css-writing-modes/reference/available-size-001-ref.html new file mode 100644 index 00000000000..84252946946 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/reference/available-size-001-ref.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Test reference</title> +<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> +<style> +body > div { + font-family: monospace; /* to be able to reliably measure things in ch*/ + font-size: 20px; + color: transparent; + writing-mode: vertical-rl; + background: green; + border-top: 1ch solid white; +} +</style> + +<p>Test passes if there is a <strong>green rectangle</strong> below and <strong>no red</strong>. + +<div>0</div> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/reference/available-size-002-ref.html b/tests/wpt/web-platform-tests/css/css-writing-modes/reference/available-size-002-ref.html new file mode 100644 index 00000000000..6fdbf9a2e34 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/reference/available-size-002-ref.html @@ -0,0 +1,17 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Test reference</title> +<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> +<style> +body > div { + font-family: monospace; /* to be able to reliably measure things in ch*/ + font-size: 20px; + color: transparent; + writing-mode: vertical-rl; + background: green; +} +</style> + +<p>Test passes if there is a <strong>green rectangle</strong> below and <strong>no red</strong>. + +<div>0</div> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/reference/ch-units-vrl-001-ref.html b/tests/wpt/web-platform-tests/css/css-writing-modes/reference/ch-units-vrl-001-ref.html new file mode 100644 index 00000000000..7bb13b36e26 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/reference/ch-units-vrl-001-ref.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS test reference</title> +<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<style> +div { + font-size: 20px; + color: transparent; +} + +div:nth-of-type(1) { background: green; } +div:nth-of-type(2) { background: blue; } +div:nth-of-type(1), +div:nth-of-type(2) { + writing-mode: vertical-rl; + text-orientation: upright; + height: 5ch; + width: 5ch; +} +div:nth-of-type(3) { + background: orange; + height: 5ch; + width: 5ch; +} +</style> +<body> + <p>Test passes if there is a <strong>green square</strong> below, and if it is the <strong>same size as the blue</strong> one, not the orange one. + <p>If any of the 3 colored shapes is not a square, or if the orange and blue squares are the same size, the test fails. + <div></div> + <div></div> + <div></div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/reference/ch-units-vrl-005-ref.html b/tests/wpt/web-platform-tests/css/css-writing-modes/reference/ch-units-vrl-005-ref.html new file mode 100644 index 00000000000..dcbe650864c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/reference/ch-units-vrl-005-ref.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS test reference</title> +<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<style> +div { + font-size: 20px; + color: transparent; +} + +div:nth-of-type(1) { background: green; } +div:nth-of-type(2) { background: blue; } +div:nth-of-type(1), +div:nth-of-type(2) { + height: 5ch; + width: 5ch; +} +div:nth-of-type(3) { + background: orange; + writing-mode: vertical-rl; + text-orientation: upright; + height: 5ch; + width: 5ch; +} +</style> +<body> + <p>Test passes if there is a <strong>green square</strong> below, and if it is the <strong>same size as the blue</strong> one, not the orange one. + <p>If any of the 3 colored shapes is not a square, or if the orange and blue squares are the same size, the test fails. + <div></div> + <div></div> + <div></div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/reference/logical-props-001-ref.html b/tests/wpt/web-platform-tests/css/css-writing-modes/reference/logical-props-001-ref.html new file mode 100644 index 00000000000..2154a8d3f77 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/reference/logical-props-001-ref.html @@ -0,0 +1,17 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS test reference</title> +<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<style> +div { + position: absolute; + width: 100px; + height: 5px; + background: green; +} + +</style> +<body> + <p>Test passes if there is a <strong>horizontal green stripe</strong> below and <strong>no red</strong>. + <div></div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/reference/mongolian-orientation-001-ref.html b/tests/wpt/web-platform-tests/css/css-writing-modes/reference/mongolian-orientation-001-ref.html new file mode 100644 index 00000000000..66cb618b4a6 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/reference/mongolian-orientation-001-ref.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Writing Modes Test Reference</title> +<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> +<style> +div { + font-family: "Mongolian White"; + font-size: 2em; + margin: 1em; + writing-mode: vertical-lr; + float: left; +} +div:nth-of-type(1) { text-orientation: sideways; } +div:nth-of-type(2) { text-orientation: sideways; } +</style> + +<p>The test passes if you see two identical lines of vertical text (in Mongolian). + +<div>ᠮᠣᠨᠭᠭᠣᠯ ᠬᠡᠯᠡ</div> +<div>ᠮᠣᠨᠭᠭᠣᠯ ᠬᠡᠯᠡ</div> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/reference/svg-aliasing-001-ref.html b/tests/wpt/web-platform-tests/css/css-writing-modes/reference/svg-aliasing-001-ref.html new file mode 100644 index 00000000000..75461923ea8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/reference/svg-aliasing-001-ref.html @@ -0,0 +1,23 @@ +<!doctype html> +<meta charset="utf-8"> +<title>Writing modes test reference</title> +<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> +<p>The test passes if you can see “1 2 3” 6 times below (without the quotation marks). If any of them is reversed (“3 2 1”) the test fails.</p> +<svg + xmlns="http://www.w3.org/2000/svg" + width="300" + height="600"> +<g> + <text x="0" y="50" style="fill: blue;">1 2 3</text> + <text x="0" y="150" style="fill: blue;">1 2 3</text> +</g> +<g> + <text x="150" y="50" style="fill: blue;">1 2 3</text> + <text x="150" y="150" style="fill: blue;">1 2 3</text> +</g> +<g> + <text x="300" y="50" style="direction: rtl; fill: blue;">3 2 1</text> + <text x="300" y="150" style="direction: rtl; fill: blue;">3 2 1</text> +</g> +</svg> + diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/reference/svg-aliasing-002-ref.html b/tests/wpt/web-platform-tests/css/css-writing-modes/reference/svg-aliasing-002-ref.html new file mode 100644 index 00000000000..be3b7d0b1d2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/reference/svg-aliasing-002-ref.html @@ -0,0 +1,21 @@ +<!doctype html> +<meta charset="utf-8"> +<title>Writing modes test reference</title> +<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> +<p>The test passes if you can see “1 2 3” (without the quotation marks) 3 times below going top-to-bottom. +If any of them is reversed (going bottom to top), the test fails.</p> +<svg + xmlns="http://www.w3.org/2000/svg" + width="300" + height="600"> +<g> + <text x="50" y="50" style="writing-mode: vertical-rl; fill: blue;">1 2 3</text> +</g> +<g> + <text x="125" y="50" style="writing-mode: vertical-rl; fill: blue;">1 2 3</text> +</g> +<g> + <text x="200" y="80" style="writing-mode: vertical-rl; direction: rtl; fill: blue;">3 2 1</text> +</g> +</svg> + diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/svg-aliasing-001.html b/tests/wpt/web-platform-tests/css/css-writing-modes/svg-aliasing-001.html new file mode 100644 index 00000000000..bc32f202e2b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/svg-aliasing-001.html @@ -0,0 +1,28 @@ +<!doctype html> +<meta charset="utf-8"> +<title>SVG writing modes values parsed as aliases</title> +<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> +<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#svg-writing-mode"> +<link rel="match" href="reference/svg-aliasing-001-ref.html" +<meta name="assert" content="The legacy SVG writing mode values are parsed as simple aliases of the newer ones, and do not have side effects on bidi."> +<meta name="flags" content="may"> <!-- "may" because the support for these values is optional--> + +<p>The test passes if you can see “1 2 3” 6 times below (without the quotation marks). If any of them is reversed (“3 2 1”) the test fails.</p> +<svg + xmlns="http://www.w3.org/2000/svg" + width="300" + height="600"> +<g style="direction: ltr"> + <text x="0" y="50" style="writing-mode: lr; fill: blue;">1 2 3</text> + <text x="0" y="150" style="writing-mode: rl; fill: blue;">1 2 3</text> +</g> +<g> + <text x="150" y="50" style="writing-mode: lr; fill: blue;">1 2 3</text> + <text x="150" y="150" style="writing-mode: rl; fill: blue;">1 2 3</text> +</g> +<g style="direction: rtl"> + <text x="300" y="50" style="writing-mode: lr; fill: blue;">3 2 1</text> + <text x="300" y="150" style="writing-mode: rl; fill: blue;">3 2 1</text> +</g> +</svg> + diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/svg-aliasing-002.html b/tests/wpt/web-platform-tests/css/css-writing-modes/svg-aliasing-002.html new file mode 100644 index 00000000000..c1b26279cf1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/svg-aliasing-002.html @@ -0,0 +1,26 @@ +<!doctype html> +<meta charset="utf-8"> +<title>SVG writing modes values parsed as aliases</title> +<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> +<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#svg-writing-mode"> +<link rel="match" href="reference/svg-aliasing-002-ref.html" +<meta name="assert" content="The legacy SVG writing mode values are parsed as simple aliases of the newer ones, and do not have side effects on bidi."> +<meta name="flags" content="may"> <!-- "may" because the support for these values is optional--> + +<p>The test passes if you can see “1 2 3” (without the quotation marks) 3 times below going top-to-bottom. +If any of them is reversed (going bottom to top), the test fails.</p> +<svg + xmlns="http://www.w3.org/2000/svg" + width="300" + height="600"> +<g style="direction: ltr"> + <text x="50" y="50" style="writing-mode: tb; fill: blue;">1 2 3</text> +</g> +<g> + <text x="125" y="50" style="writing-mode: tb; fill: blue;">1 2 3</text> +</g> +<g style="direction: rtl"> + <text x="200" y="80" style="writing-mode: tb; fill: blue;">3 2 1</text> +</g> +</svg> + diff --git a/tests/wpt/web-platform-tests/css/cssom-view/elementFromPoint-dynamic-anon-box.html b/tests/wpt/web-platform-tests/css/cssom-view/elementFromPoint-dynamic-anon-box.html new file mode 100644 index 00000000000..e0acb90fb8f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/cssom-view/elementFromPoint-dynamic-anon-box.html @@ -0,0 +1,44 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Test: Hit testing on element previously hidden by an anonymous scroll box</title> +<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io"> +<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1433591"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> +html, body { + margin: 0; + padding: 0; +} +/* + Create a hidden scrollbox that occupies the whole viewport, then give it + visibility: hidden dynamically. The link previously under the scrollbox + should be clickable. + */ +.scrollable { + position: absolute; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + overflow: scroll; +} + +.scrollable .inner { + display: table-cell; + width: 100vw; + height: 100vh; +} +</style> +<div class="scrollable"> + <div class="inner"></div> +</div> +<a href="#">Should be clickable</a> +<script> +test(function() { + assert_equals(document.elementFromPoint(10, 10).tagName, "DIV", + "Should hit the scrollbox contents"); + document.querySelector('div').style.visibility = "hidden"; + assert_equals(document.elementFromPoint(10, 10), document.querySelector('a')); +}, "Link should be clickable after hiding a scrollbox with an anonymous table inside"); +</script> diff --git a/tests/wpt/web-platform-tests/css/cssom-view/overscrollBehavior-manual.html b/tests/wpt/web-platform-tests/css/cssom-view/overscrollBehavior-manual.html index 78a5d7e7563..d66317fe306 100644 --- a/tests/wpt/web-platform-tests/css/cssom-view/overscrollBehavior-manual.html +++ b/tests/wpt/web-platform-tests/css/cssom-view/overscrollBehavior-manual.html @@ -79,6 +79,7 @@ function set_boundary_prevents_y() { container.style.overscrollBehaviorY = 'none'; setUpForRoot(100); setUpForContainer(0); + window.scrollTo(0, 0); } function verify_y_prevented_and_set_boundary_prevents_x() { @@ -87,12 +88,14 @@ function verify_y_prevented_and_set_boundary_prevents_x() { test.step(function() { assert_equals(root.scrollTop, 100); assert_equals(root.scrollLeft, 0); + window.scrollTo(0, 0); }, "overscroll-behavior-y: none should only prevent scroll propagation on y axis."); container.style.overscrollBehaviorX = 'none'; container.style.overscrollBehaviorY = 'auto'; setUpForRoot(100); setUpForContainer(0); + window.scrollTo(0, 0); } function verify_x_prevented_and_set_boundary_allows_inner() { @@ -107,6 +110,7 @@ function verify_x_prevented_and_set_boundary_allows_inner() { container.style.overscrollBehaviorY = 'none'; setUpForRoot(100); setUpForContainer(100); + window.scrollTo(0, 0); } function verify_inner_allowed_and_set_nonscrollable_allows_propagation() { @@ -124,6 +128,7 @@ function verify_inner_allowed_and_set_nonscrollable_allows_propagation() { non_scrollable.style.overscrollBehaviorX = 'none'; non_scrollable.style.overscrollBehaviorY = 'none'; setUpForRoot(100); + window.scrollTo(0, 0); } function verify_non_scrollable_allows_propagation() { diff --git a/tests/wpt/web-platform-tests/css/cssom-view/scrollIntoView-scrollMargin.html b/tests/wpt/web-platform-tests/css/cssom-view/scrollIntoView-scrollMargin.html new file mode 100644 index 00000000000..930702aa879 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/cssom-view/scrollIntoView-scrollMargin.html @@ -0,0 +1,78 @@ +<!DOCTYPE html> +<title>CSSOM View - scrollIntoView considers scroll-margin</title> +<meta charset="utf-8"> +<link rel="author" title="Sandra Sun" href="mailto:sunyunjia@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/cssom-view/#dom-element-scrollintoview"> +<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1/#scroll-margin"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<style> +#scroller { + width: 200px; + height: 200px; + overflow: scroll; +} +#content { + width: 500px; + height: 500px; +} +#target { + position: relative; + left: 200px; + top: 200px; + width: 100px; + height: 100px; + scroll-margin-top: 4px; + scroll-margin-right: 8px; + scroll-margin-bottom: 12px; + scroll-margin-left: 16px; + background-color: lightgreen; +} +</style> + +<div id="scroller"> + <div id="content"> + <div id="target"></div> + </div> +</div> +<div id="log"></div> + +<script> +var target = document.getElementById("target"); +var scroller = document.getElementById("scroller"); + +var expectedXLeft = 200 - 16; +var expectedXRight = 200 - scroller.clientWidth + target.clientWidth + 8; +var expectedXCenter = 200 - (scroller.clientWidth / 2) + + (target.clientWidth + 8 - 16) / 2; + +var expectedYTop = 200 - 4; +var expectedYBottom = 200 - scroller.clientHeight + target.clientHeight + 12; +var expectedYCenter = 200 - (scroller.clientHeight / 2) + + (target.clientHeight + 12 - 4) / 2; + +// This formats dict as a string suitable as test name. +// format_value() is provided by testharness.js, +// which also preserves sign for -0. +function format_dict(dict) { + const props = []; + for (let prop in dict) { + props.push(`${prop}: ${format_value(dict[prop])}`); + } + return `{${props.join(", ")}}`; +} + +[ + [{block: "center", inline: "center"}, expectedXCenter, expectedYCenter], + [{block: "start", inline: "start"}, expectedXLeft, expectedYTop], + [{block: "end", inline: "end"}, expectedXRight, expectedYBottom], +].forEach(([input, expectedX, expectedY]) => { + test(() => { + scroller.scrollTo(0, 0); + target.scrollIntoView(input); + assert_approx_equals(scroller.scrollLeft, expectedX, 0.5, "scrollX"); + assert_approx_equals(scroller.scrollTop, expectedY, 0.5, "scrollY"); + }, `scrollIntoView(${format_dict(input)})`); +}) +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/cssom-view/scrollIntoView-scrollPadding.html b/tests/wpt/web-platform-tests/css/cssom-view/scrollIntoView-scrollPadding.html new file mode 100644 index 00000000000..5fdedf753d7 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/cssom-view/scrollIntoView-scrollPadding.html @@ -0,0 +1,77 @@ +<!DOCTYPE html> +<title>CSSOM View - scrollIntoView considers scroll-padding</title> +<meta charset="utf-8"> +<link rel="author" title="Sandra Sun" href="mailto:sunyunjia@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/cssom-view/#dom-element-scrollintoview"> +<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1/#scroll-padding"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<style> +#scroller { + width: 200px; + height: 200px; + overflow: scroll; + scroll-padding-top: 4px; + scroll-padding-right: 8px; + scroll-padding-bottom: 12px; + scroll-padding-left: 16px; +} +#content { + width: 500px; + height: 500px; +} +#target { + position: relative; + left: 200px; + top: 200px; + width: 100px; + height: 100px; + background-color: lightgreen; +} +</style> + +<div id="scroller"> + <div id="content"> + <div id="target"></div> + </div> +</div> +<div id="log"></div> + +<script> +var target = document.getElementById("target"); +var scroller = document.getElementById("scroller"); +var expectedXLeft = 200 - 16; +var expectedXRight = 200 - scroller.clientWidth + 8 + target.clientWidth; +var expectedXCenter = 200 - (16 + scroller.clientWidth - 8) / 2 + + target.clientWidth / 2; + +var expectedYTop = 200 - 4; +var expectedYBottom = 200 - scroller.clientHeight + 12 + target.clientHeight; +var expectedYCenter = 200 - (4 + scroller.clientHeight - 12) / 2 + + target.clientHeight / 2; + +// This formats dict as a string suitable as test name. +// format_value() is provided by testharness.js, +// which also preserves sign for -0. +function format_dict(dict) { + const props = []; + for (let prop in dict) { + props.push(`${prop}: ${format_value(dict[prop])}`); + } + return `{${props.join(", ")}}`; +} + +[ + [{block: "center", inline: "center"}, expectedXCenter, expectedYCenter], + [{block: "start", inline: "start"}, expectedXLeft, expectedYTop], + [{block: "end", inline: "end"}, expectedXRight, expectedYBottom], +].forEach(([input, expectedX, expectedY]) => { + test(() => { + scroller.scrollTo(0, 0); + target.scrollIntoView(input); + assert_approx_equals(scroller.scrollLeft, expectedX, 0.5, "scrollX"); + assert_approx_equals(scroller.scrollTop, expectedY, 0.5, "scrollY"); + }, `scrollIntoView(${format_dict(input)})`); +}) +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/cssom/MediaList.html b/tests/wpt/web-platform-tests/css/cssom/MediaList.html index b39fb20478e..17d43199b58 100644 --- a/tests/wpt/web-platform-tests/css/cssom/MediaList.html +++ b/tests/wpt/web-platform-tests/css/cssom/MediaList.html @@ -14,6 +14,7 @@ var media = document.styleSheets[0].cssRules[0].media; assert_equals(media.length, 3, "MediaList length attribute"); assert_equals(media.mediaText, "screen and (min-width: 480px), print, projection", "MediaList mediaText attribute"); + assert_equals(media.toString(), "screen and (min-width: 480px), print, projection", "MediaList toString method"); assert_equals(media[0], "screen and (min-width: 480px)", "MediaList indexed getter"); assert_equals(media[1], "print", "MediaList indexed getter"); assert_equals(media[2], "projection", "MediaList indexed getter"); @@ -24,6 +25,7 @@ media.deleteMedium("print"); assert_equals(media.length, 2, "MediaList length attribute after delete method"); assert_equals(media.mediaText, "screen and (min-width: 480px), projection", "MediaList mediaText attribute after delete method"); + assert_equals(media.toString(), "screen and (min-width: 480px), projection", "MediaList toString method after delete method"); assert_equals(media[1], "projection", "MediaList indexed getter after delete method"); assert_equals(media[2], undefined, "MediaList indexed getter with out of range after delete method"); assert_equals(media.item(1), "projection", "MediaList indexed getter after delete method"); @@ -32,11 +34,16 @@ media.appendMedium("speech"); assert_equals(media.length, 3, "MediaList length attribute after append method"); assert_equals(media.mediaText, "screen and (min-width: 480px), projection, speech", "MediaList mediaText attribute after append method"); + assert_equals(media.toString(), "screen and (min-width: 480px), projection, speech", "MediaList toString method after append method"); assert_equals(media[1], "projection", "MediaList indexed getter after append method"); assert_equals(media[2], "speech", "MediaList indexed getter after append method"); assert_equals(media[3], undefined, "MediaList indexed getter with out of range after append method"); assert_equals(media.item(2), "speech", "MediaList item method after append method"); assert_equals(media.item(3), null, "MediaList item method after append method"); + + media.mediaText = null; + assert_equals(media.mediaText, "", "MediaList mediaText attribute should be empty string in case of null"); + assert_equals(media.toString(), "", "MediaList toString method should be empty string in case of null"); }); </script> </head> diff --git a/tests/wpt/web-platform-tests/css/fonts/noto/NotoSansAdlam-hinted/LICENSE_OFL.txt b/tests/wpt/web-platform-tests/css/fonts/noto/NotoSansAdlam-hinted/LICENSE_OFL.txt new file mode 100644 index 00000000000..d952d62c065 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/fonts/noto/NotoSansAdlam-hinted/LICENSE_OFL.txt @@ -0,0 +1,92 @@ +This Font Software is licensed under the SIL Open Font License, +Version 1.1. + +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font +creation efforts of academic and linguistic communities, and to +provide a free and open framework in which fonts may be shared and +improved in partnership with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply to +any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software +components as distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, +deleting, or substituting -- in part or in whole -- any of the +components of the Original Version, by changing formats or by porting +the Font Software to a new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, +modify, redistribute, and sell modified and unmodified copies of the +Font Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, in +Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the +corresponding Copyright Holder. This restriction only applies to the +primary font name as presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created using +the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/tests/wpt/web-platform-tests/css/fonts/noto/NotoSansAdlam-hinted/NotoSansAdlam-Regular.ttf b/tests/wpt/web-platform-tests/css/fonts/noto/NotoSansAdlam-hinted/NotoSansAdlam-Regular.ttf Binary files differnew file mode 100644 index 00000000000..0ab5d995c96 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/fonts/noto/NotoSansAdlam-hinted/NotoSansAdlam-Regular.ttf diff --git a/tests/wpt/web-platform-tests/css/fonts/noto/NotoSansAdlam-hinted/README b/tests/wpt/web-platform-tests/css/fonts/noto/NotoSansAdlam-hinted/README new file mode 100644 index 00000000000..d22876499aa --- /dev/null +++ b/tests/wpt/web-platform-tests/css/fonts/noto/NotoSansAdlam-hinted/README @@ -0,0 +1,11 @@ +This package is part of the noto project. Visit +google.com/get/noto for more information. + +Built on 2017-10-24 from the following noto repository: +----- +Repo: noto-fonts +Tag: v2017-10-24-phase3-second-cleanup +Date: 2017-10-24 12:10:34 GMT +Commit: 8ef14e6c606a7a0ef3943b9ca01fd49445620d79 + +Remove some files that aren't for release. diff --git a/tests/wpt/web-platform-tests/css/fonts/noto/NotoSansCypriot-hinted/LICENSE_OFL.txt b/tests/wpt/web-platform-tests/css/fonts/noto/NotoSansCypriot-hinted/LICENSE_OFL.txt new file mode 100644 index 00000000000..d952d62c065 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/fonts/noto/NotoSansCypriot-hinted/LICENSE_OFL.txt @@ -0,0 +1,92 @@ +This Font Software is licensed under the SIL Open Font License, +Version 1.1. + +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font +creation efforts of academic and linguistic communities, and to +provide a free and open framework in which fonts may be shared and +improved in partnership with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply to +any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software +components as distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, +deleting, or substituting -- in part or in whole -- any of the +components of the Original Version, by changing formats or by porting +the Font Software to a new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, +modify, redistribute, and sell modified and unmodified copies of the +Font Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, in +Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the +corresponding Copyright Holder. This restriction only applies to the +primary font name as presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created using +the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/tests/wpt/web-platform-tests/css/fonts/noto/NotoSansCypriot-hinted/NotoSansCypriot-Regular.ttf b/tests/wpt/web-platform-tests/css/fonts/noto/NotoSansCypriot-hinted/NotoSansCypriot-Regular.ttf Binary files differnew file mode 100644 index 00000000000..6727e13d628 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/fonts/noto/NotoSansCypriot-hinted/NotoSansCypriot-Regular.ttf diff --git a/tests/wpt/web-platform-tests/css/fonts/noto/NotoSansCypriot-hinted/README b/tests/wpt/web-platform-tests/css/fonts/noto/NotoSansCypriot-hinted/README new file mode 100644 index 00000000000..d22876499aa --- /dev/null +++ b/tests/wpt/web-platform-tests/css/fonts/noto/NotoSansCypriot-hinted/README @@ -0,0 +1,11 @@ +This package is part of the noto project. Visit +google.com/get/noto for more information. + +Built on 2017-10-24 from the following noto repository: +----- +Repo: noto-fonts +Tag: v2017-10-24-phase3-second-cleanup +Date: 2017-10-24 12:10:34 GMT +Commit: 8ef14e6c606a7a0ef3943b9ca01fd49445620d79 + +Remove some files that aren't for release. diff --git a/tests/wpt/web-platform-tests/css/mediaqueries/test_media_queries.html b/tests/wpt/web-platform-tests/css/mediaqueries/test_media_queries.html index a305d7a032b..c7b651d96c3 100644 --- a/tests/wpt/web-platform-tests/css/mediaqueries/test_media_queries.html +++ b/tests/wpt/web-platform-tests/css/mediaqueries/test_media_queries.html @@ -431,6 +431,8 @@ function run() { should_apply("(orientation"); should_not_apply("not all and (orientation"); should_not_apply("(orientation:"); + should_not_apply("(orientation:)"); + should_not_apply("(orientation: )"); should_apply("all,(orientation:"); should_not_apply("(orientation:,all"); should_apply("not all and (grid"); diff --git a/tests/wpt/web-platform-tests/css/selectors/hover-002-manual.html b/tests/wpt/web-platform-tests/css/selectors/hover-002-manual.html new file mode 100644 index 00000000000..50859c5cfb8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/selectors/hover-002-manual.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Selectors: Change class to enable :hover</title> +<link rel="author" title="Rune Lillesveen" href="futhark@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/selectors/#the-hover-pseudo"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> + .affected:hover { color: green } + #hoveredContents { display: contents } +</style> +<div id="hovered">Hover me - should become green</div> +<div id="hoveredContents"> + <div id="hovered2">Hover me - should become green</div> +</div> +<script> + function testElementGreen(test, element) { + element.addEventListener("mouseover", test.step_func(event => { + assert_equals(getComputedStyle(element).color, "rgb(0, 128, 0)"); + test.done(); + })); + } + + // Setting the affected classes here makes the two elements go from never + // reacting to hover to being affected by hover without changing computed + // style. + hovered.offsetTop; + hovered.className = "affected"; + hoveredContents.className = "affected"; + + async_test(t => { testElementGreen(t, hovered); }, "Hover #hovered element should make it go green"); + async_test(t => { testElementGreen(t, hovered2); }, "Hover #hoveredContents child should make it go green"); +</script> diff --git a/tests/wpt/web-platform-tests/css/selectors/invalidation/selectorText-dynamic-001.html b/tests/wpt/web-platform-tests/css/selectors/invalidation/selectorText-dynamic-001.html new file mode 100644 index 00000000000..c705c2b3e85 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/selectors/invalidation/selectorText-dynamic-001.html @@ -0,0 +1,24 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Test: invalidation of class changes when the selector in a rule has changed</title> +<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io"> +<link rel="help" href="https://drafts.csswg.org/selectors-4/"> +<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1432850"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> + body { background: green; } + .red { background: red; } +</style> +<body class="red"> +Should have a green background. +<script> +test(() => { + document.body.offsetTop; + assert_equals(getComputedStyle(document.body).backgroundColor, "rgb(255, 0, 0)"); + document.body.className = ""; + document.styleSheets[0].cssRules[1].selectorText = ".bar"; + assert_equals(getComputedStyle(document.body).backgroundColor, "rgb(0, 128, 0)"); +}, "Style should be recomputed correctly when the selector it depends on changes"); +</script> +</body> diff --git a/tests/wpt/web-platform-tests/css/selectors/invalidation/sheet-going-away-001.html b/tests/wpt/web-platform-tests/css/selectors/invalidation/sheet-going-away-001.html new file mode 100644 index 00000000000..7b704eca97f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/selectors/invalidation/sheet-going-away-001.html @@ -0,0 +1,26 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Test: invalidation of class changes when the sheet the style depends on goes away</title> +<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io"> +<link rel="help" href="https://drafts.csswg.org/selectors-4/"> +<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1432850"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> + body { background: green; } +</style> +<style id="style"> + .red { background: red; } +</style> +<body class="red"> +Should have a green background. +<script> +test(() => { + document.body.offsetTop; + assert_equals(getComputedStyle(document.body).backgroundColor, "rgb(255, 0, 0)"); + document.body.className = ""; + style.remove(); + assert_equals(getComputedStyle(document.body).backgroundColor, "rgb(0, 128, 0)"); +}, "Style should be recomputed correctly when the stylesheet it depends on goes away"); +</script> +</body> diff --git a/tests/wpt/web-platform-tests/css/selectors/invalidation/sheet-going-away-002-ref.html b/tests/wpt/web-platform-tests/css/selectors/invalidation/sheet-going-away-002-ref.html new file mode 100644 index 00000000000..67841617736 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/selectors/invalidation/sheet-going-away-002-ref.html @@ -0,0 +1,7 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Test Reference</title> +<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io"> +<p style="color: green"> + Should be green. +</p> diff --git a/tests/wpt/web-platform-tests/css/selectors/invalidation/sheet-going-away-002.html b/tests/wpt/web-platform-tests/css/selectors/invalidation/sheet-going-away-002.html new file mode 100644 index 00000000000..41778239518 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/selectors/invalidation/sheet-going-away-002.html @@ -0,0 +1,23 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Test: invalidation of class changes when the sheet the style depends on goes away</title> +<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io"> +<link rel="help" href="https://drafts.csswg.org/selectors-4/"> +<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1432850"> +<link rel="match" href="sheet-going-away-002-ref.html"> +<style> + p { color: green; } +</style> +<style id="style"> + .red p { color: red; } +</style> +<body class="red"> +<p> + Should be green. +</p> +<script> +document.body.offsetTop; +document.body.className = ""; +style.remove(); +</script> +</body> diff --git a/tests/wpt/web-platform-tests/css/selectors/selector-structural-pseudo-root-ref.html b/tests/wpt/web-platform-tests/css/selectors/selector-structural-pseudo-root-ref.html new file mode 100644 index 00000000000..6523fd3b64f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/selectors/selector-structural-pseudo-root-ref.html @@ -0,0 +1,7 @@ +<!DOCTYPE html> +<style> +html { background: green; } +</style> +<body> + +</body> diff --git a/tests/wpt/web-platform-tests/css/selectors/selector-structural-pseudo-root.html b/tests/wpt/web-platform-tests/css/selectors/selector-structural-pseudo-root.html new file mode 100644 index 00000000000..2009ec17fb2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/selectors/selector-structural-pseudo-root.html @@ -0,0 +1,8 @@ +<!DOCTYPE html> +<style> +html { background: red; } +html:nth-child(1):nth-last-child(1):nth-of-type(1):nth-last-of-type(1):first-child:last-child:only-child:first-of-type:last-of-type:only-of-type { background: green; } +</style> +<link rel="help" href="https://www.w3.org/TR/css3-selectors/#structural-pseudos"> +<link rel="match" href="selector-structural-pseudo-root-ref.html"> +<meta name="assert" content="Structural pseudo-classes match the root element, sibling pseudos are based on siblings without needing a parent (Selectors 3 erratum)">
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/support/alignment.css b/tests/wpt/web-platform-tests/css/support/alignment.css new file mode 100644 index 00000000000..d4c970c52b5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/support/alignment.css @@ -0,0 +1,367 @@ +/* align-self */ +.alignSelfAuto { align-self: auto; } +.alignSelfNormal { align-self: normal; } +.alignSelfStretch { align-self: stretch; } +.alignSelfStart { align-self: start; } +.alignSelfEnd { align-self: end; } +.alignSelfCenter { align-self: center; } +.alignSelfRight { align-self: right; } +.alignSelfLeft { align-self: left; } + +.alignSelfFlexStart { align-self: flex-start; } +.alignSelfFlexEnd { align-self: flex-end; } + +.alignSelfSelfStart { align-self: self-start; } +.alignSelfSelfEnd { align-self: self-end; } + +.alignSelfSafeCenter { align-self: safe center; } +.alignSelfUnsafeCenter { align-self: unsafe center; } +.alignSelfSafeEnd { align-self: safe end; } +.alignSelfUnsafeEnd { align-self: unsafe end; } +.alignSelfSafeSelfEnd { align-self: safe self-end; } +.alignSelfUnsafeSelfEnd { align-self: unsafe self-end; } +.alignSelfSafeSelfStart { align-self: safe self-start; } +.alignSelfUnsafeSelfStart { align-self: unsafe self-start; } +.alignSelfSafeRight { align-self: safe right; } +.alignSelfUnsafeRight { align-self: unsafe right; } +.alignSelfSafeLeft { align-self: safe left; } +.alignSelfUnsafeLeft { align-self: unsafe left; } +.alignSelfSafeFlexEnd { align-self: safe flex-end; } +.alignSelfUnsafeFlexEnd { align-self: unsafe flex-end; } +.alignSelfSafeFlexStart { align-self: safe flex-start; } +.alignSelfUnsafeFlexStart { align-self: unsafe flex-start; } + +.alignSelfBaseline { align-self: baseline; } +.alignSelfFirstBaseline { align-self: first baseline; } +.alignSelfLastBaseline { align-self: last baseline; } + +/* align-items */ +.alignItemsAuto { align-items: auto; } +.alignItemsNormal { align-items: normal; } +.alignItemsStretch { align-items: stretch; } +.alignItemsStart { align-items: start; } +.alignItemsCenter { align-items: center; } +.alignItemsEnd { align-items: end; } +.alignItemsLeft { align-items: left; } +.alignItemsRight { align-items: right; } + +.alignItemsFlexStart { align-items: flex-start; } +.alignItemsFlexEnd { align-items: flex-end; } + +.alignItemsSelfStart { align-items: self-start; } +.alignItemsSelfEnd { align-items: self-end; } + +.alignItemsSafeCenter { align-items: safe center; } +.alignItemsUnsafeCenter { align-items: unsafe center; } +.alignItemsSafeEnd { align-items: safe end; } +.alignItemsUnsafeEnd { align-items: unsafe end; } +.alignItemsSafeSelfEnd { align-items: safe self-end; } +.alignItemsUnsafeSelfEnd { align-items: unsafe self-end; } +.alignItemsSafeSelfStart { align-items: safe self-start; } +.alignItemsUnsafeSelfStart { align-items: unsafe self-start; } +.alignItemsSafeRight { align-items: safe right; } +.alignItemsUnsafeRight { align-items: unsafe right; } +.alignItemsSafeLeft { align-items: safe left; } +.alignItemsUnsafeLeft { align-items: unsafe left; } +.alignItemsSafeFlexEnd { align-items: safe flex-end; } +.alignItemsUnsafeFlexEnd { align-items: unsafe flex-end; } +.alignItemsSafeFlexStart { align-items: safe flex-start; } +.alignItemsUnsafeFlexStart { align-items: unsafe flex-start; } + +.alignItemsBaseline { align-items: baseline; } +.alignItemsFirstBaseline { align-items: first baseline; } +.alignItemsLastBaseline { align-items: last baseline; } + +/* align-content */ +.alignContentBaseline { align-content: baseline; } +.alignContentLastBaseline { align-content: last-baseline; } +.alignContentStart { align-content: start; } +.alignContentEnd { align-content: end; } +.alignContentCenter { align-content: center; } +.alignContentLeft { align-content: left; } +.alignContentRight { align-content: right; } + +.alignContentFlexStart { align-content: flex-start; } +.alignContentFlexEnd { align-content: flex-end; } + +.alignContentSpaceBetween { align-content: space-between; } +.alignContentSpaceAround { align-content: space-around; } +.alignContentSpaceEvenly { align-content: space-evenly; } +.alignContentStretch { align-content: stretch; } + +.alignContentSafeCenter { align-content: safe center; } +.alignContentUnsafeCenter { align-content: unsafe center; } +.alignContentSafeEnd { align-content: safe end; } +.alignContentUnsafeEnd { align-content: unsafe end; } +.alignContentSafeRight { align-content: safe right; } +.alignContentUnsafeRight { align-content: unsafe right; } +.alignContentSafeLeft { align-content: safe left; } +.alignContentUnsafeLeft { align-content: unsafe left; } +.alignContentSafeFlexEnd { align-content: safe flex-end; } +.alignContentUnsafeFlexEnd { align-content: unsafe flex-end; } +.alignContentSafeFlexStart { align-content: safe flex-start; } +.alignContentUnsafeFlexStart { align-content: unsafe flex-start; } + +.alignContentBaseline { align-content: baseline; } +.alignContentFirstBaseline { align-content: first baseline; } +.alignContentLastBaseline { align-content: last baseline; } + +/* justify-self */ +.justifySelfAuto { justify-self: auto; } +.justifySelfNormal { justify-self: normal; } +.justifySelfStretch { justify-self: stretch; } +.justifySelfStart { justify-self: start; } +.justifySelfCenter { justify-self: center; } +.justifySelfEnd { justify-self: end; } +.justifySelfRight { justify-self: right; } +.justifySelfLeft { justify-self: left; } + +.justifySelfFlexStart { justify-self: flex-start; } +.justifySelfFlexEnd { justify-self: flex-end; } + +.justifySelfSelfStart { justify-self: self-start; } +.justifySelfSelfEnd { justify-self: self-end; } + +.justifySelfSafeCenter { justify-self: safe center; } +.justifySelfUnsafeCenter { justify-self: unsafe center; } +.justifySelfSafeEnd { justify-self: safe end; } +.justifySelfUnsafeEnd { justify-self: unsafe end; } +.justifySelfSafeSelfEnd { justify-self: safe self-end; } +.justifySelfUnsafeSelfEnd { justify-self: unsafe self-end; } +.justifySelfSafeSelfStart { justify-self: safe self-start; } +.justifySelfUnsafeSelfStart { justify-self: unsafe self-start; } +.justifySelfSafeRight { justify-self: safe right; } +.justifySelfUnsafeRight { justify-self: unsafe right; } +.justifySelfSafeLeft { justify-self: safe left; } +.justifySelfUnsafeLeft { justify-self: unsafe left; } +.justifySelfSafeFlexEnd { justify-self: safe flex-end; } +.justifySelfUnsafeFlexEnd { justify-self: unsafe flex-end; } +.justifySelfSafeFlexStart { justify-self: safe flex-start; } +.justifySelfUnsafeFlexStart { justify-self: unsafe flex-start; } + +.justifySelfBaseline { justify-self: baseline; } +.justifySelfFirstBaseline { justify-self: first baseline; } +.justifySelfLastBaseline { justify-self: last baseline; } + +/* justify-items */ +.justifyItemsAuto { justify-items: auto; } +.justifyItemsNormal { justify-items: normal; } +.justifyItemsStretch { justify-items: stretch; } +.justifyItemsStart { justify-items: start; } +.justifyItemsCenter { justify-items: center; } +.justifyItemsEnd { justify-items: end; } +.justifyItemsLeft { justify-items: left; } +.justifyItemsRight { justify-items: right; } + +.justifyItemsFlexStart { justify-items: flex-start; } +.justifyItemsFlexEnd { justify-items: flex-end; } + +.justifyItemsSelfStart { justify-items: self-start; } +.justifyItemsSelfEnd { justify-items: self-end; } + +.justifyItemsLegacy { justify-items: legacy; } +.justifyItemsLegacyLeft { justify-items: legacy left; } +.justifyItemsLegacyCenter { justify-items: legacy center; } +.justifyItemsLegacyRight { justify-items: legacy right; } +.justifyItemsLeftLegacy { justify-items: left legacy; } +.justifyItemsCenterLegacy { justify-items: center legacy; } +.justifyItemsRightLegacy { justify-items: right legacy; } + +.justifyItemsSafeCenter { justify-items: safe center; } +.justifyItemsUnsafeCenter { justify-items: unsafe center; } +.justifyItemsSafeEnd { justify-items: safe end; } +.justifyItemsUnsafeEnd { justify-items: unsafe end; } +.justifyItemsSafeSelfEnd { justify-items: safe self-end; } +.justifyItemsUnsafeSelfEnd { justify-items: unsafe self-end; } +.justifyItemsSafeSelfStart { justify-items: safe self-start; } +.justifyItemsUnsafeSelfStart { justify-items: unsafe self-start; } +.justifyItemsSafeRight { justify-items: safe right; } +.justifyItemsUnsafeRight { justify-items: unsafe right; } +.justifyItemsSafeLeft { justify-items: safe left; } +.justifyItemsUnsafeLeft { justify-items: unsafe left; } +.justifyItemsSafeFlexEnd { justify-items: safe flex-end; } +.justifyItemsUnsafeFlexEnd { justify-items: unsafe flex-end; } +.justifyItemsSafeFlexStart { justify-items: safe flex-start; } +.justifyItemsUnsafeFlexStart { justify-items: unsafe flex-start; } + +.justifyItemsTest { justify-items: safe end; } + +.justifyItemsBaseline { justify-items: baseline; } +.justifyItemsFirstBaseline { justify-items: first baseline; } +.justifyItemsLastBaseline { justify-items: last baseline; } + +/* justify-content */ +.justifyContentBaseline { justify-content: baseline; } +.justifyContentLastBaseline { justify-content: last-baseline; } +.justifyContentStart { justify-content: start; } +.justifyContentEnd { justify-content: end; } +.justifyContentCenter { justify-content: center; } +.justifyContentLeft { justify-content: left; } +.justifyContentRight { justify-content: right; } + +.justifyContentFlexStart { justify-content: flex-start; } +.justifyContentFlexEnd { justify-content: flex-end; } + +.justifyContentSpaceBetween { justify-content: space-between; } +.justifyContentSpaceAround { justify-content: space-around; } +.justifyContentSpaceEvenly { justify-content: space-evenly; } +.justifyContentStretch { justify-content: stretch; } + +.justifyContentSafeCenter { justify-content: safe center; } +.justifyContentUnsafeCenter { justify-content: unsafe center; } +.justifyContentSafeEnd { justify-content: safe end; } +.justifyContentUnsafeEnd { justify-content: unsafe end; } +.justifyContentSafeRight { justify-content: safe right; } +.justifyContentUnsafeRight { justify-content: unsafe right; } +.justifyContentSafeLeft { justify-content: safe left; } +.justifyContentUnsafeLeft { justify-content: unsafe left; } +.justifyContentSafeFlexEnd { justify-content: safe flex-end; } +.justifyContentUnsafeFlexEnd { justify-content: unsafe flex-end; } +.justifyContentSafeFlexStart { justify-content: safe flex-start; } +.justifyContentUnsafeFlexStart { justify-content: unsafe flex-start; } + +.justifyContentBaseline { justify-content: baseline; } +.justifyContentFirstBaseline { justify-content: first baseline; } +.justifyContentLastBaseline { justify-content: last baseline; } + +/* Both align-items and justify-items */ +.itemsNormal { + align-items: normal; + justify-items: normal; +} + +.itemsStretch { + align-items: stretch; + justify-items: stretch; +} + +.itemsStart { + align-items: start; + justify-items: start; +} + +.itemsCenter { + align-items: center; + justify-items: center; +} + +.itemsEnd { + align-items: end; + justify-items: end; +} + +.itemsLeft { + align-items: left; + justify-items: left; +} + +.itemsRight { + align-items: right; + justify-items: right; +} + +.itemsSelfStart { + align-items: self-start; + justify-items: self-start; +} + +.itemsSelfEnd { + align-items: self-end; + justify-items: self-end; +} +.itemsBaseline { + align-items: baseline; + justify-items: baseline; +} + +/* Both align-self and justify-self */ +.selfStretch { + align-self: stretch; + justify-self: stretch; +} +.selfStart { + align-self: start; + justify-self: start; +} +.selfEnd { + align-self: end; + justify-self: end; +} +.selfCenter { + align-self: center; + justify-self: center; +} +.selfRight { + align-self: right; + justify-self: right; +} +.selfLeft { + align-self: left; + justify-self: left; +} +.selfSelfStart { + align-self: self-start; + justify-self: self-start; +} +.selfSelfEnd { + align-self: self-end; + justify-self: self-end; +} +.selfBaseline { + align-self: baseline; + justify-self: baseline; +} + +/* Both align-content and justify-content */ +.contentStart { + align-content: start; + justify-content: start; +} +.contentCenter { + align-content: center; + justify-content: center; +} +.contentEnd { + align-content: end; + justify-content: end; +} + +.contentCenterSafe { + align-content: safe center; + justify-content: safe center; +} + +.contentCenterUnsafe { + align-content: unsafe center; + justify-content: unsafe center; +} + +.contentEndSafe { + align-content: safe end; + justify-content: safe end; +} + +.contentEndUnsafe { + align-content: unsafe end; + justify-content: unsafe end; +} + +.contentSpaceBetween { + justify-content: space-between; + align-content: space-between; +} + +.contentSpaceAround { + justify-content: space-around; + align-content: space-around; +} + +.contentSpaceEvenly { + justify-content: space-evenly; + align-content: space-evenly; +} + +.contentStretch { + justify-content: stretch; + align-content: stretch; +} diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-001-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-001-ref.html index f96f07c3881..98b4bd95823 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-001-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-001-ref.html @@ -67,8 +67,6 @@ <!-- <content-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignStart"><!--right--></div></div> <br> </div> <div class="small"> @@ -95,8 +93,6 @@ <!-- <content-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignStart"><!--right--></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-001.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-001.html index 3e181919380..62a8ecb355d 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-001.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-001.html @@ -70,8 +70,6 @@ <!-- <content-position>, part 2 --> <div class="container" style="align-content: flex-start"><div></div></div> <div class="container" style="align-content: flex-end"><div></div></div> - <div class="container" style="align-content: left"><div></div></div> - <div class="container" style="align-content: right"><div></div></div> <br> </div> <div class="small"> @@ -98,8 +96,6 @@ <!-- <content-position>, part 2 --> <div class="container" style="align-content: flex-start"><div></div></div> <div class="container" style="align-content: flex-end"><div></div></div> - <div class="container" style="align-content: left"><div></div></div> - <div class="container" style="align-content: right"><div></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-002-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-002-ref.html index 93a027b096e..b9bde37740e 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-002-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-002-ref.html @@ -67,8 +67,6 @@ <!-- <content-position>, part 2: --> <div class="container"><div class="alignEnd"><!--flex-start--></div></div> <div class="container"><div class="alignStart"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignStart"><!--right--></div></div> <br> </div> <div class="small"> @@ -95,8 +93,6 @@ <!-- <content-position>, part 2: --> <div class="container"><div class="alignEnd"><!--flex-start--></div></div> <div class="container"><div class="alignStart"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignStart"><!--right--></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-002.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-002.html index ad3437473a9..d546bf55394 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-002.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-002.html @@ -70,8 +70,6 @@ <!-- <content-position>, part 2 --> <div class="container" style="align-content: flex-start"><div></div></div> <div class="container" style="align-content: flex-end"><div></div></div> - <div class="container" style="align-content: left"><div></div></div> - <div class="container" style="align-content: right"><div></div></div> <br> </div> <div class="small"> @@ -98,8 +96,6 @@ <!-- <content-position>, part 2 --> <div class="container" style="align-content: flex-start"><div></div></div> <div class="container" style="align-content: flex-end"><div></div></div> - <div class="container" style="align-content: left"><div></div></div> - <div class="container" style="align-content: right"><div></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-003-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-003-ref.html index 383d181c9b4..3d4867f617c 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-003-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-003-ref.html @@ -70,8 +70,6 @@ <!-- <content-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignStart"><!--right--></div></div> <br> </div> <div class="small"> @@ -98,8 +96,6 @@ <!-- <content-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignStart"><!--right--></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-003.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-003.html index 4ed94d0874a..3960f474c9b 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-003.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-003.html @@ -70,8 +70,6 @@ <!-- <content-position>, part 2 --> <div class="container" style="align-content: flex-start"><div></div></div> <div class="container" style="align-content: flex-end"><div></div></div> - <div class="container" style="align-content: left"><div></div></div> - <div class="container" style="align-content: right"><div></div></div> <br> </div> <div class="small"> @@ -98,8 +96,6 @@ <!-- <content-position>, part 2 --> <div class="container" style="align-content: flex-start"><div></div></div> <div class="container" style="align-content: flex-end"><div></div></div> - <div class="container" style="align-content: left"><div></div></div> - <div class="container" style="align-content: right"><div></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-004-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-004-ref.html index 3702330bcb1..82399e3accf 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-004-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-004-ref.html @@ -70,8 +70,6 @@ <!-- <content-position>, part 2: --> <div class="container"><div class="alignEnd"><!--flex-start--></div></div> <div class="container"><div class="alignStart"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignStart"><!--right--></div></div> <br> </div> <div class="small"> @@ -98,8 +96,6 @@ <!-- <content-position>, part 2: --> <div class="container"><div class="alignEnd"><!--flex-start--></div></div> <div class="container"><div class="alignStart"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignStart"><!--right--></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-004.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-004.html index d859af21118..a1b00544f85 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-004.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-004.html @@ -70,8 +70,6 @@ <!-- <content-position>, part 2 --> <div class="container" style="align-content: flex-start"><div></div></div> <div class="container" style="align-content: flex-end"><div></div></div> - <div class="container" style="align-content: left"><div></div></div> - <div class="container" style="align-content: right"><div></div></div> <br> </div> <div class="small"> @@ -98,8 +96,6 @@ <!-- <content-position>, part 2 --> <div class="container" style="align-content: flex-start"><div></div></div> <div class="container" style="align-content: flex-end"><div></div></div> - <div class="container" style="align-content: left"><div></div></div> - <div class="container" style="align-content: right"><div></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-005-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-005-ref.html index d2d5a99a858..8d853a84df6 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-005-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-005-ref.html @@ -67,8 +67,6 @@ <!-- <content-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignEnd"><!--right--></div></div> <br> </div> <div class="small"> @@ -95,8 +93,6 @@ <!-- <content-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignEnd"><!--right--></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-005.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-005.html index ec491ffe87a..65b744f8b82 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-005.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-005.html @@ -70,8 +70,6 @@ <!-- <content-position>, part 2 --> <div class="container" style="align-content: flex-start"><div></div></div> <div class="container" style="align-content: flex-end"><div></div></div> - <div class="container" style="align-content: left"><div></div></div> - <div class="container" style="align-content: right"><div></div></div> <br> </div> <div class="small"> @@ -98,8 +96,6 @@ <!-- <content-position>, part 2 --> <div class="container" style="align-content: flex-start"><div></div></div> <div class="container" style="align-content: flex-end"><div></div></div> - <div class="container" style="align-content: left"><div></div></div> - <div class="container" style="align-content: right"><div></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-006-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-006-ref.html index 880f25836df..f4880c4d68d 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-006-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-006-ref.html @@ -67,8 +67,6 @@ <!-- <content-position>, part 2: --> <div class="container"><div class="alignEnd"><!--flex-start--></div></div> <div class="container"><div class="alignStart"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignEnd"><!--right--></div></div> <br> </div> <div class="small"> @@ -95,8 +93,6 @@ <!-- <content-position>, part 2: --> <div class="container"><div class="alignEnd"><!--flex-start--></div></div> <div class="container"><div class="alignStart"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignEnd"><!--right--></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-006.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-006.html index 1ce890a99d0..209f0410d08 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-006.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-006.html @@ -70,8 +70,6 @@ <!-- <content-position>, part 2 --> <div class="container" style="align-content: flex-start"><div></div></div> <div class="container" style="align-content: flex-end"><div></div></div> - <div class="container" style="align-content: left"><div></div></div> - <div class="container" style="align-content: right"><div></div></div> <br> </div> <div class="small"> @@ -98,8 +96,6 @@ <!-- <content-position>, part 2 --> <div class="container" style="align-content: flex-start"><div></div></div> <div class="container" style="align-content: flex-end"><div></div></div> - <div class="container" style="align-content: left"><div></div></div> - <div class="container" style="align-content: right"><div></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-007-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-007-ref.html index aaac464cda1..55a390da0cd 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-007-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-007-ref.html @@ -70,8 +70,6 @@ <!-- <content-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignEnd"><!--right--></div></div> <br> </div> <div class="small"> @@ -98,8 +96,6 @@ <!-- <content-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignEnd"><!--right--></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-007.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-007.html index 9964af6988d..eb2365abbe4 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-007.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-007.html @@ -70,8 +70,6 @@ <!-- <content-position>, part 2 --> <div class="container" style="align-content: flex-start"><div></div></div> <div class="container" style="align-content: flex-end"><div></div></div> - <div class="container" style="align-content: left"><div></div></div> - <div class="container" style="align-content: right"><div></div></div> <br> </div> <div class="small"> @@ -98,8 +96,6 @@ <!-- <content-position>, part 2 --> <div class="container" style="align-content: flex-start"><div></div></div> <div class="container" style="align-content: flex-end"><div></div></div> - <div class="container" style="align-content: left"><div></div></div> - <div class="container" style="align-content: right"><div></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-008-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-008-ref.html index 14166e151f1..f8b40d27e85 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-008-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-008-ref.html @@ -70,8 +70,6 @@ <!-- <content-position>, part 2: --> <div class="container"><div class="alignEnd"><!--flex-start--></div></div> <div class="container"><div class="alignStart"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignEnd"><!--right--></div></div> <br> </div> <div class="small"> @@ -98,8 +96,6 @@ <!-- <content-position>, part 2: --> <div class="container"><div class="alignEnd"><!--flex-start--></div></div> <div class="container"><div class="alignStart"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignEnd"><!--right--></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-008.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-008.html index 2a8fa4b7c5a..6dafc4636f4 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-008.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-008.html @@ -70,8 +70,6 @@ <!-- <content-position>, part 2 --> <div class="container" style="align-content: flex-start"><div></div></div> <div class="container" style="align-content: flex-end"><div></div></div> - <div class="container" style="align-content: left"><div></div></div> - <div class="container" style="align-content: right"><div></div></div> <br> </div> <div class="small"> @@ -98,8 +96,6 @@ <!-- <content-position>, part 2 --> <div class="container" style="align-content: flex-start"><div></div></div> <div class="container" style="align-content: flex-end"><div></div></div> - <div class="container" style="align-content: left"><div></div></div> - <div class="container" style="align-content: right"><div></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-rtl-001-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-rtl-001-ref.html index 383d181c9b4..3d4867f617c 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-rtl-001-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-rtl-001-ref.html @@ -70,8 +70,6 @@ <!-- <content-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignStart"><!--right--></div></div> <br> </div> <div class="small"> @@ -98,8 +96,6 @@ <!-- <content-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignStart"><!--right--></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-rtl-001.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-rtl-001.html index f45b5371ac4..e0d37083668 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-rtl-001.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-rtl-001.html @@ -71,8 +71,6 @@ <!-- <content-position>, part 2 --> <div class="container" style="align-content: flex-start"><div></div></div> <div class="container" style="align-content: flex-end"><div></div></div> - <div class="container" style="align-content: left"><div></div></div> - <div class="container" style="align-content: right"><div></div></div> <br> </div> <div class="small"> @@ -99,8 +97,6 @@ <!-- <content-position>, part 2 --> <div class="container" style="align-content: flex-start"><div></div></div> <div class="container" style="align-content: flex-end"><div></div></div> - <div class="container" style="align-content: left"><div></div></div> - <div class="container" style="align-content: right"><div></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-rtl-002-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-rtl-002-ref.html index c1f117e2b61..989d6ac13d5 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-rtl-002-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-rtl-002-ref.html @@ -67,8 +67,6 @@ <!-- <content-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignEnd"><!--left--></div></div> - <div class="container"><div class="alignStart"><!--right--></div></div> <br> </div> <div class="small"> @@ -95,8 +93,6 @@ <!-- <content-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignEnd"><!--left--></div></div> - <div class="container"><div class="alignStart"><!--right--></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-rtl-002.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-rtl-002.html index 755db6cec92..9f8ae7f4ce4 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-rtl-002.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-rtl-002.html @@ -71,8 +71,6 @@ <!-- <content-position>, part 2 --> <div class="container" style="align-content: flex-start"><div></div></div> <div class="container" style="align-content: flex-end"><div></div></div> - <div class="container" style="align-content: left"><div></div></div> - <div class="container" style="align-content: right"><div></div></div> <br> </div> <div class="small"> @@ -99,8 +97,6 @@ <!-- <content-position>, part 2 --> <div class="container" style="align-content: flex-start"><div></div></div> <div class="container" style="align-content: flex-end"><div></div></div> - <div class="container" style="align-content: left"><div></div></div> - <div class="container" style="align-content: right"><div></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-vertWM-001-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-vertWM-001-ref.html index f952c8daa3c..989d6ac13d5 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-vertWM-001-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-vertWM-001-ref.html @@ -67,8 +67,6 @@ <!-- <content-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignStart"><!--right--></div></div> <br> </div> <div class="small"> @@ -95,8 +93,6 @@ <!-- <content-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignStart"><!--right--></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-vertWM-001.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-vertWM-001.html index 5fa7f7722b3..456cc59a339 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-vertWM-001.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-vertWM-001.html @@ -71,8 +71,6 @@ <!-- <content-position>, part 2 --> <div class="container" style="align-content: flex-start"><div></div></div> <div class="container" style="align-content: flex-end"><div></div></div> - <div class="container" style="align-content: left"><div></div></div> - <div class="container" style="align-content: right"><div></div></div> <br> </div> <div class="small"> @@ -99,8 +97,6 @@ <!-- <content-position>, part 2 --> <div class="container" style="align-content: flex-start"><div></div></div> <div class="container" style="align-content: flex-end"><div></div></div> - <div class="container" style="align-content: left"><div></div></div> - <div class="container" style="align-content: right"><div></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-vertWM-002-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-vertWM-002-ref.html index 492924567ab..3d4867f617c 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-vertWM-002-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-vertWM-002-ref.html @@ -70,8 +70,6 @@ <!-- <content-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignEnd"><!--right--></div></div> <br> </div> <div class="small"> @@ -98,8 +96,6 @@ <!-- <content-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignEnd"><!--right--></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-vertWM-002.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-vertWM-002.html index 2544032827c..f1013db1db0 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-vertWM-002.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-vertWM-002.html @@ -71,8 +71,6 @@ <!-- <content-position>, part 2 --> <div class="container" style="align-content: flex-start"><div></div></div> <div class="container" style="align-content: flex-end"><div></div></div> - <div class="container" style="align-content: left"><div></div></div> - <div class="container" style="align-content: right"><div></div></div> <br> </div> <div class="small"> @@ -99,8 +97,6 @@ <!-- <content-position>, part 2 --> <div class="container" style="align-content: flex-start"><div></div></div> <div class="container" style="align-content: flex-end"><div></div></div> - <div class="container" style="align-content: left"><div></div></div> - <div class="container" style="align-content: right"><div></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-001-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-001-ref.html index e85089fc921..6c0f732532d 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-001-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-001-ref.html @@ -65,8 +65,6 @@ <!-- <self-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignStart"><!--right--></div></div> <br> </div> <div class="small"> @@ -91,8 +89,6 @@ <!-- <self-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignStart"><!--right--></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-001.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-001.html index ea05c96b0b6..6aad5181971 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-001.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-001.html @@ -64,8 +64,6 @@ <!-- <self-position>, part 2 --> <div class="container"><div style="align-self: flex-start"></div></div> <div class="container"><div style="align-self: flex-end"></div></div> - <div class="container"><div style="align-self: left"></div></div> - <div class="container"><div style="align-self: right"></div></div> <br> </div> <div class="small"> @@ -90,8 +88,6 @@ <!-- <self-position>, part 2 --> <div class="container"><div style="align-self: flex-start"></div></div> <div class="container"><div style="align-self: flex-end"></div></div> - <div class="container"><div style="align-self: left"></div></div> - <div class="container"><div style="align-self: right"></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-002-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-002-ref.html index c6398ca529e..c1715dcd64c 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-002-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-002-ref.html @@ -65,8 +65,6 @@ <!-- <self-position>, part 2: --> <div class="container"><div class="alignEnd"><!--flex-start--></div></div> <div class="container"><div class="alignStart"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignStart"><!--right--></div></div> <br> </div> <div class="small"> @@ -91,8 +89,6 @@ <!-- <self-position>, part 2: --> <div class="container"><div class="alignEnd"><!--flex-start--></div></div> <div class="container"><div class="alignStart"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignStart"><!--right--></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-002.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-002.html index a45c61d31b0..06956ba2cb6 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-002.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-002.html @@ -64,8 +64,6 @@ <!-- <self-position>, part 2 --> <div class="container"><div style="align-self: flex-start"></div></div> <div class="container"><div style="align-self: flex-end"></div></div> - <div class="container"><div style="align-self: left"></div></div> - <div class="container"><div style="align-self: right"></div></div> <br> </div> <div class="small"> @@ -90,8 +88,6 @@ <!-- <self-position>, part 2 --> <div class="container"><div style="align-self: flex-start"></div></div> <div class="container"><div style="align-self: flex-end"></div></div> - <div class="container"><div style="align-self: left"></div></div> - <div class="container"><div style="align-self: right"></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-003-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-003-ref.html index 6d08814e35e..d1b2c599906 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-003-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-003-ref.html @@ -68,8 +68,6 @@ <!-- <self-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignStart"><!--right--></div></div> <br> </div> <div class="small"> @@ -94,8 +92,6 @@ <!-- <self-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignStart"><!--right--></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-003.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-003.html index 5af8077ba4c..247f5216a8c 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-003.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-003.html @@ -64,8 +64,6 @@ <!-- <self-position>, part 2 --> <div class="container"><div style="align-self: flex-start"></div></div> <div class="container"><div style="align-self: flex-end"></div></div> - <div class="container"><div style="align-self: left"></div></div> - <div class="container"><div style="align-self: right"></div></div> <br> </div> <div class="small"> @@ -90,8 +88,6 @@ <!-- <self-position>, part 2 --> <div class="container"><div style="align-self: flex-start"></div></div> <div class="container"><div style="align-self: flex-end"></div></div> - <div class="container"><div style="align-self: left"></div></div> - <div class="container"><div style="align-self: right"></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-004-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-004-ref.html index 7065861dc8f..24fb8a1e7fd 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-004-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-004-ref.html @@ -68,8 +68,6 @@ <!-- <self-position>, part 2: --> <div class="container"><div class="alignEnd"><!--flex-start--></div></div> <div class="container"><div class="alignStart"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignStart"><!--right--></div></div> <br> </div> <div class="small"> @@ -94,8 +92,6 @@ <!-- <self-position>, part 2: --> <div class="container"><div class="alignEnd"><!--flex-start--></div></div> <div class="container"><div class="alignStart"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignStart"><!--right--></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-004.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-004.html index 6f00b15fd0c..e684dd6bfef 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-004.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-004.html @@ -64,8 +64,6 @@ <!-- <self-position>, part 2 --> <div class="container"><div style="align-self: flex-start"></div></div> <div class="container"><div style="align-self: flex-end"></div></div> - <div class="container"><div style="align-self: left"></div></div> - <div class="container"><div style="align-self: right"></div></div> <br> </div> <div class="small"> @@ -90,8 +88,6 @@ <!-- <self-position>, part 2 --> <div class="container"><div style="align-self: flex-start"></div></div> <div class="container"><div style="align-self: flex-end"></div></div> - <div class="container"><div style="align-self: left"></div></div> - <div class="container"><div style="align-self: right"></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-005-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-005-ref.html index 08501e8411c..9d8f4469ac3 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-005-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-005-ref.html @@ -65,8 +65,6 @@ <!-- <self-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignEnd"><!--right--></div></div> <br> </div> <div class="small"> @@ -91,8 +89,6 @@ <!-- <self-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignEnd"><!--right--></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-005.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-005.html index c5d1f5b619e..1421878e4fb 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-005.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-005.html @@ -64,8 +64,6 @@ <!-- <self-position>, part 2 --> <div class="container"><div style="align-self: flex-start"></div></div> <div class="container"><div style="align-self: flex-end"></div></div> - <div class="container"><div style="align-self: left"></div></div> - <div class="container"><div style="align-self: right"></div></div> <br> </div> <div class="small"> @@ -90,8 +88,6 @@ <!-- <self-position>, part 2 --> <div class="container"><div style="align-self: flex-start"></div></div> <div class="container"><div style="align-self: flex-end"></div></div> - <div class="container"><div style="align-self: left"></div></div> - <div class="container"><div style="align-self: right"></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-006-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-006-ref.html index 8ad12911449..b3df68fab3c 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-006-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-006-ref.html @@ -65,8 +65,6 @@ <!-- <self-position>, part 2: --> <div class="container"><div class="alignEnd"><!--flex-start--></div></div> <div class="container"><div class="alignStart"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignEnd"><!--right--></div></div> <br> </div> <div class="small"> @@ -91,8 +89,6 @@ <!-- <self-position>, part 2: --> <div class="container"><div class="alignEnd"><!--flex-start--></div></div> <div class="container"><div class="alignStart"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignEnd"><!--right--></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-006.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-006.html index ee197960853..aa093438f6b 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-006.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-006.html @@ -64,8 +64,6 @@ <!-- <self-position>, part 2 --> <div class="container"><div style="align-self: flex-start"></div></div> <div class="container"><div style="align-self: flex-end"></div></div> - <div class="container"><div style="align-self: left"></div></div> - <div class="container"><div style="align-self: right"></div></div> <br> </div> <div class="small"> @@ -90,8 +88,6 @@ <!-- <self-position>, part 2 --> <div class="container"><div style="align-self: flex-start"></div></div> <div class="container"><div style="align-self: flex-end"></div></div> - <div class="container"><div style="align-self: left"></div></div> - <div class="container"><div style="align-self: right"></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-007-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-007-ref.html index 25609fc3c8e..a5316ce8110 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-007-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-007-ref.html @@ -68,8 +68,6 @@ <!-- <self-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignEnd"><!--right--></div></div> <br> </div> <div class="small"> @@ -94,8 +92,6 @@ <!-- <self-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignEnd"><!--right--></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-007.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-007.html index b7b1d8a9dd7..7721031b7ac 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-007.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-007.html @@ -64,8 +64,6 @@ <!-- <self-position>, part 2 --> <div class="container"><div style="align-self: flex-start"></div></div> <div class="container"><div style="align-self: flex-end"></div></div> - <div class="container"><div style="align-self: left"></div></div> - <div class="container"><div style="align-self: right"></div></div> <br> </div> <div class="small"> @@ -90,8 +88,6 @@ <!-- <self-position>, part 2 --> <div class="container"><div style="align-self: flex-start"></div></div> <div class="container"><div style="align-self: flex-end"></div></div> - <div class="container"><div style="align-self: left"></div></div> - <div class="container"><div style="align-self: right"></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-008-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-008-ref.html index 3feea0b3159..c40a2d75cf3 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-008-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-008-ref.html @@ -68,8 +68,6 @@ <!-- <self-position>, part 2: --> <div class="container"><div class="alignEnd"><!--flex-start--></div></div> <div class="container"><div class="alignStart"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignEnd"><!--right--></div></div> <br> </div> <div class="small"> @@ -94,8 +92,6 @@ <!-- <self-position>, part 2: --> <div class="container"><div class="alignEnd"><!--flex-start--></div></div> <div class="container"><div class="alignStart"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignEnd"><!--right--></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-008.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-008.html index b1fdc92209e..6bea8aaa00e 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-008.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-008.html @@ -64,8 +64,6 @@ <!-- <self-position>, part 2 --> <div class="container"><div style="align-self: flex-start"></div></div> <div class="container"><div style="align-self: flex-end"></div></div> - <div class="container"><div style="align-self: left"></div></div> - <div class="container"><div style="align-self: right"></div></div> <br> </div> <div class="small"> @@ -90,8 +88,6 @@ <!-- <self-position>, part 2 --> <div class="container"><div style="align-self: flex-start"></div></div> <div class="container"><div style="align-self: flex-end"></div></div> - <div class="container"><div style="align-self: left"></div></div> - <div class="container"><div style="align-self: right"></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-001-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-001-ref.html index 4e395aa6683..75a998e3412 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-001-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-001-ref.html @@ -68,8 +68,6 @@ <!-- <self-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignStart"><!--right--></div></div> <br> </div> <div class="small"> @@ -94,8 +92,6 @@ <!-- <self-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignStart"><!--right--></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-001.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-001.html index 6c8bc5c781c..82120fb52e3 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-001.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-001.html @@ -64,8 +64,6 @@ <!-- <self-position>, part 2 --> <div class="container"><div style="align-self: flex-start"></div></div> <div class="container"><div style="align-self: flex-end"></div></div> - <div class="container"><div style="align-self: left"></div></div> - <div class="container"><div style="align-self: right"></div></div> <br> </div> <div class="small"> @@ -90,8 +88,6 @@ <!-- <self-position>, part 2 --> <div class="container"><div style="align-self: flex-start"></div></div> <div class="container"><div style="align-self: flex-end"></div></div> - <div class="container"><div style="align-self: left"></div></div> - <div class="container"><div style="align-self: right"></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-002-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-002-ref.html index 4e395aa6683..75a998e3412 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-002-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-002-ref.html @@ -68,8 +68,6 @@ <!-- <self-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignStart"><!--right--></div></div> <br> </div> <div class="small"> @@ -94,8 +92,6 @@ <!-- <self-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignStart"><!--right--></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-002.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-002.html index 99e171a0f8e..1b2ff2e320b 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-002.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-002.html @@ -65,8 +65,6 @@ <!-- <self-position>, part 2 --> <div class="container"><div style="align-self: flex-start"></div></div> <div class="container"><div style="align-self: flex-end"></div></div> - <div class="container"><div style="align-self: left"></div></div> - <div class="container"><div style="align-self: right"></div></div> <br> </div> <div class="small"> @@ -91,8 +89,6 @@ <!-- <self-position>, part 2 --> <div class="container"><div style="align-self: flex-start"></div></div> <div class="container"><div style="align-self: flex-end"></div></div> - <div class="container"><div style="align-self: left"></div></div> - <div class="container"><div style="align-self: right"></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-003-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-003-ref.html index b773df598b5..b48de7e5cb1 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-003-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-003-ref.html @@ -65,8 +65,6 @@ <!-- <self-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignEnd"><!--left--></div></div> - <div class="container"><div class="alignStart"><!--right--></div></div> <br> </div> <div class="small"> @@ -91,8 +89,6 @@ <!-- <self-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignEnd"><!--left--></div></div> - <div class="container"><div class="alignStart"><!--right--></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-003.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-003.html index 3bac61b68ea..498e230f92a 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-003.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-003.html @@ -64,8 +64,6 @@ <!-- <self-position>, part 2 --> <div class="container"><div style="align-self: flex-start"></div></div> <div class="container"><div style="align-self: flex-end"></div></div> - <div class="container"><div style="align-self: left"></div></div> - <div class="container"><div style="align-self: right"></div></div> <br> </div> <div class="small"> @@ -90,8 +88,6 @@ <!-- <self-position>, part 2 --> <div class="container"><div style="align-self: flex-start"></div></div> <div class="container"><div style="align-self: flex-end"></div></div> - <div class="container"><div style="align-self: left"></div></div> - <div class="container"><div style="align-self: right"></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-004-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-004-ref.html index 3fb58426826..2ed4a2d798a 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-004-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-004-ref.html @@ -65,8 +65,6 @@ <!-- <self-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignEnd"><!--left--></div></div> - <div class="container"><div class="alignStart"><!--right--></div></div> <br> </div> <div class="small"> @@ -91,8 +89,6 @@ <!-- <self-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignEnd"><!--left--></div></div> - <div class="container"><div class="alignStart"><!--right--></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-004.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-004.html index 5588bee71e0..c4cb4b5138d 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-004.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-rtl-004.html @@ -65,8 +65,6 @@ <!-- <self-position>, part 2 --> <div class="container"><div style="align-self: flex-start"></div></div> <div class="container"><div style="align-self: flex-end"></div></div> - <div class="container"><div style="align-self: left"></div></div> - <div class="container"><div style="align-self: right"></div></div> <br> </div> <div class="small"> @@ -91,8 +89,6 @@ <!-- <self-position>, part 2 --> <div class="container"><div style="align-self: flex-start"></div></div> <div class="container"><div style="align-self: flex-end"></div></div> - <div class="container"><div style="align-self: left"></div></div> - <div class="container"><div style="align-self: right"></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-vertWM-003-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-vertWM-003-ref.html index 9cd5fb6e895..75a998e3412 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-vertWM-003-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-vertWM-003-ref.html @@ -68,8 +68,6 @@ <!-- <self-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignEnd"><!--right--></div></div> <br> </div> <div class="small"> @@ -94,8 +92,6 @@ <!-- <self-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignEnd"><!--right--></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-vertWM-003.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-vertWM-003.html index a54c7d5f267..c340cdc290f 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-vertWM-003.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-vertWM-003.html @@ -64,8 +64,6 @@ <!-- <self-position>, part 2 --> <div class="container"><div style="align-self: flex-start"></div></div> <div class="container"><div style="align-self: flex-end"></div></div> - <div class="container"><div style="align-self: left"></div></div> - <div class="container"><div style="align-self: right"></div></div> <br> </div> <div class="small"> @@ -90,8 +88,6 @@ <!-- <self-position>, part 2 --> <div class="container"><div style="align-self: flex-start"></div></div> <div class="container"><div style="align-self: flex-end"></div></div> - <div class="container"><div style="align-self: left"></div></div> - <div class="container"><div style="align-self: right"></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-vertWM-004-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-vertWM-004-ref.html index 7787fba0808..a4be517ce06 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-vertWM-004-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-vertWM-004-ref.html @@ -68,8 +68,6 @@ <!-- <self-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignEnd"><!--right--></div></div> <br> </div> <div class="small"> @@ -94,8 +92,6 @@ <!-- <self-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignEnd"><!--right--></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-vertWM-004.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-vertWM-004.html index c0ccc9bb7ff..5113cdd8ac2 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-vertWM-004.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-self-vertWM-004.html @@ -66,8 +66,6 @@ <!-- <self-position>, part 2 --> <div class="container"><div style="align-self: flex-start"></div></div> <div class="container"><div style="align-self: flex-end"></div></div> - <div class="container"><div style="align-self: left"></div></div> - <div class="container"><div style="align-self: right"></div></div> <br> </div> <div class="small"> @@ -92,8 +90,6 @@ <!-- <self-position>, part 2 --> <div class="container"><div style="align-self: flex-start"></div></div> <div class="container"><div style="align-self: flex-end"></div></div> - <div class="container"><div style="align-self: left"></div></div> - <div class="container"><div style="align-self: right"></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-fallback-align-content-001-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-fallback-align-content-001-ref.html index 24935ee0abb..ec0d6cc4127 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-fallback-align-content-001-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-fallback-align-content-001-ref.html @@ -51,10 +51,16 @@ <div class="container"><div class="alignStart"><!--stretch--></div></div> <br> <!-- <content-distribution> with explicit "flex-end" fallback --> - <div class="container"><div class="alignEnd"><!--space-between--></div></div> - <div class="container"><div class="alignEnd"><!--space-around--></div></div> - <div class="container"><div class="alignEnd"><!--space-evenly--></div></div> - <div class="container"><div class="alignEnd"><!--stretch--></div></div> + <div style="display: none"> + <!-- + These tests will be valid when + https://github.com/w3c/csswg-drafts/issues/1002 is fixed + --> + <div class="container"><div class="alignEnd"><!--space-between--></div></div> + <div class="container"><div class="alignEnd"><!--space-around--></div></div> + <div class="container"><div class="alignEnd"><!--space-evenly--></div></div> + <div class="container"><div class="alignEnd"><!--stretch--></div></div> + </div> <br> </div> <div class="small"> @@ -65,10 +71,16 @@ <div class="container"><div class="alignStart"><!--stretch--></div></div> <br> <!-- <content-distribution> with explicit "flex-end" fallback --> - <div class="container"><div class="alignEnd"><!--space-between--></div></div> - <div class="container"><div class="alignEnd"><!--space-around--></div></div> - <div class="container"><div class="alignEnd"><!--space-evenly--></div></div> - <div class="container"><div class="alignEnd"><!--stretch--></div></div> + <div style="display: none"> + <!-- + These tests will be valid when + https://github.com/w3c/csswg-drafts/issues/1002 is fixed + --> + <div class="container"><div class="alignEnd"><!--space-between--></div></div> + <div class="container"><div class="alignEnd"><!--space-around--></div></div> + <div class="container"><div class="alignEnd"><!--space-evenly--></div></div> + <div class="container"><div class="alignEnd"><!--stretch--></div></div> + </div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-fallback-align-content-001.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-fallback-align-content-001.html index e1de7af3b20..e1c6b79076d 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-fallback-align-content-001.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-fallback-align-content-001.html @@ -49,10 +49,12 @@ <div class="container" style="align-content: stretch"><div></div></div> <br> <!-- <content-distribution> with explicit "flex-end" fallback --> + <!-- <div class="container" style="align-content: space-between flex-end"><div></div></div> <div class="container" style="align-content: space-around flex-end"><div></div></div> <div class="container" style="align-content: space-evenly flex-end"><div></div></div> <div class="container" style="align-content: stretch flex-end"><div></div></div> + --> <br> </div> <div class="small"> @@ -63,10 +65,12 @@ <div class="container" style="align-content: stretch"><div></div></div> <br> <!-- <content-distribution> with explicit "flex-end" fallback --> + <!-- <div class="container" style="align-content: space-between flex-end"><div></div></div> <div class="container" style="align-content: space-around flex-end"><div></div></div> <div class="container" style="align-content: space-evenly flex-end"><div></div></div> <div class="container" style="align-content: stretch flex-end"><div></div></div> + --> </div> </body> </html> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-fallback-justify-content-001-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-fallback-justify-content-001-ref.html index 21185bcb2d8..0abf592d6d4 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-fallback-justify-content-001-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-fallback-justify-content-001-ref.html @@ -51,10 +51,12 @@ <div class="container"><div class="alignStart"><!--stretch--></div></div> <br> <!-- <content-distribution> with explicit "flex-end" fallback --> - <div class="container"><div class="alignEnd"><!--space-between--></div></div> - <div class="container"><div class="alignEnd"><!--space-around--></div></div> - <div class="container"><div class="alignEnd"><!--space-evenly--></div></div> - <div class="container"><div class="alignStart"><!--stretch--></div></div> + <div style="display: none"> + <div class="container"><div class="alignEnd"><!--space-between--></div></div> + <div class="container"><div class="alignEnd"><!--space-around--></div></div> + <div class="container"><div class="alignEnd"><!--space-evenly--></div></div> + <div class="container"><div class="alignStart"><!--stretch--></div></div> + </div> <br> </div> <div class="small"> @@ -65,10 +67,12 @@ <div class="container"><div class="alignStart"><!--stretch--></div></div> <br> <!-- <content-distribution> with explicit "flex-end" fallback --> - <div class="container"><div class="alignEnd"><!--space-between--></div></div> - <div class="container"><div class="alignEnd"><!--space-around--></div></div> - <div class="container"><div class="alignEnd"><!--space-evenly--></div></div> - <div class="container"><div class="alignStart"><!--stretch--></div></div> + <div style="display: none"> + <div class="container"><div class="alignEnd"><!--space-between--></div></div> + <div class="container"><div class="alignEnd"><!--space-around--></div></div> + <div class="container"><div class="alignEnd"><!--space-evenly--></div></div> + <div class="container"><div class="alignStart"><!--stretch--></div></div> + </div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-fallback-justify-content-001.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-fallback-justify-content-001.html index d90dc75971f..88335dca854 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-fallback-justify-content-001.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-fallback-justify-content-001.html @@ -49,10 +49,12 @@ <div class="container" style="justify-content: stretch"><div></div></div> <br> <!-- <content-distribution> with explicit "flex-end" fallback --> + <!-- TODO: https://github.com/w3c/csswg-drafts/issues/1002 <div class="container" style="justify-content: space-between flex-end"><div></div></div> <div class="container" style="justify-content: space-around flex-end"><div></div></div> <div class="container" style="justify-content: space-evenly flex-end"><div></div></div> <div class="container" style="justify-content: stretch flex-end"><div></div></div> + --> <!-- Note: specifically for flex containers, in the justify-content axis, "stretch behaves as flex-start (ignoring the specified fallback alignment, if any." https://drafts.csswg.org/css-align-3/#distribution-flex --> @@ -66,10 +68,12 @@ <div class="container" style="justify-content: stretch"><div></div></div> <br> <!-- <content-distribution> with explicit "flex-end" fallback --> + <!-- TODO: https://github.com/w3c/csswg-drafts/issues/1002 <div class="container" style="justify-content: space-between flex-end"><div></div></div> <div class="container" style="justify-content: space-around flex-end"><div></div></div> <div class="container" style="justify-content: space-evenly flex-end"><div></div></div> <div class="container" style="justify-content: stretch flex-end"><div></div></div> + --> <!-- As noted above, the explicit fallback for "stretch" is ignored here. --> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-001-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-001-ref.html index fc450981e75..be61c53b491 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-001-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-001-ref.html @@ -49,10 +49,6 @@ <!-- normal --> <div class="container"><div class="alignStart"><!--normal--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <content-distribution> --> <div class="container"><div class="alignStart"><!--space-between--></div></div> <div class="container"><div class="alignCenter"><!--space-around--></div></div> @@ -77,10 +73,6 @@ <!-- normal --> <div class="container"><div class="alignStart"><!--normal--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <content-distribution> --> <div class="container"><div class="alignStart"><!--space-between--></div></div> <div class="container"><div class="alignCenter"><!--space-around--></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-001.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-001.html index 1d571360a16..33cec45906a 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-001.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-001.html @@ -47,10 +47,6 @@ <!-- normal --> <div class="container" style="justify-content: normal"><div></div></div> <br> - <!-- <baseline-position> --> - <div class="container" style="justify-content: baseline"><div></div></div> - <div class="container" style="justify-content: last baseline"><div></div></div> - <br> <!-- <content-distribution> --> <div class="container" style="justify-content: space-between"><div></div></div> <div class="container" style="justify-content: space-around"><div></div></div> @@ -75,10 +71,6 @@ <!-- normal --> <div class="container" style="justify-content: normal"><div></div></div> <br> - <!-- <baseline-position> --> - <div class="container" style="justify-content: baseline"><div></div></div> - <div class="container" style="justify-content: last baseline"><div></div></div> - <br> <!-- <content-distribution> --> <div class="container" style="justify-content: space-between"><div></div></div> <div class="container" style="justify-content: space-around"><div></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-002-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-002-ref.html index fc450981e75..be61c53b491 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-002-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-002-ref.html @@ -49,10 +49,6 @@ <!-- normal --> <div class="container"><div class="alignStart"><!--normal--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <content-distribution> --> <div class="container"><div class="alignStart"><!--space-between--></div></div> <div class="container"><div class="alignCenter"><!--space-around--></div></div> @@ -77,10 +73,6 @@ <!-- normal --> <div class="container"><div class="alignStart"><!--normal--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <content-distribution> --> <div class="container"><div class="alignStart"><!--space-between--></div></div> <div class="container"><div class="alignCenter"><!--space-around--></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-002.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-002.html index 09073d4fbff..68025bf739d 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-002.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-002.html @@ -47,10 +47,6 @@ <!-- normal --> <div class="container" style="justify-content: normal"><div></div></div> <br> - <!-- <baseline-position> --> - <div class="container" style="justify-content: baseline"><div></div></div> - <div class="container" style="justify-content: last baseline"><div></div></div> - <br> <!-- <content-distribution> --> <div class="container" style="justify-content: space-between"><div></div></div> <div class="container" style="justify-content: space-around"><div></div></div> @@ -75,10 +71,6 @@ <!-- normal --> <div class="container" style="justify-content: normal"><div></div></div> <br> - <!-- <baseline-position> --> - <div class="container" style="justify-content: baseline"><div></div></div> - <div class="container" style="justify-content: last baseline"><div></div></div> - <br> <!-- <content-distribution> --> <div class="container" style="justify-content: space-between"><div></div></div> <div class="container" style="justify-content: space-around"><div></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-003-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-003-ref.html index d4962697556..f609ed2896a 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-003-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-003-ref.html @@ -49,10 +49,6 @@ <!-- normal --> <div class="container"><div class="alignEnd"><!--normal--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <content-distribution> --> <div class="container"><div class="alignStart"><!--space-between--></div></div> <div class="container"><div class="alignCenter"><!--space-around--></div></div> @@ -77,10 +73,6 @@ <!-- normal --> <div class="container"><div class="alignEnd"><!--normal--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <content-distribution> --> <div class="container"><div class="alignStart"><!--space-between--></div></div> <div class="container"><div class="alignCenter"><!--space-around--></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-003.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-003.html index f2801ebdd2a..80c747700d2 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-003.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-003.html @@ -47,10 +47,6 @@ <!-- normal --> <div class="container" style="justify-content: normal"><div></div></div> <br> - <!-- <baseline-position> --> - <div class="container" style="justify-content: baseline"><div></div></div> - <div class="container" style="justify-content: last baseline"><div></div></div> - <br> <!-- <content-distribution> --> <div class="container" style="justify-content: space-between"><div></div></div> <div class="container" style="justify-content: space-around"><div></div></div> @@ -75,10 +71,6 @@ <!-- normal --> <div class="container" style="justify-content: normal"><div></div></div> <br> - <!-- <baseline-position> --> - <div class="container" style="justify-content: baseline"><div></div></div> - <div class="container" style="justify-content: last baseline"><div></div></div> - <br> <!-- <content-distribution> --> <div class="container" style="justify-content: space-between"><div></div></div> <div class="container" style="justify-content: space-around"><div></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-004-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-004-ref.html index d4962697556..f609ed2896a 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-004-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-004-ref.html @@ -49,10 +49,6 @@ <!-- normal --> <div class="container"><div class="alignEnd"><!--normal--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <content-distribution> --> <div class="container"><div class="alignStart"><!--space-between--></div></div> <div class="container"><div class="alignCenter"><!--space-around--></div></div> @@ -77,10 +73,6 @@ <!-- normal --> <div class="container"><div class="alignEnd"><!--normal--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <content-distribution> --> <div class="container"><div class="alignStart"><!--space-between--></div></div> <div class="container"><div class="alignCenter"><!--space-around--></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-004.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-004.html index 0f8d330bae3..6c0f8e4ea68 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-004.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-004.html @@ -47,10 +47,6 @@ <!-- normal --> <div class="container" style="justify-content: normal"><div></div></div> <br> - <!-- <baseline-position> --> - <div class="container" style="justify-content: baseline"><div></div></div> - <div class="container" style="justify-content: last baseline"><div></div></div> - <br> <!-- <content-distribution> --> <div class="container" style="justify-content: space-between"><div></div></div> <div class="container" style="justify-content: space-around"><div></div></div> @@ -75,10 +71,6 @@ <!-- normal --> <div class="container" style="justify-content: normal"><div></div></div> <br> - <!-- <baseline-position> --> - <div class="container" style="justify-content: baseline"><div></div></div> - <div class="container" style="justify-content: last baseline"><div></div></div> - <br> <!-- <content-distribution> --> <div class="container" style="justify-content: space-between"><div></div></div> <div class="container" style="justify-content: space-around"><div></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-005-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-005-ref.html index 807f1612476..b04e8f23376 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-005-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-005-ref.html @@ -49,10 +49,6 @@ <!-- normal --> <div class="container"><div class="alignStart"><!--normal--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <content-distribution> --> <div class="container"><div class="alignStart"><!--space-between--></div></div> <div class="container"><div class="alignCenter"><!--space-around--></div></div> @@ -77,10 +73,6 @@ <!-- normal --> <div class="container"><div class="alignStart"><!--normal--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <content-distribution> --> <div class="container"><div class="alignStart"><!--space-between--></div></div> <div class="container"><div class="alignCenter"><!--space-around--></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-005.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-005.html index 729ca97327a..83703c8adc5 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-005.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-005.html @@ -47,10 +47,6 @@ <!-- normal --> <div class="container" style="justify-content: normal"><div></div></div> <br> - <!-- <baseline-position> --> - <div class="container" style="justify-content: baseline"><div></div></div> - <div class="container" style="justify-content: last baseline"><div></div></div> - <br> <!-- <content-distribution> --> <div class="container" style="justify-content: space-between"><div></div></div> <div class="container" style="justify-content: space-around"><div></div></div> @@ -75,10 +71,6 @@ <!-- normal --> <div class="container" style="justify-content: normal"><div></div></div> <br> - <!-- <baseline-position> --> - <div class="container" style="justify-content: baseline"><div></div></div> - <div class="container" style="justify-content: last baseline"><div></div></div> - <br> <!-- <content-distribution> --> <div class="container" style="justify-content: space-between"><div></div></div> <div class="container" style="justify-content: space-around"><div></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-006-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-006-ref.html index 807f1612476..b04e8f23376 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-006-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-006-ref.html @@ -49,10 +49,6 @@ <!-- normal --> <div class="container"><div class="alignStart"><!--normal--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <content-distribution> --> <div class="container"><div class="alignStart"><!--space-between--></div></div> <div class="container"><div class="alignCenter"><!--space-around--></div></div> @@ -77,10 +73,6 @@ <!-- normal --> <div class="container"><div class="alignStart"><!--normal--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <content-distribution> --> <div class="container"><div class="alignStart"><!--space-between--></div></div> <div class="container"><div class="alignCenter"><!--space-around--></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-006.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-006.html index 83da7de4f1a..f30bd06737c 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-006.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-006.html @@ -47,10 +47,6 @@ <!-- normal --> <div class="container" style="justify-content: normal"><div></div></div> <br> - <!-- <baseline-position> --> - <div class="container" style="justify-content: baseline"><div></div></div> - <div class="container" style="justify-content: last baseline"><div></div></div> - <br> <!-- <content-distribution> --> <div class="container" style="justify-content: space-between"><div></div></div> <div class="container" style="justify-content: space-around"><div></div></div> @@ -75,10 +71,6 @@ <!-- normal --> <div class="container" style="justify-content: normal"><div></div></div> <br> - <!-- <baseline-position> --> - <div class="container" style="justify-content: baseline"><div></div></div> - <div class="container" style="justify-content: last baseline"><div></div></div> - <br> <!-- <content-distribution> --> <div class="container" style="justify-content: space-between"><div></div></div> <div class="container" style="justify-content: space-around"><div></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-007-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-007-ref.html index 04979dfa7bd..2da4bf974f6 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-007-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-007-ref.html @@ -49,10 +49,6 @@ <!-- normal --> <div class="container"><div class="alignEnd"><!--normal--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <content-distribution> --> <div class="container"><div class="alignStart"><!--space-between--></div></div> <div class="container"><div class="alignCenter"><!--space-around--></div></div> @@ -77,10 +73,6 @@ <!-- normal --> <div class="container"><div class="alignEnd"><!--normal--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <content-distribution> --> <div class="container"><div class="alignStart"><!--space-between--></div></div> <div class="container"><div class="alignCenter"><!--space-around--></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-007.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-007.html index ad97ac3ce7c..4eef2a7bfd5 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-007.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-007.html @@ -47,10 +47,6 @@ <!-- normal --> <div class="container" style="justify-content: normal"><div></div></div> <br> - <!-- <baseline-position> --> - <div class="container" style="justify-content: baseline"><div></div></div> - <div class="container" style="justify-content: last baseline"><div></div></div> - <br> <!-- <content-distribution> --> <div class="container" style="justify-content: space-between"><div></div></div> <div class="container" style="justify-content: space-around"><div></div></div> @@ -75,10 +71,6 @@ <!-- normal --> <div class="container" style="justify-content: normal"><div></div></div> <br> - <!-- <baseline-position> --> - <div class="container" style="justify-content: baseline"><div></div></div> - <div class="container" style="justify-content: last baseline"><div></div></div> - <br> <!-- <content-distribution> --> <div class="container" style="justify-content: space-between"><div></div></div> <div class="container" style="justify-content: space-around"><div></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-008-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-008-ref.html index 04979dfa7bd..2da4bf974f6 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-008-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-008-ref.html @@ -49,10 +49,6 @@ <!-- normal --> <div class="container"><div class="alignEnd"><!--normal--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <content-distribution> --> <div class="container"><div class="alignStart"><!--space-between--></div></div> <div class="container"><div class="alignCenter"><!--space-around--></div></div> @@ -77,10 +73,6 @@ <!-- normal --> <div class="container"><div class="alignEnd"><!--normal--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <content-distribution> --> <div class="container"><div class="alignStart"><!--space-between--></div></div> <div class="container"><div class="alignCenter"><!--space-around--></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-008.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-008.html index d6a4074e331..375e9aadbe0 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-008.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-008.html @@ -47,10 +47,6 @@ <!-- normal --> <div class="container" style="justify-content: normal"><div></div></div> <br> - <!-- <baseline-position> --> - <div class="container" style="justify-content: baseline"><div></div></div> - <div class="container" style="justify-content: last baseline"><div></div></div> - <br> <!-- <content-distribution> --> <div class="container" style="justify-content: space-between"><div></div></div> <div class="container" style="justify-content: space-around"><div></div></div> @@ -75,10 +71,6 @@ <!-- normal --> <div class="container" style="justify-content: normal"><div></div></div> <br> - <!-- <baseline-position> --> - <div class="container" style="justify-content: baseline"><div></div></div> - <div class="container" style="justify-content: last baseline"><div></div></div> - <br> <!-- <content-distribution> --> <div class="container" style="justify-content: space-between"><div></div></div> <div class="container" style="justify-content: space-around"><div></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-rtl-001-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-rtl-001-ref.html index 2ccb6b15761..2c70fa14a64 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-rtl-001-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-rtl-001-ref.html @@ -49,10 +49,6 @@ <!-- normal --> <div class="container"><div class="alignStart"><!--normal--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <content-distribution> --> <div class="container"><div class="alignStart"><!--space-between--></div></div> <div class="container"><div class="alignCenter"><!--space-around--></div></div> @@ -77,10 +73,6 @@ <!-- normal --> <div class="container"><div class="alignStart"><!--normal--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <content-distribution> --> <div class="container"><div class="alignStart"><!--space-between--></div></div> <div class="container"><div class="alignCenter"><!--space-around--></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-rtl-001.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-rtl-001.html index 94df40c0e97..5143a564232 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-rtl-001.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-rtl-001.html @@ -48,10 +48,6 @@ <!-- normal --> <div class="container" style="justify-content: normal"><div></div></div> <br> - <!-- <baseline-position> --> - <div class="container" style="justify-content: baseline"><div></div></div> - <div class="container" style="justify-content: last baseline"><div></div></div> - <br> <!-- <content-distribution> --> <div class="container" style="justify-content: space-between"><div></div></div> <div class="container" style="justify-content: space-around"><div></div></div> @@ -76,10 +72,6 @@ <!-- normal --> <div class="container" style="justify-content: normal"><div></div></div> <br> - <!-- <baseline-position> --> - <div class="container" style="justify-content: baseline"><div></div></div> - <div class="container" style="justify-content: last baseline"><div></div></div> - <br> <!-- <content-distribution> --> <div class="container" style="justify-content: space-between"><div></div></div> <div class="container" style="justify-content: space-around"><div></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-rtl-002-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-rtl-002-ref.html index 4cf94716416..8901d350f84 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-rtl-002-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-rtl-002-ref.html @@ -52,10 +52,6 @@ <!-- normal --> <div class="container"><div class="alignStart"><!--normal--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <content-distribution> --> <div class="container"><div class="alignStart"><!--space-between--></div></div> <div class="container"><div class="alignCenter"><!--space-around--></div></div> @@ -80,10 +76,6 @@ <!-- normal --> <div class="container"><div class="alignStart"><!--normal--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <content-distribution> --> <div class="container"><div class="alignStart"><!--space-between--></div></div> <div class="container"><div class="alignCenter"><!--space-around--></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-rtl-002.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-rtl-002.html index f85c7d051e2..d56a25c3c96 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-rtl-002.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-rtl-002.html @@ -48,10 +48,6 @@ <!-- normal --> <div class="container" style="justify-content: normal"><div></div></div> <br> - <!-- <baseline-position> --> - <div class="container" style="justify-content: baseline"><div></div></div> - <div class="container" style="justify-content: last baseline"><div></div></div> - <br> <!-- <content-distribution> --> <div class="container" style="justify-content: space-between"><div></div></div> <div class="container" style="justify-content: space-around"><div></div></div> @@ -76,10 +72,6 @@ <!-- normal --> <div class="container" style="justify-content: normal"><div></div></div> <br> - <!-- <baseline-position> --> - <div class="container" style="justify-content: baseline"><div></div></div> - <div class="container" style="justify-content: last baseline"><div></div></div> - <br> <!-- <content-distribution> --> <div class="container" style="justify-content: space-between"><div></div></div> <div class="container" style="justify-content: space-around"><div></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-vertWM-001-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-vertWM-001-ref.html index dc9b6da9bbc..64a85443a4b 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-vertWM-001-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-vertWM-001-ref.html @@ -52,10 +52,6 @@ <!-- normal --> <div class="container"><div class="alignStart"><!--normal--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <content-distribution> --> <div class="container"><div class="alignStart"><!--space-between--></div></div> <div class="container"><div class="alignCenter"><!--space-around--></div></div> @@ -80,10 +76,6 @@ <!-- normal --> <div class="container"><div class="alignStart"><!--normal--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <content-distribution> --> <div class="container"><div class="alignStart"><!--space-between--></div></div> <div class="container"><div class="alignCenter"><!--space-around--></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-vertWM-001.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-vertWM-001.html index db4b5b69144..8971b4b9de5 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-vertWM-001.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-vertWM-001.html @@ -48,10 +48,6 @@ <!-- normal --> <div class="container" style="justify-content: normal"><div></div></div> <br> - <!-- <baseline-position> --> - <div class="container" style="justify-content: baseline"><div></div></div> - <div class="container" style="justify-content: last baseline"><div></div></div> - <br> <!-- <content-distribution> --> <div class="container" style="justify-content: space-between"><div></div></div> <div class="container" style="justify-content: space-around"><div></div></div> @@ -76,10 +72,6 @@ <!-- normal --> <div class="container" style="justify-content: normal"><div></div></div> <br> - <!-- <baseline-position> --> - <div class="container" style="justify-content: baseline"><div></div></div> - <div class="container" style="justify-content: last baseline"><div></div></div> - <br> <!-- <content-distribution> --> <div class="container" style="justify-content: space-between"><div></div></div> <div class="container" style="justify-content: space-around"><div></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-vertWM-002-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-vertWM-002-ref.html index d4fd90e3539..3e109d01e63 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-vertWM-002-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-vertWM-002-ref.html @@ -49,10 +49,6 @@ <!-- normal --> <div class="container"><div class="alignStart"><!--normal--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <content-distribution> --> <div class="container"><div class="alignStart"><!--space-between--></div></div> <div class="container"><div class="alignCenter"><!--space-around--></div></div> @@ -77,10 +73,6 @@ <!-- normal --> <div class="container"><div class="alignStart"><!--normal--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <content-distribution> --> <div class="container"><div class="alignStart"><!--space-between--></div></div> <div class="container"><div class="alignCenter"><!--space-around--></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-vertWM-002.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-vertWM-002.html index 1eb456d6e0f..59ea15340cb 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-vertWM-002.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-justify-content-vertWM-002.html @@ -48,10 +48,6 @@ <!-- normal --> <div class="container" style="justify-content: normal"><div></div></div> <br> - <!-- <baseline-position> --> - <div class="container" style="justify-content: baseline"><div></div></div> - <div class="container" style="justify-content: last baseline"><div></div></div> - <br> <!-- <content-distribution> --> <div class="container" style="justify-content: space-between"><div></div></div> <div class="container" style="justify-content: space-around"><div></div></div> @@ -76,10 +72,6 @@ <!-- normal --> <div class="container" style="justify-content: normal"><div></div></div> <br> - <!-- <baseline-position> --> - <div class="container" style="justify-content: baseline"><div></div></div> - <div class="container" style="justify-content: last baseline"><div></div></div> - <br> <!-- <content-distribution> --> <div class="container" style="justify-content: space-between"><div></div></div> <div class="container" style="justify-content: space-around"><div></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-align-self-001-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-align-self-001-ref.html index e519f2d7afd..36b570f2458 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-align-self-001-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-align-self-001-ref.html @@ -66,8 +66,6 @@ <!-- <self-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignStart"><!--right--></div></div> <br> </div> <div class="small"> @@ -92,8 +90,6 @@ <!-- <self-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignStart"><!--right--></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-align-self-001.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-align-self-001.html index 02b7a136abf..191d6b84cb6 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-align-self-001.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-align-self-001.html @@ -67,8 +67,6 @@ <!-- <self-position>, part 2 --> <div class="container"><div style="align-self: flex-start"></div></div> <div class="container"><div style="align-self: flex-end"></div></div> - <div class="container"><div style="align-self: left"></div></div> - <div class="container"><div style="align-self: right"></div></div> <br> </div> <div class="small"> @@ -93,8 +91,6 @@ <!-- <self-position>, part 2 --> <div class="container"><div style="align-self: flex-start"></div></div> <div class="container"><div style="align-self: flex-end"></div></div> - <div class="container"><div style="align-self: left"></div></div> - <div class="container"><div style="align-self: right"></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-align-self-002-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-align-self-002-ref.html index eaa1c712d9e..376e0086f85 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-align-self-002-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-align-self-002-ref.html @@ -64,8 +64,6 @@ <!-- <self-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignStart"><!--right--></div></div> <br> </div> <div class="small"> @@ -90,8 +88,6 @@ <!-- <self-position>, part 2: --> <div class="container"><div class="alignStart"><!--flex-start--></div></div> <div class="container"><div class="alignEnd"><!--flex-end--></div></div> - <div class="container"><div class="alignStart"><!--left--></div></div> - <div class="container"><div class="alignStart"><!--right--></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-align-self-002.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-align-self-002.html index 32f90939b7e..b9ee7277ab9 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-align-self-002.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-align-self-002.html @@ -66,8 +66,6 @@ <!-- <self-position>, part 2 --> <div class="container"><div style="align-self: flex-start"></div></div> <div class="container"><div style="align-self: flex-end"></div></div> - <div class="container"><div style="align-self: left"></div></div> - <div class="container"><div style="align-self: right"></div></div> <br> </div> <div class="small"> @@ -92,8 +90,6 @@ <!-- <self-position>, part 2 --> <div class="container"><div style="align-self: flex-start"></div></div> <div class="container"><div style="align-self: flex-end"></div></div> - <div class="container"><div style="align-self: left"></div></div> - <div class="container"><div style="align-self: right"></div></div> <br> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-001-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-001-ref.html index 6d197e490fe..0b87de98813 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-001-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-001-ref.html @@ -53,10 +53,6 @@ <div class="container"><div class="alignStart"><!--normal--></div></div> <div class="container"><div class="alignStart"><!--stretch--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> <div class="container"><div class="alignStart"><!--start--></div></div> @@ -79,10 +75,6 @@ <div class="container"><div class="alignStart"><!--normal--></div></div> <div class="container"><div class="alignStart"><!--stretch--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> <div class="container"><div class="alignStart"><!--start--></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-001.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-001.html index 99cfcbb9b4e..3fa15f1d645 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-001.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-001.html @@ -54,10 +54,6 @@ <div class="container"><div style="justify-self: normal"></div></div> <div class="container"><div style="justify-self: stretch"></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> - <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div> <div class="container"><div style="justify-self: start"></div></div> @@ -80,10 +76,6 @@ <div class="container"><div style="justify-self: normal"></div></div> <div class="container"><div style="justify-self: stretch"></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> - <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div> <div class="container"><div style="justify-self: start"></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-002-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-002-ref.html index 741a795f20e..592cf8933c0 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-002-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-002-ref.html @@ -51,10 +51,6 @@ <div class="container"><div class="alignStart"><!--normal--></div></div> <div class="container"><div class="alignStart"><!--stretch--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> <div class="container"><div class="alignStart"><!--start--></div></div> @@ -77,10 +73,6 @@ <div class="container"><div class="alignStart"><!--normal--></div></div> <div class="container"><div class="alignStart"><!--stretch--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> <div class="container"><div class="alignStart"><!--start--></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-002.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-002.html index b82d308af1b..8db71d35221 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-002.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-002.html @@ -53,10 +53,6 @@ <div class="container"><div style="justify-self: normal"></div></div> <div class="container"><div style="justify-self: stretch"></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> - <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div> <div class="container"><div style="justify-self: start"></div></div> @@ -79,10 +75,6 @@ <div class="container"><div style="justify-self: normal"></div></div> <div class="container"><div style="justify-self: stretch"></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> - <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div> <div class="container"><div style="justify-self: start"></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-img-001-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-img-001-ref.html index 78d621219ab..2fcc585581a 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-img-001-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-img-001-ref.html @@ -54,12 +54,6 @@ <div class="container"><img src="support/colors-8x16.png" class="alignStart"><!--stretch--></div> <br> - <!-- <baseline-position> --> - <div class="container"><img src="support/colors-8x16.png" - class="alignStart"><!--baseline--></div> - <div class="container"><img src="support/colors-8x16.png" - class="alignEnd"><!--last baseline--></div> - <br> <!-- <self-position>, part 1: --> <div class="container"><img src="support/colors-8x16.png" class="alignCenter"><!--center--></div> @@ -94,12 +88,6 @@ <div class="container"><img src="support/colors-8x16.png" class="alignStart"><!--stretch--></div> <br> - <!-- <baseline-position> --> - <div class="container"><img src="support/colors-8x16.png" - class="alignStart"><!--baseline--></div> - <div class="container"><img src="support/colors-8x16.png" - class="alignEnd"><!--last baseline--></div> - <br> <!-- <self-position>, part 1: --> <div class="container"><img src="support/colors-8x16.png" class="alignCenter"><!--center--></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-img-001.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-img-001.html index fdd4f6220be..ad392ccc213 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-img-001.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-img-001.html @@ -53,12 +53,6 @@ <div class="container"><img src="support/colors-8x16.png" style="justify-self: stretch"></div> <br> - <!-- <baseline-position> --> - <div class="container"><img src="support/colors-8x16.png" - style="justify-self: baseline"></div> - <div class="container"><img src="support/colors-8x16.png" - style="justify-self: last baseline"></div> - <br> <!-- <self-position>, part 1 --> <div class="container"><img src="support/colors-8x16.png" style="justify-self: center"></div> @@ -93,12 +87,6 @@ <div class="container"><img src="support/colors-8x16.png" style="justify-self: stretch"></div> <br> - <!-- <baseline-position> --> - <div class="container"><img src="support/colors-8x16.png" - style="justify-self: baseline"></div> - <div class="container"><img src="support/colors-8x16.png" - style="justify-self: last baseline"></div> - <br> <!-- <self-position>, part 1 --> <div class="container"><img src="support/colors-8x16.png" style="justify-self: center"></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-img-002-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-img-002-ref.html index a1d4e8163fd..65badb02a48 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-img-002-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-img-002-ref.html @@ -52,12 +52,6 @@ <div class="container"><img src="support/colors-8x16.png" class="alignStart"><!--stretch--></div> <br> - <!-- <baseline-position> --> - <div class="container"><img src="support/colors-8x16.png" - class="alignStart"><!--baseline--></div> - <div class="container"><img src="support/colors-8x16.png" - class="alignEnd"><!--last baseline--></div> - <br> <!-- <self-position>, part 1: --> <div class="container"><img src="support/colors-8x16.png" class="alignCenter"><!--center--></div> @@ -92,12 +86,6 @@ <div class="container"><img src="support/colors-8x16.png" class="alignStart"><!--stretch--></div> <br> - <!-- <baseline-position> --> - <div class="container"><img src="support/colors-8x16.png" - class="alignStart"><!--baseline--></div> - <div class="container"><img src="support/colors-8x16.png" - class="alignEnd"><!--last baseline--></div> - <br> <!-- <self-position>, part 1: --> <div class="container"><img src="support/colors-8x16.png" class="alignCenter"><!--center--></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-img-002.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-img-002.html index 61c1b97b51f..c1747102918 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-img-002.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-img-002.html @@ -52,12 +52,6 @@ <div class="container"><img src="support/colors-8x16.png" style="justify-self: stretch"></div> <br> - <!-- <baseline-position> --> - <div class="container"><img src="support/colors-8x16.png" - style="justify-self: baseline"></div> - <div class="container"><img src="support/colors-8x16.png" - style="justify-self: last baseline"></div> - <br> <!-- <self-position>, part 1 --> <div class="container"><img src="support/colors-8x16.png" style="justify-self: center"></div> @@ -92,12 +86,6 @@ <div class="container"><img src="support/colors-8x16.png" style="justify-self: stretch"></div> <br> - <!-- <baseline-position> --> - <div class="container"><img src="support/colors-8x16.png" - style="justify-self: baseline"></div> - <div class="container"><img src="support/colors-8x16.png" - style="justify-self: last baseline"></div> - <br> <!-- <self-position>, part 1 --> <div class="container"><img src="support/colors-8x16.png" style="justify-self: center"></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-001-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-001-ref.html index 8e5db1efc59..a2899e07fea 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-001-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-001-ref.html @@ -53,10 +53,6 @@ <div class="container"><div class="alignStart"><!--normal--></div></div> <div class="container"><div class="alignStart"><!--stretch--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> <div class="container"><div class="alignStart"><!--start--></div></div> @@ -79,10 +75,6 @@ <div class="container"><div class="alignStart"><!--normal--></div></div> <div class="container"><div class="alignStart"><!--stretch--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> <div class="container"><div class="alignStart"><!--start--></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-001.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-001.html index 18e024bf2e8..a0a57aee0a8 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-001.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-001.html @@ -54,10 +54,6 @@ <div class="container"><div style="justify-self: normal"></div></div> <div class="container"><div style="justify-self: stretch"></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> - <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div> <div class="container"><div style="justify-self: start"></div></div> @@ -80,10 +76,6 @@ <div class="container"><div style="justify-self: normal"></div></div> <div class="container"><div style="justify-self: stretch"></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> - <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div> <div class="container"><div style="justify-self: start"></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-002-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-002-ref.html index c7176a7c210..06312f500b5 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-002-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-002-ref.html @@ -53,10 +53,6 @@ <div class="container"><div class="alignStart"><!--normal--></div></div> <div class="container"><div class="alignStart"><!--stretch--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> <div class="container"><div class="alignStart"><!--start--></div></div> @@ -79,10 +75,6 @@ <div class="container"><div class="alignStart"><!--normal--></div></div> <div class="container"><div class="alignStart"><!--stretch--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> <div class="container"><div class="alignStart"><!--start--></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-002.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-002.html index d7e510e1b5e..a309859b5b4 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-002.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-002.html @@ -55,10 +55,6 @@ <div class="container"><div style="justify-self: normal"></div></div> <div class="container"><div style="justify-self: stretch"></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> - <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div> <div class="container"><div style="justify-self: start"></div></div> @@ -81,10 +77,6 @@ <div class="container"><div style="justify-self: normal"></div></div> <div class="container"><div style="justify-self: stretch"></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> - <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div> <div class="container"><div style="justify-self: start"></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-003-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-003-ref.html index b38590c8021..9c243ac5f36 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-003-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-003-ref.html @@ -51,10 +51,6 @@ <div class="container"><div class="alignStart"><!--normal--></div></div> <div class="container"><div class="alignStart"><!--stretch--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> <div class="container"><div class="alignStart"><!--start--></div></div> @@ -77,10 +73,6 @@ <div class="container"><div class="alignStart"><!--normal--></div></div> <div class="container"><div class="alignStart"><!--stretch--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> <div class="container"><div class="alignStart"><!--start--></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-003.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-003.html index 2224ff684af..19cf377cad2 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-003.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-003.html @@ -53,10 +53,6 @@ <div class="container"><div style="justify-self: normal"></div></div> <div class="container"><div style="justify-self: stretch"></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> - <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div> <div class="container"><div style="justify-self: start"></div></div> @@ -79,10 +75,6 @@ <div class="container"><div style="justify-self: normal"></div></div> <div class="container"><div style="justify-self: stretch"></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> - <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div> <div class="container"><div style="justify-self: start"></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-004-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-004-ref.html index 1ebc9e62c97..3cbad644b49 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-004-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-004-ref.html @@ -51,10 +51,6 @@ <div class="container"><div class="alignStart"><!--normal--></div></div> <div class="container"><div class="alignStart"><!--stretch--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> <div class="container"><div class="alignStart"><!--start--></div></div> @@ -77,10 +73,6 @@ <div class="container"><div class="alignStart"><!--normal--></div></div> <div class="container"><div class="alignStart"><!--stretch--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> <div class="container"><div class="alignStart"><!--start--></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-004.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-004.html index a22fdc24fb7..f8170a80d37 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-004.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-rtl-004.html @@ -54,10 +54,6 @@ <div class="container"><div style="justify-self: normal"></div></div> <div class="container"><div style="justify-self: stretch"></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> - <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div> <div class="container"><div style="justify-self: start"></div></div> @@ -80,10 +76,6 @@ <div class="container"><div style="justify-self: normal"></div></div> <div class="container"><div style="justify-self: stretch"></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> - <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div> <div class="container"><div style="justify-self: start"></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-001-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-001-ref.html index 9fff3eabcc0..0b40e42550b 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-001-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-001-ref.html @@ -55,10 +55,6 @@ <div class="container"><div class="alignStart"><!--normal--></div></div> <div class="container"><div class="alignStart"><!--stretch--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> <div class="container"><div class="alignStart"><!--start--></div></div> @@ -81,10 +77,6 @@ <div class="container"><div class="alignStart"><!--normal--></div></div> <div class="container"><div class="alignStart"><!--stretch--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> <div class="container"><div class="alignStart"><!--start--></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-001.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-001.html index 1bc2a5c3386..d3ce4007d91 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-001.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-001.html @@ -53,10 +53,6 @@ <div class="container"><div style="justify-self: normal"></div></div> <div class="container"><div style="justify-self: stretch"></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> - <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div> <div class="container"><div style="justify-self: start"></div></div> @@ -79,10 +75,6 @@ <div class="container"><div style="justify-self: normal"></div></div> <div class="container"><div style="justify-self: stretch"></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> - <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div> <div class="container"><div style="justify-self: start"></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-002-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-002-ref.html index 9fff3eabcc0..0b40e42550b 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-002-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-002-ref.html @@ -55,10 +55,6 @@ <div class="container"><div class="alignStart"><!--normal--></div></div> <div class="container"><div class="alignStart"><!--stretch--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> <div class="container"><div class="alignStart"><!--start--></div></div> @@ -81,10 +77,6 @@ <div class="container"><div class="alignStart"><!--normal--></div></div> <div class="container"><div class="alignStart"><!--stretch--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> <div class="container"><div class="alignStart"><!--start--></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-002.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-002.html index 7b72c6aaeb1..03078a6b448 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-002.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-002.html @@ -54,10 +54,6 @@ <div class="container"><div style="justify-self: normal"></div></div> <div class="container"><div style="justify-self: stretch"></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> - <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div> <div class="container"><div style="justify-self: start"></div></div> @@ -80,10 +76,6 @@ <div class="container"><div style="justify-self: normal"></div></div> <div class="container"><div style="justify-self: stretch"></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> - <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div> <div class="container"><div style="justify-self: start"></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-003-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-003-ref.html index 15507845661..ecc148a3215 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-003-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-003-ref.html @@ -53,10 +53,6 @@ <div class="container"><div class="alignStart"><!--normal--></div></div> <div class="container"><div class="alignStart"><!--stretch--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> <div class="container"><div class="alignStart"><!--start--></div></div> @@ -79,10 +75,6 @@ <div class="container"><div class="alignStart"><!--normal--></div></div> <div class="container"><div class="alignStart"><!--stretch--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> <div class="container"><div class="alignStart"><!--start--></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-003.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-003.html index 582262bd3de..e6a712d00da 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-003.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-003.html @@ -52,10 +52,6 @@ <div class="container"><div style="justify-self: normal"></div></div> <div class="container"><div style="justify-self: stretch"></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> - <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div> <div class="container"><div style="justify-self: start"></div></div> @@ -78,10 +74,6 @@ <div class="container"><div style="justify-self: normal"></div></div> <div class="container"><div style="justify-self: stretch"></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> - <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div> <div class="container"><div style="justify-self: start"></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-004-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-004-ref.html index 15507845661..ecc148a3215 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-004-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-004-ref.html @@ -53,10 +53,6 @@ <div class="container"><div class="alignStart"><!--normal--></div></div> <div class="container"><div class="alignStart"><!--stretch--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> <div class="container"><div class="alignStart"><!--start--></div></div> @@ -79,10 +75,6 @@ <div class="container"><div class="alignStart"><!--normal--></div></div> <div class="container"><div class="alignStart"><!--stretch--></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> - <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> <div class="container"><div class="alignStart"><!--start--></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-004.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-004.html index 63c893b6c4f..070829ba8c6 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-004.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/align3/grid-abspos-staticpos-justify-self-vertWM-004.html @@ -53,10 +53,6 @@ <div class="container"><div style="justify-self: normal"></div></div> <div class="container"><div style="justify-self: stretch"></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> - <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div> <div class="container"><div style="justify-self: start"></div></div> @@ -79,10 +75,6 @@ <div class="container"><div style="justify-self: normal"></div></div> <div class="container"><div style="justify-self: stretch"></div></div> <br> - <!-- <baseline-position> --> - <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> - <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div> <div class="container"><div style="justify-self: start"></div></div> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-content-horiz-001-ref.xhtml b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-content-horiz-001-ref.xhtml index 18d4c584846..c83f5a03ce2 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-content-horiz-001-ref.xhtml +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-content-horiz-001-ref.xhtml @@ -138,34 +138,5 @@ <div class="b" style="margin-top: 30px"><div class="fixedSizeChild"/></div> <div class="c" style="margin-top: 30px"/> </div> - - <!-- left --> - <div class="flexbox"> - <div class="a"/> - </div> - <div class="flexbox"> - <div class="a"/> - <div class="b"><div class="fixedSizeChild"/></div> - </div> - <div class="flexbox"> - <div class="a"/> - <div class="b"><div class="fixedSizeChild"/></div> - <div class="c"/> - </div> - - <!-- right --> - <div class="flexbox"> - <div class="a"/> - </div> - <div class="flexbox"> - <div class="a"/> - <div class="b"><div class="fixedSizeChild"/></div> - </div> - <div class="flexbox"> - <div class="a"/> - <div class="b"><div class="fixedSizeChild"/></div> - <div class="c"/> - </div> - </body> </html> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-content-horiz-001a.xhtml b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-content-horiz-001a.xhtml index c7ef7d6aff5..96fc4cd0a44 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-content-horiz-001a.xhtml +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-content-horiz-001a.xhtml @@ -147,34 +147,5 @@ <div class="b"><div class="fixedSizeChild"/></div> <div class="c"/> </div> - - <!-- left --> - <div class="flexbox" style="align-content: left"> - <div class="a"/> - </div> - <div class="flexbox" style="align-content: left"> - <div class="a"/> - <div class="b"><div class="fixedSizeChild"/></div> - </div> - <div class="flexbox" style="align-content: left"> - <div class="a"/> - <div class="b"><div class="fixedSizeChild"/></div> - <div class="c"/> - </div> - - <!-- right --> - <div class="flexbox" style="align-content: right"> - <div class="a"/> - </div> - <div class="flexbox" style="align-content: right"> - <div class="a"/> - <div class="b"><div class="fixedSizeChild"/></div> - </div> - <div class="flexbox" style="align-content: right"> - <div class="a"/> - <div class="b"><div class="fixedSizeChild"/></div> - <div class="c"/> - </div> - </body> </html> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-content-horiz-001b.xhtml b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-content-horiz-001b.xhtml index 19054382cf1..0f2a25426b3 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-content-horiz-001b.xhtml +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-content-horiz-001b.xhtml @@ -148,34 +148,5 @@ <div class="b"><div class="fixedSizeChild"/></div> <div class="c"/> </div> - - <!-- left --> - <div class="flexbox" style="align-content: left"> - <div class="a"/> - </div> - <div class="flexbox" style="align-content: left"> - <div class="a"/> - <div class="b"><div class="fixedSizeChild"/></div> - </div> - <div class="flexbox" style="align-content: left"> - <div class="a"/> - <div class="b"><div class="fixedSizeChild"/></div> - <div class="c"/> - </div> - - <!-- right --> - <div class="flexbox" style="align-content: right"> - <div class="a"/> - </div> - <div class="flexbox" style="align-content: right"> - <div class="a"/> - <div class="b"><div class="fixedSizeChild"/></div> - </div> - <div class="flexbox" style="align-content: right"> - <div class="a"/> - <div class="b"><div class="fixedSizeChild"/></div> - <div class="c"/> - </div> - </body> </html> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-content-vert-001-ref.xhtml b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-content-vert-001-ref.xhtml index 460ccef05c1..ab407a42e21 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-content-vert-001-ref.xhtml +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-content-vert-001-ref.xhtml @@ -141,34 +141,5 @@ <div class="b" style="margin-left: 30px"><div class="fixedSizeChild"/></div> <div class="c" style="margin-left: 30px"/> </div> - - <!-- left --> - <div class="flexbox"> - <div class="a"/> - </div> - <div class="flexbox"> - <div class="a"/> - <div class="b"><div class="fixedSizeChild"/></div> - </div> - <div class="flexbox"> - <div class="a"/> - <div class="b"><div class="fixedSizeChild"/></div> - <div class="c"/> - </div> - - <!-- right --> - <div class="flexbox"> - <div class="a" style="margin-left: 190px"/> - </div> - <div class="flexbox"> - <div class="a" style="margin-left: 160px"/> - <div class="b"><div class="fixedSizeChild"/></div> - </div> - <div class="flexbox"> - <div class="a" style="margin-left: 120px"/> - <div class="b"><div class="fixedSizeChild"/></div> - <div class="c"/> - </div> - </body> </html> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-content-vert-001a.xhtml b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-content-vert-001a.xhtml index ef91d5fb770..e8319cb7538 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-content-vert-001a.xhtml +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-content-vert-001a.xhtml @@ -147,34 +147,5 @@ <div class="b"><div class="fixedSizeChild"/></div> <div class="c"/> </div> - - <!-- left --> - <div class="flexbox" style="align-content: left"> - <div class="a"/> - </div> - <div class="flexbox" style="align-content: left"> - <div class="a"/> - <div class="b"><div class="fixedSizeChild"/></div> - </div> - <div class="flexbox" style="align-content: left"> - <div class="a"/> - <div class="b"><div class="fixedSizeChild"/></div> - <div class="c"/> - </div> - - <!-- right --> - <div class="flexbox" style="align-content: right"> - <div class="a"/> - </div> - <div class="flexbox" style="align-content: right"> - <div class="a"/> - <div class="b"><div class="fixedSizeChild"/></div> - </div> - <div class="flexbox" style="align-content: right"> - <div class="a"/> - <div class="b"><div class="fixedSizeChild"/></div> - <div class="c"/> - </div> - </body> </html> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-content-vert-001b.xhtml b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-content-vert-001b.xhtml index 9b9b2fa726a..a2e7ae6fb8a 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-content-vert-001b.xhtml +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-content-vert-001b.xhtml @@ -148,34 +148,5 @@ <div class="b"><div class="fixedSizeChild"/></div> <div class="c"/> </div> - - <!-- left --> - <div class="flexbox" style="align-content: left"> - <div class="a"/> - </div> - <div class="flexbox" style="align-content: left"> - <div class="a"/> - <div class="b"><div class="fixedSizeChild"/></div> - </div> - <div class="flexbox" style="align-content: left"> - <div class="a"/> - <div class="b"><div class="fixedSizeChild"/></div> - <div class="c"/> - </div> - - <!-- right --> - <div class="flexbox" style="align-content: right"> - <div class="a"/> - </div> - <div class="flexbox" style="align-content: right"> - <div class="a"/> - <div class="b"><div class="fixedSizeChild"/></div> - </div> - <div class="flexbox" style="align-content: right"> - <div class="a"/> - <div class="b"><div class="fixedSizeChild"/></div> - <div class="c"/> - </div> - </body> </html> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-horiz-001-block.xhtml b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-horiz-001-block.xhtml index 569312a7004..365354506f8 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-horiz-001-block.xhtml +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-horiz-001-block.xhtml @@ -74,14 +74,6 @@ background: violet; align-self: inherit; } - .left { - background: tan; - align-self: left; - } - .right { - background: brown; - align-self: right; - } </style> </head> <body> @@ -100,8 +92,6 @@ <div class="unspecified">unspec</div> <div class="initial">initial</div> <div class="inherit">inherit</div> - <div class="left">left</div> - <div class="right">right</div> </div> </body> </html> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-horiz-001-ref.xhtml b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-horiz-001-ref.xhtml index 356ab3d1c59..a95a724811d 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-horiz-001-ref.xhtml +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-horiz-001-ref.xhtml @@ -14,7 +14,7 @@ .flexbox { border: 1px dashed blue; height: 200px; - width: 640px; + width: 560px; font-size: 10px; line-height: 10px; } @@ -58,12 +58,6 @@ .inherit { background: violet; } - .left { - background: tan; - } - .right { - background: brown; - } </style> </head> <body> @@ -92,8 +86,6 @@ <div class="unspecified" style="margin-top: 95px">unspec</div> <div class="initial" style="margin-top: 95px">initial</div> <div class="inherit" style="margin-top: 190px">inherit</div> - <div class="left">left</div> - <div class="right">right</div> </div> </body> </html> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-horiz-001-table.xhtml b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-horiz-001-table.xhtml index 10180adacdf..1785ca8dfc0 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-horiz-001-table.xhtml +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-horiz-001-table.xhtml @@ -76,14 +76,6 @@ background: violet; align-self: inherit; } - .left { - background: tan; - align-self: left; - } - .right { - background: brown; - align-self: right; - } </style> </head> <body> @@ -102,8 +94,6 @@ <div class="unspecified">unspec</div> <div class="initial">initial</div> <div class="inherit">inherit</div> - <div class="left">left</div> - <div class="right">right</div> </div> </body> </html> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-vert-001-ref.xhtml b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-vert-001-ref.xhtml index 1d19034a19e..2288c21ace9 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-vert-001-ref.xhtml +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-vert-001-ref.xhtml @@ -63,14 +63,6 @@ background: violet; float: right; } - .left { - background: tan; - float: left; - } - .right { - background: brown; - float: right; - } <!-- We center shrinkwrapped text by putting it into an inline-block, and then wrapping that inline-block in a helper-div that has @@ -108,12 +100,10 @@ <div class="initial">initial</div> </div> <div class="inherit">inherit</div> - <div class="left">left</div> - <div class="right">right</div> - <!-- Since the last three divs are floated, the container doesn't include - their heights by default. So we add some invisible hacky text (of the + <!-- Since the last div is floated, the container doesn't include + its height by default. So we add some invisible hacky text (of the same font) to make sure our container is tall enough. --> - <span style="visibility:hidden">hacky text<br/>(line 2)<br/>(line 3)</span> + <span style="visibility:hidden">hacky text</span> </div> </body> </html> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-vert-001.xhtml b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-vert-001.xhtml index e611f48fc38..4080d348803 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-vert-001.xhtml +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-vert-001.xhtml @@ -69,14 +69,6 @@ background: violet; align-self: inherit; } - .left { - background: tan; - align-self: left; - } - .right { - background: brown; - align-self: right; - } </style> </head> <body> @@ -95,8 +87,6 @@ <div class="unspecified">unspec</div> <div class="initial">initial</div> <div class="inherit">inherit</div> - <div class="left">left</div> - <div class="right">right</div> </div> </body> </html> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-vert-rtl-001-ref.xhtml b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-vert-rtl-001-ref.xhtml index a9235f07ea3..5c2f62abeba 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-vert-rtl-001-ref.xhtml +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-vert-rtl-001-ref.xhtml @@ -66,14 +66,6 @@ background: violet; float: left; } - .left { - background: tan; - float: left; - } - .right { - background: brown; - float: right; - } <!-- We center shrinkwrapped text by putting it into an inline-block, and then wrapping that inline-block in a helper-div that has @@ -111,12 +103,10 @@ <div class="initial">initial</div> </div> <div class="inherit">inherit</div> - <div class="left">left</div> - <div class="right">right</div> - <!-- Since the last three divs are floated, the container doesn't include - their heights by default. So we add some invisible hacky text (of the + <!-- Since the last div is floated, the container doesn't include + its height by default. So we add some invisible hacky text (of the same font) to make sure our container is tall enough. --> - <span style="visibility:hidden">hacky text<br/>(line 2)<br/>(line 3)</span> + <span style="visibility:hidden">hacky text</span> </div> </body> </html> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-vert-rtl-001.xhtml b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-vert-rtl-001.xhtml index d0ef2963c8f..1016c28f824 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-vert-rtl-001.xhtml +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-vert-rtl-001.xhtml @@ -72,14 +72,6 @@ background: violet; align-self: inherit; } - .left { - background: tan; - align-self: left; - } - .right { - background: brown; - align-self: right; - } </style> </head> <body> @@ -98,8 +90,6 @@ <div class="unspecified">unspec</div> <div class="initial">initial</div> <div class="inherit">inherit</div> - <div class="left">left</div> - <div class="right">right</div> </div> </body> </html> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-paint-ordering-003-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-paint-ordering-003-ref.html new file mode 100644 index 00000000000..5eadc304189 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-paint-ordering-003-ref.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <title>CSS Reftest Reference</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <style> + .limeSquare { + background: lime; + height: 100px; width: 100px; + } + </style> +</head> +<body> + <div class="limeSquare"></div> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-paint-ordering-003.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-paint-ordering-003.html new file mode 100644 index 00000000000..1a5175cb312 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-paint-ordering-003.html @@ -0,0 +1,52 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <title>CSS Test: Testing that paint order isn't influenced + by "order" for absolutely positioned flex children</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#abspos-items"> + <link rel="help" href="http://www.w3.org/TR/css-flexbox-1/#painting"> + <link rel="match" href="flexbox-paint-ordering-003-ref.html"> + <style> + .container { display: flex; } + .absPosLowOrder { + position: absolute; + order: 5; + background: red; + height: 0; + width: 0; + } + .absPosHighOrder { + position: absolute; + order: 10; + height: 0; + width: 0; + } + .redBlock { + height: 100px; + width: 100px; + background: red; + } + .limeBlock { + height: 100px; + width: 100px; + background: lime; + } + </style> +</head> +<body> + <div class="container"> + <!-- Note: The following elements will be superimposed. If they weren't + positioned, then they'd be flex items, and their relative "order" + values would force the first one (with the red child) to paint on top. + But since they're absolutely positioned, they're not flex items & + "order" has no effect, and so the lime one should end up on top. --> + <div class="absPosHighOrder"><div class="redBlock"></div></div> + <div class="absPosLowOrder"><div class="limeBlock"></div></div> + </div> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/reftest.list b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/reftest.list index 3e20fefed4f..cb4c09e4fc9 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/reftest.list +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/reftest.list @@ -174,6 +174,7 @@ # Tests for the order in which we paint flex items == flexbox-paint-ordering-001.xhtml flexbox-paint-ordering-001-ref.xhtml == flexbox-paint-ordering-002.xhtml flexbox-paint-ordering-002-ref.xhtml +== flexbox-paint-ordering-003.html flexbox-paint-ordering-003-ref.html # Tests for "display:flex" on root node == flexbox-root-node-001a.html flexbox-root-node-001-ref.html diff --git a/tests/wpt/web-platform-tests/custom-elements/Document-createElement-svg.svg b/tests/wpt/web-platform-tests/custom-elements/Document-createElement-svg.svg new file mode 100644 index 00000000000..0b53bd830f8 --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/Document-createElement-svg.svg @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8"?> +<svg:svg xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/1999/xhtml" + width="100%" height="100%" viewBox="0 0 800 600"> +<svg:title>document.createElement in SVG for custom elements</svg:title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script><![CDATA[ +test(() => { + class MyElement1 extends HTMLElement {} + customElements.define('my-element', MyElement1); + let element = document.createElement('my-element', {}); + assert_false(element instanceof MyElement1, 'Autonomous custom element should not be created.'); +}, 'document.createElement() in SVG documents should not create autonomous custom elements.') + +test(() => { + class MyElement2 extends HTMLDivElement {} + customElements.define('my-div', MyElement2, { extends: 'div' }); + + let element = document.createElement('div', { is: 'my-div' }); + assert_false(element instanceof MyElement2, 'Custom built-in element should not be created.'); +}, 'document.createElement() in SVG documents should not create custom built-in elements.') +]]></script> +</svg:svg> diff --git a/tests/wpt/web-platform-tests/custom-elements/Document-createElement.html b/tests/wpt/web-platform-tests/custom-elements/Document-createElement.html index e446c507ca8..52a68e8e178 100644 --- a/tests/wpt/web-platform-tests/custom-elements/Document-createElement.html +++ b/tests/wpt/web-platform-tests/custom-elements/Document-createElement.html @@ -29,6 +29,21 @@ test(function () { }, 'document.createElement must create an instance of custom elements'); +test(function () { + class AutonomousCustomElement extends HTMLElement {}; + class IsCustomElement extends HTMLElement {}; + + customElements.define('autonomous-custom-element', AutonomousCustomElement); + customElements.define('is-custom-element', IsCustomElement); + + var instance = document.createElement('autonomous-custom-element', { is: "is-custom-element"}); + + assert_true(instance instanceof AutonomousCustomElement); + assert_equals(instance.localName, 'autonomous-custom-element'); + assert_equals(instance.namespaceURI, 'http://www.w3.org/1999/xhtml', 'A custom element HTML must use HTML namespace'); + +}, 'document.createElement must create an instance of autonomous custom elements when it has is attribute'); + function assert_reports(expected, testFunction, message) { var uncaughtError = null; window.onerror = function (message, url, lineNumber, columnNumber, error) { uncaughtError = error; return true; } diff --git a/tests/wpt/web-platform-tests/custom-elements/Document-createElementNS.html b/tests/wpt/web-platform-tests/custom-elements/Document-createElementNS.html new file mode 100644 index 00000000000..5711a469129 --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/Document-createElementNS.html @@ -0,0 +1,43 @@ +<!DOCTYPE html> +<title>Custom Elements: document.createElementNS should support custom elements</title> +<link rel="help" content="https://dom.spec.whatwg.org/#concept-create-element"> +<link rel="help" content="https://dom.spec.whatwg.org/#internal-createelementns-steps"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<body> +<script> +test(() => { + class MyElement extends HTMLElement {}; + + customElements.define('my-autonomous', MyElement); + let element = document.createElementNS('http://www.w3.org/1999/xhtml', 'p:my-autonomous'); + assert_true(element instanceof MyElement); + assert_equals(element.prefix, 'p'); +}, 'autonomous: document.createElementNS should create custom elements with prefixes.'); + +test(() => { + class MyElement2 extends HTMLElement {}; + + customElements.define('my-autonomous2', MyElement2); + let element = document.createElementNS('urn:example', 'my-autonomous2'); + assert_false(element instanceof MyElement2); +}, 'autonomous: document.createElementNS should check namespaces.'); + +test(() => { + class MyBuiltinElement extends HTMLElement {}; + + customElements.define('my-builtin', MyBuiltinElement, { extends: 'address' }); + let element = document.createElementNS('http://www.w3.org/1999/xhtml', 'p:address', { is: 'my-builtin'}); + assert_true(element instanceof MyBuiltinElement); + assert_equals(element.prefix, 'p'); +}, 'builtin: document.createElementNS should create custom elements with prefixes.'); + +test(() => { + class MyBuiltinElement2 extends HTMLElement {}; + + customElements.define('my-builtin2', MyBuiltinElement2, { extends: 'address'}); + let element = document.createElementNS('urn:example', 'address', { is: 'my-builtin2' }); + assert_false(element instanceof MyBuiltinElement2); +}, 'builtin: document.createElementNS should check namespaces.'); +</script> +</body> diff --git a/tests/wpt/web-platform-tests/custom-elements/attribute-changed-callback.html b/tests/wpt/web-platform-tests/custom-elements/attribute-changed-callback.html index bd467912b99..5090bfbfbfe 100644 --- a/tests/wpt/web-platform-tests/custom-elements/attribute-changed-callback.html +++ b/tests/wpt/web-platform-tests/custom-elements/attribute-changed-callback.html @@ -11,6 +11,7 @@ </head> <body> <div id="log"></div> +<parser-created-element title></parser-created-element> <script> var customElement = define_new_custom_element(['title', 'id', 'r']); @@ -218,6 +219,36 @@ test(function () { assert_attribute_log_entry(calls[0], {name: 'title', oldValue: null, newValue: 'hello', namespace: null}); }, 'attributedChangedCallback must not be enqueued when mutating inline style declaration if the style attribute is not observed'); +test(function () { + var calls = []; + class CustomElement extends HTMLElement { } + CustomElement.prototype.attributeChangedCallback = function (...args) { + calls.push(create_attribute_changed_callback_log(this, ...args)); + } + CustomElement.observedAttributes = ['title']; + customElements.define('parser-created-element', CustomElement); + assert_attribute_log_entry(calls[0], {name: 'title', oldValue: null, newValue: '', namespace: null}); +}, 'Upgrading a parser created element must enqueue and invoke attributeChangedCallback for an HTML attribute'); + +test(function () { + var calls = []; + class CustomElement extends HTMLElement { } + CustomElement.prototype.attributeChangedCallback = function (...args) { + calls.push(create_attribute_changed_callback_log(this, ...args)); + } + CustomElement.observedAttributes = ['title']; + customElements.define('cloned-element-with-attribute', CustomElement); + + var instance = document.createElement('cloned-element-with-attribute'); + assert_equals(calls.length, 0); + instance.title = ''; + assert_attribute_log_entry(calls[0], {name: 'title', oldValue: null, newValue: '', namespace: null}); + + calls = []; + var clone = instance.cloneNode(false); + assert_attribute_log_entry(calls[0], {name: 'title', oldValue: null, newValue: '', namespace: null}); +}, 'Upgrading a cloned element must enqueue and invoke attributeChangedCallback for an HTML attribute'); + </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/custom-elements/builtin-coverage.html b/tests/wpt/web-platform-tests/custom-elements/builtin-coverage.html new file mode 100644 index 00000000000..2778a689984 --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/builtin-coverage.html @@ -0,0 +1,823 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<meta name="help" content="https://html.spec.whatwg.org/multipage/custom-elements.html#element-definition"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<body> +<div id="container"></div> +<script> +class MyA extends HTMLAnchorElement { + constructor() { + super(); + } +} + +class MyAbbr extends HTMLElement { + constructor() { + super(); + } +} + +class MyAddress extends HTMLElement { + constructor() { + super(); + } +} + +class MyArea extends HTMLAreaElement { + constructor() { + super(); + } +} + +class MyArticle extends HTMLElement { + constructor() { + super(); + } +} + +class MyAside extends HTMLElement { + constructor() { + super(); + } +} + +class MyAudio extends HTMLAudioElement { + constructor() { + super(); + } +} + +class MyB extends HTMLElement { + constructor() { + super(); + } +} + +class MyBase extends HTMLBaseElement { + constructor() { + super(); + } +} + +class MyBdi extends HTMLElement { + constructor() { + super(); + } +} + +class MyBdo extends HTMLElement { + constructor() { + super(); + } +} + +class MyBlockquote extends HTMLQuoteElement { + constructor() { + super(); + } +} + +class MyBody extends HTMLBodyElement { + constructor() { + super(); + } +} + +class MyBr extends HTMLBRElement { + constructor() { + super(); + } +} + +class MyButton extends HTMLButtonElement { + constructor() { + super(); + } +} + +class MyCanvas extends HTMLCanvasElement { + constructor() { + super(); + } +} + +class MyCaption extends HTMLTableCaptionElement { + constructor() { + super(); + } +} + +class MyCite extends HTMLElement { + constructor() { + super(); + } +} + +class MyCode extends HTMLElement { + constructor() { + super(); + } +} + +class MyCol extends HTMLTableColElement { + constructor() { + super(); + } +} + +class MyColgroup extends HTMLTableColElement { + constructor() { + super(); + } +} + +class MyData extends HTMLDataElement { + constructor() { + super(); + } +} + +class MyDd extends HTMLElement { + constructor() { + super(); + } +} + +class MyDel extends HTMLModElement { + constructor() { + super(); + } +} + +class MyDetails extends HTMLDetailsElement { + constructor() { + super(); + } +} + +class MyDfn extends HTMLElement { + constructor() { + super(); + } +} + +class MyDiv extends HTMLDivElement { + constructor() { + super(); + } +} + +class MyDl extends HTMLDListElement { + constructor() { + super(); + } +} + +class MyDt extends HTMLElement { + constructor() { + super(); + } +} + +class MyEm extends HTMLElement { + constructor() { + super(); + } +} + +class MyEmbed extends HTMLEmbedElement { + constructor() { + super(); + } +} + +class MyFieldset extends HTMLFieldSetElement { + constructor() { + super(); + } +} + +class MyFigcaption extends HTMLElement { + constructor() { + super(); + } +} + +class MyFigure extends HTMLElement { + constructor() { + super(); + } +} + +class MyFooter extends HTMLElement { + constructor() { + super(); + } +} + +class MyForm extends HTMLFormElement { + constructor() { + super(); + } +} + +class MyH1 extends HTMLHeadingElement { + constructor() { + super(); + } +} + +class MyH2 extends HTMLHeadingElement { + constructor() { + super(); + } +} + +class MyH3 extends HTMLHeadingElement { + constructor() { + super(); + } +} + +class MyH4 extends HTMLHeadingElement { + constructor() { + super(); + } +} + +class MyH5 extends HTMLHeadingElement { + constructor() { + super(); + } +} + +class MyH6 extends HTMLHeadingElement { + constructor() { + super(); + } +} + +class MyHeader extends HTMLElement { + constructor() { + super(); + } +} + +class MyHgroup extends HTMLElement { + constructor() { + super(); + } +} + +class MyHr extends HTMLHRElement { + constructor() { + super(); + } +} + +class MyHtml extends HTMLHtmlElement { + constructor() { + super(); + } +} + +class MyI extends HTMLElement { + constructor() { + super(); + } +} + +class MyIframe extends HTMLIFrameElement { + constructor() { + super(); + } +} + +class MyImg extends HTMLImageElement { + constructor() { + super(); + } +} + +class MyInput extends HTMLInputElement { + constructor() { + super(); + } +} + +class MyIns extends HTMLModElement { + constructor() { + super(); + } +} + +class MyKbd extends HTMLElement { + constructor() { + super(); + } +} + +class MyLabel extends HTMLLabelElement { + constructor() { + super(); + } +} + +class MyLegend extends HTMLLegendElement { + constructor() { + super(); + } +} + +class MyLi extends HTMLLIElement { + constructor() { + super(); + } +} + +class MyLink extends HTMLLinkElement { + constructor() { + super(); + } +} + +class MyMain extends HTMLElement { + constructor() { + super(); + } +} + +class MyMap extends HTMLMapElement { + constructor() { + super(); + } +} + +class MyMark extends HTMLElement { + constructor() { + super(); + } +} + +class MyMenu extends HTMLMenuElement { + constructor() { + super(); + } +} + +class MyMeta extends HTMLMetaElement { + constructor() { + super(); + } +} + +class MyMeter extends HTMLMeterElement { + constructor() { + super(); + } +} + +class MyNav extends HTMLElement { + constructor() { + super(); + } +} + +class MyNoscript extends HTMLElement { + constructor() { + super(); + } +} + +class MyObject extends HTMLObjectElement { + constructor() { + super(); + } +} + +class MyOl extends HTMLOListElement { + constructor() { + super(); + } +} + +class MyOptgroup extends HTMLOptGroupElement { + constructor() { + super(); + } +} + +class MyOption extends HTMLOptionElement { + constructor() { + super(); + } +} + +class MyOutput extends HTMLOutputElement { + constructor() { + super(); + } +} + +class MyP extends HTMLParagraphElement { + constructor() { + super(); + } +} + +class MyParam extends HTMLParamElement { + constructor() { + super(); + } +} + +class MyPicture extends HTMLPictureElement { + constructor() { + super(); + } +} + +class MyPre extends HTMLPreElement { + constructor() { + super(); + } +} + +class MyProgress extends HTMLProgressElement { + constructor() { + super(); + } +} + +class MyQ extends HTMLQuoteElement { + constructor() { + super(); + } +} + +class MyRp extends HTMLElement { + constructor() { + super(); + } +} + +class MyRt extends HTMLElement { + constructor() { + super(); + } +} + +class MyRuby extends HTMLElement { + constructor() { + super(); + } +} + +class MyS extends HTMLElement { + constructor() { + super(); + } +} + +class MySamp extends HTMLElement { + constructor() { + super(); + } +} + +class MyScript extends HTMLScriptElement { + constructor() { + super(); + } +} + +class MySection extends HTMLElement { + constructor() { + super(); + } +} + +class MySelect extends HTMLSelectElement { + constructor() { + super(); + } +} + +class MySmall extends HTMLElement { + constructor() { + super(); + } +} + +class MySource extends HTMLSourceElement { + constructor() { + super(); + } +} + +class MySpan extends HTMLSpanElement { + constructor() { + super(); + } +} + +class MyStrong extends HTMLElement { + constructor() { + super(); + } +} + +class MyStyle extends HTMLStyleElement { + constructor() { + super(); + } +} + +class MySub extends HTMLElement { + constructor() { + super(); + } +} + +class MySummary extends HTMLElement { + constructor() { + super(); + } +} + +class MySup extends HTMLElement { + constructor() { + super(); + } +} + +class MyTable extends HTMLTableElement { + constructor() { + super(); + } +} + +class MyTbody extends HTMLTableSectionElement { + constructor() { + super(); + } +} + +class MyTd extends HTMLTableCellElement { + constructor() { + super(); + } +} + +class MyTemplate extends HTMLTemplateElement { + constructor() { + super(); + } +} + +class MyTextarea extends HTMLTextAreaElement { + constructor() { + super(); + } +} + +class MyTfoot extends HTMLTableSectionElement { + constructor() { + super(); + } +} + +class MyTh extends HTMLTableCellElement { + constructor() { + super(); + } +} + +class MyThead extends HTMLTableSectionElement { + constructor() { + super(); + } +} + +class MyTime extends HTMLTimeElement { + constructor() { + super(); + } +} + +class MyTitle extends HTMLTitleElement { + constructor() { + super(); + } +} + +class MyTr extends HTMLTableRowElement { + constructor() { + super(); + } +} + +class MyTrack extends HTMLTrackElement { + constructor() { + super(); + } +} + +class MyU extends HTMLElement { + constructor() { + super(); + } +} + +class MyUl extends HTMLUListElement { + constructor() { + super(); + } +} + +class MyVar extends HTMLElement { + constructor() { + super(); + } +} + +class MyVideo extends HTMLVideoElement { + constructor() { + super(); + } +} + +class MyWbr extends HTMLElement { + constructor() { + super(); + } +} + +let testData = [ + {tag: 'a', klass: MyA}, + {tag: 'abbr', klass: MyAbbr}, + {tag: 'address', klass: MyAddress}, + {tag: 'area', klass: MyArea}, + {tag: 'article', klass: MyArticle}, + {tag: 'aside', klass: MyAside}, + {tag: 'audio', klass: MyAudio}, + {tag: 'b', klass: MyB}, + {tag: 'base', klass: MyBase}, + {tag: 'bdi', klass: MyBdi}, + {tag: 'bdo', klass: MyBdo}, + {tag: 'blockquote', klass: MyBlockquote}, + {tag: 'body', klass: MyBody, innerHTML: 'skip'}, + {tag: 'br', klass: MyBr}, + {tag: 'button', klass: MyButton}, + {tag: 'canvas', klass: MyCanvas}, + {tag: 'caption', klass: MyCaption, innerHTML: 'table'}, + {tag: 'cite', klass: MyCite}, + {tag: 'code', klass: MyCode}, + {tag: 'col', klass: MyCol, innerHTML: 'table'}, + {tag: 'colgroup', klass: MyColgroup, innerHTML: 'table'}, + {tag: 'data', klass: MyData}, + {tag: 'dd', klass: MyDd}, + {tag: 'del', klass: MyDel}, + {tag: 'details', klass: MyDetails}, + {tag: 'dfn', klass: MyDfn}, + {tag: 'div', klass: MyDiv}, + {tag: 'dl', klass: MyDl}, + {tag: 'dt', klass: MyDt}, + {tag: 'em', klass: MyEm}, + {tag: 'embed', klass: MyEmbed}, + {tag: 'fieldset', klass: MyFieldset}, + {tag: 'figcaption', klass: MyFigcaption}, + {tag: 'figure', klass: MyFigure}, + {tag: 'footer', klass: MyFooter}, + {tag: 'form', klass: MyForm}, + {tag: 'h1', klass: MyH1}, + {tag: 'h2', klass: MyH2}, + {tag: 'h3', klass: MyH3}, + {tag: 'h4', klass: MyH4}, + {tag: 'h5', klass: MyH5}, + {tag: 'h6', klass: MyH6}, + {tag: 'header', klass: MyHeader}, + {tag: 'hgroup', klass: MyHgroup}, + {tag: 'hr', klass: MyHr}, + {tag: 'html', klass: MyHtml, innerHTML: 'skip'}, + {tag: 'i', klass: MyI}, + {tag: 'iframe', klass: MyIframe}, + {tag: 'img', klass: MyImg}, + {tag: 'input', klass: MyInput}, + {tag: 'ins', klass: MyIns}, + {tag: 'kbd', klass: MyKbd}, + {tag: 'label', klass: MyLabel}, + {tag: 'legend', klass: MyLegend}, + {tag: 'li', klass: MyLi}, + {tag: 'link', klass: MyLink}, + {tag: 'main', klass: MyMain}, + {tag: 'map', klass: MyMap}, + {tag: 'mark', klass: MyMark}, + {tag: 'menu', klass: MyMenu}, + {tag: 'meta', klass: MyMeta}, + {tag: 'meter', klass: MyMeter}, + {tag: 'nav', klass: MyNav}, + {tag: 'noscript', klass: MyNoscript}, + {tag: 'object', klass: MyObject}, + {tag: 'ol', klass: MyOl}, + {tag: 'optgroup', klass: MyOptgroup}, + {tag: 'option', klass: MyOption}, + {tag: 'output', klass: MyOutput}, + {tag: 'p', klass: MyP}, + {tag: 'param', klass: MyParam}, + {tag: 'picture', klass: MyPicture}, + {tag: 'pre', klass: MyPre}, + {tag: 'progress', klass: MyProgress}, + {tag: 'q', klass: MyQ}, + {tag: 'rp', klass: MyRp}, + {tag: 'rt', klass: MyRt}, + {tag: 'ruby', klass: MyRuby}, + {tag: 's', klass: MyS}, + {tag: 'samp', klass: MySamp}, + {tag: 'script', klass: MyScript}, + {tag: 'section', klass: MySection}, + {tag: 'select', klass: MySelect}, + {tag: 'small', klass: MySmall}, + {tag: 'source', klass: MySource}, + {tag: 'span', klass: MySpan}, + {tag: 'strong', klass: MyStrong}, + {tag: 'style', klass: MyStyle}, + {tag: 'sub', klass: MySub}, + {tag: 'summary', klass: MySummary}, + {tag: 'sup', klass: MySup}, + {tag: 'table', klass: MyTable}, + {tag: 'tbody', klass: MyTbody, innerHTML: 'table'}, + {tag: 'td', klass: MyTd, innerHTML: 'table'}, + {tag: 'template', klass: MyTemplate}, + {tag: 'textarea', klass: MyTextarea}, + {tag: 'tfoot', klass: MyTfoot, innerHTML: 'table'}, + {tag: 'th', klass: MyTh, innerHTML: 'table'}, + {tag: 'thead', klass: MyThead, innerHTML: 'table'}, + {tag: 'time', klass: MyTime}, + {tag: 'title', klass: MyTitle}, + {tag: 'tr', klass: MyTr, innerHTML: 'table'}, + {tag: 'track', klass: MyTrack}, + {tag: 'u', klass: MyU}, + {tag: 'ul', klass: MyUl}, + {tag: 'var', klass: MyVar}, + {tag: 'video', klass: MyVideo}, + {tag: 'wbr', klass: MyWbr}, +]; +// HTMLDataListElement isn't implemented by all major browsers yet. +if (window.HTMLDataListElement) { + testData.push({tag: 'datalist', klass: class extends HTMLDataListElement { + constructor() { + super(); + } + }}); +} +// HTMLDialogElement isn't implemented by all major browsers yet. +if (window.HTMLDialogElement) { + testData.push({tag: 'dialog', klass: class MyDialog extends HTMLDialogElement { + constructor() { + super(); + } + }}); +} +// HTMLSlotElement isn't implemented by all major browsers yet. +if (window.HTMLSlotElement) { + testData.push({tag: 'slot', klass: class extends HTMLSlotElement { + constructor() { + super(); + } + }}); +} + +for (t of testData) { + test(() => { + let name = 'my-' + t.tag; + customElements.define(name, t.klass, { extends: t.tag }); + + test(() => { + let customized = new t.klass(); + assert_equals(customized.constructor, t.klass); + }, `${t.tag}: Operator 'new' should instantiate a customized built-in element`); + + test(() => { + let customized = document.createElement(t.tag, { is: name }); + assert_equals(customized.constructor, t.klass); + }, `${t.tag}: document.createElement() should instantiate a customized built-in element`); + + if (t.innerHTML == 'skip') + return; + test(() => { + let container = document.getElementById('container'); + if (t.innerHTML == 'table') { + container.innerHTML = `<table><${t.tag} is="${name}" id="${name}">`; + } else { + container.innerHTML = `<${t.tag} is="${name}" id="${name}">`; + } + let customized = document.getElementById(name); + assert_equals(customized.constructor, t.klass); + }, `${t.tag}: innerHTML should instantiate a customized built-in element`); + + }, `${t.tag}: Define a customized built-in element`); +} +</script> +</body> diff --git a/tests/wpt/web-platform-tests/custom-elements/parser/parser-constructs-custom-elements-with-is.html b/tests/wpt/web-platform-tests/custom-elements/parser/parser-constructs-custom-elements-with-is.html new file mode 100644 index 00000000000..96c00278a3d --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/parser/parser-constructs-custom-elements-with-is.html @@ -0,0 +1,51 @@ +<!DOCTYPE html> +<html> +<head> +<title>Custom Elements: Changes to the HTML parser</title> +<meta name="author" title="John Dai" href="mailto:jdai@mozilla.com"> +<meta name="assert" content="HTML parser creates a custom element which contains is attribute"> +<link rel="help" href="https://html.spec.whatwg.org/#create-an-element-for-the-token"> +<link rel="help" href="https://dom.spec.whatwg.org/#concept-create-element"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +</head> +<body> +<div id="log"></div> +<autonomous-custom-element id="instance1" is="is-custom-element"></autonomous-custom-element> +<script> + +class AutonomousCustomElement extends HTMLElement { }; +class IsCustomElement extends HTMLElement { }; + +customElements.define('autonomous-custom-element', AutonomousCustomElement); +customElements.define('is-custom-element', IsCustomElement); + +test(function () { + var customElement = document.getElementById('instance1'); + + assert_true(customElement instanceof HTMLElement, 'A resolved custom element must be an instance of HTMLElement'); + assert_false(customElement instanceof HTMLUnknownElement, 'A resolved custom element must NOT be an instance of HTMLUnknownElement'); + assert_true(customElement instanceof AutonomousCustomElement, 'A resolved custom element must be an instance of that custom element'); + assert_equals(customElement.localName, 'autonomous-custom-element'); + assert_equals(customElement.namespaceURI, 'http://www.w3.org/1999/xhtml', 'A custom element HTML must use HTML namespace'); + +}, 'HTML parser must create a defined autonomous custom element when customElements.define comes after HTML parser creation'); + +</script> +<autonomous-custom-element id="instance2" is="is-custom-element"></autonomous-custom-element> +<script> + +test(function () { + var customElement = document.getElementById('instance2'); + + assert_true(customElement instanceof HTMLElement, 'A resolved custom element must be an instance of HTMLElement'); + assert_false(customElement instanceof HTMLUnknownElement, 'A resolved custom element must NOT be an instance of HTMLUnknownElement'); + assert_true(customElement instanceof AutonomousCustomElement, 'A resolved custom element must be an instance of that custom element'); + assert_equals(customElement.localName, 'autonomous-custom-element'); + assert_equals(customElement.namespaceURI, 'http://www.w3.org/1999/xhtml', 'A custom element HTML must use HTML namespace'); + +}, 'HTML parser must create a defined autonomous custom element when customElements.define comes before HTML parser creation'); + +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/custom-elements/parser/parser-sets-attributes-and-children.html b/tests/wpt/web-platform-tests/custom-elements/parser/parser-sets-attributes-and-children.html index ba331370a78..ef4689fac07 100644 --- a/tests/wpt/web-platform-tests/custom-elements/parser/parser-sets-attributes-and-children.html +++ b/tests/wpt/web-platform-tests/custom-elements/parser/parser-sets-attributes-and-children.html @@ -8,6 +8,7 @@ <link rel="help" href="https://dom.spec.whatwg.org/#concept-create-element"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="../resources/custom-elements-helpers.js"></script> </head> <body> <div id="log"></div> @@ -15,6 +16,7 @@ var numberOfAttributesInConstructor; var numberOfChildNodesInConstructor; +var attributesChangedCalls = []; class MyCustomElement extends HTMLElement { constructor(...args) { @@ -22,6 +24,14 @@ class MyCustomElement extends HTMLElement { numberOfAttributesInConstructor = this.attributes.length; numberOfChildNodesInConstructor = this.childNodes.length; } + + attributeChangedCallback(...args) { + attributesChangedCalls.push(create_attribute_changed_callback_log(this, ...args)); + } + + static get observedAttributes() { + return ['id', 'class']; + } }; customElements.define('my-custom-element', MyCustomElement); @@ -54,6 +64,12 @@ test(function () { assert_equals(numberOfChildNodesInConstructor, 0, 'HTML parser must not append child nodes to a custom element before invoking the constructor'); }, 'HTML parser must set the attributes or append children before calling constructor'); +test(function () { + assert_equals(attributesChangedCalls.length, 2); + assert_attribute_log_entry(attributesChangedCalls[0], {name: 'id', oldValue: null, newValue: 'custom-element-id', namespace: null}); + assert_attribute_log_entry(attributesChangedCalls[1], {name: 'class', oldValue: null, newValue: 'class1 class2', namespace: null}); +}, 'HTML parser must enqueue attributeChanged reactions'); + </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/custom-elements/upgrading/Node-cloneNode.html b/tests/wpt/web-platform-tests/custom-elements/upgrading/Node-cloneNode.html index 0d158fd59e4..0492e1f39a1 100644 --- a/tests/wpt/web-platform-tests/custom-elements/upgrading/Node-cloneNode.html +++ b/tests/wpt/web-platform-tests/custom-elements/upgrading/Node-cloneNode.html @@ -30,6 +30,25 @@ test(function () { 'A cloned custom element must be an instance of the custom element'); }, 'Node.prototype.cloneNode(false) must be able to clone a custom element'); +test(function () { + class AutonomousCustomElement extends HTMLElement {}; + class IsCustomElement extends HTMLElement {}; + + customElements.define('autonomous-custom-element', AutonomousCustomElement); + customElements.define('is-custom-element', IsCustomElement); + + var instance = document.createElement('autonomous-custom-element', { is: "is-custom-element"}); + assert_true(instance instanceof HTMLElement); + assert_true(instance instanceof AutonomousCustomElement); + + var clone = instance.cloneNode(false); + assert_not_equals(instance, clone); + assert_true(clone instanceof HTMLElement, + 'A cloned custom element must be an instance of HTMLElement'); + assert_true(clone instanceof AutonomousCustomElement, + 'A cloned custom element must be an instance of the custom element'); +}, 'Node.prototype.cloneNode(false) must be able to clone as a autonomous custom element when it contains is attribute'); + test_with_window(function (contentWindow) { var contentDocument = contentWindow.document; class MyCustomElement extends contentWindow.HTMLElement {} diff --git a/tests/wpt/web-platform-tests/navigator/device-memory.https.any.js b/tests/wpt/web-platform-tests/device-memory/device-memory.https.any.js index 8f81ffc31f4..8f81ffc31f4 100644 --- a/tests/wpt/web-platform-tests/navigator/device-memory.https.any.js +++ b/tests/wpt/web-platform-tests/device-memory/device-memory.https.any.js diff --git a/tests/wpt/web-platform-tests/editing/data/insertparagraph.js b/tests/wpt/web-platform-tests/editing/data/insertparagraph.js index 70811ca9954..fcf9e855e1c 100644 --- a/tests/wpt/web-platform-tests/editing/data/insertparagraph.js +++ b/tests/wpt/web-platform-tests/editing/data/insertparagraph.js @@ -780,6 +780,36 @@ var browserTests = [ "<p><b>foo</b></p><p>{}bar</p>", [true,true], {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["<p><b>foo[]</b></p>", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "<p><b>foo</b></p><p><b>{}<br></b></p>", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["<div><b>foo[]</b></div>", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "<div><b>foo</b></div><div><b>{}<br></b></div>", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["<p><b><i>foo[]</i></b></p>", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "<p><b><i>foo</i></b></p><p><b><i>{}<br></i></b></p>", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["<div><b><i>foo[]</i></b></div>", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "<div><b><i>foo</i></b></div><div><b><i>{}<br></i></b></div>", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["<p><i><b>foo[]</b></i></p>", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "<p><i><b>foo</b></i></p><p><i><b>{}<br></b></i></p>", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["<div><i><b>foo[]</b></i></div>", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "<div><i><b>foo</b></i></div><div><i><b>{}<br></b></i></div>", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], ["foo<b>[]bar</b>", [["defaultparagraphseparator","div"],["insertparagraph",""]], "<div>foo</div><div>{}<b>bar</b></div>", @@ -790,6 +820,36 @@ var browserTests = [ "<p>foo</p><p>{}<b>bar</b></p>", [true,true], {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["<p><b>[]foo</b></p>", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "<p><b><br></b></p><p><b>{}foo</b></p>", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["<div><b>[]foo</b></div>", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "<div><b><br></b></div><div><b>{}foo</b></div>", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["<p><b><i>[]foo</i></b></p>", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "<p><b><i><br></i></b></p><p><b><i>{}foo</i></b></p>", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["<div><b><i>[]foo</i></b></div>", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "<div><b><i><br></i></b></div><div><b><i>{}foo</i></b></div>", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["<p><i><b>[]foo</b></i></p>", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "<p><i><b><br></b></i></p><p><i><b>{}foo</b></i></p>", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["<div><i><b>[]foo</b></i></div>", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "<div><i><b><br></b></i></div><div><i><b>{}foo</b></i></div>", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], ["<b>foo[]</b><i>bar</i>", [["defaultparagraphseparator","div"],["insertparagraph",""]], "<div><b>foo</b></div><div>{}<i>bar</i></div>", @@ -860,16 +920,6 @@ var browserTests = [ "<p><b>foo</b></p><p>{}<b>bar</b></p>", [true,true,true], {"stylewithcss":[false,true,"",false,false,""],"defaultparagraphseparator":[false,false,"p",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], -["<p><b>[]foo</b></p>", - [["defaultparagraphseparator","div"],["insertparagraph",""]], - "<p><br></p><p>{}<b>foo</b></p>", - [true,true], - {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], -["<p><b>[]foo</b></p>", - [["defaultparagraphseparator","p"],["insertparagraph",""]], - "<p><br></p><p>{}<b>foo</b></p>", - [true,true], - {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], ["<p><b id=x class=y>foo[]bar</b></p>", [["stylewithcss","true"],["defaultparagraphseparator","div"],["insertparagraph",""]], "<p><b id=\"x\" class=\"y\">foo</b></p><p>{}<b class=\"y\">bar</b></p>", @@ -930,6 +980,38 @@ var browserTests = [ "<p><a href=\"foo\">foo</a></p><p>{}<a href=\"foo\">bar</a>baz</p>", [true,true], {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["<p><a href=foo>foo[]bar</a></p>", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "<p><a href=\"foo\">foo</a></p><p><a href=\"foo\">{}bar</a></p>", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["<div><a href=foo>foo[]bar</a></div>", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "<div><a href=\"foo\">foo</a></div><div><a href=\"foo\">{}bar</a></div>", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["<p><a href=foo><b>foo[]bar</b></a></p>", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "<p><a href=\"foo\"><b>foo</b></a></p><p><a href=\"foo\"><b>{}bar</b></a></p>", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["<div><a href=foo><b>foo[]bar</b></a></div>", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "<div><a href=\"foo\"><b>foo</b></a></div><div><a href=\"foo\"><b>{}bar</b></a></div>", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["<p><b><a href=foo>foo[]bar</a></b></p>", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "<p><b><a href=\"foo\">foo</a></b></p><p><b><a href=\"foo\">{}bar</a></b></p>", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["<div><b><a href=foo>foo[]bar</a></b></div>", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "<div><b><a href=\"foo\">foo</a></b></div><div><b><a href=\"foo\">{}bar</a></b></div>", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +// <a href="foo"> shouldn't be duplicated in new paragraph when it's split at +// start or end of it. ["<a href=foo>foo[]</a>bar", [["defaultparagraphseparator","div"],["insertparagraph",""]], "<div><a href=\"foo\">foo</a></div><div>{}bar</div>", @@ -950,6 +1032,190 @@ var browserTests = [ "<p>foo</p><p>{}<a href=\"foo\">bar</a></p>", [true,true], {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["<p><a href=foo>foo[]</a></p>", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "<p><a href=\"foo\">foo</a></p><p>{}<br></p>", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["<div><a href=foo>foo[]</a></div>", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "<div><a href=\"foo\">foo</a></div><div>{}<br></div>", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["<p><a href=foo>[]foo</a></p>", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "<p><br></p><p><a href=\"foo\">{}foo</a></p>", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["<div><a href=foo>[]foo</a></div>", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "<div><br></div><div><a href=\"foo\">{}foo</a></div>", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["<p><a href=foo><b>foo[]</b></a></p>", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "<p><a href=\"foo\"><b>foo</b></a></p><p>{}<br></p>", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["<div><a href=foo><b>foo[]</b></a></div>", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "<div><a href=\"foo\"><b>foo</b></a></div><div>{}<br></div>", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["<p><a href=foo><b>[]foo</b></a></p>", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "<p><br></p><p><a href=\"foo\"><b>{}foo</b></a></p>", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["<div><a href=foo><b>[]foo</b></a></div>", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "<div><br></div><div><a href=\"foo\"><b>{}foo</b></a></div>", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["<p><b><a href=foo>foo[]</a></b></p>", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "<p><b><a href=\"foo\">foo</a></b></p><p><b>{}<br></b></p>", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["<div><b><a href=foo>foo[]</a></b></div>", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "<div><b><a href=\"foo\">foo</a></b></div><div><b>{}<br></b></div>", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["<p><b><a href=foo>[]foo</a></b></p>", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "<p><b><br></b></p><p><b><a href=\"foo\">{}foo</a></b></p>", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["<div><b><a href=foo>[]foo</a></b></div>", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "<div><b><br></b></div><div><b><a href=\"foo\">{}foo</a></b></div>", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +// <br> is usually inserted after an <a href="foo"> element is split next to +// an ASCII whitespace. So, <br> element should be ignored if it's invisible. +["<p><a href=foo>foo []<br></a></p>", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "<p><a href=\"foo\">foo <br></a></p><p>{}<br></p>", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["<div><a href=foo>foo []<br></a></div>", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "<div><a href=\"foo\">foo <br></a></div><div>{}<br></div>", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["<p><a href=foo><b>foo []<br></b></a></p>", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "<p><a href=\"foo\"><b>foo <br></b></a></p><p>{}<br></p>", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["<div><a href=foo><b>foo []<br></b></a></div>", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "<div><a href=\"foo\"><b>foo <br></b></a></div><div>{}<br></div>", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["<p><b><a href=foo>foo []<br></a></b></p>", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "<p><b><a href=\"foo\">foo <br></a></b></p><p><b>{}<br></b></p>", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["<div><b><a href=foo>foo []<br></a></b></div>", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "<div><b><a href=\"foo\">foo <br></a></b></div><div><b>{}<br></b></div>", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["<p><a href=foo>foo {}<br></a></p>", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "<p><a href=\"foo\">foo <br></a></p><p>{}<br></p>", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["<div><a href=foo>foo {}<br></a></div>", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "<div><a href=\"foo\">foo <br></a></div><div>{}<br></div>", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["<p><a href=foo><b>foo {}<br></b></a></p>", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "<p><a href=\"foo\"><b>foo <br></b></a></p><p>{}<br></p>", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["<div><a href=foo><b>foo {}<br></b></a></div>", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "<div><a href=\"foo\"><b>foo <br></b></a></div><div>{}<br></div>", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["<p><b><a href=foo>foo {}<br></a></b></p>", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "<p><b><a href=\"foo\">foo <br></a></b></p><p><b>{}<br></b></p>", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["<div><b><a href=foo>foo {}<br></a></b></div>", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "<div><b><a href=\"foo\">foo <br></a></b></div><div><b>{}<br></b></div>", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +// So, if <br> is visible, its any inline containers should be split. +["<p><a href=foo>foo []<br><br></a></p>", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "<p><a href=\"foo\">foo <br></a></p><p><a href=\"foo\">{}<br><br></a></p>", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["<div><a href=foo>foo []<br><br></a></div>", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "<div><a href=\"foo\">foo <br></a></div><div><a href=\"foo\">{}<br><br></a></div>", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["<p><a href=foo><b>foo []<br><br></b></a></p>", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "<p><a href=\"foo\"><b>foo <br></b></a></p><p><a href=\"foo\"><b>{}<br><br></b></a></p>", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["<div><a href=foo><b>foo []<br><br></b></a></div>", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "<div><a href=\"foo\"><b>foo <br></b><br></a></div><div><a href=\"foo\"><b>{}<br><br></b></a></div>", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["<p><a href=foo><b>foo []<br></b><br></a></p>", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "<p><a href=\"foo\"><b>foo <br></b></a></p><p><a href=\"foo\"><b>{}<br></b><br></a></p>", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["<div><a href=foo><b>foo []<br></b><br></a></div>", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "<div><a href=\"foo\"><b>foo <br></b></a></div><div><a href=\"foo\"><b>{}<br></b><br></a></div>", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["<p><a href=foo>foo {}<br><br></a></p>", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "<p><a href=\"foo\">foo <br><br></a></p><p><a href=\"foo\">{}<br></a></p>", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["<div><a href=foo>foo {}<br><br></a></div>", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "<div><a href=\"foo\">foo <br></a></div><div><a href=\"foo\">{}<br></a></div>", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["<p><a href=foo><b>foo {}<br><br></b></a></p>", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "<p><a href=\"foo\"><b>foo <br></b><br></a></p><p><a href=\"foo\"><b>{}<br><br></b></a></p>", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["<div><a href=foo><b>foo {}<br><br></b></a></div>", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "<div><a href=\"foo\"><b>foo <br></b><br></a></div><div><a href=\"foo\"><b>{}<br><br></b></a></div>", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["<p><a href=foo><b>foo {}<br></b><br></a></p>", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "<p><a href=\"foo\"><b>foo <br></b></a></p><p><a href=\"foo\"><b>{}<br></b><br></a></p>", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["<div><a href=foo><b>foo {}<br></b><br></a></div>", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "<div><a href=\"foo\"><b>foo <br></b></a></div><div><a href=\"foo\"><b>{}<br></b><br></a></div>", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], + ["<p>foo[]<!--bar-->", [["defaultparagraphseparator","div"],["insertparagraph",""]], "<p>foo</p><p>{}<!--bar--><br></p>", diff --git a/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/feature-policy-image.html b/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/feature-policy-image.html new file mode 100644 index 00000000000..a0008eea824 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/feature-policy-image.html @@ -0,0 +1,13 @@ +<!DOCTYPE html> +<body> +<script> +window.addEventListener('load', function() { + var img = document.createElement('IMG'); + img.setAttribute("src", "/feature-policy/experimental-features/resources/image.jpg"); + img.addEventListener('load', function() { + parent.postMessage({width: img.width, height: img.height}, '*'); + }); + document.body.appendChild(img); +}); +</script> +</body> diff --git a/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/image.jpg b/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/image.jpg Binary files differnew file mode 100644 index 00000000000..430f5c514a8 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/image.jpg diff --git a/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/image.png b/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/image.png Binary files differnew file mode 100644 index 00000000000..556fa727040 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/image.png diff --git a/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/image.svg b/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/image.svg new file mode 100644 index 00000000000..73ca820915b --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/image.svg @@ -0,0 +1,4 @@ +<?xml version="1.0" standalone="yes"?> + +<svg version="1.1" viewBox="0.0 0.0 960.0 720.0" fill="none" stroke="none" stroke-linecap="square" stroke-miterlimit="10" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M267.88715 112.77165L267.88715 112.77165C267.88715 93.211205 283.74402 77.35433 303.30447 77.35433L303.30447 77.35433C312.69772 77.35433 321.70627 81.085785 328.3483 87.72782C334.99033 94.36986 338.72177 103.378395 338.72177 112.77165L338.72177 112.77165C338.72177 132.3321 322.8649 148.18898 303.30447 148.18898L303.30447 148.18898C283.74402 148.18898 267.88715 132.3321 267.88715 112.77165Z" fill-rule="nonzero" fill="#cfe2f3" stroke="#073763" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt"></path><path d="M294.15125 114.47782L295.1825 114.61845Q295.01062 115.68095 294.3075 116.29032Q293.60437 116.8997 292.58875 116.8997Q291.3075 116.8997 290.53406 116.06376Q289.76062 115.22782 289.76062 113.66532Q289.76062 112.66532 290.09656 111.90751Q290.4325 111.1497 291.11218 110.7747Q291.79187 110.3997 292.60437 110.3997Q293.60437 110.3997 294.2528 110.90751Q294.90125 111.41532 295.08875 112.36845L294.0575 112.5247Q293.91687 111.8997 293.54187 111.579384Q293.16687 111.25907 292.63562 111.25907Q291.83875 111.25907 291.33875 111.829384Q290.83875 112.3997 290.83875 113.63407Q290.83875 114.8997 291.32312 115.4622Q291.8075 116.0247 292.57312 116.0247Q293.19812 116.0247 293.61218 115.6497Q294.02625 115.2747 294.15125 114.47782ZM296.08875 109.38407L296.08875 108.16532L297.15125 108.16532L297.15125 109.38407L296.08875 109.38407ZM296.08875 116.75907L296.08875 110.54032L297.15125 110.54032L297.15125 116.75907L296.08875 116.75907ZM298.745 116.75907L298.745 110.54032L299.69812 110.54032L299.69812 111.47782Q300.0575 110.82157 300.36218 110.610634Q300.66687 110.3997 301.04187 110.3997Q301.57312 110.3997 302.12 110.72782L301.76062 111.7122Q301.37 111.47782 300.995 111.47782Q300.63562 111.47782 300.36218 111.68876Q300.08875 111.8997 299.97937 112.2747Q299.79187 112.8372 299.79187 113.49345L299.79187 116.75907L298.745 116.75907ZM306.82312 114.47782L307.85437 114.61845Q307.6825 115.68095 306.97937 116.29032Q306.27625 116.8997 305.26062 116.8997Q303.97937 116.8997 303.20593 116.06376Q302.4325 115.22782 302.4325 113.66532Q302.4325 112.66532 302.76843 111.90751Q303.10437 111.1497 303.78406 110.7747Q304.46375 110.3997 305.27625 110.3997Q306.27625 110.3997 306.92468 110.90751Q307.57312 111.41532 307.76062 112.36845L306.72937 112.5247Q306.58875 111.8997 306.21375 111.579384Q305.83875 111.25907 305.3075 111.25907Q304.51062 111.25907 304.01062 111.829384Q303.51062 112.3997 303.51062 113.63407Q303.51062 114.8997 303.995 115.4622Q304.47937 116.0247 305.245 116.0247Q305.87 116.0247 306.28406 115.6497Q306.69812 115.2747 306.82312 114.47782ZM308.72937 116.75907L308.72937 108.16532L309.79187 108.16532L309.79187 116.75907L308.72937 116.75907ZM315.66687 114.75907L316.76062 114.88407Q316.51062 115.8372 315.8075 116.36845Q315.10437 116.8997 314.02625 116.8997Q312.66687 116.8997 311.86218 116.05595Q311.0575 115.2122 311.0575 113.69657Q311.0575 112.13407 311.87 111.266884Q312.6825 110.3997 313.96375 110.3997Q315.21375 110.3997 316.0028 111.24345Q316.79187 112.0872 316.79187 113.63407Q316.79187 113.72782 316.79187 113.91532L312.15125 113.91532Q312.21375 114.94657 312.72937 115.485634Q313.245 116.0247 314.02625 116.0247Q314.60437 116.0247 315.01843 115.72001Q315.4325 115.41532 315.66687 114.75907ZM312.21375 113.05595L315.6825 113.05595Q315.62 112.25907 315.29187 111.86845Q314.77625 111.25907 313.97937 111.25907Q313.245 111.25907 312.7528 111.74345Q312.26062 112.22782 312.21375 113.05595Z" fill-rule="nonzero" fill="#000000"></path></svg> + diff --git a/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/video.ogv b/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/video.ogv Binary files differnew file mode 100644 index 00000000000..c9ee910fc66 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/video.ogv diff --git a/tests/wpt/web-platform-tests/feature-policy/experimental-features/unsized-image.tentative.https.sub.html b/tests/wpt/web-platform-tests/feature-policy/experimental-features/unsized-image.tentative.https.sub.html new file mode 100644 index 00000000000..3731f0be276 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/experimental-features/unsized-image.tentative.https.sub.html @@ -0,0 +1,94 @@ +<!DOCTYPE html> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<iframe></iframe> +<script> +'use strict'; +const default_width = 300; +const default_height = 150; +const srcs = [ + "/feature-policy/experimental-features/resources/image.jpg", + "/feature-policy/experimental-features/resources/image.png", + "/feature-policy/experimental-features/resources/image.svg" +]; +const test_cases = [ +// Test when no size is specified, img/video is laid out by the default size. +{expected_width: default_width, expected_height: default_height}, +// Test when only one dimension is specified, img/video uses the default length for +// the other dimension. +{attribute: "width", value: 500, expected_width: 500, expected_height: default_height}, +{attribute: "height", value: 800, expected_width: default_width, expected_height: 800}, +// Test when only one dimension is specified by CSS style, img/video uses the +// default length for the other dimension. +{attribute: "style", value: "width:500px;", expected_width: 500, expected_height: default_height}, +{attribute: "style", value: "height:800px;", expected_width: default_width, expected_height: 800}, +// Test when the size of the image is specified, img/video is laid out by the +// specified size. +{attribute: "width", value: 500, attribute1: "height", value1: 800, expected_width: 500, expected_height:800}, +{attribute: "style", value: "width:500px;height:800px;", expected_width: 500, expected_height:800} +]; + +for (var test of test_cases) { + for (var src of srcs) { + async_test(t=> { + var img = document.createElement('IMG'); + var expected_width = test.expected_width; + var expected_height = test.expected_height; + img.setAttribute("src", src); + if (typeof test.attribute !== "undefined") { + img.setAttribute(test.attribute, test.value); + } + if (typeof test.attribute1 !== "undefined") { + img.setAttribute(test.attribute1, test.value1); + } + img.addEventListener('load', t.step_func(function() { + assert_equals(img.width, expected_width, 'width:'); + assert_equals(img.height, expected_height, 'height:'); + t.done(); + })); + document.body.appendChild(img); + }, 'Test image with attribute ' + test.attribute + '=' + test.value + + ' and attribute ' + test.attribute1 + '=' + test.value1 + ' on src ' + src); + } + async_test(t=> { + var video = document.createElement('video'); + video.addEventListener('canplaythrough', t.step_func(function() { + assert_equals(video.getBoundingClientRect().width, expected_width, 'width:'); + assert_equals(video.getBoundingClientRect().height, expected_height, 'height:'); + t.done(); + })); + var expected_width = test.expected_width; + var expected_height = test.expected_height; + video.setAttribute("src", "/feature-policy/experimental-features/resources/video.ogv"); + if (typeof test.attribute !== "undefined") { + video.setAttribute(test.attribute, test.value); + } + if (typeof test.attribute1 !== "undefined") { + video.setAttribute(test.attribute1, test.value1); + } + document.body.appendChild(video); + }, 'Test video with attribute ' + test.attribute + '=' + test.value + + ' and attribute ' + test.attribute1 + '=' + test.value1); +} + +// Test unsized-image works in local and remote iframes. +var iframe = document.querySelector('iframe'); +var iframe_srcs = [ + "/feature-policy/experimental-features/resources/feature-policy-image.html", + "https://{{domains[www]}}:{{ports[https][0]}}/feature-policy/experimental-features/resources/feature-policy-image.html"]; +for (var src of iframe_srcs) { + promise_test(function() { + iframe.src = src; + return new Promise(function(resolve, reject) { + window.addEventListener('message', function(e) { + resolve(e.data); + }); + }).then(function(data) { + assert_equals(data.width, default_width, 'width'); + assert_equals(data.height, default_height, 'height'); + }); + }, 'Test image size is correctly rendered in iframe of src ' + src); +} +</script> +</body> diff --git a/tests/wpt/web-platform-tests/feature-policy/experimental-features/unsized-image.tentative.https.sub.html.headers b/tests/wpt/web-platform-tests/feature-policy/experimental-features/unsized-image.tentative.https.sub.html.headers new file mode 100644 index 00000000000..db2dcbc1929 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/experimental-features/unsized-image.tentative.https.sub.html.headers @@ -0,0 +1 @@ +Feature-Policy: unsized-media 'none' diff --git a/tests/wpt/web-platform-tests/fetch/api/response/response-init-002.html b/tests/wpt/web-platform-tests/fetch/api/response/response-init-002.html index 0bb2e8d0b3b..a48af833644 100644 --- a/tests/wpt/web-platform-tests/fetch/api/response/response-init-002.html +++ b/tests/wpt/web-platform-tests/fetch/api/response/response-init-002.html @@ -65,6 +65,11 @@ }); }, "Testing empty Response Content-Type header"); + test(function() { + var response = new Response(null, {status: 204}); + assert_equals(response.body, null); + }, "Testing null Response body"); + </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/fetch/data-urls/README.md b/tests/wpt/web-platform-tests/fetch/data-urls/README.md new file mode 100644 index 00000000000..64c3d7e9521 --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/data-urls/README.md @@ -0,0 +1,11 @@ +== data: URLs == + +`resources/data-urls.json` contains `data:` URL tests. The tests are encoded as a JSON array. Each value in the array is an array of two or three values. The first value describes the input, the second value describes the expected MIME type, null if the input is expected to fail somehow, or the empty string if the expected value is `text/plain;charset=US-ASCII`. The third value, if present, describes the expected body as an array of integers representing bytes. + +These tests are used for `data:` URLs in this directory (see `processing.any.js`). + +== Forgiving-base64 decode == + +`resources/base64.json` contains [forgiving-base64 decode](https://infra.spec.whatwg.org/#forgiving-base64-decode) tests. The tests are encoded as a JSON array. Each value in the array is an array of two values. The first value describes the input, the second value describes the output as an array of integers representing bytes or null if the input cannot be decoded. + +These tests are used for `data:` URLs in this directory (see `base64.any.js`) and `window.atob()` in `../../html/webappapis/atob/base64.html`. diff --git a/tests/wpt/web-platform-tests/fetch/data-urls/base64.any.js b/tests/wpt/web-platform-tests/fetch/data-urls/base64.any.js new file mode 100644 index 00000000000..48e4c530a86 --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/data-urls/base64.any.js @@ -0,0 +1,16 @@ +promise_test(() => fetch("resources/base64.json").then(res => res.json()).then(runBase64Tests), "Setup."); +function runBase64Tests(tests) { + for(let i = 0; i < tests.length; i++) { + const input = tests[i][0], + output = tests[i][1], + dataURL = "data:;base64," + input; + promise_test(t => { + if(output === null) { + return promise_rejects(t, new TypeError(), fetch(dataURL)); + } + return fetch(dataURL).then(res => res.arrayBuffer()).then(body => { + assert_array_equals(new Uint8Array(body), output); + }); + }, "data: URL base64 handling: " + format_value(input)); + } +} diff --git a/tests/wpt/web-platform-tests/fetch/data-urls/processing.any.js b/tests/wpt/web-platform-tests/fetch/data-urls/processing.any.js new file mode 100644 index 00000000000..b66a874f45c --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/data-urls/processing.any.js @@ -0,0 +1,20 @@ +promise_test(() => fetch("resources/data-urls.json").then(res => res.json()).then(runDataURLTests), "Setup."); +function runDataURLTests(tests) { + for(let i = 0; i < tests.length; i++) { + const input = tests[i][0], + expectedMimeType = tests[i][1], + expectedBody = expectedMimeType !== null ? tests[i][2] : null; + promise_test(t => { + if(expectedMimeType === null) { + return promise_rejects(t, new TypeError(), fetch(input)); + } else { + return fetch(input).then(res => { + return res.arrayBuffer().then(body => { + assert_array_equals(new Uint8Array(body), expectedBody); + assert_equals(res.headers.get("content-type"), expectedMimeType); // We could assert this earlier, but this fails often + }); + }); + } + }, format_value(input)); + } +} diff --git a/tests/wpt/web-platform-tests/fetch/data-urls/resources/base64.json b/tests/wpt/web-platform-tests/fetch/data-urls/resources/base64.json new file mode 100644 index 00000000000..7de20b28286 --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/data-urls/resources/base64.json @@ -0,0 +1,79 @@ +[ + ["", []], + ["abcd", [105, 183, 29]], + [" abcd", [105, 183, 29]], + ["abcd ", [105, 183, 29]], + [" abcd===", null], + ["abcd=== ", null], + ["abcd ===", null], + ["a", null], + ["ab", [105]], + ["abc", [105, 183]], + ["abcde", null], + ["𐀀", null], + ["=", null], + ["==", null], + ["===", null], + ["====", null], + ["=====", null], + ["a=", null], + ["a==", null], + ["a===", null], + ["a====", null], + ["a=====", null], + ["ab=", null], + ["ab==", [105]], + ["ab===", null], + ["ab====", null], + ["ab=====", null], + ["abc=", [105, 183]], + ["abc==", null], + ["abc===", null], + ["abc====", null], + ["abc=====", null], + ["abcd=", null], + ["abcd==", null], + ["abcd===", null], + ["abcd====", null], + ["abcd=====", null], + ["abcde=", null], + ["abcde==", null], + ["abcde===", null], + ["abcde====", null], + ["abcde=====", null], + ["=a", null], + ["=a=", null], + ["a=b", null], + ["a=b=", null], + ["ab=c", null], + ["ab=c=", null], + ["abc=d", null], + ["abc=d=", null], + ["ab\tcd", [105, 183, 29]], + ["ab\ncd", [105, 183, 29]], + ["ab\fcd", [105, 183, 29]], + ["ab\rcd", [105, 183, 29]], + ["ab cd", [105, 183, 29]], + ["ab\u00a0cd", null], + ["ab\t\n\f\r cd", [105, 183, 29]], + [" \t\n\f\r ab\t\n\f\r cd\t\n\f\r ", [105, 183, 29]], + ["ab\t\n\f\r =\t\n\f\r =\t\n\f\r ", [105]], + ["A", null], + ["/A", [252]], + ["//A", [255, 240]], + ["///A", [255, 255, 192]], + ["////A", null], + ["/", null], + ["A/", [3]], + ["AA/", [0, 15]], + ["AAAA/", null], + ["AAA/", [0, 0, 63]], + ["\u0000nonsense", null], + ["abcd\u0000nonsense", null], + ["YQ", [97]], + ["YR", [97]], + ["~~", null], + ["..", null], + ["--", null], + ["__", null] +] diff --git a/tests/wpt/web-platform-tests/fetch/data-urls/resources/data-urls.json b/tests/wpt/web-platform-tests/fetch/data-urls/resources/data-urls.json new file mode 100644 index 00000000000..2265b970495 --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/data-urls/resources/data-urls.json @@ -0,0 +1,199 @@ +[ + ["data://test/,X", + "text/plain;charset=US-ASCII", + [88]], + ["data://test:test/,X", + null], + ["data:,X", + "text/plain;charset=US-ASCII", + [88]], + ["data:", + null], + ["data:text/html", + null], + ["data:text/html ;charset=x ", + null], + ["data:,", + "text/plain;charset=US-ASCII", + []], + ["data:,X#X", + "text/plain;charset=US-ASCII", + [88]], + ["data:,%FF", + "text/plain;charset=US-ASCII", + [255]], + ["data:text/plain,X", + "text/plain", + [88]], + ["data:text/plain ,X", + "text/plain", + [88]], + ["data:text/plain%20,X", + "text/plain%20", + [88]], + ["data:text/plain\f,X", + "text/plain%0c", + [88]], + ["data:text/plain%0C,X", + "text/plain%0c", + [88]], + ["data:text/plain;,X", + "text/plain", + [88]], + ["data:;x=x;charset=x,X", + "text/plain;x=x;charset=x", + [88]], + ["data:;x=x,X", + "text/plain;x=x", + [88]], + ["data:text/plain;charset=windows-1252,%C2%B1", + "text/plain;charset=windows-1252", + [194, 177]], + ["data:text/plain;Charset=UTF-8,%C2%B1", + "text/plain;charset=UTF-8", + [194, 177]], + ["data:image/gif,%C2%B1", + "image/gif", + [194, 177]], + ["data:IMAGE/gif,%C2%B1", + "image/gif", + [194, 177]], + ["data:IMAGE/gif;hi=x,%C2%B1", + "image/gif;hi=x", + [194, 177]], + ["data:IMAGE/gif;CHARSET=x,%C2%B1", + "image/gif;charset=x", + [194, 177]], + ["data: ,%FF", + "text/plain;charset=US-ASCII", + [255]], + ["data:%20,%FF", + "text/plain;charset=US-ASCII", + [255]], + ["data:\f,%FF", + "text/plain;charset=US-ASCII", + [255]], + ["data:%1F,%FF", + "text/plain;charset=US-ASCII", + [255]], + ["data:\u0000,%FF", + "text/plain;charset=US-ASCII", + [255]], + ["data:%00,%FF", + "text/plain;charset=US-ASCII", + [255]], + ["data:text/html ,X", + "text/html", + [88]], + ["data:text / html,X", + "text/plain;charset=US-ASCII", + [88]], + ["data:†,X", + "text/plain;charset=US-ASCII", + [88]], + ["data:†/†,X", + "%e2%80%a0/%e2%80%a0", + [88]], + ["data:X,X", + "text/plain;charset=US-ASCII", + [88]], + ["data:image/png,X X", + "image/png", + [88, 32, 88]], + ["data:application/xml,X X", + "application/xml", + [88, 32, 88]], + ["data:unknown/unknown,X X", + "unknown/unknown", + [88, 32, 88]], + ["data:text/plain;a=\",\",X", + "text/plain", + [34, 44, 88]], + ["data:text/plain;a=%2C,X", + "text/plain;a=%2C", + [88]], + ["data:;base64;base64,WA", + "text/plain", + [88]], + ["data:x/x;base64;base64,WA", + "x/x", + [88]], + ["data:x/x;base64;charset=x,WA", + "x/x;charset=x", + [87, 65]], + ["data:x/x;base64;charset=x;base64,WA", + "x/x;charset=x", + [88]], + ["data:x/x;base64;base64x,WA", + "x/x", + [87, 65]], + ["data:;base64,W%20A", + "text/plain;charset=US-ASCII", + [88]], + ["data:;base64,W%0CA", + "text/plain;charset=US-ASCII", + [88]], + ["data:x;base64x,WA", + "text/plain;charset=US-ASCII", + [87, 65]], + ["data:x;base64;x,WA", + "text/plain;charset=US-ASCII", + [87, 65]], + ["data:x;base64=x,WA", + "text/plain;charset=US-ASCII", + [87, 65]], + ["data:; base64,WA", + "text/plain;charset=US-ASCII", + [88]], + ["data:; base64,WA", + "text/plain;charset=US-ASCII", + [88]], + ["data: ;charset=x ; base64,WA", + "text/plain;charset=x", + [88]], + ["data:;base64;,WA", + "text/plain", + [87, 65]], + ["data:;base64 ,WA", + "text/plain;charset=US-ASCII", + [88]], + ["data:;base64 ,WA", + "text/plain;charset=US-ASCII", + [88]], + ["data:;base 64,WA", + "text/plain", + [87, 65]], + ["data:;BASe64,WA", + "text/plain;charset=US-ASCII", + [88]], + ["data:;%62ase64,WA", + "text/plain", + [87, 65]], + ["data:%3Bbase64,WA", + "text/plain;charset=US-ASCII", + [87, 65]], + ["data:;charset=x,X", + "text/plain;charset=x", + [88]], + ["data:; charset=x,X", + "text/plain;charset=x", + [88]], + ["data:;charset =x,X", + "text/plain", + [88]], + ["data:;charset= x,X", + "text/plain;charset=\" x\"", + [88]], + ["data:;charset=,X", + "text/plain", + [88]], + ["data:;charset,X", + "text/plain", + [88]], + ["data:;charset=\"x\",X", + "text/plain;charset=x", + [88]], + ["data:;CHARSET=\"X\",X", + "text/plain;charset=X", + [88]] +] diff --git a/tests/wpt/web-platform-tests/generic-sensor/generic-sensor-tests.js b/tests/wpt/web-platform-tests/generic-sensor/generic-sensor-tests.js index 59cb3e3f5b8..4be4841586d 100644 --- a/tests/wpt/web-platform-tests/generic-sensor/generic-sensor-tests.js +++ b/tests/wpt/web-platform-tests/generic-sensor/generic-sensor-tests.js @@ -10,7 +10,8 @@ const properties = { 'AbsoluteOrientationSensor' : ['timestamp', 'quaternion'], 'RelativeOrientationSensor' : ['timestamp', 'quaternion'], 'GeolocationSensor' : ['timestamp', 'latitude', 'longitude', 'altitude', - 'accuracy', 'altitudeAccuracy', 'heading', 'speed'] + 'accuracy', 'altitudeAccuracy', 'heading', 'speed'], + 'ProximitySensor' : ['timestamp', 'max'] }; function assert_reading_not_null(sensor) { @@ -257,6 +258,7 @@ function runGenericSensorOnerror(sensorType) { const event = await sensorWatcher.wait_for("error"); assert_false(sensor.activated); - assert_equals(event.error.name, 'NotReadableError'); + assert_true(event.error.name == 'NotReadableError' || + event.error.name == 'NotAllowedError'); }, `${sensorType.name}: 'onerror' event is fired when sensor is not supported`); } diff --git a/tests/wpt/web-platform-tests/graphics-aam/OWNERS b/tests/wpt/web-platform-tests/graphics-aam/OWNERS new file mode 100644 index 00000000000..2a4c47ed4df --- /dev/null +++ b/tests/wpt/web-platform-tests/graphics-aam/OWNERS @@ -0,0 +1,2 @@ +@halindrome +@joanmarie diff --git a/tests/wpt/web-platform-tests/graphics-aam/graphics-document_on_html_element-manual.html b/tests/wpt/web-platform-tests/graphics-aam/graphics-document_on_html_element-manual.html new file mode 100644 index 00000000000..293ad2ea842 --- /dev/null +++ b/tests/wpt/web-platform-tests/graphics-aam/graphics-document_on_html_element-manual.html @@ -0,0 +1,103 @@ +<!doctype html> +<html> + <head> + <title>graphics-document on HTML element</title> + <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/> + <link rel="stylesheet" href="/resources/testharness.css"> + <link rel="stylesheet" href="/wai-aria/scripts/manual.css"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/wai-aria/scripts/ATTAcomm.js"></script> + <script> + setup({explicit_timeout: true, explicit_done: true }); + + var theTest = new ATTAcomm( + { + "steps" : [ + { + "element" : "test", + "test" : { + "ATK" : [ + [ + "property", + "role", + "is", + "ROLE_DOCUMENT_FRAME" + ], + [ + "property", + "objectAttributes", + "contains", + "xml-roles:graphics-document" + ] + ], + "AXAPI" : [ + [ + "property", + "AXRole", + "is", + "AXGroup" + ], + [ + "property", + "AXSubrole", + "is", + "AXDocument" + ], + [ + "property", + "AXRoleDescription", + "is", + "document" + ] + ], + "IAccessible2" : [ + [ + "property", + "role", + "is", + "ROLE_SYSTEM_DOCUMENT" + ], + [ + "property", + "objectAttributes", + "contains", + "xml-roles:graphics-document" + ], + [ + "property", + "states", + "contains", + "STATE_SYSTEM_READONLY" + ] + ], + "UIA" : [ + [ + "property", + "ControlType", + "is", + "Document" + ] + ] + }, + "title" : "step 1", + "type" : "test" + } + ], + "title" : "graphics-document on HTML element" +} + + ) ; + </script> + </head> + <body> + <p>This test examines the ARIA properties for graphics-document on HTML element.</p> + <div id="test" role="graphics-document" aria-label="house"> + <div role="graphics-object" aria-label="door"></div> + </div> + + <div id="manualMode"></div> + <div id="log"></div> + <div id="ATTAmessages"></div> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/graphics-aam/graphics-document_on_svg_element-manual.html b/tests/wpt/web-platform-tests/graphics-aam/graphics-document_on_svg_element-manual.html new file mode 100644 index 00000000000..4984bc353eb --- /dev/null +++ b/tests/wpt/web-platform-tests/graphics-aam/graphics-document_on_svg_element-manual.html @@ -0,0 +1,106 @@ +<!doctype html> +<html> + <head> + <title>graphics-document on SVG element</title> + <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/> + <link rel="stylesheet" href="/resources/testharness.css"> + <link rel="stylesheet" href="/wai-aria/scripts/manual.css"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/wai-aria/scripts/ATTAcomm.js"></script> + <script> + setup({explicit_timeout: true, explicit_done: true }); + + var theTest = new ATTAcomm( + { + "steps" : [ + { + "element" : "test", + "test" : { + "ATK" : [ + [ + "property", + "role", + "is", + "ROLE_DOCUMENT_FRAME" + ], + [ + "property", + "objectAttributes", + "contains", + "xml-roles:graphics-document" + ] + ], + "AXAPI" : [ + [ + "property", + "AXRole", + "is", + "AXGroup" + ], + [ + "property", + "AXSubrole", + "is", + "AXDocument" + ], + [ + "property", + "AXRoleDescription", + "is", + "document" + ] + ], + "IAccessible2" : [ + [ + "property", + "role", + "is", + "ROLE_SYSTEM_DOCUMENT" + ], + [ + "property", + "objectAttributes", + "contains", + "xml-roles:graphics-document" + ], + [ + "property", + "states", + "contains", + "STATE_SYSTEM_READONLY" + ] + ], + "UIA" : [ + [ + "property", + "ControlType", + "is", + "Document" + ] + ] + }, + "title" : "step 1", + "type" : "test" + } + ], + "title" : "graphics-document on SVG element" +} + + ) ; + </script> + </head> + <body> + <p>This test examines the ARIA properties for graphics-document on SVG element.</p> + <svg xmlns="http://www.w3.org/2000/svg" id="test" role="graphics-document"> + <g role="graphics-object" aria-label="door"> + <rect fill="darkKhaki" stroke="#632" width="50" height="90" /> + <circle fill="gray" stroke="#444" stroke-width="0.7" cx="10" cy="50" r="4" /> + </g> + </svg> + + <div id="manualMode"></div> + <div id="log"></div> + <div id="ATTAmessages"></div> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/graphics-aam/graphics-object_on_html_element-manual.html b/tests/wpt/web-platform-tests/graphics-aam/graphics-object_on_html_element-manual.html new file mode 100644 index 00000000000..19979b2f325 --- /dev/null +++ b/tests/wpt/web-platform-tests/graphics-aam/graphics-object_on_html_element-manual.html @@ -0,0 +1,97 @@ +<!doctype html> +<html> + <head> + <title>graphics-object on HTML element</title> + <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/> + <link rel="stylesheet" href="/resources/testharness.css"> + <link rel="stylesheet" href="/wai-aria/scripts/manual.css"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/wai-aria/scripts/ATTAcomm.js"></script> + <script> + setup({explicit_timeout: true, explicit_done: true }); + + var theTest = new ATTAcomm( + { + "steps" : [ + { + "element" : "test", + "test" : { + "ATK" : [ + [ + "property", + "role", + "is", + "ROLE_PANEL" + ], + [ + "property", + "objectAttributes", + "contains", + "xml-roles:graphics-object" + ] + ], + "AXAPI" : [ + [ + "property", + "AXRole", + "is", + "AXGroup" + ], + [ + "property", + "AXSubrole", + "is", + "<nil>" + ], + [ + "property", + "AXRoleDescription", + "is", + "group" + ] + ], + "IAccessible2" : [ + [ + "property", + "role", + "is", + "ROLE_SYSTEM_GROUPING" + ], + [ + "property", + "objectAttributes", + "contains", + "xml-roles:graphics-object" + ] + ], + "UIA" : [ + [ + "property", + "ControlType", + "is", + "Group" + ] + ] + }, + "title" : "step 1", + "type" : "test" + } + ], + "title" : "graphics-object on HTML element" +} + + ) ; + </script> + </head> + <body> + <p>This test examines the ARIA properties for graphics-object on HTML element.</p> + <div role="graphics-document" aria-label="house"> + <div id="test" role="graphics-object" aria-label="door"></div> + </div> + + <div id="manualMode"></div> + <div id="log"></div> + <div id="ATTAmessages"></div> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/graphics-aam/graphics-object_on_svg_element-manual.html b/tests/wpt/web-platform-tests/graphics-aam/graphics-object_on_svg_element-manual.html new file mode 100644 index 00000000000..5c2cf28e447 --- /dev/null +++ b/tests/wpt/web-platform-tests/graphics-aam/graphics-object_on_svg_element-manual.html @@ -0,0 +1,100 @@ +<!doctype html> +<html> + <head> + <title>graphics-object on SVG element</title> + <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/> + <link rel="stylesheet" href="/resources/testharness.css"> + <link rel="stylesheet" href="/wai-aria/scripts/manual.css"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/wai-aria/scripts/ATTAcomm.js"></script> + <script> + setup({explicit_timeout: true, explicit_done: true }); + + var theTest = new ATTAcomm( + { + "steps" : [ + { + "element" : "test", + "test" : { + "ATK" : [ + [ + "property", + "role", + "is", + "ROLE_PANEL" + ], + [ + "property", + "objectAttributes", + "contains", + "xml-roles:graphics-object" + ] + ], + "AXAPI" : [ + [ + "property", + "AXRole", + "is", + "AXGroup" + ], + [ + "property", + "AXSubrole", + "is", + "<nil>" + ], + [ + "property", + "AXRoleDescription", + "is", + "group" + ] + ], + "IAccessible2" : [ + [ + "property", + "role", + "is", + "ROLE_SYSTEM_GROUPING" + ], + [ + "property", + "objectAttributes", + "contains", + "xml-roles:graphics-object" + ] + ], + "UIA" : [ + [ + "property", + "ControlType", + "is", + "Group" + ] + ] + }, + "title" : "step 1", + "type" : "test" + } + ], + "title" : "graphics-object on SVG element" +} + + ) ; + </script> + </head> + <body> + <p>This test examines the ARIA properties for graphics-object on SVG element.</p> + <svg xmlns="http://www.w3.org/2000/svg" role="graphics-document"> + <g id="test" role="graphics-object" aria-label="door"> + <rect fill="darkKhaki" stroke="#632" width="50" height="90" /> + <circle fill="gray" stroke="#444" stroke-width="0.7" cx="10" cy="50" r="4" /> + </g> + </svg> + + <div id="manualMode"></div> + <div id="log"></div> + <div id="ATTAmessages"></div> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/graphics-aam/graphics-symbol_on_html_element-manual.html b/tests/wpt/web-platform-tests/graphics-aam/graphics-symbol_on_html_element-manual.html new file mode 100644 index 00000000000..3b9c77fffdc --- /dev/null +++ b/tests/wpt/web-platform-tests/graphics-aam/graphics-symbol_on_html_element-manual.html @@ -0,0 +1,98 @@ +<!doctype html> +<html> + <head> + <title>graphics-symbol on HTML element</title> + <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/> + <link rel="stylesheet" href="/resources/testharness.css"> + <link rel="stylesheet" href="/wai-aria/scripts/manual.css"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/wai-aria/scripts/ATTAcomm.js"></script> + <script> + setup({explicit_timeout: true, explicit_done: true }); + + var theTest = new ATTAcomm( + { + "steps" : [ + { + "element" : "test", + "test" : { + "ATK" : [ + [ + "property", + "role", + "is", + "ROLE_IMAGE" + ], + [ + "property", + "objectAttributes", + "contains", + "xml-roles:graphics-symbol" + ] + ], + "AXAPI" : [ + [ + "property", + "AXRole", + "is", + "AXImage" + ], + [ + "property", + "AXSubrole", + "is", + "<nil>" + ], + [ + "property", + "AXRoleDescription", + "is", + "image" + ] + ], + "IAccessible2" : [ + [ + "property", + "role", + "is", + "ROLE_SYSTEM_GRAPHIC" + ], + [ + "property", + "objectAttributes", + "contains", + "xml-roles:graphics-symbol" + ] + ], + "UIA" : [ + [ + "property", + "ControlType", + "is", + "Image" + ] + ] + }, + "title" : "step 1", + "type" : "test" + } + ], + "title" : "graphics-symbol on HTML element" +} + + ) ; + </script> + </head> + <body> + <p>This test examines the ARIA properties for graphics-symbol on HTML element.</p> + <div>Spinach Salad with Strawberry & Almonds + <span id="test" aria-label="vegetarian" role="graphics-symbol">🌿</span> + <span aria-label="contains nuts" role="graphics-symbol">🌰</span> + </div> + + <div id="manualMode"></div> + <div id="log"></div> + <div id="ATTAmessages"></div> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/graphics-aam/graphics-symbol_on_svg_element-manual.html b/tests/wpt/web-platform-tests/graphics-aam/graphics-symbol_on_svg_element-manual.html new file mode 100644 index 00000000000..6663225f82c --- /dev/null +++ b/tests/wpt/web-platform-tests/graphics-aam/graphics-symbol_on_svg_element-manual.html @@ -0,0 +1,99 @@ +<!doctype html> +<html> + <head> + <title>graphics-symbol on SVG element</title> + <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/> + <link rel="stylesheet" href="/resources/testharness.css"> + <link rel="stylesheet" href="/wai-aria/scripts/manual.css"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/wai-aria/scripts/ATTAcomm.js"></script> + <script> + setup({explicit_timeout: true, explicit_done: true }); + + var theTest = new ATTAcomm( + { + "steps" : [ + { + "element" : "test", + "test" : { + "ATK" : [ + [ + "property", + "role", + "is", + "ROLE_IMAGE" + ], + [ + "property", + "objectAttributes", + "contains", + "xml-roles:graphics-symbol" + ] + ], + "AXAPI" : [ + [ + "property", + "AXRole", + "is", + "AXImage" + ], + [ + "property", + "AXSubrole", + "is", + "<nil>" + ], + [ + "property", + "AXRoleDescription", + "is", + "image" + ] + ], + "IAccessible2" : [ + [ + "property", + "role", + "is", + "ROLE_SYSTEM_GRAPHIC" + ], + [ + "property", + "objectAttributes", + "contains", + "xml-roles:graphics-symbol" + ] + ], + "UIA" : [ + [ + "property", + "ControlType", + "is", + "Image" + ] + ] + }, + "title" : "step 1", + "type" : "test" + } + ], + "title" : "graphics-symbol on SVG element" +} + + ) ; + </script> + </head> + <body> + <p>This test examines the ARIA properties for graphics-symbol on SVG element.</p> + <svg xmlns="http://www.w3.org/2000/svg"> + <g id="test" role="graphics-symbol" aria-label="lightbulb"> + <circle r="10" /> + </g> + </svg> + + <div id="manualMode"></div> + <div id="log"></div> + <div id="ATTAmessages"></div> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/read-media/pageload-image-in-popup.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/read-media/pageload-image-in-popup.html new file mode 100644 index 00000000000..4d811199b14 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/read-media/pageload-image-in-popup.html @@ -0,0 +1,43 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Media documents: image</title> + <link rel="author" title="Takayoshi Kochi" href="mailto:kochi@chromium.org"> + <link rel="author" title="Michael Ventnor" href="mailto:mventnor@mozilla.com"> + <link rel="author" title="Ms2ger" href="mailto:ms2ger@gmail.com"> + <link rel="help" href="https://html.spec.whatwg.org/multipage/#read-media"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + +<script> + var t = async_test("The document for a standalone media file should have one child in the body."); + + var imgwin = window.open('/images/blue.png'); + // imgwin.onload doesn't work, check popup's URL to see if the loading of + // the image and creation of image document is finished. + function checkURL() { + if (imgwin.location.href.indexOf('blue.png') == -1) { + step_timeout(checkURL, 100); + return; + } + t.step(frameLoaded); + } + checkURL(); + + function frameLoaded() { + assert_equals(imgwin.opener, window); + assert_equals(imgwin.document.contentType, "image/png"); + var imgwinChildren = imgwin.document.body.childNodes; + assert_equals(imgwinChildren.length, 1, "Body of image document has 1 child"); + assert_equals(imgwinChildren[0].nodeName, "IMG", "Only child of body must be an <img> element"); + assert_equals(imgwinChildren[0].namespaceURI, "http://www.w3.org/1999/xhtml", + "Only child of body must be an HTML element"); + imgwin.close(); + t.done(); + } +</script> +</head> +<body> + <div id="log"></div> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/003.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/003.html index 200a6dc3455..86d85b9ca6b 100644 --- a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/003.html +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/003.html @@ -10,14 +10,14 @@ <div id="test1">scroll 2</div> <script> test(function() { - assert_equals(document.body.scrollTop, 0); + assert_equals(document.scrollingElement.scrollTop, 0); location.hash = "test"; - var scroll1 = document.body.scrollTop; + var scroll1 = document.scrollingElement.scrollTop; assert_true(scroll1 > 0); location.hash = "test1"; - var scroll2 = document.body.scrollTop; + var scroll2 = document.scrollingElement.scrollTop; assert_true(scroll2 > scroll1); location.hash = "" diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/scroll-to-anchor-name.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/scroll-to-anchor-name.html index 43dbaf9e297..060aed11e26 100644 --- a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/scroll-to-anchor-name.html +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/scroll-to-anchor-name.html @@ -8,6 +8,7 @@ <a name="anchor1" style="position:absolute; top:200px;"></a> <div id="id-equals-anchor" style="position:absolute; top:300px;"></div> <a name="id-equals-anchor" style="position:absolute; top:400px;"></a> +<a name="§1" style="position:absolute; top:400px;"></a> <div style="height:200em;"></div> <script> var steps = [{ @@ -21,6 +22,11 @@ var steps = [{ // id still takes precedence over anchor name assert_equals( scrollPosition(), 300 ); } + },{ + fragid:'§1', + handler: function(){ + assert_equals( scrollPosition(), 400 ); + } }]; function scrollPosition(){ diff --git a/tests/wpt/web-platform-tests/html/dom/documents/dom-tree-accessors/Document.body.html b/tests/wpt/web-platform-tests/html/dom/documents/dom-tree-accessors/Document.body.html index 07f1edf939c..7d8548885a6 100644 --- a/tests/wpt/web-platform-tests/html/dom/documents/dom-tree-accessors/Document.body.html +++ b/tests/wpt/web-platform-tests/html/dom/documents/dom-tree-accessors/Document.body.html @@ -166,4 +166,54 @@ test(function() { doc.body = new_frameset; assert_equals(doc.body, new_frameset, "test6-3, append frameset to a new document"); }, "Setting document.body to a new frameset element."); + +test(function() { + var doc = createDocument(); + var html = doc.appendChild(doc.createElement("html")); + var f = + html.appendChild(doc.createElement("frameset")); + assert_equals(doc.body, f); + + var b = doc.createElement("body"); + doc.body = b; + + assert_equals(f.parentNode, null, + "Frameset should have been removed from the tree"); + assert_equals(doc.body, b, "Body should be the new doc.body"); +}, "Setting document.body to a body will replace an existing frameset if there is one."); + +test(function() { + var doc = createDocument(); + var html = doc.appendChild(doc.createElement("html")); + var b = + html.appendChild(doc.createElement("body")); + assert_equals(doc.body, b); + + var f = doc.createElement("frameset"); + doc.body = f; + + assert_equals(b.parentNode, null, + "Body should have been removed from the tree"); + assert_equals(doc.body, f, "Frameset should be the new doc.body"); +}, "Setting document.body to a frameset will replace an existing body if there is one."); + +test(function() { + var doc = createDocument(); + var html = doc.appendChild(doc.createElement("html")); + var b = + html.appendChild(doc.createElement("body")); + var f1 = html.appendChild(doc.createElement("frameset")); + assert_equals(doc.body, b); + + var f2 = doc.createElement("frameset"); + doc.body = f2; + + assert_equals(b.parentNode, null, + "Body should have been removed from the tree"); + assert_equals(f1.parentNode, html, + "Frameset following body should still be in the tree."); + assert_equals(doc.body, f2, "New frameset should be the new doc.body"); + assert_equals(f2.nextSibling, f1, "New frameset should have replaced the body"); +}, "Setting document.body to a frameset will replace the first existing body/frameset."); + </script> diff --git a/tests/wpt/web-platform-tests/html/dom/usvstring-reflection.html b/tests/wpt/web-platform-tests/html/dom/usvstring-reflection.html index 7b408e08136..aaf6c0bee60 100644 --- a/tests/wpt/web-platform-tests/html/dom/usvstring-reflection.html +++ b/tests/wpt/web-platform-tests/html/dom/usvstring-reflection.html @@ -95,8 +95,18 @@ test(() => { }, "websocket url : unpaired surrogate codepoint should be replaced with U+FFFD") test(() => { + try { + navigator.sendBeacon("resources/\uD800blank.txt"); + assert_true(true); + } catch (e) { + assert_true(false); + } +}, "sendBeacon URL: unpaired surrogate codepoint should not make any exceptions.") + +test(() => { var w = window.open("about:blank#\uD800"); assert_equals(w.document.URL, 'about:blank#%EF%BF%BD'); assert_equals(w.document.documentURI, 'about:blank#%EF%BF%BD'); }, "Document URLs: unpaired surrogate codepoint should be replaced with U+FFFD") + </script> diff --git a/tests/wpt/web-platform-tests/html/editing/editing-0/autocapitalization/autocapitalize.html b/tests/wpt/web-platform-tests/html/editing/editing-0/autocapitalization/autocapitalize.html new file mode 100644 index 00000000000..392ada47bec --- /dev/null +++ b/tests/wpt/web-platform-tests/html/editing/editing-0/autocapitalization/autocapitalize.html @@ -0,0 +1,688 @@ +<!DOCTYPE html> +<html> +<link rel="help" href="https://html.spec.whatwg.org/multipage/interaction.html#autocapitalization"> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + +test(function() { + assert_true('autocapitalize' in document.createElement('input')); +}, "Test that the autocapitalize is avaible on HTMLInputElement.") + +test(function() { + assert_true('autocapitalize' in document.createElement('textarea')); +}, "Test that the autocapitalize is avaible on HTMLTextAreaElement.") + +test(function() { + assert_true('autocapitalize' in document.createElement('div')); +}, "Test that the autocapitalize is avaible on div.") + +test(function() { + var elements = [ document.createElement('input'), + document.createElement('textarea'), + document.createElement('div') ]; + + elements.forEach(function(e) { + e.autocapitalize = 'on'; + assert_equals(e.autocapitalize, 'sentences'); + + e.autocapitalize = 'off'; + assert_equals(e.autocapitalize, 'none'); + }); +}, "Test deprecated values of autocapitalize."); + +test(function() { + var elements = [ document.createElement('input'), + document.createElement('textarea'), + document.createElement('div') ]; + var knownValues = [ 'none', 'characters', 'words', 'sentences' ]; + + elements.forEach(function(e) { + // Default value. + assert_equals(e.autocapitalize, ''); + + // Empty value. + e.autocapitalize = ''; + assert_equals(e.autocapitalize, ''); + assert_equals(e.getAttribute('autocapitalize'), ''); + e.setAttribute('autocapitalize', ''); + assert_equals(e.autocapitalize, ''); + assert_equals(e.getAttribute('autocapitalize'), ''); + assert_equals(e.autocapitalize, ''); + + // Invalid value. + e.autocapitalize = 'foo'; + assert_equals(e.autocapitalize, 'sentences'); + assert_equals(e.getAttribute('autocapitalize'), 'foo'); + e.setAttribute('autocapitalize', 'bar'); + assert_equals(e.autocapitalize, 'sentences'); + assert_equals(e.getAttribute('autocapitalize'), 'bar'); + + // Default value. + e.removeAttribute('autocapitalize'); + assert_equals(e.autocapitalize, ''); + assert_equals(e.getAttribute('autocapitalize'), null); + + // Case insensitive. + e.setAttribute('autocapitalize', 'NoNe'); + assert_equals(e.autocapitalize, 'none'); + assert_equals(e.getAttribute('autocapitalize'), 'NoNe'); + e.autocapitalize = 'WORDS'; + assert_equals(e.autocapitalize, 'words'); + assert_equals(e.getAttribute('autocapitalize'), 'WORDS'); + + knownValues.forEach(function(value) { + e.setAttribute('autocapitalize', value); + assert_equals(e.autocapitalize, value); + assert_equals(e.getAttribute('autocapitalize'), value); + + e.removeAttribute('autocapitalize'); + + e.autocapitalize = value; + assert_equals(e.autocapitalize, value); + assert_equals(e.getAttribute('autocapitalize'), value); + + e.removeAttribute('autocapitalize'); + }); + }); +}, "Test reflection of autocapitalize."); + +test(function() { +var testData = [ 'text', + 'search', + 'email', + 'url', + 'tel', + 'number', + 'date', + 'color', + 'password' ]; + + testData.forEach(function(data) { + const input = document.createElement('input'); + input.type = data; + assert_equals(input.autocapitalize, ''); + + // Verify that wrapping the input element in a form doesn't change the + // defaults. + const form = document.createElement('form'); + form.appendChild(input); + assert_equals(input.autocapitalize, ''); + }); +}, "Test that the IDL attribute returns the empty string if the content " ++ "attribute is not set.") + +test(function() { + const testData = [ + { + formValue: null, + formElementValue: null, + inheritedResult: '', + uninheritedResult: '', + }, + { + formValue: null, + formElementValue: '', + inheritedResult: '', + uninheritedResult: '', + }, + { + formValue: null, + formElementValue: 'on', + inheritedResult: 'sentences', + uninheritedResult: 'sentences', + }, + { + formValue: null, + formElementValue: 'off', + inheritedResult: 'none', + uninheritedResult: 'none', + }, + { + formValue: null, + formElementValue: 'none', + inheritedResult: 'none', + uninheritedResult: 'none', + }, + { + formValue: null, + formElementValue: 'characters', + inheritedResult: 'characters', + uninheritedResult: 'characters', + }, + { + formValue: null, + formElementValue: 'words', + inheritedResult: 'words', + uninheritedResult: 'words', + }, + { + formValue: null, + formElementValue: 'sentences', + inheritedResult: 'sentences', + uninheritedResult: 'sentences', + }, + { + formValue: null, + formElementValue: 'foo', + inheritedResult: 'sentences', + uninheritedResult: 'sentences', + }, + { + formValue: '', + formElementValue: null, + inheritedResult: '', + uninheritedResult: '', + }, + { + formValue: '', + formElementValue: '', + inheritedResult: '', + uninheritedResult: '', + }, + { + formValue: '', + formElementValue: 'on', + inheritedResult: 'sentences', + uninheritedResult: 'sentences', + }, + { + formValue: '', + formElementValue: 'off', + inheritedResult: 'none', + uninheritedResult: 'none', + }, + { + formValue: '', + formElementValue: 'none', + inheritedResult: 'none', + uninheritedResult: 'none', + }, + { + formValue: '', + formElementValue: 'characters', + inheritedResult: 'characters', + uninheritedResult: 'characters', + }, + { + formValue: '', + formElementValue: 'words', + inheritedResult: 'words', + uninheritedResult: 'words', + }, + { + formValue: '', + formElementValue: 'sentences', + inheritedResult: 'sentences', + uninheritedResult: 'sentences', + }, + { + formValue: '', + formElementValue: 'foo', + inheritedResult: 'sentences', + uninheritedResult: 'sentences', + }, + { + formValue: 'on', + formElementValue: null, + inheritedResult: 'sentences', + uninheritedResult: '', + }, + { + formValue: 'on', + formElementValue: '', + inheritedResult: 'sentences', + uninheritedResult: '', + }, + { + formValue: 'on', + formElementValue: 'on', + inheritedResult: 'sentences', + uninheritedResult: 'sentences', + }, + { + formValue: 'on', + formElementValue: 'off', + inheritedResult: 'none', + uninheritedResult: 'none', + }, + { + formValue: 'on', + formElementValue: 'none', + inheritedResult: 'none', + uninheritedResult: 'none', + }, + { + formValue: 'on', + formElementValue: 'characters', + inheritedResult: 'characters', + uninheritedResult: 'characters', + }, + { + formValue: 'on', + formElementValue: 'words', + inheritedResult: 'words', + uninheritedResult: 'words', + }, + { + formValue: 'on', + formElementValue: 'sentences', + inheritedResult: 'sentences', + uninheritedResult: 'sentences', + }, + { + formValue: 'on', + formElementValue: 'foo', + inheritedResult: 'sentences', + uninheritedResult: 'sentences', + }, + { + formValue: 'off', + formElementValue: null, + inheritedResult: 'none', + uninheritedResult: '', + }, + { + formValue: 'off', + formElementValue: '', + inheritedResult: 'none', + uninheritedResult: '', + }, + { + formValue: 'off', + formElementValue: 'on', + inheritedResult: 'sentences', + uninheritedResult: 'sentences', + }, + { + formValue: 'off', + formElementValue: 'off', + inheritedResult: 'none', + uninheritedResult: 'none', + }, + { + formValue: 'off', + formElementValue: 'none', + inheritedResult: 'none', + uninheritedResult: 'none', + }, + { + formValue: 'off', + formElementValue: 'characters', + inheritedResult: 'characters', + uninheritedResult: 'characters', + }, + { + formValue: 'off', + formElementValue: 'words', + inheritedResult: 'words', + uninheritedResult: 'words', + }, + { + formValue: 'off', + formElementValue: 'sentences', + inheritedResult: 'sentences', + uninheritedResult: 'sentences', + }, + { + formValue: 'off', + formElementValue: 'foo', + inheritedResult: 'sentences', + uninheritedResult: 'sentences', + }, + { + formValue: 'none', + formElementValue: null, + inheritedResult: 'none', + uninheritedResult: '', + }, + { + formValue: 'none', + formElementValue: '', + inheritedResult: 'none', + uninheritedResult: '', + }, + { + formValue: 'none', + formElementValue: 'on', + inheritedResult: 'sentences', + uninheritedResult: 'sentences', + }, + { + formValue: 'none', + formElementValue: 'off', + inheritedResult: 'none', + uninheritedResult: 'none', + }, + { + formValue: 'none', + formElementValue: 'none', + inheritedResult: 'none', + uninheritedResult: 'none', + }, + { + formValue: 'none', + formElementValue: 'characters', + inheritedResult: 'characters', + uninheritedResult: 'characters', + }, + { + formValue: 'none', + formElementValue: 'words', + inheritedResult: 'words', + uninheritedResult: 'words', + }, + { + formValue: 'none', + formElementValue: 'sentences', + inheritedResult: 'sentences', + uninheritedResult: 'sentences', + }, + { + formValue: 'none', + formElementValue: 'foo', + inheritedResult: 'sentences', + uninheritedResult: 'sentences', + }, + { + formValue: 'characters', + formElementValue: null, + inheritedResult: 'characters', + uninheritedResult: '', + }, + { + formValue: 'characters', + formElementValue: '', + inheritedResult: 'characters', + uninheritedResult: '', + }, + { + formValue: 'characters', + formElementValue: 'on', + inheritedResult: 'sentences', + uninheritedResult: 'sentences', + }, + { + formValue: 'characters', + formElementValue: 'off', + inheritedResult: 'none', + uninheritedResult: 'none', + }, + { + formValue: 'characters', + formElementValue: 'none', + inheritedResult: 'none', + uninheritedResult: 'none', + }, + { + formValue: 'characters', + formElementValue: 'characters', + inheritedResult: 'characters', + uninheritedResult: 'characters', + }, + { + formValue: 'characters', + formElementValue: 'words', + inheritedResult: 'words', + uninheritedResult: 'words', + }, + { + formValue: 'characters', + formElementValue: 'sentences', + inheritedResult: 'sentences', + uninheritedResult: 'sentences', + }, + { + formValue: 'characters', + formElementValue: 'foo', + inheritedResult: 'sentences', + uninheritedResult: 'sentences', + }, + { + formValue: 'words', + formElementValue: null, + inheritedResult: 'words', + uninheritedResult: '', + }, + { + formValue: 'words', + formElementValue: '', + inheritedResult: 'words', + uninheritedResult: '', + }, + { + formValue: 'words', + formElementValue: 'on', + inheritedResult: 'sentences', + uninheritedResult: 'sentences', + }, + { + formValue: 'words', + formElementValue: 'off', + inheritedResult: 'none', + uninheritedResult: 'none', + }, + { + formValue: 'words', + formElementValue: 'none', + inheritedResult: 'none', + uninheritedResult: 'none', + }, + { + formValue: 'words', + formElementValue: 'characters', + inheritedResult: 'characters', + uninheritedResult: 'characters', + }, + { + formValue: 'words', + formElementValue: 'words', + inheritedResult: 'words', + uninheritedResult: 'words', + }, + { + formValue: 'words', + formElementValue: 'sentences', + inheritedResult: 'sentences', + uninheritedResult: 'sentences', + }, + { + formValue: 'words', + formElementValue: 'foo', + inheritedResult: 'sentences', + uninheritedResult: 'sentences', + }, + { + formValue: 'sentences', + formElementValue: null, + inheritedResult: 'sentences', + uninheritedResult: '', + }, + { + formValue: 'sentences', + formElementValue: '', + inheritedResult: 'sentences', + uninheritedResult: '', + }, + { + formValue: 'sentences', + formElementValue: 'on', + inheritedResult: 'sentences', + uninheritedResult: 'sentences', + }, + { + formValue: 'sentences', + formElementValue: 'off', + inheritedResult: 'none', + uninheritedResult: 'none', + }, + { + formValue: 'sentences', + formElementValue: 'none', + inheritedResult: 'none', + uninheritedResult: 'none', + }, + { + formValue: 'sentences', + formElementValue: 'characters', + inheritedResult: 'characters', + uninheritedResult: 'characters', + }, + { + formValue: 'sentences', + formElementValue: 'words', + inheritedResult: 'words', + uninheritedResult: 'words', + }, + { + formValue: 'sentences', + formElementValue: 'sentences', + inheritedResult: 'sentences', + uninheritedResult: 'sentences', + }, + { + formValue: 'sentences', + formElementValue: 'foo', + inheritedResult: 'sentences', + uninheritedResult: 'sentences', + }, + { + formValue: 'foo', + formElementValue: null, + inheritedResult: 'sentences', + uninheritedResult: '', + }, + { + formValue: 'foo', + formElementValue: '', + inheritedResult: 'sentences', + uninheritedResult: '', + }, + { + formValue: 'foo', + formElementValue: 'on', + inheritedResult: 'sentences', + uninheritedResult: 'sentences', + }, + { + formValue: 'foo', + formElementValue: 'off', + inheritedResult: 'none', + uninheritedResult: 'none', + }, + { + formValue: 'foo', + formElementValue: 'none', + inheritedResult: 'none', + uninheritedResult: 'none', + }, + { + formValue: 'foo', + formElementValue: 'characters', + inheritedResult: 'characters', + uninheritedResult: 'characters', + }, + { + formValue: 'foo', + formElementValue: 'words', + inheritedResult: 'words', + uninheritedResult: 'words', + }, + { + formValue: 'foo', + formElementValue: 'sentences', + inheritedResult: 'sentences', + uninheritedResult: 'sentences', + }, + { + formValue: 'foo', + formElementValue: 'foo', + inheritedResult: 'sentences', + uninheritedResult: 'sentences', + }, + ]; + + const formElements = [ + {element: 'button', inherits: true}, + {element: 'fieldset', inherits: true}, + {element: 'img', inherits: false}, + {element: 'input', inherits: true}, + {element: 'object', inherits: false}, + {element: 'output', inherits: true}, + {element: 'select', inherits: true}, + {element: 'textarea', inherits: true}, + ]; + + const form = document.createElement('form'); + form.id = 'form'; + document.body.appendChild(form); + + testData.forEach(data => { + form.removeAttribute('autocapitalize'); + + if (data.formValue !== null) { + form.setAttribute('autocapitalize', data.formValue); + } + + formElements.forEach(elementData => { + const element = document.createElement(elementData.element); + form.appendChild(element); + + const element2 = document.createElement(elementData.element); + element2.setAttribute('form', 'form'); + document.body.appendChild(element2); + + if (data.formElementValue !== null) { + element.setAttribute('autocapitalize', data.formElementValue); + element2.setAttribute('autocapitalize', data.formElementValue); + } + + const descriptionSuffix = 'with "' + data.formValue + + '" and form element with "'+ data.formElementValue + '"'; + + if (elementData.inherits) { + assert_equals(element.autocapitalize, data.inheritedResult, + `${elementData.element} element with form parent ` + + `${descriptionSuffix}`); + assert_equals(element2.autocapitalize, data.inheritedResult, + `${elementData.element} element with form owner attribute` + + ` set ${descriptionSuffix}`); + } else { + assert_equals(element.autocapitalize, data.uninheritedResult, + `${elementData.element} element with form parent ` + + `${descriptionSuffix}`); + assert_equals(element2.autocapitalize, data.uninheritedResult, + `${elementData.element} element with form owner attribute` + + `set ${descriptionSuffix}`); + } + }); + }); +}, "Test inheriting values from a form.") + +test(function() { + const testData = [ 'text', + 'search', + 'email', + 'url', + 'tel', + 'number', + 'date', + 'color', + 'password' ]; + + testData.forEach(function(data) { + const form = document.createElement('form'); + form.setAttribute('autocapitalize', 'sentences'); + const input = document.createElement('input'); + input.setAttribute('type', data); + form.appendChild(input); + + assert_equals(input.autocapitalize, 'sentences'); + }); +}, "Verify that even input types that are never autocapitalized support the " ++ "IDL interface.") + +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/mime-types/canPlayType.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/mime-types/canPlayType.html index 4f94cddc708..56edf25aa8f 100644 --- a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/mime-types/canPlayType.html +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/mime-types/canPlayType.html @@ -2,8 +2,13 @@ <title>canPlayType</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<audio id="audio"></audio> +<video id="video"></video> <div id="log"></div> <script> +let VIDEO_ELEM = document.getElementById('video'); +let AUDIO_ELEM = document.getElementById('audio'); + function t(type, expected) { assert_equals(canPlayType(type), expected, type); } @@ -22,12 +27,13 @@ test(function() { }, 'utility code'); function canPlayType(type) { - var canPlay = document.createElement('audio').canPlayType(type); - assert_equals(canPlay, document.createElement('video').canPlayType(type), + let audioCanPlay = AUDIO_ELEM.canPlayType(type); + let videoCanPlay = VIDEO_ELEM.canPlayType(type); + assert_equals(audioCanPlay, videoCanPlay, 'audio.canPlayType() and video.canPlayType() agree'); - assert_in_array(canPlay, ['', 'maybe', 'probably'], + assert_in_array(audioCanPlay, ['', 'maybe', 'probably'], 'return value is one of "", "maybe" and "probably"'); - return canPlay; + return audioCanPlay; } test(function() { @@ -37,20 +43,22 @@ test(function() { t('application/octet-stream; codecs="mp4a.40.2"', ''); t('application/octet-stream; codecs="theora, vorbis"', ''); t('application/octet-stream; codecs="avc1.42E01E, mp4a.40.2"', ''); -}, 'application/octet-stream'); +}, 'application/octet-stream not supported'); test(function() { + t('application/marks-fantasmagorical-format', ''); t('video/x-new-fictional-format', ''); t('video/x-new-fictional-format;codecs="kittens,bunnies"', ''); -}, 'video/x-new-fictional-format'); +}, 'fictional formats and codecs not supported'); function type_codecs_test(type, audioCodecs, videoCodecs) { var typeSupported = false; var codecSupported = false; + // Test 'type' without codecs. + // Spec: Generally, a user agent should never return "probably" for a type + // that allows the codecs parameter if that parameter is not present. test(function() { - // Spec: Generally, a user agent should never return "probably" for a type - // that allows the codecs parameter if that parameter is not present. t(type, 'maybe'); t(type + ';', 'maybe'); t(type + ';codecs', 'maybe'); @@ -66,9 +74,11 @@ function type_codecs_test(type, audioCodecs, videoCodecs) { }, typeWithCodec + ' (optional)'); } + // Test each audio and video codec separately. audioCodecs.forEach(test_codec); videoCodecs.forEach(test_codec); + // Test different pairings and orderings of audio+video codecs. if (audioCodecs.length > 0 && videoCodecs.length > 0) { test(function() { audioCodecs.forEach(function(ac) { diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-added-ref.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-added-ref.html new file mode 100644 index 00000000000..bd43c462ddb --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-added-ref.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<script src="/common/reftest-wait.js"></script> +<title>Text track cue layout after controls are added (reference)</title> +<style> +::cue { + font-size: 50px; +} + +/* Video width should be large enough to display all of the media controls. */ +video { + border: 1px solid gray; + width: 500px; +} +</style> +<video controls onloadeddata="this.onloadeddata = null; takeScreenshot();"> + <source src="/media/white.webm" type="video/webm"> + <source src="/media/white.mp4" type="video/mp4"> +</video> +<script> +// Add a single cue at line -2, where it would be if there were controls visible +// at the bottom. (This assumes that those controls are less than 50px high.) +// cue at line -1. +var video = document.querySelector("video"); +var track = video.addTextTrack("captions"); +var cue = new VTTCue(0, 1, "text"); +cue.line = -2; +track.addCue(cue); +track.mode = "showing"; +</script> +</html>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-added.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-added.html new file mode 100644 index 00000000000..23c27e418ec --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-added.html @@ -0,0 +1,37 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<script src="/common/reftest-wait.js"></script> +<link rel="match" href="track-cue-rendering-after-controls-added-ref.html"> +<title>Text track cue layout after controls are added</title> +<style> +::cue { + font-size: 50px; +} +</style> +<!-- Width should be large enough to display all of the media controls. --> +<video style="border:1px solid gray; width: 500px;"> + <source src="/media/white.webm" type="video/webm"> + <source src="/media/white.mp4" type="video/mp4"> +</video> +<script> +// Add a cue that will overlap with the video controls. +var video = document.querySelector("video"); +var track = video.addTextTrack("captions"); +track.addCue(new VTTCue(0, 1, "text")); +track.mode = "showing"; + +video.onloadeddata = function() { + // Double nesting of requestAnimationFrame to + // make sure cue layout and paint happens. + window.requestAnimationFrame(function() { + window.requestAnimationFrame(function() { + video.controls = true; + // Wait for the relayout before screenshot. + window.requestAnimationFrame(function() { + takeScreenshot(); + }); + }); + }); +}; +</script> +</html>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-removed-ref.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-removed-ref.html new file mode 100644 index 00000000000..96afaef3463 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-removed-ref.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<script src="/common/reftest-wait.js"></script> +<title>Text track cue layout after controls are removed (reference)</title> +<style> +::cue { + font-size: 50px; +} + +video { + border: 1px solid gray; +} +</style> +<video onloadeddata="this.onloadeddata = null; takeScreenshot();"> + <source src="/media/white.webm" type="video/webm"> + <source src="/media/white.mp4" type="video/mp4"> +</video> +<script> +// Add a single cue at line -2, where it would be if there were controls visible +// at the bottom. (This assumes that those controls are less than 50px high.) +// cue at line -1. +var video = document.querySelector("video"); +var track = video.addTextTrack("captions"); +var cue = new VTTCue(0, 1, "text"); +cue.line = -2; +track.addCue(cue); +track.mode = "showing"; +</script> +</html>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-removed.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-removed.html new file mode 100644 index 00000000000..76019c9b41e --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-removed.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<script src="/common/reftest-wait.js"></script> +<link rel="match" href="track-cue-rendering-after-controls-removed-ref.html"> +<title>Text track cue layout after controls are removed</title> +<style> +::cue { + font-size: 50px; +} +</style> +<video controls style="border:1px solid gray"> + <source src="/media/white.webm" type="video/webm"> + <source src="/media/white.mp4" type="video/mp4"> +</video> +<script> +// Add a cue that will overlap with the video controls. +var video = document.querySelector("video"); +var track = video.addTextTrack("captions"); +track.addCue(new VTTCue(0, 1, "text")); +track.mode = "showing"; + +video.onloadeddata = function() { + // Double nesting of requestAnimationFrame to + // make sure cue layout and paint happens. + window.requestAnimationFrame(function() { + window.requestAnimationFrame(function() { + // Remove the controls. The cue should not move. + video.controls = false; + takeScreenshot(); + }); + }); +}; +</script> +</html>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-non-snap-to-lines-ref.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-non-snap-to-lines-ref.html new file mode 100644 index 00000000000..92c1e9fedf9 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-non-snap-to-lines-ref.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<title>Reference test for track-webvtt-non-snap-to-lines.html</title> +<script src="/common/reftest-wait.js"></script> +<script src="/common/media.js"></script> +<style> +.container { + position: relative; + display: inline-block; +} +.cue { + position: absolute; + top: 48px; + font-family: sans-serif; + background: green; + color: rgba(255, 255, 255, 1); + font-size: 12px; + padding: 0px 2px; +} +</style> +<div class="container"> + <video autoplay onplaying="this.onplaying = null; this.pause(); takeScreenshot();"> + <script> + document.currentScript.parentNode.src = getVideoURI("/media/test"); + </script> + </video> + <span class="cue">Bear is Coming!!!!!</span> +</div> +</html>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-non-snap-to-lines.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-non-snap-to-lines.html new file mode 100644 index 00000000000..0da8c6f83d5 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-non-snap-to-lines.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<title>Position is not adjusted for non snap-to-lines cues</title> +<link rel="match" href="track-webvtt-non-snap-to-lines-ref.html"> +<script src="/common/reftest-wait.js"></script> +<script src="/common/media.js"></script> +<style> +::cue { + background: green; +} +</style> +<video autoplay onplaying="this.onplaying = null; this.pause(); takeScreenshot();"></video> +<script> +var video = document.querySelector("video"); +var track = video.addTextTrack("captions"); +var cue = new VTTCue(0, 1, "Bear is Coming!!!!!"); +cue.snapToLines = false; +cue.line = 20; +cue.align = "left"; +track.addCue(cue); +track.mode = "showing"; +video.src = getVideoURI("/media/test"); +</script> +</html>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-two-cue-layout-after-first-end-ref.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-two-cue-layout-after-first-end-ref.html new file mode 100644 index 00000000000..c0415367cc1 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-two-cue-layout-after-first-end-ref.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<title>WebVTT two-cue layout after the first cue has ended (reference)</title> +<script src="/common/reftest-wait.js"></script> +<video style="border:1px solid gray"> + <source src="/media/white.webm" type="video/webm"> + <source src="/media/white.mp4" type="video/mp4"> +</video> +<script> +// Add a single cue at line -2, where it would be if there was a first +// cue at line -1. +var video = document.querySelector("video"); +var track = video.addTextTrack("captions"); +var cue = new VTTCue(0, 3, "cue 2"); +cue.line = -2; +track.addCue(cue); +track.mode = "showing"; + +video.onloadeddata = function() { + takeScreenshot(); +}; +</script> +</html>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-two-cue-layout-after-first-end.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-two-cue-layout-after-first-end.html new file mode 100644 index 00000000000..c90313c887c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-two-cue-layout-after-first-end.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<title>WebVTT two-cue layout after the first cue has ended</title> +<link rel="match" href="track-webvtt-two-cue-layout-after-first-end-ref.html"> +<script src="/common/reftest-wait.js"></script> +<video style="border:1px solid gray"> + <source src="/media/white.webm" type="video/webm"> + <source src="/media/white.mp4" type="video/mp4"> +</video> +<script> +// Add two cues, where the first cue ends before the second. +var video = document.querySelector("video"); +var track = video.addTextTrack("captions"); +track.addCue(new VTTCue(0, 1, "cue 1")); +track.addCue(new VTTCue(0, 3, "cue 2")); +track.mode = "showing"; + +video.onloadeddata = function() { + // Double nesting of requestAnimationFrame to + // make sure cue layout and paint happens. + window.requestAnimationFrame(function() { + window.requestAnimationFrame(function() { + // Seek past the end of the first cue. The second cue should not move. + video.currentTime = 2; + video.onseeked = function() { takeScreenshot(); }; + }); + }); +}; +</script> +</html>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/rellist-feature-detection.html b/tests/wpt/web-platform-tests/html/semantics/rellist-feature-detection.html new file mode 100644 index 00000000000..92959134fd4 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/rellist-feature-detection.html @@ -0,0 +1,80 @@ +<!DOCTYPE html> +<title>Test relList attribute</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +let link_support_table = {}; +// https://html.spec.whatwg.org/multipage/links.html#linkTypes +link_support_table['link'] = { + supported : ['modulepreload', 'preload', 'preconnect', 'dns-prefetch', + 'stylesheet', 'import', 'icon', 'alternate', 'prefetch', + 'prerender', 'next', 'manifest', 'apple-touch-icon', + 'apple-touch-icon-precomposed', 'canonical'], + unsupported : ['author', 'bookmark', 'external', 'help', 'license', + 'nofollow', 'pingback', 'prev', 'search', 'tag', + 'noreferrer', 'noopener'] +}; +link_support_table['a'] = { + supported : ['noreferrer', 'noopener'], + unsupported : ['author', 'bookmark', 'external', 'help', 'license', + 'nofollow', 'pingback', 'prev', 'search', 'tag', + 'modulepreload', 'preload', 'preconnect', 'dns-prefetch', + 'stylesheet', 'import', 'icon', 'alternate', 'prefetch', + 'prerender', 'next', 'manifest', 'apple-touch-icon', + 'apple-touch-icon-precomposed', 'canonical'] +}; +link_support_table['area'] = link_support_table['a']; + +function test_rellist(tag_name, rel_table) { + let element = document.createElement(tag_name); + let tag = element.tagName; + // Test that setting rel is also setting relList, for both + // valid and invalid values. + element.rel = 'whatever'; + assert_true(element.relList.contains('whatever'), 'tag = ' + tag + ', setting rel must work'); + element.rel = 'prefetch'; + assert_true(element.relList.contains('prefetch'), 'tag = ' + tag + ', setting rel must work'); + // Test that add() works. + element.relList.add('preloadwhatever'); + assert_equals(element.rel, 'prefetch preloadwhatever', 'tag = ' + tag + ', add must work'); + assert_true(element.relList.contains('preloadwhatever'), 'tag = ' + tag + ', add must work'); + // Test that remove() works. + element.relList.remove('preloadwhatever'); + assert_equals(element.rel, 'prefetch', 'tag = ' + tag + ', remove must work'); + assert_false(element.relList.contains('preloadwhatever'), 'tag = ' + tag + ', remove must work'); + // Test that toggle() works. + element.relList.toggle('prefetch', false); + assert_equals(element.rel, '', 'tag = ' + tag + ', toggle must work'); + element.relList.toggle('prefetch', true); + assert_equals(element.rel, 'prefetch', 'tag = ' + tag + ', toggle must work'); + // Test that replace() works. + element.relList.replace('prefetch', 'first'); + assert_equals(element.rel, 'first', 'tag = ' + tag + ', replace must work'); + // Test that indexed item getter works. + element.relList.add('second'); + assert_equals(element.relList.length, 2, 'tag = ' + tag + ', relList length must be correct'); + assert_equals(element.relList[0], 'first', 'tag = ' + tag + ', relList indexed item must work'); + assert_equals(element.relList[1], 'second', 'tag = ' + tag + ', relList indexed item must work'); + // Test that relList is [SameObject]. + let savedRelList = element.relList; + element.rel = 'something'; + assert_equals(element.relList, savedRelList, 'tag = ' + tag + ', SameObject must work'); + + // Test that supports() is returning true for valid values + // and false for invalid ones. + let supported = rel_table['supported']; + for (let link_type in supported) { + assert_true(element.relList.supports(supported[link_type]), 'tag = ' + tag + ', link type = ' + supported[link_type] + ' must be supported'); + } + let unsupported = rel_table['unsupported']; + for (let link_type in unsupported) { + assert_false(element.relList.supports(unsupported[link_type]), 'tag = ' + tag + ', link type = ' + unsupported[link_type] + ' must be unsupported'); + } +} + +test(function() { + test_rellist('LINK', link_support_table['link']); + test_rellist('A', link_support_table['a']); + test_rellist('AREA', link_support_table['area']); +}, 'Make sure that relList based feature detection is working'); +</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/inline-async-execorder.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/inline-async-execorder.html new file mode 100644 index 00000000000..db03612e82b --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/inline-async-execorder.html @@ -0,0 +1,29 @@ +<html> + <head> + <title>Inline async module script execution order</title> + <meta name=timeout content=long> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + </head> + <body> + <script> + let loaded = []; + let test = async_test("Inline async module script execution order"); + window.addEventListener("load", test.step_func(function() { + assert_array_equals(loaded, + ["fast", "fast", "fast", "slow", "slow", "slow"]); + test.done(); + })); + </script> + <script type="module" async src="resources/slow-module.js?pipe=trickle(d2)&unique=1"></script> + <script type="module" async> + import "./resources/slow-module.js?pipe=trickle(d2)&unique=2"; + loaded.push("slow"); + </script> + <script type="module" async src="resources/fast-module.js?unique=1"></script> + <script type="module" async> + import "./resources/fast-module.js?unique=2"; + loaded.push("fast"); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/load-error-events-inline.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/load-error-events-inline.html index c4dd0807f62..58397dd07d4 100644 --- a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/load-error-events-inline.html +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/load-error-events-inline.html @@ -59,4 +59,3 @@ document.head.appendChild(script4_dynamic_error); <script onload="onLoad(test4_load);" onerror="onError(test4_load);" type="module" async>"use strict";onExecute(test4_load);</script> <script onload="onLoad(test1_error);" onerror="onError(test1_error);" type="module">"use strict";import "./not_found.js";</script> <script onload="onLoad(test4_error);" onerror="onError(test4_error);" type="module" async>"use strict";import "./not_found.js";</script> -</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/module-in-xhtml.xhtml b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/module-in-xhtml.xhtml index 724c9e75074..1655e61a7c5 100644 --- a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/module-in-xhtml.xhtml +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/module-in-xhtml.xhtml @@ -10,7 +10,11 @@ window.evaluated_module_script = true; </script> <script> -test(() => assert_true(window.evaluated_module_script), "module script in XHTML documents should be evaluated."); + var test = async_test("module script in XHTML documents should be evaluated."); + window.addEventListener("load", () => { + test.step(() => { assert_true(window.evaluated_module_script); }); + test.done(); + }); </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/resources/fast-module.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/resources/fast-module.js new file mode 100644 index 00000000000..3a76cf71f6c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/resources/fast-module.js @@ -0,0 +1 @@ +loaded.push("fast"); diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/resources/slow-module.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/resources/slow-module.js new file mode 100644 index 00000000000..4623ef73604 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/resources/slow-module.js @@ -0,0 +1,3 @@ +// This module is imported with pipe=trickle(d2) to make it load more slowly +// than fast-module.js +loaded.push("slow"); diff --git a/tests/wpt/web-platform-tests/html/semantics/text-level-semantics/the-a-element/rellist-feature-detection.html b/tests/wpt/web-platform-tests/html/semantics/text-level-semantics/the-a-element/rellist-feature-detection.html deleted file mode 100644 index 5af9a5e4c02..00000000000 --- a/tests/wpt/web-platform-tests/html/semantics/text-level-semantics/the-a-element/rellist-feature-detection.html +++ /dev/null @@ -1,57 +0,0 @@ -<!DOCTYPE html> -<title>HTMLAnchorElement relList</title> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script> -test(function() { - var element = document.createElement("a"); - // Test that setting rel is also setting relList, for both - // valid and invalid values. - element.rel = "whatever"; - assert_true(element.relList.contains("whatever")); - element.rel = "prefetch"; - assert_true(element.relList.contains("prefetch")); - // Test that add() works. - element.relList.add("preloadwhatever"); - assert_equals(element.rel, "prefetch preloadwhatever"); - assert_true(element.relList.contains("preloadwhatever")); - // Test that remove() works. - element.relList.remove("preloadwhatever"); - assert_equals(element.rel, "prefetch"); - assert_false(element.relList.contains("preloadwhatever")); - // Test that toggle() works. - element.relList.toggle("prefetch", false); - assert_equals(element.rel, ""); - element.relList.toggle("prefetch", true); - assert_equals(element.rel, "prefetch"); - // Test that replace() works. - element.relList.replace("prefetch", "first"); - assert_equals(element.rel, "first"); - // Test that indexed item getter works. - element.relList.add("second"); - assert_equals(element.relList.length, 2); - assert_equals(element.relList[0], "first"); - assert_equals(element.relList[1], "second"); - // Test that relList is [SameObject]. - let savedRelList = element.relList; - element.rel = "something"; - assert_equals(element.relList, savedRelList); - - // Test that supports() is returning true for valid values - // and false for invalid ones. - assert_false(element.relList.supports("bogus")); - assert_false(element.relList.supports("alternate")); - assert_false(element.relList.supports("author")); - assert_false(element.relList.supports("bookmark")); - assert_false(element.relList.supports("external")); - assert_false(element.relList.supports("help")); - assert_false(element.relList.supports("license")); - assert_false(element.relList.supports("next")); - assert_false(element.relList.supports("nofollow")); - assert_false(element.relList.supports("prev")); - assert_false(element.relList.supports("search")); - assert_false(element.relList.supports("tag")); - assert_true(element.relList.supports("noreferrer")); - assert_true(element.relList.supports("noopener")); -}, "Make sure that relList based feature detection is working"); -</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/text-level-semantics/the-area-element/rellist-feature-detection.html b/tests/wpt/web-platform-tests/html/semantics/text-level-semantics/the-area-element/rellist-feature-detection.html deleted file mode 100644 index 1099819cd94..00000000000 --- a/tests/wpt/web-platform-tests/html/semantics/text-level-semantics/the-area-element/rellist-feature-detection.html +++ /dev/null @@ -1,57 +0,0 @@ -<!DOCTYPE html> -<title>HTMLAreaElement relList</title> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script> -test(function() { - var element = document.createElement("area"); - // Test that setting rel is also setting relList, for both - // valid and invalid values. - element.rel = "whatever"; - assert_true(element.relList.contains("whatever")); - element.rel = "prefetch"; - assert_true(element.relList.contains("prefetch")); - // Test that add() works. - element.relList.add("preloadwhatever"); - assert_equals(element.rel, "prefetch preloadwhatever"); - assert_true(element.relList.contains("preloadwhatever")); - // Test that remove() works. - element.relList.remove("preloadwhatever"); - assert_equals(element.rel, "prefetch"); - assert_false(element.relList.contains("preloadwhatever")); - // Test that toggle() works. - element.relList.toggle("prefetch", false); - assert_equals(element.rel, ""); - element.relList.toggle("prefetch", true); - assert_equals(element.rel, "prefetch"); - // Test that replace() works. - element.relList.replace("prefetch", "first"); - assert_equals(element.rel, "first"); - // Test that indexed item getter works. - element.relList.add("second"); - assert_equals(element.relList.length, 2); - assert_equals(element.relList[0], "first"); - assert_equals(element.relList[1], "second"); - // Test that relList is [SameObject]. - let savedRelList = element.relList; - element.rel = "something"; - assert_equals(element.relList, savedRelList); - - // Test that supports() is returning true for valid values - // and false for invalid ones. - assert_false(element.relList.supports("bogus")); - assert_false(element.relList.supports("alternate")); - assert_false(element.relList.supports("author")); - assert_false(element.relList.supports("bookmark")); - assert_false(element.relList.supports("external")); - assert_false(element.relList.supports("help")); - assert_false(element.relList.supports("license")); - assert_false(element.relList.supports("next")); - assert_false(element.relList.supports("nofollow")); - assert_false(element.relList.supports("prev")); - assert_false(element.relList.supports("search")); - assert_false(element.relList.supports("tag")); - assert_true(element.relList.supports("noreferrer")); - assert_true(element.relList.supports("noopener")); -}, "Make sure that relList based feature detection is working"); -</script> diff --git a/tests/wpt/web-platform-tests/html/webappapis/atob/base64.html b/tests/wpt/web-platform-tests/html/webappapis/atob/base64.html index c33ab228f94..c522afdd56c 100644 --- a/tests/wpt/web-platform-tests/html/webappapis/atob/base64.html +++ b/tests/wpt/web-platform-tests/html/webappapis/atob/base64.html @@ -70,124 +70,6 @@ function btoaLookup(idx) { // Throw INVALID_CHARACTER_ERR exception here -- won't be hit in the tests. } -/** - * Implementation of atob() according to the HTML spec, except that instead of - * throwing INVALID_CHARACTER_ERR we return null. - */ -function myatob(input) { - // WebIDL requires DOMStrings to just be converted using ECMAScript - // ToString, which in our case amounts to calling String(). - input = String(input); - - // "Remove all space characters from input." - input = input.replace(/[ \t\n\f\r]/g, ""); - - // "If the length of input divides by 4 leaving no remainder, then: if - // input ends with one or two U+003D EQUALS SIGN (=) characters, remove - // them from input." - if (input.length % 4 == 0 && /==?$/.test(input)) { - input = input.replace(/==?$/, ""); - } - - // "If the length of input divides by 4 leaving a remainder of 1, throw an - // INVALID_CHARACTER_ERR exception and abort these steps." - // - // "If input contains a character that is not in the following list of - // characters and character ranges, throw an INVALID_CHARACTER_ERR - // exception and abort these steps: - // - // U+002B PLUS SIGN (+) - // U+002F SOLIDUS (/) - // U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9) - // U+0041 LATIN CAPITAL LETTER A to U+005A LATIN CAPITAL LETTER Z - // U+0061 LATIN SMALL LETTER A to U+007A LATIN SMALL LETTER Z" - if (input.length % 4 == 1 - || !/^[+/0-9A-Za-z]*$/.test(input)) { - return null; - } - - // "Let output be a string, initially empty." - var output = ""; - - // "Let buffer be a buffer that can have bits appended to it, initially - // empty." - // - // We append bits via left-shift and or. accumulatedBits is used to track - // when we've gotten to 24 bits. - var buffer = 0; - var accumulatedBits = 0; - - // "While position does not point past the end of input, run these - // substeps:" - for (var i = 0; i < input.length; i++) { - // "Find the character pointed to by position in the first column of - // the following table. Let n be the number given in the second cell of - // the same row." - // - // "Append to buffer the six bits corresponding to number, most - // significant bit first." - // - // atobLookup() implements the table from the spec. - buffer <<= 6; - buffer |= atobLookup(input[i]); - - // "If buffer has accumulated 24 bits, interpret them as three 8-bit - // big-endian numbers. Append the three characters with code points - // equal to those numbers to output, in the same order, and then empty - // buffer." - accumulatedBits += 6; - if (accumulatedBits == 24) { - output += String.fromCharCode((buffer & 0xff0000) >> 16); - output += String.fromCharCode((buffer & 0xff00) >> 8); - output += String.fromCharCode(buffer & 0xff); - buffer = accumulatedBits = 0; - } - - // "Advance position by one character." - } - - // "If buffer is not empty, it contains either 12 or 18 bits. If it - // contains 12 bits, discard the last four and interpret the remaining - // eight as an 8-bit big-endian number. If it contains 18 bits, discard the - // last two and interpret the remaining 16 as two 8-bit big-endian numbers. - // Append the one or two characters with code points equal to those one or - // two numbers to output, in the same order." - if (accumulatedBits == 12) { - buffer >>= 4; - output += String.fromCharCode(buffer); - } else if (accumulatedBits == 18) { - buffer >>= 2; - output += String.fromCharCode((buffer & 0xff00) >> 8); - output += String.fromCharCode(buffer & 0xff); - } - - // "Return output." - return output; -} - -/** - * A lookup table for atob(), which converts an ASCII character to the - * corresponding six-bit number. - */ -function atobLookup(chr) { - if (/[A-Z]/.test(chr)) { - return chr.charCodeAt(0) - "A".charCodeAt(0); - } - if (/[a-z]/.test(chr)) { - return chr.charCodeAt(0) - "a".charCodeAt(0) + 26; - } - if (/[0-9]/.test(chr)) { - return chr.charCodeAt(0) - "0".charCodeAt(0) + 52; - } - if (chr == "+") { - return 62; - } - if (chr == "/") { - return 63; - } - // Throw exception; should not be hit in tests -} - function btoaException(input) { input = String(input); for (var i = 0; i < input.length; i++) { @@ -252,55 +134,40 @@ tests.push(["btoa(first 256 code points concatenated)", everything]); generate_tests(testBtoa, tests); -function testAtob(input) { - var expected = myatob(input); - if (expected === null) { - assert_throws("InvalidCharacterError", function() { atob(input) }); - return; - } - - assert_equals(atob(input), expected); -} - -var tests = ["", "abcd", " abcd", "abcd ", " abcd===", "abcd=== ", - "abcd ===", "a", "ab", "abc", "abcde", String.fromCharCode(0xd800, 0xdc00), - "=", "==", "===", "====", "=====", - "a=", "a==", "a===", "a====", "a=====", - "ab=", "ab==", "ab===", "ab====", "ab=====", - "abc=", "abc==", "abc===", "abc====", "abc=====", - "abcd=", "abcd==", "abcd===", "abcd====", "abcd=====", - "abcde=", "abcde==", "abcde===", "abcde====", "abcde=====", - "=a", "=a=", "a=b", "a=b=", "ab=c", "ab=c=", "abc=d", "abc=d=", - // With whitespace - "ab\tcd", "ab\ncd", "ab\fcd", "ab\rcd", "ab cd", "ab\u00a0cd", - "ab\t\n\f\r cd", " \t\n\f\r ab\t\n\f\r cd\t\n\f\r ", - "ab\t\n\f\r =\t\n\f\r =\t\n\f\r ", - // Test if any bits are set at the end. These should all be fine, since - // they end with A, which becomes 0: - "A", "/A", "//A", "///A", "////A", - // These are all bad, since they end in / (= 63, all bits set) but their - // length isn't a multiple of four characters, so they can't be output by - // btoa(). Thus one might expect some UAs to throw exceptions or otherwise - // object, since they could never be output by btoa(), so they're good to - // test. - "/", "A/", "AA/", "AAAA/", - // But this one is possible: - "AAA/", - // Binary-safety tests - "\0nonsense", "abcd\0nonsense", - // WebIDL tests - undefined, null, 7, 12, 1.5, true, false, NaN, +Infinity, -Infinity, 0, -0, - {toString: function() { return "foo" }}, - {toString: function() { return "abcd" }}, +promise_test(() => fetch("../../../fetch/data-urls/resources/base64.json").then(res => res.json()).then(runAtobTests), "atob() setup."); + +const idlTests = [ + [undefined, null], + [null, [158, 233, 101]], + [7, null], + [12, [215]], + [1.5, null], + [true, [182, 187]], + [false, null], + [NaN, [53, 163]], + [+Infinity, [34, 119, 226, 158, 43, 114]], + [-Infinity, null], + [0, null], + [-0, null], + [{toString: function() { return "foo" }}, [126, 138]], + [{toString: function() { return "abcd" }}, [105, 183, 29]] ]; -tests = tests.map( - function(elem) { - if (myatob(elem) === null) { - return ["atob(" + format_value(elem) + ") must raise InvalidCharacterError", elem]; - } - return ["atob(" + format_value(elem) + ") == " + format_value(myatob(elem)), elem]; - } -); -generate_tests(testAtob, tests); +function runAtobTests(tests) { + const allTests = tests.concat(idlTests); + for(let i = 0; i < allTests.length; i++) { + const input = allTests[i][0], + output = allTests[i][1]; + test(() => { + if(output === null) { + assert_throws("InvalidCharacterError", () => window.atob(input)); + } else { + const result = window.atob(input); + for(let ii = 0; ii < output.length; ii++) { + assert_equals(result.charCodeAt(ii), output[ii]); + } + } + }, "atob(" + format_value(input) + ")"); + } +} </script> diff --git a/tests/wpt/web-platform-tests/http/resources/securedimage.py b/tests/wpt/web-platform-tests/http/resources/securedimage.py index 89cbd72b134..510ddca96e2 100644 --- a/tests/wpt/web-platform-tests/http/resources/securedimage.py +++ b/tests/wpt/web-platform-tests/http/resources/securedimage.py @@ -6,10 +6,12 @@ def main(request, response): if "authorization" not in request.headers: response.status = 401 response.headers.set("WWW-Authenticate", "Basic") + return else: auth = request.headers.get("Authorization") if auth != "Basic dGVzdHVzZXI6dGVzdHBhc3M=": response.set_error(403, "Invalid username or password - " + auth) + return response.status = 301 response.headers.set("Location", image_url) diff --git a/tests/wpt/web-platform-tests/http/tests/bluetooth/https/requestDevice/cross-origin-iframe.sub.https.html b/tests/wpt/web-platform-tests/http/tests/bluetooth/https/requestDevice/cross-origin-iframe.sub.https.html new file mode 100644 index 00000000000..858b73f5d57 --- /dev/null +++ b/tests/wpt/web-platform-tests/http/tests/bluetooth/https/requestDevice/cross-origin-iframe.sub.https.html @@ -0,0 +1,38 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/bluetooth/resources/bluetooth-helpers.js"></script> +<body> +<script> +'use strict'; +const test_desc = 'Request device from a unique origin. ' + + 'Should reject with SecurityError.'; +const cross_origin_src = 'https://{{domains[www]}}:{{ports[https][0]}}' + + '/bluetooth/resources/health-thermometer-iframe.html' +let iframe = document.createElement('iframe'); + +bluetooth_test(() => setUpConnectableHealthThermometerDevice() + // 1. Load the iframe. + .then(() => new Promise(resolve => { + iframe.src = cross_origin_src; + document.body.appendChild(iframe); + iframe.addEventListener('load', resolve); + })) + // 2. Request the device from the iframe. + .then(() => new Promise(resolve => { + callWithTrustedClick(() => { + iframe.contentWindow.postMessage({ + type: 'RequestDevice' + }, '*'); + }); + + window.onmessage = messageEvent => { + assert_equals(messageEvent.data, 'SecurityError: requestDevice() ' + + 'called from cross-origin iframe.'); + resolve(); + } + })), test_desc); +</script> +</body> diff --git a/tests/wpt/web-platform-tests/images/pattern.svg b/tests/wpt/web-platform-tests/images/pattern.svg new file mode 100644 index 00000000000..40c6ad3da69 --- /dev/null +++ b/tests/wpt/web-platform-tests/images/pattern.svg @@ -0,0 +1,6 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20"> + <rect x="00" y="00" width="10" height="10" fill="#ff0000"/> + <rect x="10" y="00" width="10" height="10" fill="#00ff00"/> + <rect x="00" y="10" width="10" height="10" fill="#0000ff"/> + <rect x="10" y="10" width="10" height="10" fill="#000000"/> +</svg> diff --git a/tests/wpt/web-platform-tests/interfaces/html.idl b/tests/wpt/web-platform-tests/interfaces/html.idl index b2a1ec30d82..49348a723b3 100644 --- a/tests/wpt/web-platform-tests/interfaces/html.idl +++ b/tests/wpt/web-platform-tests/interfaces/html.idl @@ -1141,7 +1141,7 @@ interface HTMLCanvasElement : HTMLElement { [CEReactions] attribute unsigned long width; [CEReactions] attribute unsigned long height; - RenderingContext? getContext(DOMString contextId, any... arguments); + RenderingContext? getContext(DOMString contextId, optional any options = null); USVString toDataURL(optional DOMString type, optional any quality); void toBlob(BlobCallback _callback, optional DOMString type, optional any quality); @@ -1330,7 +1330,6 @@ interface mixin CanvasPath { void quadraticCurveTo(unrestricted double cpx, unrestricted double cpy, unrestricted double x, unrestricted double y); void bezierCurveTo(unrestricted double cp1x, unrestricted double cp1y, unrestricted double cp2x, unrestricted double cp2y, unrestricted double x, unrestricted double y); void arcTo(unrestricted double x1, unrestricted double y1, unrestricted double x2, unrestricted double y2, unrestricted double radius); - void arcTo(unrestricted double x1, unrestricted double y1, unrestricted double x2, unrestricted double y2, unrestricted double radiusX, unrestricted double radiusY, unrestricted double rotation); void rect(unrestricted double x, unrestricted double y, unrestricted double w, unrestricted double h); void arc(unrestricted double x, unrestricted double y, unrestricted double radius, unrestricted double startAngle, unrestricted double endAngle, optional boolean anticlockwise = false); void ellipse(unrestricted double x, unrestricted double y, unrestricted double radiusX, unrestricted double radiusY, unrestricted double rotation, unrestricted double startAngle, unrestricted double endAngle, optional boolean anticlockwise = false); @@ -1377,10 +1376,7 @@ interface ImageData { readonly attribute Uint8ClampedArray data; }; -[Constructor, - Constructor(Path2D path), - Constructor(sequence<Path2D> paths, optional CanvasFillRule fillRule = "nonzero"), - Constructor(DOMString d), +[Constructor(optional (Path2D or DOMString) path), Exposed=(Window,Worker)] interface Path2D { void addPath(Path2D path, optional DOMMatrix2DInit transform); @@ -1405,14 +1401,14 @@ dictionary ImageEncodeOptions { unrestricted double quality = 1.0; }; -enum OffscreenRenderingContextType { "2d", "webgl" }; +enum OffscreenRenderingContextId { "2d", "webgl" }; [Constructor([EnforceRange] unsigned long long width, [EnforceRange] unsigned long long height), Exposed=(Window,Worker), Transferable] interface OffscreenCanvas : EventTarget { attribute unsigned long long width; attribute unsigned long long height; - OffscreenRenderingContext? getContext(OffscreenRenderingContextType contextType, any... arguments); + OffscreenRenderingContext? getContext(OffscreenRenderingContextId contextId, optional any options = null); ImageBitmap transferToImageBitmap(); Promise<Blob> convertToBlob(optional ImageEncodeOptions options); }; diff --git a/tests/wpt/web-platform-tests/interfaces/screen-orientation.idl b/tests/wpt/web-platform-tests/interfaces/screen-orientation.idl new file mode 100644 index 00000000000..7db942ea955 --- /dev/null +++ b/tests/wpt/web-platform-tests/interfaces/screen-orientation.idl @@ -0,0 +1,28 @@ +partial interface Screen { + [SameObject] + readonly attribute ScreenOrientation orientation; +}; +[Exposed=Window] +interface ScreenOrientation : EventTarget { + Promise<void> lock(OrientationLockType orientation); + void unlock(); + readonly attribute OrientationType type; + readonly attribute unsigned short angle; + attribute EventHandler onchange; +}; +enum OrientationType { + "portrait-primary", + "portrait-secondary", + "landscape-primary", + "landscape-secondary" +}; +enum OrientationLockType { + "any", + "natural", + "landscape", + "portrait", + "portrait-primary", + "portrait-secondary", + "landscape-primary", + "landscape-secondary" +}; diff --git a/tests/wpt/web-platform-tests/lint.whitelist b/tests/wpt/web-platform-tests/lint.whitelist index b8728fefc35..2f9b44d4701 100644 --- a/tests/wpt/web-platform-tests/lint.whitelist +++ b/tests/wpt/web-platform-tests/lint.whitelist @@ -585,8 +585,6 @@ CSS-COLLIDING-SUPPORT-NAME: css/*/.htaccess CSS-COLLIDING-SUPPORT-NAME: css/*/LOCK # These are all the current "merge mismatch" errors the build system produces -CSS-COLLIDING-SUPPORT-NAME: css/css-flexbox/support/100x100-green.png -CSS-COLLIDING-SUPPORT-NAME: css/css-grid/grid-items/support/100x100-green.png CSS-COLLIDING-SUPPORT-NAME: css/css-flexbox/support/200x200-green.png CSS-COLLIDING-SUPPORT-NAME: css/css-grid/grid-items/support/200x200-green.png CSS-COLLIDING-SUPPORT-NAME: css/css-regions/contentEditable/support/common.css diff --git a/tests/wpt/web-platform-tests/media-source/mediasource-addsourcebuffer.html b/tests/wpt/web-platform-tests/media-source/mediasource-addsourcebuffer.html index 9fc94632410..7f6aa2ab697 100644 --- a/tests/wpt/web-platform-tests/media-source/mediasource-addsourcebuffer.html +++ b/tests/wpt/web-platform-tests/media-source/mediasource-addsourcebuffer.html @@ -21,7 +21,7 @@ mediasource_test(function(test, mediaElement, mediaSource) { - assert_throws(new TypeError(), + assert_throws({name: "TypeError"}, function() { mediaSource.addSourceBuffer(""); }, "addSourceBuffer() threw an exception when passed an empty string."); test.done(); @@ -43,7 +43,6 @@ test.done(); }, "Test addSourceBuffer() with unsupported type"); - mediasource_test(function(test, mediaElement, mediaSource) { var mimetype = 'video/webm;codecs="vp8,vorbis"'; @@ -83,7 +82,7 @@ var sourceBuffer = mediaSource.addSourceBuffer(mimetype); assert_true(sourceBuffer != null, "New SourceBuffer returned"); assert_equals(mediaSource.sourceBuffers[0], sourceBuffer, "SourceBuffer is in mediaSource.sourceBuffers"); - assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBuffer is in mediaSource.activeSourceBuffers"); + assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBuffer is not in mediaSource.activeSourceBuffers"); test.done(); }, "Test addSourceBuffer() video only"); @@ -96,7 +95,7 @@ var sourceBuffer = mediaSource.addSourceBuffer(mimetype); assert_true(sourceBuffer != null, "New SourceBuffer returned"); assert_equals(mediaSource.sourceBuffers[0], sourceBuffer, "SourceBuffer is in mediaSource.sourceBuffers"); - assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBuffer is in mediaSource.activeSourceBuffers"); + assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBuffer is not in mediaSource.activeSourceBuffers"); test.done(); }, "Test addSourceBuffer() audio only"); @@ -129,26 +128,6 @@ assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBufferB is not in mediaSource.activeSourceBuffers"); test.done(); }, "Test addSourceBuffer() with AAC and H.264 in separate SourceBuffers"); - - mediasource_test(function(test, mediaElement, mediaSource) - { - var reachedLimit = false; - - // The 20 here is an arbitrary upper limit to make sure the test terminates. This test - // assumes that implementations won't support more than 20 SourceBuffers simultaneously. - for (var i = 0; i < 20; ++i) { - try { - mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE); - } catch(e) { - assert_equals(e.name, "QuotaExceededError"); - reachedLimit = true; - break; - } - } - assert_true(reachedLimit, "Reached SourceBuffer limit."); - test.done(); - }, "Test addSourceBuffer() QuotaExceededError."); - </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/media-source/mediasource-is-type-supported.html b/tests/wpt/web-platform-tests/media-source/mediasource-is-type-supported.html index 985e2062693..a364693298d 100644 --- a/tests/wpt/web-platform-tests/media-source/mediasource-is-type-supported.html +++ b/tests/wpt/web-platform-tests/media-source/mediasource-is-type-supported.html @@ -5,7 +5,6 @@ <title>MediaSource.isTypeSupported() test cases.</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> - <script src="mediasource-util.js"></script> </head> <body> <div id="log"></div> @@ -32,6 +31,7 @@ 'video/webm;codecs="', 'video/webm;codecs=""', 'video/webm;codecs=","', + 'unsupported_mediatype', '', null ], false, 'Test invalid MIME format'); @@ -45,15 +45,12 @@ test_type_support([ 'audio/webm;codecs="vp8"', 'audio/mp4;codecs="avc1.4d001e"', - ], false, 'Test invalid mismatch between major type and codec ID'); - - test_type_support([ 'audio/mp4;codecs="vorbis"', 'audio/webm;codecs="mp4a.40.2"', 'video/mp4;codecs="vp8"', - 'video/webm;codecs="mp4a.40.2"', 'video/mp4;codecs="vorbis"', - ], false, 'Test invalid mismatch between minor type and codec ID'); + 'video/webm;codecs="mp4a.40.2"', + ], false, 'Test invalid mismatch between MIME type and codec ID'); test_type_support([ 'audio/mp4;codecs="mp4a"', diff --git a/tests/wpt/web-platform-tests/mediacapture-streams/MediaDevices-IDL-enumerateDevices.html b/tests/wpt/web-platform-tests/mediacapture-streams/MediaDevices-IDL-enumerateDevices.html index 4dc1c608d22..2d9c96ab9ba 100644 --- a/tests/wpt/web-platform-tests/mediacapture-streams/MediaDevices-IDL-enumerateDevices.html +++ b/tests/wpt/web-platform-tests/mediacapture-streams/MediaDevices-IDL-enumerateDevices.html @@ -23,6 +23,8 @@ function doIdlTest(idlText) { const MDI_idl = new IdlArray(); + MDI_idl.add_untested_idls("interface Event {};"); + MDI_idl.add_untested_idls("interface EventTarget {};"); MDI_idl.add_untested_idls("interface Navigator {};"); MDI_idl.add_idls(idlText); diff --git a/tests/wpt/web-platform-tests/payment-request/OWNERS b/tests/wpt/web-platform-tests/payment-request/OWNERS index 6aa9e2b2b50..e2bec50eaa0 100644 --- a/tests/wpt/web-platform-tests/payment-request/OWNERS +++ b/tests/wpt/web-platform-tests/payment-request/OWNERS @@ -1,6 +1,4 @@ -@edenchuang @marcoscaceres @rsolomakhin @domenic -@AmazingJaze @MSFTkihans diff --git a/tests/wpt/web-platform-tests/payment-request/payment-request-id-attribute.https.html b/tests/wpt/web-platform-tests/payment-request/payment-request-id-attribute.https.html index 9d77a88f4e9..455b65a7da3 100644 --- a/tests/wpt/web-platform-tests/payment-request/payment-request-id-attribute.https.html +++ b/tests/wpt/web-platform-tests/payment-request/payment-request-id-attribute.https.html @@ -2,24 +2,38 @@ <!-- Copyright © 2017 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). --> <meta charset="utf-8"> <title>Test for PaymentRequest id attribute</title> +<link rel="help" href="https://w3c.github.io/payment-request/#constructor"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script> +const methods = [{ supportedMethods: "foo" }]; +const total = { label: "label", amount: { currency: "USD", value: "5.00" } }; + test(() => { - const methods = [{ supportedMethods: "foo" }]; - const total = { label: "label", amount: { currency: "USD", value: "5.00" } }; const request1 = new PaymentRequest(methods, { id: "pass", total, }); assert_idl_attribute(request1, "id"); assert_equals(request1.id, "pass", "Expected PaymentRequest.id to be 'pass'"); +}, "PaymentRequest's id attribute's value can be set via PaymentDetailsInit dictionary"); + +// Test for https://github.com/w3c/payment-request/pull/665 +test(() => { + const uuidRegExp = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-4][0-9a-f]{3}-[0-9a-f]{4}-[0-9a-f]{12}$/i; + const request1 = new PaymentRequest(methods, { + total, + }); const request2 = new PaymentRequest(methods, { total, }); assert_true( - request2.id && typeof request2.id === "string", - "Expected PaymentRequest.id to be some auto-generated truthy string" + uuidRegExp.test(request1.id) && uuidRegExp.test(request2.id) , + "Expected PaymentRequest.id be a UUID" + ); + assert_not_equals( + request1.id, request2.id, + "Expected PaymentRequest.id be unique per instance" ); -}, "PaymentRequest id attribute"); +}, "PaymentRequest's id attribute must be a UUID when PaymentDetailsInit.id is missing"); </script> diff --git a/tests/wpt/web-platform-tests/performance-timeline/idlharness.html b/tests/wpt/web-platform-tests/performance-timeline/idlharness.html index 8185386476e..8cef4fb3fc9 100644 --- a/tests/wpt/web-platform-tests/performance-timeline/idlharness.html +++ b/tests/wpt/web-platform-tests/performance-timeline/idlharness.html @@ -67,6 +67,7 @@ callback PerformanceObserverCallback = void (PerformanceObserverEntryList entrie interface PerformanceObserver { void observe(PerformanceObserverInit options); void disconnect(); + PerformanceEntryList takeRecords(); }; </pre> diff --git a/tests/wpt/web-platform-tests/presentation-api/receiving-ua/PresentationReceiver_create-manual.https.html b/tests/wpt/web-platform-tests/presentation-api/receiving-ua/PresentationReceiver_create-manual.https.html index 67b8c43d5a1..96fc6f345d1 100644 --- a/tests/wpt/web-platform-tests/presentation-api/receiving-ua/PresentationReceiver_create-manual.https.html +++ b/tests/wpt/web-platform-tests/presentation-api/receiving-ua/PresentationReceiver_create-manual.https.html @@ -25,8 +25,14 @@ } }); - let connection, db; + let connection; const presentBtn = document.getElementById('presentBtn'); + + const dbName = { + controller: 'db-presentation-api-controlling-ua', + receiver: 'db-presentation-api-receiving-ua' + }; + const main = () => { promise_test(t => { presentBtn.disabled = true; @@ -38,14 +44,14 @@ notice.parentNode.removeChild(notice); stash.stop(); - //history.back(); + // history.back(); document.cookie = 'PresentationApiTest=true; Expires=' + new Date().toUTCString(); sessionStorage.removeItem('presentation_api_test'); localStorage.removeItem('presentation_api_test'); - if (db) - db.close(); - indexedDB.deleteDatabase(dbName); + Object.values(dbName).forEach(name => { + indexedDB.deleteDatabase(name); + }); if (connection) { connection.onconnect = () => { connection.terminate(); }; @@ -75,28 +81,12 @@ sessionStorage.setItem(storageName, storageValue); localStorage.setItem(storageName, storageValue); - const dbName = 'db-presentation-api'; - const storeName = 'store-controlling-ua'; - const storeData = { - id: 'controller', - data: 'controlling user agent' - }; const openIndexedDB = () => { if ('indexedDB' in window) { - const dbReq = indexedDB.open(dbName, 1); - return new Promise((resolve, reject) => { - dbReq.onupgradeneeded = () => { - db = dbReq.result; - const store = db.createObjectStore(storeName, { keyPath: 'id' }); - store.add(storeData); - }; - dbReq.onsuccess = () => { - db = dbReq.result; - db.close(); - db = null; - resolve(); - }; - dbReq.onerror = reject; + const req = indexedDB.open(dbName.controller, 1); + const eventWatcher = new EventWatcher(t, req, 'upgradeneeded'); + return eventWatcher.wait_for('upgradeneeded').then(evt => { + evt.target.result.close(); }); } else @@ -115,6 +105,8 @@ }; reg.active.postMessage('', [channel.port2]); } + else + resolve([]); }); }); }; @@ -153,29 +145,19 @@ // Indexed Database const checkIndexedDB = t => { if ('indexedDB' in window) { - const message = 'Indexed Database is not shared with a receiving user agent.'; - let req = indexedDB.open(dbName, 1), store; - let eventWatcher = new EventWatcher(t, req, 'success'); - return eventWatcher.wait_for('success').then(() => { - db = req.result; - const transaction = db.transaction(storeName, 'readwrite'); - store = transaction.objectStore(storeName); - req = store.openCursor(); - eventWatcher = new EventWatcher(t, req, 'success'); - return eventWatcher.wait_for('success'); - }).then(() => { - assert_true(req.result instanceof IDBCursorWithValue, message); - const cursor = req.result; - const item = cursor.value; - assert_equals(item.id, storeData.id, message); - assert_equals(item.data, storeData.data, message); - cursor.continue(); - return eventWatcher.wait_for('success'); - }).then(() => { - assert_equals(req.result, null, message); - db.close(); - db = null; - }); + const req = indexedDB.open(dbName.receiver); + const upgradeneededWatcher = new EventWatcher(t, req, 'upgradeneeded'); + const successWatcher = new EventWatcher(t, req, 'success'); + return Promise.race([ + upgradeneededWatcher.wait_for('upgradeneeded').then(evt => { + evt.target.result.close(); + }), + successWatcher.wait_for('success').then(evt => { + evt.target.result.close(); + // This would fail if the database created by the receiving UA is visible to the controlling UA + assert_unreached('Indexed Database is not shared with a receiving user agent.'); + }) + ]); } else return Promise.resolve(); @@ -231,6 +213,7 @@ return request.start().then(c => { connection = c; enableTimeout(); + // This Promise.race will be rejected if a receiving side terminates/closes the connection when window.close() is invoked return Promise.race([ openIndexedDB() @@ -249,7 +232,7 @@ // Check accessibility to window clients before terminating a presentation return getClientUrls().then(urls => { assert_true(urls.length === clientUrls.length && urls.every((value, index) => { return clientUrls[index] === value}), - 'A window client in a receiving user agent is not accessible to a service worker on a controlling user agent.') + 'A window client in a receiving user agent is not accessible to a service worker on a controlling user agent.'); const eventWatcher = new EventWatcher(t, connection, 'terminate'); connection.terminate(); return eventWatcher.wait_for('terminate'); diff --git a/tests/wpt/web-platform-tests/presentation-api/receiving-ua/support/PresentationReceiver_create_receiving-ua.html b/tests/wpt/web-platform-tests/presentation-api/receiving-ua/support/PresentationReceiver_create_receiving-ua.html index 8edb88e1d78..53f76014423 100644 --- a/tests/wpt/web-platform-tests/presentation-api/receiving-ua/support/PresentationReceiver_create_receiving-ua.html +++ b/tests/wpt/web-platform-tests/presentation-api/receiving-ua/support/PresentationReceiver_create_receiving-ua.html @@ -37,6 +37,11 @@ child.addEventListener('load', () => { const notice = document.getElementById('notice'); const modal = document.getElementById('modal'); + const dbName = { + controller: 'db-presentation-api-controlling-ua', + receiver: 'db-presentation-api-receiving-ua' + }; + promise_test(t => { t.add_cleanup(() => { document.cookie = cookieName + '=False;Expires=' + new Date().toUTCString(); @@ -46,9 +51,10 @@ child.addEventListener('load', () => { sessionStorage.removeItem(storageNameChild); localStorage.removeItem(storageNameChild); - if (db) - db.close(); - indexedDB.deleteDatabase(dbName); + Object.values(dbName).forEach(name => { + indexedDB.deleteDatabase(name); + }); + if ('serviceWorker' in navigator) { navigator.serviceWorker.getRegistrations().then(registrations => { return Promise.all(registrations.map(reg => reg.unregister())); @@ -97,37 +103,27 @@ child.addEventListener('load', () => { assert_equals(document.cookie, '', 'A cookie store is set to an empty store.') // Indexed Database - const dbName = 'db-presentation-api'; - const storeName = 'store-controlling-ua'; - const storeData = { - parent: { id: 'parent', data: 'receiving user agent' }, - child: { id: 'child', data: 'nested browsing context' } - }; - let db; const checkIndexedDB = () => { if ('indexedDB' in window) { - let req = indexedDB.open(dbName, 1), store; - let eventWatcher = new EventWatcher(t, req, ['upgradeneeded', 'success']); - return eventWatcher.wait_for('upgradeneeded').then(() => { - db = req.result; - const store = db.createObjectStore(storeName, { keyPath: 'id' }); - return eventWatcher.wait_for('success'); - }).then(() => { - db = req.result; - const transaction = db.transaction(storeName, 'readwrite'); - store = transaction.objectStore(storeName); - req = store.openCursor(); - eventWatcher = new EventWatcher(t, req, 'success'); - return eventWatcher.wait_for('success'); - }).then(() => { - assert_equals(req.result, null, 'Indexed Database is set to an empty storage.'); - req = store.put(storeData.parent); - eventWatcher = new EventWatcher(t, req, 'success'); - return eventWatcher.wait_for('success'); - }).then(() => { - db.close(); - db = null; - }); + // The test would fail when the database is already created by the controlling UA + const req = indexedDB.open(dbName.controller); + const upgradeneededWatcher = new EventWatcher(t, req, 'upgradeneeded'); + const successWatcher = new EventWatcher(t, req, 'success'); + return Promise.race([ + upgradeneededWatcher.wait_for('upgradeneeded').then(evt => { + evt.target.result.close(); + const req = indexedDB.open(dbName.receiver, 2); + const eventWatcher = new EventWatcher(t, req, 'upgradeneeded'); + return eventWatcher.wait_for('upgradeneeded'); + }).then(evt => { + evt.target.result.close(); + }), + successWatcher.wait_for('success').then(evt => { + evt.target.result.close(); + // This would fail if the database created by the controlling UA is visible to the receiving UA + assert_unreached('Indexed Database is set to an empty storage.'); + }) + ]); } else return Promise.resolve(); @@ -253,33 +249,24 @@ child.addEventListener('load', () => { // Indexed Database const checkUpdatedIndexedDB = () => { if ('indexedDB' in window) { - let req = indexedDB.open(dbName, 1), store; - let eventWatcher = new EventWatcher(t, req, 'success'); message = 'Indexed Database is shared by top-level and nested browsing contexts.'; - const checkItem = event => { - assert_true(event.target.result instanceof IDBCursorWithValue, message); - const cursor = event.target.result; - const item = cursor.value; - assert_equals(storeData[item.id].data, item.data, message); - delete storeData[item.id] - cursor.continue(); - return eventWatcher.wait_for('success'); - }; - return eventWatcher.wait_for('success').then(() => { - db = req.result; - const transaction = db.transaction(storeName, 'readwrite'); - store = transaction.objectStore(storeName); - req = store.openCursor(); - eventWatcher = new EventWatcher(t, req, 'success'); - return eventWatcher.wait_for('success'); - }).then(checkItem) - .then(checkItem) - .then(event => { - assert_equals(event.target.result, null, message); - assert_equals(Object.keys(storeData).length, 0, message); - db.close(); - db = null; - }); + const req = indexedDB.open(dbName.receiver); + const upgradeneededWatcher = new EventWatcher(t, req, 'upgradeneeded'); + const successWatcher = new EventWatcher(t, req, 'success'); + return Promise.race([ + upgradeneededWatcher.wait_for('upgradeneeded').then(evt => { + evt.target.result.close(); + // Check if the version of the database is upgraded to 3 by the nested browsing context + assert_unreached(message); + }), + successWatcher.wait_for('success').then(evt => { + const db = evt.target.result; + const version = db.version; + db.close(); + // Check if the version of the database is upgraded to 3 by the nested browsing context + assert_equals(version, 3, message); + }) + ]); } else return Promise.resolve(); diff --git a/tests/wpt/web-platform-tests/presentation-api/receiving-ua/support/PresentationReceiver_create_receiving-ua_child.html b/tests/wpt/web-platform-tests/presentation-api/receiving-ua/support/PresentationReceiver_create_receiving-ua_child.html index aa0e191077d..2f67f7fac02 100644 --- a/tests/wpt/web-platform-tests/presentation-api/receiving-ua/support/PresentationReceiver_create_receiving-ua_child.html +++ b/tests/wpt/web-platform-tests/presentation-api/receiving-ua/support/PresentationReceiver_create_receiving-ua_child.html @@ -44,7 +44,7 @@ window.addEventListener('message', event => { modal.textContent = 'confirm()'; confirm(message); modal.textContent = 'print()'; - //print(); + print(); modal.textContent = 'prompt()'; prompt(message); notice.style.display = 'none'; @@ -60,36 +60,36 @@ window.addEventListener('message', event => { assert_equals(document.cookie, 'PresentationApiTest=Receiving-UA', 'A cookie store is shared by top-level and nested browsing contexts.'); // Indexed Database - let db; + const dbName = 'db-presentation-api-receiving-ua'; const checkIndexedDB = () => { if ('indexedDB' in window) { message = 'Indexed Database is shared by top-level and nested browsing contexts.'; - let req = indexedDB.open('db-presentation-api', 1), store; - let eventWatcher = new EventWatcher(t, req, 'success'); - return eventWatcher.wait_for('success').then(() => { - db = req.result; - const transaction = db.transaction('store-controlling-ua', 'readwrite'); - store = transaction.objectStore('store-controlling-ua'); - req = store.openCursor(); - eventWatcher = new EventWatcher(t, req, 'success'); - return eventWatcher.wait_for('success'); - }).then(() => { - assert_true(req.result instanceof IDBCursorWithValue, message); - const cursor = req.result; - const item = cursor.value; - assert_equals(item.id, 'parent', message); - assert_equals(item.data, 'receiving user agent', message); - cursor.continue(); - return eventWatcher.wait_for('success'); - }).then(() => { - assert_equals(req.result, null, message); - req = store.put({ id: 'child', data: 'nested browsing context' }); - eventWatcher = new EventWatcher(t, req, 'success'); - return eventWatcher.wait_for('success'); - }).then(() => { - db.close(); - db = null; - }); + + const req = indexedDB.open(dbName); + const upgradeneededWatcher = new EventWatcher(t, req, 'upgradeneeded'); + const successWatcher = new EventWatcher(t, req, 'success'); + return Promise.race([ + upgradeneededWatcher.wait_for('upgradeneeded').then(evt => { + evt.target.result.close(); + // This would fail if the database is not created by the top-level browsing context + assert_unreached(message); + }), + successWatcher.wait_for('success').then(evt => { + evt.target.result.close(); + const db = evt.target.result; + const version = db.version; + db.close(); + // Check if the version of the database is 2 as specified by the top-level browsing context + assert_equals(version, 2, message); + + // Upgrade the version + const req = indexedDB.open(dbName, 3); + const eventWatcher = new EventWatcher(t, req, 'upgradeneeded'); + return eventWatcher.wait_for('upgradeneeded'); + }).then(evt => { + evt.target.result.close(); + }) + ]); } else return Promise.resolve(); diff --git a/tests/wpt/web-platform-tests/proximity/DeviceProximityEvent_tests.html b/tests/wpt/web-platform-tests/proximity/DeviceProximityEvent_tests.html deleted file mode 100644 index d4d08fda7f1..00000000000 --- a/tests/wpt/web-platform-tests/proximity/DeviceProximityEvent_tests.html +++ /dev/null @@ -1,10 +0,0 @@ -<!doctype html> -<meta charset=utf8> -<meta content="width=device-width, initial-scale=1" name=viewport> -<title>Proximity Events Test Suite</title> -<h1>Test Suite for Proximity Events</h1> -<div id="log"></div> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="DeviceProximityEvent_tests.js"></script> - diff --git a/tests/wpt/web-platform-tests/proximity/DeviceProximityEvent_tests.js b/tests/wpt/web-platform-tests/proximity/DeviceProximityEvent_tests.js deleted file mode 100644 index f433482480b..00000000000 --- a/tests/wpt/web-platform-tests/proximity/DeviceProximityEvent_tests.js +++ /dev/null @@ -1,441 +0,0 @@ -(function() { - //inheritance tests - test(function() { - var event = new DeviceProximityEvent(''); - assert_true(event instanceof window.DeviceProximityEvent); - }, 'the event is an instance of DeviceProximityEvent'); - - test(function() { - var event = new DeviceProximityEvent(''); - assert_true(event instanceof window.Event); - }, 'the event inherits from Event'); - - //Type attribute tests - test(function() { - assert_throws(new TypeError(), function() { - new DeviceProximityEvent(); - }, 'First argument is required, so was expecting a TypeError.'); - }, 'Missing type argument'); - - test(function() { - var event = new DeviceProximityEvent(undefined); - assert_equals(event.type, 'undefined'); - }, 'Event type set to undefined'); - - test(function() { - var event = new DeviceProximityEvent(null); - assert_equals(event.type, 'null'); - }, 'type argument is null'); - - test(function() { - var event = new DeviceProximityEvent(123); - assert_equals(event.type, '123'); - }, 'type argument is number'); - - test(function() { - var event = new DeviceProximityEvent(new Number(123)); - assert_equals(event.type, '123'); - }, 'type argument is Number'); - - test(function() { - var event = new DeviceProximityEvent([]); - assert_equals(event.type, ''); - }, 'type argument is array'); - - test(function() { - var event = new DeviceProximityEvent(new Array()); - assert_equals(event.type, ''); - }, 'type argument is instance of Array'); - - test(function() { - var event = new DeviceProximityEvent(['t', ['e', ['s', ['t']]]]); - assert_equals(event.type, 't,e,s,t'); - }, 'type argument is nested array'); - - test(function() { - var event = new DeviceProximityEvent(Math); - assert_equals(event.type, '[object Math]'); - }, 'type argument is host object'); - - test(function() { - var event = new DeviceProximityEvent(true); - assert_equals(event.type, 'true'); - }, 'type argument is boolean (true)'); - - test(function() { - var event = new DeviceProximityEvent(new Boolean(true)); - assert_equals(event.type, 'true'); - }, 'type argument is instance of Boolean (true)'); - - test(function() { - var event = new DeviceProximityEvent(false); - assert_equals(event.type, 'false'); - }, 'type argument is boolean (false)'); - - test(function() { - var event = new DeviceProximityEvent(new Boolean(false)); - assert_equals(event.type, 'false'); - }, 'type argument is instance of Boolean (false)'); - - test(function() { - var event = new DeviceProximityEvent('test'); - assert_equals(event.type, 'test'); - }, 'type argument is string'); - - test(function() { - var event = new DeviceProximityEvent(new String('test')); - assert_equals(event.type, 'test'); - }, 'type argument is instance of String'); - - test(function() { - var event = new DeviceProximityEvent(function test() {}); - assert_regexp_match(event.type, /function test.+{\s?}/); - }, 'type argument is function'); - - test(function() { - var event = new DeviceProximityEvent({ - toString: function() { - return '123'; - } - }); - assert_equals(event.type, '123'); - }, 'type argument is complext object, with toString method'); - - test(function() { - assert_throws(new TypeError(), function() { - new DeviceProximityEvent({ - toString: function() { - return function() {} - } - }); - }); - }, 'toString is of type function'); - - //eventInitDict attribute tests - test(function() { - var event = new DeviceProximityEvent('test', undefined); - assert_equals(event.value, Infinity); - assert_equals(event.min, -Infinity); - assert_equals(event.max, Infinity); - }, 'eventInitDict argument sets to undefined'); - - test(function() { - var event = new DeviceProximityEvent('test', null); - assert_equals(event.value, Infinity); - assert_equals(event.min, -Infinity); - assert_equals(event.max, Infinity); - }, 'eventInitDict argument is null'); - - test(function() { - var date = new Date(); - var event = new DeviceProximityEvent('test', date); - assert_equals(event.value, Infinity); - assert_equals(event.min, -Infinity); - assert_equals(event.max, Infinity); - }, 'eventInitDict argument is Date object'); - - test(function() { - var regexp = /abc/; - var event = new DeviceProximityEvent('test', regexp); - assert_equals(event.value, Infinity); - assert_equals(event.min, -Infinity); - assert_equals(event.max, Infinity); - }, 'eventInitDict argument is RegExp object'); - - test(function() { - assert_throws(new TypeError(), function() { - new DeviceProximityEvent('test', false); - }); - }, 'eventInitDict argument is boolean'); - - test(function() { - assert_throws(new TypeError(), function() { - new DeviceProximityEvent('test', 123); - }); - }, 'eventInitDict argument is number'); - - test(function() { - assert_throws(new TypeError(), function() { - new DeviceProximityEvent('test', 'hello'); - }); - }, 'eventInitDict argument is string'); - - //test readonly attribute unrestricted double value; - test(function() { - var event = new DeviceProximityEvent('test'); - assert_idl_attribute(event, 'value', 'must have attribute value'); - }, 'value attribute exist'); - - test(function() { - var event = new DeviceProximityEvent('test'); - assert_readonly(event, 'value', 'readonly attribute value'); - }, 'value attribute is readonly'); - - test(function() { - var event = new DeviceProximityEvent('test'); - assert_equals(event.value, Infinity); - }, 'value initializes to positive Infinity'); - - test(function() { - var event = new DeviceProximityEvent('test', { - value: Infinity - }); - assert_equals(event.value, Infinity); - }, 'value set to positive Infinity'); - - test(function() { - var event = new DeviceProximityEvent('test', { - value: -Infinity - }); - assert_equals(event.value, -Infinity); - }, 'value set to negative Infinity'); - - test(function() { - var event = new DeviceProximityEvent('test', { - value: 0 - }); - assert_equals(event.value, 0); - }, 'value set to 0'); - - test(function() { - var event = new DeviceProximityEvent('test', { - value: 1 - }); - assert_equals(event.value, 1); - }, 'value set to 1'); - - test(function() { - var event = new DeviceProximityEvent('test', { - value: 0.5 - }); - assert_equals(event.value, 0.5); - }, 'value set to 0.5'); - - test(function() { - var event = new DeviceProximityEvent('test', { - value: false - }); - assert_equals(event.value, 0, 'value set to false, converts to 0.'); - }, 'value set to false'); - - test(function() { - var event = new DeviceProximityEvent('test', { - value: true - }); - assert_equals(event.value, 1, 'value set to true, converts to 1.'); - }, 'value set to true'); - - - test(function() { - var prop = { - value: undefined - }; - try { - var event = new DeviceProximityEvent('test', prop); - assert_true(isNaN(event.value)); - } catch(e) { - assert_unreached('error message: ' + e.message); - } - }, 'value of undefined resolves to NaN'); - - test(function() { - var event = new DeviceProximityEvent('test', { - value: null - }); - assert_equals(event.value, 0, 'value resolves to 0'); - }, 'value of null resolves to 0'); - - test(function() { - var event = new DeviceProximityEvent('test', { - value: '' - }); - assert_equals(event.value, 0, 'value must resolve to 0'); - }, 'value of empty string must resolve to 0'); - - test(function() { - var event = new DeviceProximityEvent('test', { - value: '\u0020' - }); - assert_equals(event.value, 0, 'value must resolve to 0'); - }, 'value of U+0020 must resolve to 0'); - - test(function() { - var event = new DeviceProximityEvent('test', { - value: '\u0020\u0020\u0020\u0020\u0020\u0020' - }); - assert_equals(event.value, 0, 'value must resolve to 0'); - }, 'value of multiple U+0020 must resolve to 0'); - - test(function() { - var event = new DeviceProximityEvent('test', { - value: '\u0020\u0020\u00201234\u0020\u0020\u0020' - }); - assert_equals(event.value, 1234, 'converts to 1234'); - }, 'value converts to 1234'); - - test(function() { - var event = new DeviceProximityEvent('test', { - value: [] - }); - assert_equals(event.value, 0, 'converts to 0'); - }, 'value converts to 0'); - - - test(function() { - var prop = { - value: {} - }; - try { - var event = new DeviceProximityEvent('test', prop); - assert_true(isNaN(event.value)); - } catch(e) { - assert_unreached('error message: ' + e.message); - } - }, 'value of {} resolves to NaN'); - - test(function() { - var prop = { - get value() { - return NaN; - } - }; - try { - var event = new DeviceProximityEvent('test', prop); - assert_true(isNaN(event.value)); - } catch(e) { - assert_unreached('error message: ' + e.message); - } - }, 'value resolves to NaN'); - - test(function() { - var prop = { - get value() { - return '123'; - } - }; - var event = new DeviceProximityEvent('test', prop); - assert_equals(event.value, 123, 'converts to 123'); - }, 'value resolves 123'); - - //test readonly attribute unrestricted double min - test(function() { - var event = new DeviceProximityEvent('test'); - assert_idl_attribute(event, 'min', 'must have attribute min'); - }, 'min attribute exist'); - - test(function() { - var event = new DeviceProximityEvent('test'); - assert_readonly(event, 'min', 'readonly attribute min'); - }, 'min attribute is readonly'); - - test(function() { - var event = new DeviceProximityEvent('test'); - assert_equals(event.min, -Infinity); - }, 'min initializes to negative Infinity'); - - //test readonly attribute unrestricted double max; - test(function() { - var event = new DeviceProximityEvent('test'); - assert_idl_attribute(event, 'max', 'must have attribute max'); - }, 'max attribute exist'); - - test(function() { - var event = new DeviceProximityEvent('test'); - assert_readonly(event, 'max', 'readonly attribute max'); - }, 'max attribute is readonly'); - - test(function() { - var event = new DeviceProximityEvent('test'); - assert_equals(event.max, Infinity); - }, 'max initializes to positive Infinity'); - - //test attribute EventHandler ondeviceproximity; - test(function() { - var desc = 'Expected to find ondeviceproximity attribute on window object'; - assert_idl_attribute(window, 'ondeviceproximity', desc); - }, 'ondeviceproximity exists'); - - test(function() { - var desc = 'window.ondeviceproximity must be null'; - assert_equals(window.ondeviceproximity, null, desc); - }, 'ondeviceproximity is null'); - - test(function() { - var desc = 'window.ondeviceproximity did not accept callable object', - func = function() {}, - descidl = 'Expected to find ondeviceproximity attribute on window object'; - assert_idl_attribute(window, 'ondeviceproximity', descidl); - window.ondeviceproximity = func; - assert_equals(window.ondeviceproximity, func, desc); - }, 'ondeviceproximity is set to function'); - - test(function() { - var desc = 'window.ondeviceproximity did not treat noncallable as null'; - window.ondeviceproximity = function() {}; - window.ondeviceproximity = {}; - assert_equals(window.ondeviceproximity, null, desc); - }, 'treat object as null'); - - test(function() { - var desc = 'window.ondeviceproximity did not treat noncallable as null'; - window.ondeviceproximity = function() {}; - window.ondeviceproximity = { - call: 'test' - }; - assert_equals(window.ondeviceproximity, null, desc); - }, 'treat object with non-callable call property as null'); - - test(function() { - var desc = 'window.ondeviceproximity did not treat noncallable (string) as null'; - window.ondeviceproximity = function() {}; - window.ondeviceproximity = 'string'; - assert_equals(window.ondeviceproximity, null, desc); - }, 'treat string as null'); - - test(function() { - var desc = 'window.ondeviceproximity did not treat noncallable (number) as null'; - window.ondeviceproximity = function() {}; - window.ondeviceproximity = 123; - assert_equals(window.ondeviceproximity, null, desc); - }, 'treat number as null'); - - test(function() { - var desc = 'window.ondeviceproximity did not treat noncallable (undefined) as null'; - window.ondeviceproximity = function() {}; - window.ondeviceproximity = undefined; - assert_equals(window.ondeviceproximity, null, desc); - }, 'treat undefined as null'); - - test(function() { - var desc = 'window.ondeviceproximity did not treat noncallable (array) as null'; - window.ondeviceproximity = function() {}; - window.ondeviceproximity = []; - assert_equals(window.ondeviceproximity, null, desc); - }, 'treat array as null'); - - test(function() { - var desc = 'window.ondeviceproximity did not treat noncallable host object as null'; - window.ondeviceproximity = function() {}; - window.ondeviceproximity = Node; - assert_equals(window.ondeviceproximity, null, desc); - }, 'treat non-callable host object as null'); - - //Async tests - var t = async_test('test if device proximity event received'); - window.addEventListener('deviceproximity', function(e) { - t.step(function() { - var msg = 'expected instance of DeviceProximityEvent: '; - assert_true(e instanceof window.DeviceProximityEvent, msg); - }); - t.done(); - }); - - var t2 = async_test('test if user proximity event received'); - window.ondeviceproximity = function(e) { - t2.step(function() { - var msg = 'expected instance of DeviceProximityEvent: '; - assert_true(e instanceof window.DeviceProximityEvent, msg); - }); - t2.done(); - }; -})(); diff --git a/tests/wpt/web-platform-tests/proximity/ProximitySensor.https.html b/tests/wpt/web-platform-tests/proximity/ProximitySensor.https.html new file mode 100644 index 00000000000..ee7f684e02a --- /dev/null +++ b/tests/wpt/web-platform-tests/proximity/ProximitySensor.https.html @@ -0,0 +1,14 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>ProximitySensor Test</title> +<link rel="author" title="Intel" href="http://www.intel.com"> +<link rel="help" href="https://w3c.github.io/proximity/"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/generic-sensor/generic-sensor-tests.js"></script> +<div id="log"></div> +<script> + +runGenericSensorTests(ProximitySensor); + +</script> diff --git a/tests/wpt/web-platform-tests/proximity/ProximitySensor_insecure_context.html b/tests/wpt/web-platform-tests/proximity/ProximitySensor_insecure_context.html new file mode 100644 index 00000000000..b524cdc3214 --- /dev/null +++ b/tests/wpt/web-platform-tests/proximity/ProximitySensor_insecure_context.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>ProximitySensor Test: insecure context</title> +<link rel="author" title="Intel" href="http://www.intel.com"> +<link rel="help" href="https://w3c.github.io/proximity/"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/generic-sensor/generic-sensor-tests.js"></script> +<div id="log"></div> +<h2>Precondition</h2> +<ol> + <li> + Run test in an insecure context, e.g. http://example.com/. + </li> +</ol> +<script> + +runGenericSensorInsecureContext("ProximitySensor"); + +</script> diff --git a/tests/wpt/web-platform-tests/proximity/ProximitySensor_onerror-manual.https.html b/tests/wpt/web-platform-tests/proximity/ProximitySensor_onerror-manual.https.html new file mode 100644 index 00000000000..e1ee3804e37 --- /dev/null +++ b/tests/wpt/web-platform-tests/proximity/ProximitySensor_onerror-manual.https.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>ProximitySensor Test: onerror</title> +<link rel="author" title="Intel" href="http://www.intel.com"> +<link rel="help" href="https://w3c.github.io/proximity/"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/generic-sensor/generic-sensor-tests.js"></script> +<div id="log"></div> +<h2>Precondition</h2> +<ol> + <li> + Disable the Proximity Sensor or run test on a device without Proximity Sensor. + </li> +</ol> +<script> + +runGenericSensorOnerror(ProximitySensor); + +</script> diff --git a/tests/wpt/web-platform-tests/proximity/UserProximityEvent_tests.html b/tests/wpt/web-platform-tests/proximity/UserProximityEvent_tests.html deleted file mode 100644 index f58550db0b7..00000000000 --- a/tests/wpt/web-platform-tests/proximity/UserProximityEvent_tests.html +++ /dev/null @@ -1,10 +0,0 @@ -<!doctype html> -<meta charset=utf8> -<meta content="width=device-width, initial-scale=1" name=viewport> -<title>Proximity Events Test Suite</title> -<h1>Test Suite for Proximity Events</h1> -<div id="log"></div> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="UserProximityEvent_tests.js"></script> - diff --git a/tests/wpt/web-platform-tests/proximity/UserProximityEvent_tests.js b/tests/wpt/web-platform-tests/proximity/UserProximityEvent_tests.js deleted file mode 100644 index 36ef930fe67..00000000000 --- a/tests/wpt/web-platform-tests/proximity/UserProximityEvent_tests.js +++ /dev/null @@ -1,340 +0,0 @@ -(function() { - //inheritance tests - test(function() { - var event = new UserProximityEvent(''); - assert_true(event instanceof window.UserProximityEvent); - }, 'the event is an instance of UserProximityEvent'); - - test(function() { - var event = new UserProximityEvent(''); - assert_true(event instanceof window.Event); - }, 'the event inherits from Event'); - - //Type attribute tests - test(function() { - assert_throws(new TypeError(), function() { - new UserProximityEvent(); - }, 'First argument is required, so was expecting a TypeError.'); - }, 'Missing type argument'); - - test(function() { - var event = new UserProximityEvent(undefined); - assert_equals(event.type, 'undefined'); - }, 'Event type set to undefined'); - - test(function() { - var event = new UserProximityEvent(null); - assert_equals(event.type, 'null'); - }, 'type argument is null'); - - test(function() { - var event = new UserProximityEvent(123); - assert_equals(event.type, '123'); - }, 'type argument is number'); - - test(function() { - var event = new UserProximityEvent(new Number(123)); - assert_equals(event.type, '123'); - }, 'type argument is Number'); - - test(function() { - var event = new UserProximityEvent([]); - assert_equals(event.type, ''); - }, 'type argument is array'); - - test(function() { - var event = new UserProximityEvent(new Array()); - assert_equals(event.type, ''); - }, 'type argument is instance of Array'); - - test(function() { - var event = new UserProximityEvent(['t', ['e', ['s', ['t']]]]); - assert_equals(event.type, 't,e,s,t'); - }, 'type argument is nested array'); - - test(function() { - var event = new UserProximityEvent(Math); - assert_equals(event.type, '[object Math]'); - }, 'type argument is host object'); - - test(function() { - var event = new UserProximityEvent(true); - assert_equals(event.type, 'true'); - }, 'type argument is boolean (true)'); - - test(function() { - var event = new UserProximityEvent(new Boolean(true)); - assert_equals(event.type, 'true'); - }, 'type argument is instance of Boolean (true)'); - - test(function() { - var event = new UserProximityEvent(false); - assert_equals(event.type, 'false'); - }, 'type argument is boolean (false)'); - - test(function() { - var event = new UserProximityEvent(new Boolean(false)); - assert_equals(event.type, 'false'); - }, 'type argument is instance of Boolean (false)'); - - test(function() { - var event = new UserProximityEvent('test'); - assert_equals(event.type, 'test'); - }, 'type argument is string'); - - test(function() { - var event = new UserProximityEvent(new String('test')); - assert_equals(event.type, 'test'); - }, 'type argument is instance of String'); - - test(function() { - var event = new UserProximityEvent(function test() {}); - assert_regexp_match(event.type, /function test.+{\s?}/); - }, 'type argument is function'); - - test(function() { - var event = new UserProximityEvent({ - toString: function() { - return '123'; - } - }); - assert_equals(event.type, '123'); - }, 'type argument is complext object, with toString method'); - - test(function() { - assert_throws(new TypeError(), function() { - new UserProximityEvent({ - toString: function() { - return function() {} - } - }); - }); - }, 'toString is of type function'); - - //eventInitDict attribute tests - test(function() { - var event = new UserProximityEvent('test', undefined); - assert_false(event.near); - }, 'eventInitDict argument sets to undefined'); - - test(function() { - var event = new UserProximityEvent('test', null); - assert_false(event.near); - }, 'eventInitDict argument is null'); - - test(function() { - var date = new Date(); - var event = new UserProximityEvent('test', date); - assert_false(event.near); - }, 'eventInitDict argument is Date object'); - - test(function() { - var regexp = /abc/; - var event = new UserProximityEvent('test', regexp); - assert_false(event.near); - }, 'eventInitDict argument is RegExp object'); - - test(function() { - assert_throws(new TypeError(), function() { - new UserProximityEvent('test', false); - }); - }, 'eventInitDict argument is boolean'); - - test(function() { - assert_throws(new TypeError(), function() { - new UserProximityEvent('test', 123); - }); - }, 'eventInitDict argument is number'); - - test(function() { - assert_throws(new TypeError(), function() { - new UserProximityEvent('test', 'hello'); - }); - }, 'eventInitDict argument is string'); - - //test readonly attribute boolean near; - test(function() { - var event = new UserProximityEvent('test'); - assert_idl_attribute(event, 'near', 'must have attribute near'); - }, 'must have attribute near'); - - test(function() { - var event = new UserProximityEvent('test'); - assert_readonly(event, 'near', 'readonly attribute near'); - }, 'near is readonly'); - - test(function() { - var event = new UserProximityEvent('test'); - assert_false(event.near, 'near initializes to false'); - }, 'near initializes to false'); - - test(function() { - var event = new UserProximityEvent('test', { - near: false - }); - assert_false(event.near, 'near set to false'); - }, 'near set to false'); - - test(function() { - var event = new UserProximityEvent('test', { - near: true - }); - assert_true(event.near, 'near set to true'); - }, 'near set to true'); - - test(function() { - var event = new UserProximityEvent('test', { - near: undefined - }); - assert_false(event.near, 'argument is truthy'); - }, 'near set to undefined'); - - test(function() { - var event = new UserProximityEvent('test', { - near: null - }); - assert_false(event.near, 'argument is flasy'); - }, 'near set to null'); - - test(function() { - var event = new UserProximityEvent('test', { - near: 0 - }); - assert_false(event.near, 'argument is flasy'); - }, 'near set to 0'); - - test(function() { - var event = new UserProximityEvent('test', { - near: '' - }); - assert_false(event.near, 'argument is flasy'); - }, 'near set to empty string'); - - test(function() { - var event = new UserProximityEvent('test', { - near: '\u0020' - }); - assert_true(event.near, 'argument is truthy'); - }, 'near set to U+0020'); - - test(function() { - var event = new UserProximityEvent('test', { - near: 1 - }); - assert_true(event.near, 'argument is truthy'); - }, 'near set to 1'); - - test(function() { - var event = new UserProximityEvent('test', { - near: [] - }); - assert_true(event.near, 'argument is truthy'); - }, 'near set to []'); - - test(function() { - var event = new UserProximityEvent('test', { - near: {} - }); - assert_true(event.near, 'argument is truthy'); - }, 'near set to {}'); - - test(function() { - var dict = { - get test() { - return false; - } - }; - var event = new UserProximityEvent('test', { - near: dict.test - }); - assert_false(event.near, 'explict false'); - }, 'near set to object that resolves to false'); - - test(function() { - var desc = 'Expected to find onuserproximity attribute on window object'; - assert_idl_attribute(window, 'onuserproximity', desc); - }, 'onuserproximity exists'); - - test(function() { - var desc = 'window.onuserproximity must be null'; - assert_equals(window.onuserproximity, null, desc); - }, 'onuserproximity is null'); - - test(function() { - var desc = 'window.onuserproximity did not accept callable object', - func = function() {}, - descidl = 'onuserproximity does not exist'; - window.onuserproximity = func; - assert_equals(window.onuserproximity, func, descidl); - }, 'onuserproximity exists and can be set to a function'); - - test(function() { - var desc = 'window.onuserproximity did not treat noncallable as null'; - window.onuserproximity = function() {}; - window.onuserproximity = {}; - assert_equals(window.onuserproximity, null, desc); - }, 'treat object as null'); - - test(function() { - var desc = 'window.onuserproximity did not treat noncallable as null'; - window.onuserproximity = function() {}; - window.onuserproximity = { - call: 'test' - }; - assert_equals(window.onuserproximity, null, desc); - }, 'treat object with non-callable call property as null'); - - test(function() { - var desc = 'window.onuserproximity did not treat noncallable (string) as null'; - window.onuserproximity = function() {}; - window.onuserproximity = 'string'; - assert_equals(window.onuserproximity, null, desc); - }, 'treat string as null'); - - test(function() { - var desc = 'window.onuserproximity did not treat noncallable (number) as null'; - window.onuserproximity = function() {}; - window.onuserproximity = 123; - assert_equals(window.onuserproximity, null, desc); - }, 'treat number as null'); - - test(function() { - var desc = 'window.onuserproximity did not treat noncallable (undefined) as null'; - window.onuserproximity = function() {}; - window.onuserproximity = undefined; - assert_equals(window.onuserproximity, null, desc); - }, 'treat undefined as null'); - - test(function() { - var desc = 'window.onuserproximity did not treat noncallable (array) as null'; - window.onuserproximity = function() {}; - window.onuserproximity = []; - assert_equals(window.onuserproximity, null, desc); - }, 'treat array as null'); - - test(function() { - var desc = 'window.onuserproximity did not treat noncallable host object as null'; - window.onuserproximity = function() {}; - window.onuserproximity = Node; - assert_equals(window.onuserproximity, null, desc); - }, 'treat non-callable host object as null'); - - //Async tests - var t = async_test('test if user proximity event received'); - window.addEventListener('userproximity', function(e) { - t.step(function() { - var msg = 'expected instance of UserProximityEvent: '; - assert_true(e instanceof window.UserProximityEvent, msg); - }); - t.done(); - }); - - var t2 = async_test('test if user proximity event received (idl attribute)'); - window.onuserproximity = function(e) { - t2.step(function() { - var msg = 'expected instance of UserProximityEvent: '; - assert_true(e instanceof window.UserProximityEvent, msg); - }); - t2.done(); - }; -})(); diff --git a/tests/wpt/web-platform-tests/quirks/OWNERS b/tests/wpt/web-platform-tests/quirks/OWNERS new file mode 100644 index 00000000000..63851614695 --- /dev/null +++ b/tests/wpt/web-platform-tests/quirks/OWNERS @@ -0,0 +1 @@ +@zcorpan diff --git a/tests/wpt/web-platform-tests/resource-timing/resource_initiator_types.html b/tests/wpt/web-platform-tests/resource-timing/resource_initiator_types.html index b7c4c8b257e..30f8c0c024e 100644 --- a/tests/wpt/web-platform-tests/resource-timing/resource_initiator_types.html +++ b/tests/wpt/web-platform-tests/resource-timing/resource_initiator_types.html @@ -17,6 +17,7 @@ let page_loaded = false; let ol_font_loaded = false; let ul_font_loaded = false; let xhr_loaded = false; +let tests_run = false; function check_finished() { if (!ul_font_loaded) { @@ -64,6 +65,10 @@ function onload_test() { } function perform_test() { + if (tests_run) { + return; + } + tests_run = true; const context = new PerformanceContext(document.getElementById('frameContext').contentWindow.performance); const entries = context.getEntriesByType('resource'); diff --git a/tests/wpt/web-platform-tests/resource-timing/resource_timing.worker.js b/tests/wpt/web-platform-tests/resource-timing/resource_timing.worker.js new file mode 100644 index 00000000000..92687f0f7b6 --- /dev/null +++ b/tests/wpt/web-platform-tests/resource-timing/resource_timing.worker.js @@ -0,0 +1,64 @@ +importScripts("/resources/testharness.js"); + +function check(initiatorType, protocol) { + let entries = performance.getEntries(); + assert_equals(entries.length, 1); + + assert_true(entries[0] instanceof PerformanceEntry); + assert_equals(entries[0].entryType, "resource"); + assert_true(entries[0].startTime > 0); + assert_true(entries[0].duration > 0); + + assert_true(entries[0] instanceof PerformanceResourceTiming); + assert_equals(entries[0].initiatorType, initiatorType); + assert_equals(entries[0].nextHopProtocol, protocol); +} + +async_test(t => { + performance.clearResourceTimings(); + + // Fetch + fetch("resources/empty.js") + .then(r => r.blob()) + .then(blob => { + check("fetch", "http/1.1"); + }) + + // XMLHttpRequest + .then(() => { + return new Promise(resolve => { + performance.clearResourceTimings(); + let xhr = new XMLHttpRequest(); + xhr.onload = () => { + check("xmlhttprequest", "http/1.1"); + resolve(); + }; + xhr.open("GET", "resources/empty.js"); + xhr.send(); + }); + }) + + // Sync XMLHttpREquest + .then(() => { + performance.clearResourceTimings(); + let xhr = new XMLHttpRequest(); + xhr.open("GET", "resources/empty.js", false); + xhr.send(); + + check("xmlhttprequest", "http/1.1"); + }) + + // ImportScripts + .then(() => { + performance.clearResourceTimings(); + importScripts(["resources/empty.js"]); + check("other", "http/1.1"); + }) + + // All done. + .then(() => { + t.done(); + }); +}, "Performance Resouce Entries in workers"); + +done(); diff --git a/tests/wpt/web-platform-tests/resource-timing/resources/empty.js b/tests/wpt/web-platform-tests/resource-timing/resources/empty.js new file mode 100644 index 00000000000..3b44754e301 --- /dev/null +++ b/tests/wpt/web-platform-tests/resource-timing/resources/empty.js @@ -0,0 +1 @@ +/* Nothing here */ diff --git a/tests/wpt/web-platform-tests/resources/chromium/fake_bluetooth.mojom.js b/tests/wpt/web-platform-tests/resources/chromium/fake_bluetooth.mojom.js index 2751e14afe9..dd2d6533bc0 100644 --- a/tests/wpt/web-platform-tests/resources/chromium/fake_bluetooth.mojom.js +++ b/tests/wpt/web-platform-tests/resources/chromium/fake_bluetooth.mojom.js @@ -11,9 +11,6 @@ return; } mojo.internal.markMojomLoaded(mojomId); - - // TODO(yzshen): Define these aliases to minimize the differences between the - // old/new modes. Remove them when the old mode goes away. var bindings = mojo; var associatedBindings = mojo; var codec = mojo.internal; @@ -1252,6 +1249,137 @@ encoder.writeUint32(0); encoder.encodeStruct(codec.NullableString, val.serviceId); }; + function FakeCentral_RemoveFakeService_Params(values) { + this.initDefaults_(); + this.initFields_(values); + } + + + FakeCentral_RemoveFakeService_Params.prototype.initDefaults_ = function() { + this.identifier = null; + this.peripheralAddress = null; + }; + FakeCentral_RemoveFakeService_Params.prototype.initFields_ = function(fields) { + for(var field in fields) { + if (this.hasOwnProperty(field)) + this[field] = fields[field]; + } + }; + + FakeCentral_RemoveFakeService_Params.validate = function(messageValidator, offset) { + var err; + err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize); + if (err !== validator.validationError.NONE) + return err; + + var kVersionSizes = [ + {version: 0, numBytes: 24} + ]; + err = messageValidator.validateStructVersion(offset, kVersionSizes); + if (err !== validator.validationError.NONE) + return err; + + + // validate FakeCentral_RemoveFakeService_Params.identifier + err = messageValidator.validateStringPointer(offset + codec.kStructHeaderSize + 0, false) + if (err !== validator.validationError.NONE) + return err; + + + // validate FakeCentral_RemoveFakeService_Params.peripheralAddress + err = messageValidator.validateStringPointer(offset + codec.kStructHeaderSize + 8, false) + if (err !== validator.validationError.NONE) + return err; + + return validator.validationError.NONE; + }; + + FakeCentral_RemoveFakeService_Params.encodedSize = codec.kStructHeaderSize + 16; + + FakeCentral_RemoveFakeService_Params.decode = function(decoder) { + var packed; + var val = new FakeCentral_RemoveFakeService_Params(); + var numberOfBytes = decoder.readUint32(); + var version = decoder.readUint32(); + val.identifier = decoder.decodeStruct(codec.String); + val.peripheralAddress = decoder.decodeStruct(codec.String); + return val; + }; + + FakeCentral_RemoveFakeService_Params.encode = function(encoder, val) { + var packed; + encoder.writeUint32(FakeCentral_RemoveFakeService_Params.encodedSize); + encoder.writeUint32(0); + encoder.encodeStruct(codec.String, val.identifier); + encoder.encodeStruct(codec.String, val.peripheralAddress); + }; + function FakeCentral_RemoveFakeService_ResponseParams(values) { + this.initDefaults_(); + this.initFields_(values); + } + + + FakeCentral_RemoveFakeService_ResponseParams.prototype.initDefaults_ = function() { + this.success = false; + }; + FakeCentral_RemoveFakeService_ResponseParams.prototype.initFields_ = function(fields) { + for(var field in fields) { + if (this.hasOwnProperty(field)) + this[field] = fields[field]; + } + }; + + FakeCentral_RemoveFakeService_ResponseParams.validate = function(messageValidator, offset) { + var err; + err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize); + if (err !== validator.validationError.NONE) + return err; + + var kVersionSizes = [ + {version: 0, numBytes: 16} + ]; + err = messageValidator.validateStructVersion(offset, kVersionSizes); + if (err !== validator.validationError.NONE) + return err; + + + return validator.validationError.NONE; + }; + + FakeCentral_RemoveFakeService_ResponseParams.encodedSize = codec.kStructHeaderSize + 8; + + FakeCentral_RemoveFakeService_ResponseParams.decode = function(decoder) { + var packed; + var val = new FakeCentral_RemoveFakeService_ResponseParams(); + var numberOfBytes = decoder.readUint32(); + var version = decoder.readUint32(); + packed = decoder.readUint8(); + val.success = (packed >> 0) & 1 ? true : false; + decoder.skip(1); + decoder.skip(1); + decoder.skip(1); + decoder.skip(1); + decoder.skip(1); + decoder.skip(1); + decoder.skip(1); + return val; + }; + + FakeCentral_RemoveFakeService_ResponseParams.encode = function(encoder, val) { + var packed; + encoder.writeUint32(FakeCentral_RemoveFakeService_ResponseParams.encodedSize); + encoder.writeUint32(0); + packed = 0; + packed |= (val.success & 1) << 0 + encoder.writeUint8(packed); + encoder.skip(1); + encoder.skip(1); + encoder.skip(1); + encoder.skip(1); + encoder.skip(1); + encoder.skip(1); + encoder.skip(1); + }; function FakeCentral_AddFakeCharacteristic_Params(values) { this.initDefaults_(); this.initFields_(values); @@ -2701,14 +2829,15 @@ var kFakeCentral_SimulateGATTDisconnection_Name = 3; var kFakeCentral_SimulateGATTServicesChanged_Name = 4; var kFakeCentral_AddFakeService_Name = 5; - var kFakeCentral_AddFakeCharacteristic_Name = 6; - var kFakeCentral_RemoveFakeCharacteristic_Name = 7; - var kFakeCentral_AddFakeDescriptor_Name = 8; - var kFakeCentral_SetNextReadCharacteristicResponse_Name = 9; - var kFakeCentral_SetNextWriteCharacteristicResponse_Name = 10; - var kFakeCentral_SetNextSubscribeToNotificationsResponse_Name = 11; - var kFakeCentral_GetLastWrittenValue_Name = 12; - var kFakeCentral_SetNextReadDescriptorResponse_Name = 13; + var kFakeCentral_RemoveFakeService_Name = 6; + var kFakeCentral_AddFakeCharacteristic_Name = 7; + var kFakeCentral_RemoveFakeCharacteristic_Name = 8; + var kFakeCentral_AddFakeDescriptor_Name = 9; + var kFakeCentral_SetNextReadCharacteristicResponse_Name = 10; + var kFakeCentral_SetNextWriteCharacteristicResponse_Name = 11; + var kFakeCentral_SetNextSubscribeToNotificationsResponse_Name = 12; + var kFakeCentral_GetLastWrittenValue_Name = 13; + var kFakeCentral_SetNextReadDescriptorResponse_Name = 14; function FakeCentralPtr(handleOrPtrInfo) { this.ptr = new bindings.InterfacePtrController(FakeCentral, @@ -2883,6 +3012,32 @@ }); }.bind(this)); }; + FakeCentralPtr.prototype.removeFakeService = function() { + return FakeCentralProxy.prototype.removeFakeService + .apply(this.ptr.getProxy(), arguments); + }; + + FakeCentralProxy.prototype.removeFakeService = function(identifier, peripheralAddress) { + var params = new FakeCentral_RemoveFakeService_Params(); + params.identifier = identifier; + params.peripheralAddress = peripheralAddress; + return new Promise(function(resolve, reject) { + var builder = new codec.MessageV1Builder( + kFakeCentral_RemoveFakeService_Name, + codec.align(FakeCentral_RemoveFakeService_Params.encodedSize), + codec.kMessageExpectsResponse, 0); + builder.encodeStruct(FakeCentral_RemoveFakeService_Params, params); + var message = builder.finish(); + this.receiver_.acceptAndExpectResponse(message).then(function(message) { + var reader = new codec.MessageReader(message); + var responseParams = + reader.decodeStruct(FakeCentral_RemoveFakeService_ResponseParams); + resolve(responseParams); + }).catch(function(result) { + reject(Error("Connection error: " + result)); + }); + }.bind(this)); + }; FakeCentralPtr.prototype.addFakeCharacteristic = function() { return FakeCentralProxy.prototype.addFakeCharacteristic .apply(this.ptr.getProxy(), arguments); @@ -3130,6 +3285,9 @@ FakeCentralStub.prototype.addFakeService = function(peripheralAddress, serviceUuid) { return this.delegate_ && this.delegate_.addFakeService && this.delegate_.addFakeService(peripheralAddress, serviceUuid); } + FakeCentralStub.prototype.removeFakeService = function(identifier, peripheralAddress) { + return this.delegate_ && this.delegate_.removeFakeService && this.delegate_.removeFakeService(identifier, peripheralAddress); + } FakeCentralStub.prototype.addFakeCharacteristic = function(characteristicUuid, properties, serviceId, peripheralAddress) { return this.delegate_ && this.delegate_.addFakeCharacteristic && this.delegate_.addFakeCharacteristic(characteristicUuid, properties, serviceId, peripheralAddress); } @@ -3262,6 +3420,22 @@ responder.accept(message); }); return true; + case kFakeCentral_RemoveFakeService_Name: + var params = reader.decodeStruct(FakeCentral_RemoveFakeService_Params); + this.removeFakeService(params.identifier, params.peripheralAddress).then(function(response) { + var responseParams = + new FakeCentral_RemoveFakeService_ResponseParams(); + responseParams.success = response.success; + var builder = new codec.MessageV1Builder( + kFakeCentral_RemoveFakeService_Name, + codec.align(FakeCentral_RemoveFakeService_ResponseParams.encodedSize), + codec.kMessageIsResponse, reader.requestID); + builder.encodeStruct(FakeCentral_RemoveFakeService_ResponseParams, + responseParams); + var message = builder.finish(); + responder.accept(message); + }); + return true; case kFakeCentral_AddFakeCharacteristic_Name: var params = reader.decodeStruct(FakeCentral_AddFakeCharacteristic_Params); this.addFakeCharacteristic(params.characteristicUuid, params.properties, params.serviceId, params.peripheralAddress).then(function(response) { @@ -3424,6 +3598,10 @@ if (message.expectsResponse()) paramsClass = FakeCentral_AddFakeService_Params; break; + case kFakeCentral_RemoveFakeService_Name: + if (message.expectsResponse()) + paramsClass = FakeCentral_RemoveFakeService_Params; + break; case kFakeCentral_AddFakeCharacteristic_Name: if (message.expectsResponse()) paramsClass = FakeCentral_AddFakeCharacteristic_Params; @@ -3490,6 +3668,10 @@ if (message.isResponse()) paramsClass = FakeCentral_AddFakeService_ResponseParams; break; + case kFakeCentral_RemoveFakeService_Name: + if (message.isResponse()) + paramsClass = FakeCentral_RemoveFakeService_ResponseParams; + break; case kFakeCentral_AddFakeCharacteristic_Name: if (message.isResponse()) paramsClass = FakeCentral_AddFakeCharacteristic_ResponseParams; diff --git a/tests/wpt/web-platform-tests/resources/chromium/web-bluetooth-test.js b/tests/wpt/web-platform-tests/resources/chromium/web-bluetooth-test.js index 1658ff1a14f..dd3bbb6125b 100644 --- a/tests/wpt/web-platform-tests/resources/chromium/web-bluetooth-test.js +++ b/tests/wpt/web-platform-tests/resources/chromium/web-bluetooth-test.js @@ -236,6 +236,16 @@ class FakeRemoteGATTService { characteristic_id, this.service_id_, this.peripheral_address_, this.fake_central_ptr_); } + + // Removes the fake GATT service from its fake peripheral. + async remove() { + let {success} = + await this.fake_central_ptr_.removeFakeService( + this.service_id_, + this.peripheral_address_); + + if (!success) throw 'remove failed'; + } } class FakeRemoteGATTCharacteristic { @@ -367,4 +377,12 @@ class FakeRemoteGATTDescriptor { } } -navigator.bluetooth.test = new FakeBluetooth(); +// If this line fails, it means that current environment does not support the +// Web Bluetooth Test API. +try { + navigator.bluetooth.test = new FakeBluetooth(); +} catch { + throw 'Web Bluetooth Test API is not implemented on this ' + + 'environment. See the bluetooth README at ' + + 'https://github.com/w3c/web-platform-tests/blob/master/bluetooth/README.md#web-bluetooth-testing'; +} diff --git a/tests/wpt/web-platform-tests/resources/idlharness.js b/tests/wpt/web-platform-tests/resources/idlharness.js index a8d4150dbc4..47dd9fb3dea 100644 --- a/tests/wpt/web-platform-tests/resources/idlharness.js +++ b/tests/wpt/web-platform-tests/resources/idlharness.js @@ -2270,7 +2270,7 @@ IdlInterface.prototype.test_interface_of = function(desc, obj, exception, expect if (!exposed_in(exposure_set(member, this.exposureSet))) { test(function() { assert_false(member.name in obj); - }.bind(this), this.name + "interface: " + desc + 'must not have property "' + member.name + '"'); + }.bind(this), this.name + " interface: " + desc + ' must not have property "' + member.name + '"'); continue; } if (member.type == "attribute" && member.isUnforgeable) diff --git a/tests/wpt/web-platform-tests/screen-orientation/interfaces.html b/tests/wpt/web-platform-tests/screen-orientation/interfaces.html new file mode 100644 index 00000000000..26d46ae537b --- /dev/null +++ b/tests/wpt/web-platform-tests/screen-orientation/interfaces.html @@ -0,0 +1,28 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Screen Orientation API IDL tests</title> +<link rel="help" href="https://w3c.github.io/screen-orientation/"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/WebIDLParser.js"></script> +<script src="/resources/idlharness.js"></script> +<script> +"use strict"; + +promise_test(async () => { + const idl_array = new IdlArray(); + const dom_idl = await fetch("/interfaces/dom.idl").then(r => r.text()); + const screenorientation_idl = await fetch("/interfaces/screen-orientation.idl").then(r => r.text()); + + idl_array.add_untested_idls(dom_idl); + idl_array.add_untested_idls('interface EventHandler {};'); + idl_array.add_untested_idls('interface Screen {};'); + idl_array.add_idls(screenorientation_idl); + + idl_array.add_objects({ + Screen: ['screen'], + ScreenOrientation: ['screen.orientation'] + }); + idl_array.test(); +}, "Test IDL implementation of Screen Orientation API"); +</script> diff --git a/tests/wpt/web-platform-tests/screen-orientation/orientation-api.html b/tests/wpt/web-platform-tests/screen-orientation/orientation-api.html deleted file mode 100644 index 80910a3a0ff..00000000000 --- a/tests/wpt/web-platform-tests/screen-orientation/orientation-api.html +++ /dev/null @@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<body> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script> - -test(function() { - assert_true('orientation' in window.screen); - assert_true('angle' in window.screen.orientation); - assert_true('type' in window.screen.orientation); - assert_true('lock' in window.screen.orientation); - assert_true('unlock' in window.screen.orientation); - assert_true('onchange' in window.screen.orientation); -}, "Test that the Screen Orientation API is present.") - -test(function() { - assert_equals(typeof(screen.orientation), "object"); - assert_equals(typeof(screen.orientation.angle), "number"); - assert_equals(typeof(screen.orientation.type), "string"); - assert_equals(typeof(screen.orientation.lock), "function"); - assert_equals(typeof(screen.orientation.unlock), "function"); - assert_equals(typeof(screen.orientation.onchange), "object"); -}, "Test Screen Orientation API property types."); - -test(function() { - assert_true('addEventListener' in screen.orientation); - assert_true('removeEventListener' in screen.orientation); - assert_true('dispatchEvent' in screen.orientation); - assert_true(screen.orientation instanceof EventTarget) -}, "Test that screen.orientation is an EventTarget."); - -</script> -</body> -</html> diff --git a/tests/wpt/web-platform-tests/screen-orientation/resources/sandboxed-iframe-locking.html b/tests/wpt/web-platform-tests/screen-orientation/resources/sandboxed-iframe-locking.html index 74dac82a5b0..48f408b4ff4 100644 --- a/tests/wpt/web-platform-tests/screen-orientation/resources/sandboxed-iframe-locking.html +++ b/tests/wpt/web-platform-tests/screen-orientation/resources/sandboxed-iframe-locking.html @@ -6,13 +6,8 @@ msg = screen.orientation.type; }, function(error) { msg = error.name; - }); - - // FIXME: for the moment, tests gets notified when there is a failure but - // not a success, this hack should allow us to still have the test running. - // That should be removed as soon as we get a resolved promise in tests. - setTimeout(function() { + }).then(function() { parent.window.postMessage(msg, "*"); - }) + }); </script> </html> diff --git a/tests/wpt/web-platform-tests/server-timing/cross_origin.html b/tests/wpt/web-platform-tests/server-timing/cross_origin.html new file mode 100644 index 00000000000..80035888de4 --- /dev/null +++ b/tests/wpt/web-platform-tests/server-timing/cross_origin.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<head> + <meta charset='utf-8' /> + <script src="/resources/testharness.js"></script> + <script src='/resources/testharnessreport.js'></script> + <script src="/common/performance-timeline-utils.js"></script> + <script> + setup({explicit_done: true}) + + const {location: {href}} = document + const urls = {} + urls['same-origin'] = `${href.substring(0, href.lastIndexOf('/'))}/resources/blue.png` + urls['cross-origin'] = urls['same-origin'].replace('://', '://www.') + Object.keys(urls).forEach(function(key) { + const img = document.createElement('img') + img.src = urls[key] + document.getElementsByTagName('script')[0].parentNode.appendChild(img) + }) + + window.addEventListener('load', function() { + function assertServerTimingEntries(url, expectedEntryCount) { + test_equals(performance.getEntriesByName(url)[0].serverTiming.length, + expectedEntryCount, + `Expected entry count for ${url}: ${expectedEntryCount}`) + } + assertServerTimingEntries(urls['same-origin'], 1) + assertServerTimingEntries(urls['cross-origin'], 0) + done() + }) + </script> +</head> diff --git a/tests/wpt/web-platform-tests/service-workers/OWNERS b/tests/wpt/web-platform-tests/service-workers/OWNERS index 62f69300dee..7870c50f314 100644 --- a/tests/wpt/web-platform-tests/service-workers/OWNERS +++ b/tests/wpt/web-platform-tests/service-workers/OWNERS @@ -1,4 +1,5 @@ +@asutherland @beidson -@ehsan @mkruisselbrink @mattto +@wanderview diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/about-blank-replacement.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/about-blank-replacement.https.html index 3acfe1b166a..e1fefaf290f 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/about-blank-replacement.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/about-blank-replacement.https.html @@ -58,7 +58,7 @@ function getClientIdByURL(worker, url) { }); } -async function doAsyncTest(t, scope, extraSearchParams) { +async function doAsyncTest(t, scope) { let reg = await service_worker_unregister_and_register(t, worker, scope); await wait_for_state(t, reg.installing, 'activated'); @@ -70,20 +70,30 @@ async function doAsyncTest(t, scope, extraSearchParams) { let initialResult = frame.contentWindow.nested().document.body.textContent; assert_false(initialResult.startsWith('failure:'), `result: ${initialResult}`); + assert_equals(frame.contentWindow.navigator.serviceWorker.controller.scriptURL, + frame.contentWindow.nested().navigator.serviceWorker.controller.scriptURL, + 'nested about:blank should have same controlling service worker'); + // Next, ask the service worker to find the final client ID for the fully // loaded nested frame. - let nestedURL = new URL(scope, window.location); - nestedURL.searchParams.set('nested', true); - extraSearchParams = extraSearchParams || {}; - for (let p in extraSearchParams) { - nestedURL.searchParams.set(p, extraSearchParams[p]); - } + let nestedURL = new URL(frame.contentWindow.nested().location); let finalResult = await getClientIdByURL(reg.active, nestedURL); assert_false(finalResult.startsWith('failure:'), `result: ${finalResult}`); - // The initial about:blank client and the final loaded client should have - // the same ID value. - assert_equals(initialResult, finalResult, 'client ID values should match'); + // If the nested frame doesn't have a URL to load, then there is no fetch + // event and the body should be empty. We can't verify the final client ID + // against anything. + if (nestedURL.href === 'about:blank' || + nestedURL.href === 'about:srcdoc') { + assert_equals('', initialResult, 'about:blank text content should be blank'); + } + + // If the nested URL is not about:blank, though, then the fetch event handler + // should have populated the body with the client id of the initial about:blank. + // Verify the final client id matches. + else { + assert_equals(initialResult, finalResult, 'client ID values should match'); + } frame.remove(); await service_worker_unregister_and_done(t, scope); @@ -101,8 +111,7 @@ promise_test(async function(t) { // worker can ping the client to verify its existence. This ping-pong // check is performed during the initial load and when verifying the // final loaded client. - await doAsyncTest(t, 'resources/about-blank-replacement-ping-frame.py', - { 'ping': true }); + await doAsyncTest(t, 'resources/about-blank-replacement-ping-frame.py'); }, 'Initial about:blank modified by parent is controlled, exposed to ' + 'clients.matchAll(), and matches final Client.'); @@ -142,5 +151,27 @@ promise_test(async function(t) { }, 'Initial about:blank is controlled, exposed to clients.matchAll(), and ' + 'final Client is not controlled by a service worker.'); +promise_test(async function(t) { + // Execute a test where the nested frame is an iframe without a src + // attribute. This simple nested about:blank should still inherit the + // controller and be visible to clients.matchAll(). + await doAsyncTest(t, 'resources/about-blank-replacement-blank-nested-frame.html'); +}, 'Simple about:blank is controlled and is exposed to clients.matchAll().'); + +promise_test(async function(t) { + // Execute a test where the nested frame is an iframe using a non-empty + // srcdoc containing only a tag pair so its textContent is still empty. + // This nested iframe should still inherit the controller and be visible + // to clients.matchAll(). + await doAsyncTest(t, 'resources/about-blank-replacement-srcdoc-nested-frame.html'); +}, 'Nested about:srcdoc is controlled and is exposed to clients.matchAll().'); + +promise_test(async function(t) { + // Execute a test where the nested frame is dynamically added without a src + // attribute. This simple nested about:blank should still inherit the + // controller and be visible to clients.matchAll(). + await doAsyncTest(t, 'resources/about-blank-replacement-blank-dynamic-nested-frame.html'); +}, 'Dynamic about:blank is controlled and is exposed to clients.matchAll().'); + </script> </body> diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-canvas-tainting-cache.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-canvas-tainting-cache.https.html deleted file mode 100644 index 74754935240..00000000000 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-canvas-tainting-cache.https.html +++ /dev/null @@ -1,38 +0,0 @@ -<!DOCTYPE html> -<title>Service Worker: canvas tainting of the fetched image using cached responses</title> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="/common/get-host-info.sub.js"></script> -<script src="resources/test-helpers.sub.js?pipe=sub"></script> -<body> -<script> -async_test(function(t) { - var SCOPE = 'resources/fetch-canvas-tainting-iframe.html?cache'; - var SCRIPT = 'resources/fetch-rewrite-worker.js'; - var host_info = get_host_info(); - - login_https(t) - .then(function() { - return service_worker_unregister_and_register(t, SCRIPT, SCOPE); - }) - .then(function(registration) { - return wait_for_state(t, registration.installing, 'activated'); - }) - .then(function() { return with_iframe(SCOPE); }) - .then(function(frame) { - return new Promise(function(resolve, reject) { - var channel = new MessageChannel(); - channel.port1.onmessage = t.step_func(function(e) { - assert_equals(e.data.results, 'finish'); - frame.remove(); - service_worker_unregister_and_done(t, SCOPE); - }); - frame.contentWindow.postMessage({}, - host_info['HTTPS_ORIGIN'], - [channel.port2]); - }); - }) - .catch(unreached_rejection(t)); - }, 'Verify canvas tainting of fetched image in a Service Worker'); -</script> -</body> diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-canvas-tainting-image-cache.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-canvas-tainting-image-cache.https.html new file mode 100644 index 00000000000..21323811225 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-canvas-tainting-image-cache.https.html @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Service Worker: canvas tainting of the fetched image using cached responses</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="resources/test-helpers.sub.js?pipe=sub"></script> +<script src="resources/fetch-canvas-tainting-tests.js"></script> +<body> +<script> +do_canvas_tainting_tests({ + resource_path: base_path() + 'resources/fetch-access-control.py?PNGIMAGE', + cache: true +}); +</script> +</body> diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-canvas-tainting-image.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-canvas-tainting-image.https.html new file mode 100644 index 00000000000..57dc7d98caa --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-canvas-tainting-image.https.html @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Service Worker: canvas tainting of the fetched image</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="resources/test-helpers.sub.js?pipe=sub"></script> +<script src="resources/fetch-canvas-tainting-tests.js"></script> +<body> +<script> +do_canvas_tainting_tests({ + resource_path: base_path() + 'resources/fetch-access-control.py?PNGIMAGE', + cache: false +}); +</script> +</body> diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-canvas-tainting-video-cache.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-canvas-tainting-video-cache.https.html new file mode 100644 index 00000000000..ef3d12bbe49 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-canvas-tainting-video-cache.https.html @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Service Worker: canvas tainting of the fetched video using cache responses</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="resources/test-helpers.sub.js?pipe=sub"></script> +<script src="resources/fetch-canvas-tainting-tests.js"></script> +<body> +<script> +do_canvas_tainting_tests({ + resource_path: base_path() + 'resources/fetch-access-control.py?VIDEO', + cache: true +}); +</script> +</body> diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-canvas-tainting-video.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-canvas-tainting-video.https.html new file mode 100644 index 00000000000..577650881c1 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-canvas-tainting-video.https.html @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Service Worker: canvas tainting of the fetched video</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="resources/test-helpers.sub.js?pipe=sub"></script> +<script src="resources/fetch-canvas-tainting-tests.js"></script> +<body> +<script> +do_canvas_tainting_tests({ + resource_path: base_path() + 'resources/fetch-access-control.py?VIDEO', + cache: false +}); +</script> +</body> diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-canvas-tainting.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-canvas-tainting.https.html deleted file mode 100644 index 55faa9df7a9..00000000000 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-canvas-tainting.https.html +++ /dev/null @@ -1,38 +0,0 @@ -<!DOCTYPE html> -<title>Service Worker: canvas tainting of the fetched image</title> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="/common/get-host-info.sub.js"></script> -<script src="resources/test-helpers.sub.js?pipe=sub"></script> -<body> -<script> -async_test(function(t) { - var SCOPE = 'resources/fetch-canvas-tainting-iframe.html'; - var SCRIPT = 'resources/fetch-rewrite-worker.js'; - var host_info = get_host_info(); - - login_https(t) - .then(function() { - return service_worker_unregister_and_register(t, SCRIPT, SCOPE); - }) - .then(function(registration) { - return wait_for_state(t, registration.installing, 'activated'); - }) - .then(function() { return with_iframe(SCOPE); }) - .then(function(frame) { - return new Promise(function(resolve, reject) { - var channel = new MessageChannel(); - channel.port1.onmessage = t.step_func(function(e) { - assert_equals(e.data.results, 'finish'); - frame.remove(); - service_worker_unregister_and_done(t, SCOPE); - }); - frame.contentWindow.postMessage({}, - host_info['HTTPS_ORIGIN'], - [channel.port2]); - }); - }) - .catch(unreached_rejection(t)); - }, 'Verify canvas tainting of fetched image in a Service Worker'); -</script> -</body> diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event.https.html index 240219b082d..9fef304adba 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event.https.html @@ -174,50 +174,78 @@ async_test(function(t) { .catch(unreached_rejection(t)); }, 'Service Worker fetches other file in fetch event'); -async_test(function(t) { - var scope = 'resources/simple.html?form-post'; - var frame_name = 'xhr-post-frame'; - service_worker_unregister_and_register(t, worker, scope) - .then(function(reg) { +// Creates a form and an iframe and does a form submission that navigates the +// frame to |action_url|. Returns the frame after navigation. +function submit_form(action_url) { + return new Promise(resolve => { + const frame = document.createElement('iframe'); + frame.name = 'post-frame'; + document.body.appendChild(frame); + const form = document.createElement('form'); + form.target = frame.name; + form.action = action_url; + form.method = 'post'; + const input1 = document.createElement('input'); + input1.type = 'text'; + input1.value = 'testValue1'; + input1.name = 'testName1' + form.appendChild(input1); + const input2 = document.createElement('input'); + input2.type = 'text'; + input2.value = 'testValue2'; + input2.name = 'testName2' + form.appendChild(input2); + document.body.appendChild(form); + frame.onload = function() { + form.remove(); + resolve(frame); + }; + form.submit(); + }); +} + +promise_test(t => { + const scope = 'resources/simple.html?form-post'; + let registration; + return service_worker_unregister_and_register(t, worker, scope) + .then(reg => { + registration = reg; + add_completion_callback(() => { reg.unregister(); }); return wait_for_state(t, reg.installing, 'activated'); }) - .then(function(sw) { - return new Promise(function(resolve) { - var frame = document.createElement('iframe'); - frame.name = frame_name; - document.body.appendChild(frame); - var form = document.createElement('form'); - form.target = frame_name; - form.action = scope; - form.method = 'post'; - var input1 = document.createElement('input'); - input1.type = 'text'; - input1.value = 'testValue1'; - input1.name = 'testName1' - form.appendChild(input1); - var input2 = document.createElement('input'); - input2.type = 'text'; - input2.value = 'testValue2'; - input2.name = 'testName2' - form.appendChild(input2); - document.body.appendChild(form); - frame.onload = function() { - document.body.removeChild(form); - resolve(frame); - }; - form.submit(); - }); + .then(() => { + return submit_form(scope); }) - .then(function(frame) { + .then(frame => { assert_equals(frame.contentDocument.body.textContent, 'POST:application/x-www-form-urlencoded:' + 'testName1=testValue1&testName2=testValue2'); frame.remove(); - return service_worker_unregister_and_done(t, scope); - }) - .catch(unreached_rejection(t)); + return registration.unregister(); + }); }, 'Service Worker responds to fetch event with POST form'); +promise_test(t => { + // Add '?ignore' to scope so the service worker falls back to network. + const scope = 'resources/echo-content.py?ignore'; + let registration; + return service_worker_unregister_and_register(t, worker, scope) + .then(reg => { + registration = reg; + add_completion_callback(() => { reg.unregister(); }); + return wait_for_state(t, reg.installing, 'activated'); + }) + .then(() => { + return submit_form(scope); + }) + .then(frame => { + assert_equals(frame.contentDocument.body.textContent, + 'testName1=testValue1&testName2=testValue2'); + frame.remove(); + return registration.unregister(); + }); + }, 'Service Worker falls back to network in fetch event with POST form'); + async_test(function(t) { var scope = 'resources/simple.html?multiple-respond-with'; service_worker_unregister_and_register(t, worker, scope) @@ -456,6 +484,43 @@ promise_test(t => { }); }, 'FetchEvent#body is a string'); +// Test that the request body is sent to network upon network fallback, +// for a string body. +promise_test(t => { + // Set scope to "?ignore" so the service worker falls back to network + // for the main resource request, and add a suffix to avoid colliding + // with other tests. + const scope = 'resources/?ignore-for-request-body-fallback-string'; + let frame; + + return service_worker_unregister_and_register(t, worker, scope) + .then(reg => { + add_completion_callback(() => { reg.unregister(); }); + return wait_for_state(t, reg.installing, 'activated'); + }) + .then(() => { + return with_iframe(scope); }) + .then(f => { + frame = f; + // Add "?ignore" so the service worker falls back to echo-content.py. + const echo_url = '/fetch/api/resources/echo-content.py?ignore'; + return frame.contentWindow.fetch(echo_url, { + method: 'POST', + body: 'i am the request body' + }); + }) + .then(response => { + return response.text(); + }) + .then(response_text => { + frame.remove(); + assert_equals( + response_text, + 'i am the request body', + 'the network fallback request should include the request body'); + }); + }, 'FetchEvent#body is a string and is passed to network fallback'); + // Test that the service worker can read FetchEvent#body when it is a blob. // It responds with request body it read. promise_test(t => { @@ -489,6 +554,44 @@ promise_test(t => { }); }, 'FetchEvent#body is a blob'); +// Test that the request body is sent to network upon network fallback, +// for a blob body. +promise_test(t => { + // Set scope to "?ignore" so the service worker falls back to network + // for the main resource request, and add a suffix to avoid colliding + // with other tests. + const scope = 'resources/simple.html?ignore-for-request-body-fallback-blob'; + let frame; + + return service_worker_unregister_and_register(t, worker, scope) + .then(reg => { + add_completion_callback(() => { reg.unregister(); }); + return wait_for_state(t, reg.installing, 'activated'); + }) + .then(() => { + return with_iframe(scope); }) + .then(f => { + frame = f; + const blob = new Blob(['it\'s me the blob', ' ', 'and more blob!']); + // Add "?ignore" so the service worker falls back to echo-content.py. + const echo_url = '/fetch/api/resources/echo-content.py?ignore'; + return frame.contentWindow.fetch(echo_url, { + method: 'POST', + body: blob + }); + }) + .then(response => { + return response.text(); + }) + .then(response_text => { + frame.remove(); + assert_equals( + response_text, + 'it\'s me the blob and more blob!', + 'the network fallback request should include the request body'); + }); + }, 'FetchEvent#body is a blob and is passed to network fallback'); + promise_test(async (t) => { const scope = 'resources/simple.html?keepalive'; diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-response-taint.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-response-taint.https.html index a6e7f984ea2..8ebee0c0737 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-response-taint.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-response-taint.https.html @@ -193,6 +193,9 @@ for_each_origin_mode_credentials(function(origin, mode, credentials) { // Fetch to the other origin with same-origin mode should fail. if (origin == OTHER_ORIGIN && mode == 'same-origin') { ng_test(url, mode, credentials); + } else if (origin == BASE_ORIGIN && mode == 'same-origin') { + // Cors type response to a same-origin mode request should fail + ng_test(url, mode, credentials); } else { // The response from the SW should be cors. ok_test(url, mode, credentials, 'cors', 'undefined'); @@ -208,6 +211,9 @@ for_each_origin_mode_credentials(function(origin, mode, credentials) { // Fetch to the other origin with same-origin mode should fail. if (origin == OTHER_ORIGIN && mode == 'same-origin') { ng_test(url, mode, credentials); + } else if (origin == BASE_ORIGIN && mode == 'same-origin') { + // Cors type response to a same-origin mode request should fail + ng_test(url, mode, credentials); } else { // The response from the SW should be cors. ok_test(url, mode, credentials, 'cors', 'username1s'); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/local-url-inherit-controller.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/local-url-inherit-controller.https.html new file mode 100644 index 00000000000..df25051b257 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/local-url-inherit-controller.https.html @@ -0,0 +1,129 @@ +<!DOCTYPE html> +<title>Service Worker: local URL windows and workers inherit controller</title> +<meta name=timeout content=long> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="resources/test-helpers.sub.js"></script> +<body> +<script> + +const SCRIPT = 'resources/local-url-inherit-controller-worker.js'; +const SCOPE = 'resources/local-url-inherit-controller-frame.html'; + +async function doAsyncTest(t, opts) { + let name = `${opts.scheme}-${opts.child}-${opts.check}`; + let scope = SCOPE + '?name=' + name; + let reg = await service_worker_unregister_and_register(t, SCRIPT, scope); + add_completion_callback(_ => reg.unregister()); + await wait_for_state(t, reg.installing, 'activated'); + + let frame = await with_iframe(scope); + add_completion_callback(_ => frame.remove()); + assert_not_equals(frame.contentWindow.navigator.serviceWorker.controller, null, + 'frame should be controlled'); + + let result = await frame.contentWindow.checkChildController(opts); + result = result.data; + + let expect = 'unexpected'; + if (opts.check === 'controller') { + expect = opts.expect === 'inherit' + ? frame.contentWindow.navigator.serviceWorker.controller.scriptURL + : null; + } else if (opts.check === 'fetch') { + // The service worker FetchEvent handler will provide an "intercepted" + // body. If the local URL ends up with an opaque origin and is not + // intercepted then it will get an opaque Response. In that case it + // should see an empty string body. + expect = opts.expect === 'intercept' ? 'intercepted' : ''; + } + + assert_equals(result, expect, + `${opts.scheme} URL ${opts.child} should ${opts.expect} ${opts.check}`); +} + +promise_test(function(t) { + return doAsyncTest(t, { + scheme: 'blob', + child: 'iframe', + check: 'controller', + expect: 'inherit', + }); +}, 'Same-origin blob URL iframe should inherit service worker controller.'); + +promise_test(function(t) { + return doAsyncTest(t, { + scheme: 'blob', + child: 'iframe', + check: 'fetch', + expect: 'intercept', + }); +}, 'Same-origin blob URL iframe should intercept fetch().'); + +promise_test(function(t) { + return doAsyncTest(t, { + scheme: 'blob', + child: 'worker', + check: 'controller', + expect: 'inherit', + }); +}, 'Same-origin blob URL worker should inherit service worker controller.'); + +promise_test(function(t) { + return doAsyncTest(t, { + scheme: 'blob', + child: 'worker', + check: 'fetch', + expect: 'intercept', + }); +}, 'Same-origin blob URL worker should intercept fetch().'); + +promise_test(function(t) { + // Data URLs should result in an opaque origin and should probably not + // have access to a cross-origin service worker. See: + // + // https://github.com/w3c/ServiceWorker/issues/1262 + // + return doAsyncTest(t, { + scheme: 'data', + child: 'iframe', + check: 'controller', + expect: 'not inherit', + }); +}, 'Data URL iframe should not inherit service worker controller.'); + +promise_test(function(t) { + return doAsyncTest(t, { + scheme: 'data', + child: 'iframe', + check: 'fetch', + expect: 'not intercept', + }); +}, 'Data URL iframe should not intercept fetch().'); + +promise_test(function(t) { + // Data URLs should result in an opaque origin and should probably not + // have access to a cross-origin service worker. See: + // + // https://github.com/w3c/ServiceWorker/issues/1262 + // + return doAsyncTest(t, { + scheme: 'data', + child: 'worker', + check: 'controller', + expect: 'not inherit', + }); +}, 'Data URL worker should not inherit service worker controller.'); + +promise_test(function(t) { + return doAsyncTest(t, { + scheme: 'data', + child: 'worker', + check: 'fetch', + expect: 'not intercept', + }); +}, 'Data URL worker should not intercept fetch().'); + +</script> +</body> diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/about-blank-replacement-blank-dynamic-nested-frame.html b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/about-blank-replacement-blank-dynamic-nested-frame.html new file mode 100644 index 00000000000..1e0c6209bfc --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/about-blank-replacement-blank-dynamic-nested-frame.html @@ -0,0 +1,21 @@ +<!doctype html> +<html> +<body> +<script> +function nestedLoaded() { + parent.postMessage({ type: 'NESTED_LOADED' }, '*'); +} + +// dynamically add an about:blank iframe +var f = document.createElement('iframe'); +f.onload = nestedLoaded; +document.body.appendChild(f); + +// Helper routine to make it slightly easier for our parent to find +// the nested frame. +function nested() { + return f.contentWindow; +} +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/about-blank-replacement-blank-nested-frame.html b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/about-blank-replacement-blank-nested-frame.html new file mode 100644 index 00000000000..99d07a48cda --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/about-blank-replacement-blank-nested-frame.html @@ -0,0 +1,22 @@ +<!doctype html> +<html> +<body> +<script> +function nestedLoaded() { + parent.postMessage({ type: 'NESTED_LOADED' }, '*'); +} +</script> +<iframe id="nested" onload="nestedLoaded()"></iframe> +<script> +// Helper routine to make it slightly easier for our parent to find +// the nested frame. +function nested() { + return document.getElementById('nested').contentWindow; +} + +// NOTE: Make sure not to touch the iframe directly here. We want to +// test the case where the initial about:blank document is not +// directly accessed before load. +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/about-blank-replacement-srcdoc-nested-frame.html b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/about-blank-replacement-srcdoc-nested-frame.html new file mode 100644 index 00000000000..0122a00aa43 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/about-blank-replacement-srcdoc-nested-frame.html @@ -0,0 +1,22 @@ +<!doctype html> +<html> +<body> +<script> +function nestedLoaded() { + parent.postMessage({ type: 'NESTED_LOADED' }, '*'); +} +</script> +<iframe id="nested" srcdoc="<div></div>" onload="nestedLoaded()"></iframe> +<script> +// Helper routine to make it slightly easier for our parent to find +// the nested frame. +function nested() { + return document.getElementById('nested').contentWindow; +} + +// NOTE: Make sure not to touch the iframe directly here. We want to +// test the case where the initial about:blank document is not +// directly accessed before load. +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/clients-get-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/clients-get-worker.js index 79a1ce7b757..87368ae7617 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/clients-get-worker.js +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/clients-get-worker.js @@ -4,13 +4,6 @@ // the `event` object. In the case of the `onmessage` handler, it provides the // Client instance attributes of the requested clients. self.onfetch = function(e) { - if (e.request.mode === 'navigate' && e.clientId !== "") { - e.respondWith(Response.error( - '`clientId` incorrectly set to non-empty string for request with mode `navigate`' - )); - return; - } - if (/\/clientId$/.test(e.request.url)) { e.respondWith(new Response(e.clientId)); return; diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/echo-content.py b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/echo-content.py new file mode 100644 index 00000000000..45325382750 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/echo-content.py @@ -0,0 +1,11 @@ +# This is a copy of fetch/api/resources/echo-content.py since it's more +# convenient in this directory due to service worker's path restriction. +def main(request, response): + + headers = [("X-Request-Method", request.method), + ("X-Request-Content-Length", request.headers.get("Content-Length", "NO")), + ("X-Request-Content-Type", request.headers.get("Content-Type", "NO"))] + + content = request.body + + return headers, content diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-access-control.py b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-access-control.py index 93ea0e0ad66..c82ffbe0930 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-access-control.py +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-access-control.py @@ -1,5 +1,7 @@ import base64 import json +import os +import sys def main(request, response): headers = [] @@ -31,6 +33,10 @@ def main(request, response): "jBoAAqMGDLwBDAwAEsoCTFWunmQAAAAASUVORK5CYII=") return headers, body + if "VIDEO" in request.GET: + headers.append(("Content-Type", "video/webm")) + body = open(os.path.join(request.doc_root, "media", "movie_5.ogv"), "rb").read() + return headers, body username = request.auth.username if request.auth.username else "undefined" password = request.auth.password if request.auth.username else "undefined" diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-canvas-tainting-iframe.html b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-canvas-tainting-iframe.html index 9b068690993..a65d2501a85 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-canvas-tainting-iframe.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-canvas-tainting-iframe.html @@ -1,291 +1,69 @@ -<script src="/common/get-host-info.sub.js"></script> -<script src="test-helpers.sub.js?pipe=sub"></script> +<html> +<title>iframe for fetch canvas tainting test</title> <script> -var image_path = base_path() + 'fetch-access-control.py?PNGIMAGE'; -var host_info = get_host_info(); -var params = get_query_params(location.href); - -var NOT_TAINTED = 'NOT_TAINTED'; -var TAINTED = 'TAINTED'; -var LOAD_ERROR = 'LOAD_ERROR'; - -function get_query_params(url) { - var search = (new URL(url)).search; - if (!search) { - return {}; - } - var ret = {}; - var params = search.substring(1).split('&'); - params.forEach(function(param) { - var element = param.split('='); - ret[decodeURIComponent(element[0])] = decodeURIComponent(element[1]); - }); - return ret; -} +const NOT_TAINTED = 'NOT_TAINTED'; +const TAINTED = 'TAINTED'; +const LOAD_ERROR = 'LOAD_ERROR'; +// Creates an image/video element with src=|url| and an optional |cross_origin| +// attibute. Tries to read from the image/video using a canvas element. Returns +// NOT_TAINTED if it could be read, TAINTED if it could not be read, and +// LOAD_ERROR if loading the image/video failed. function create_test_case_promise(url, cross_origin) { - return new Promise(function(resolve) { - var img = new Image(); - if (cross_origin != '') { - img.crossOrigin = cross_origin; - } - img.onload = function() { - try { - var canvas = document.createElement('canvas'); - canvas.width = 100; - canvas.height = 100; - var context = canvas.getContext('2d'); - context.drawImage(img, 0, 0); - context.getImageData(0, 0, 100, 100); - resolve(NOT_TAINTED); - } catch (e) { - resolve(TAINTED); + return new Promise(resolve => { + if (url.indexOf('PNGIMAGE') != -1) { + const img = document.createElement('img'); + if (cross_origin != '') { + img.crossOrigin = cross_origin; } - }; - img.onerror = function() { - resolve(LOAD_ERROR); + img.onload = function() { + try { + const canvas = document.createElement('canvas'); + canvas.width = 100; + canvas.height = 100; + const context = canvas.getContext('2d'); + context.drawImage(img, 0, 0); + context.getImageData(0, 0, 100, 100); + resolve(NOT_TAINTED); + } catch (e) { + resolve(TAINTED); + } + }; + img.onerror = function() { + resolve(LOAD_ERROR); + } + img.src = url; + return; } - img.src = url; - }); -} -function create_test_promise(url, cross_origin, expected_result) { - if (params['cache']) { - url += "&cache"; - } - - return new Promise(function(resolve, reject) { - create_test_case_promise(url, cross_origin) - .then(function(result) { - if (result == expected_result) { - resolve(); - } else { - reject('Result of url:' + url + ' ' + - ' cross_origin: ' + cross_origin + ' must be ' + - expected_result + ' but ' + result); + if (url.indexOf('VIDEO') != -1) { + const video = document.createElement('video'); + video.autoplay = true; + if (cross_origin != '') { + video.crossOrigin = cross_origin; + } + video.onplay = function() { + try { + const canvas = document.createElement('canvas'); + canvas.width = 100; + canvas.height = 100; + const context = canvas.getContext('2d'); + context.drawImage(video, 0, 0); + context.getImageData(0, 0, 100, 100); + resolve(NOT_TAINTED); + } catch (e) { + resolve(TAINTED); } - }) - }); -} - -window.addEventListener('message', function(evt) { - var port = evt.ports[0]; - var image_url = host_info['HTTPS_ORIGIN'] + image_path; - var remote_image_url = host_info['HTTPS_REMOTE_ORIGIN'] + image_path; - Promise.all([ - // Reject tests - create_test_promise(image_url + '&reject', '', LOAD_ERROR), - create_test_promise(image_url + '&reject', 'anonymous', LOAD_ERROR), - create_test_promise( - image_url + '&reject', 'use-credentials', LOAD_ERROR), - // Fallback tests - create_test_promise( - image_url + '&ignore', - '', - NOT_TAINTED), - create_test_promise( - remote_image_url + '&ignore', - '', - TAINTED), - create_test_promise( - remote_image_url + '&ignore', - 'anonymous', - LOAD_ERROR), - create_test_promise( - remote_image_url + '&ACAOrigin=' + host_info['HTTPS_ORIGIN'] + - '&ignore', - 'anonymous', - NOT_TAINTED), - create_test_promise( - remote_image_url + '&ignore', - 'use-credentials', - LOAD_ERROR), - create_test_promise( - remote_image_url + '&ACAOrigin=' + host_info['HTTPS_ORIGIN'] + - '&ignore', - 'use-credentials', - LOAD_ERROR), - create_test_promise( - remote_image_url + '&ACAOrigin=' + host_info['HTTPS_ORIGIN'] + - '&ACACredentials=true&ignore', - 'use-credentials', - NOT_TAINTED), - - // Credential test (fallback) - create_test_promise( - image_url + '&Auth&ignore', - '', - NOT_TAINTED), - create_test_promise( - remote_image_url + '&Auth&ignore', - '', - TAINTED), - create_test_promise( - remote_image_url + '&Auth&ignore', - 'anonymous', - LOAD_ERROR), - create_test_promise( - remote_image_url + '&Auth&ignore', - 'use-credentials', - LOAD_ERROR), - create_test_promise( - remote_image_url + '&Auth&ACAOrigin=' + host_info['HTTPS_ORIGIN'] + - '&ignore', - 'use-credentials', - LOAD_ERROR), - create_test_promise( - remote_image_url + '&Auth&ACAOrigin=' + host_info['HTTPS_ORIGIN'] + - '&ACACredentials=true&ignore', - 'use-credentials', - NOT_TAINTED), - - // Basic response - create_test_promise( - image_url + - '&mode=same-origin&url=' + encodeURIComponent(image_url), - '', - NOT_TAINTED), - create_test_promise( - image_url + - '&mode=same-origin&url=' + encodeURIComponent(image_url), - 'anonymous', - NOT_TAINTED), - create_test_promise( - image_url + - '&mode=same-origin&url=' + encodeURIComponent(image_url), - 'use-credentials', - NOT_TAINTED), - create_test_promise( - remote_image_url + - '&mode=same-origin&url=' + encodeURIComponent(image_url), - '', - NOT_TAINTED), - create_test_promise( - remote_image_url + - '&mode=same-origin&url=' + encodeURIComponent(image_url), - 'anonymous', - NOT_TAINTED), - create_test_promise( - remote_image_url + - '&mode=same-origin&url=' + encodeURIComponent(image_url), - 'use-credentials', - NOT_TAINTED), - - // Opaque response - create_test_promise( - image_url + - '&mode=no-cors&url=' + encodeURIComponent(remote_image_url), - '', - TAINTED), - create_test_promise( - image_url + - '&mode=no-cors&url=' + encodeURIComponent(remote_image_url), - 'anonymous', - LOAD_ERROR), - create_test_promise( - image_url + - '&mode=no-cors&url=' + encodeURIComponent(remote_image_url), - 'use-credentials', - LOAD_ERROR), - create_test_promise( - remote_image_url + - '&mode=no-cors&url=' + encodeURIComponent(remote_image_url), - '', - TAINTED), - create_test_promise( - remote_image_url + - '&mode=no-cors&url=' + encodeURIComponent(remote_image_url), - 'anonymous', - LOAD_ERROR), - create_test_promise( - remote_image_url + - '&mode=no-cors&url=' + encodeURIComponent(remote_image_url), - 'use-credentials', - LOAD_ERROR), + }; + video.onerror = function() { + resolve(LOAD_ERROR); + } + video.src = url; + return; + } - // CORS response - create_test_promise( - image_url + - '&mode=cors&url=' + - encodeURIComponent(remote_image_url + - '&ACAOrigin=' + host_info['HTTPS_ORIGIN']), - '', - LOAD_ERROR), // We expect LOAD_ERROR since the server doesn't respond - // with an Access-Control-Allow-Credentials header. - create_test_promise( - image_url + - '&mode=cors&credentials=same-origin&url=' + - encodeURIComponent(remote_image_url + - '&ACAOrigin=' + host_info['HTTPS_ORIGIN']), - '', - NOT_TAINTED), - create_test_promise( - image_url + - '&mode=cors&url=' + - encodeURIComponent(remote_image_url + - '&ACAOrigin=' + host_info['HTTPS_ORIGIN']), - 'anonymous', - NOT_TAINTED), - create_test_promise( - image_url + - '&mode=cors&url=' + - encodeURIComponent(remote_image_url + - '&ACAOrigin=' + host_info['HTTPS_ORIGIN']), - 'use-credentials', - LOAD_ERROR), // We expect LOAD_ERROR since the server doesn't respond - // with an Access-Control-Allow-Credentials header. - create_test_promise( - image_url + - '&mode=cors&url=' + - encodeURIComponent( - remote_image_url + - '&ACACredentials=true&ACAOrigin=' + host_info['HTTPS_ORIGIN']), - 'use-credentials', - NOT_TAINTED), - create_test_promise( - remote_image_url + - '&mode=cors&url=' + - encodeURIComponent(remote_image_url + - '&ACAOrigin=' + host_info['HTTPS_ORIGIN']), - '', - LOAD_ERROR), // We expect LOAD_ERROR since the server doesn't respond - // with an Access-Control-Allow-Credentials header. - create_test_promise( - remote_image_url + - '&mode=cors&credentials=same-origin&url=' + - encodeURIComponent(remote_image_url + - '&ACAOrigin=' + host_info['HTTPS_ORIGIN']), - '', - NOT_TAINTED), - create_test_promise( - remote_image_url + - '&mode=cors&url=' + - encodeURIComponent(remote_image_url + - '&ACAOrigin=' + host_info['HTTPS_ORIGIN']), - 'anonymous', - NOT_TAINTED), - create_test_promise( - remote_image_url + - '&mode=cors&url=' + - encodeURIComponent(remote_image_url + - '&ACAOrigin=' + host_info['HTTPS_ORIGIN']), - 'use-credentials', - LOAD_ERROR), // We expect LOAD_ERROR since the server doesn't respond - // with an Access-Control-Allow-Credentials header. - create_test_promise( - remote_image_url + - '&mode=cors&url=' + - encodeURIComponent( - remote_image_url + - '&ACACredentials=true&ACAOrigin=' + host_info['HTTPS_ORIGIN']), - 'use-credentials', - NOT_TAINTED) - ]) - .then(function() { - port.postMessage({results: 'finish'}); - }) - .catch(function(e) { - port.postMessage({results: 'failure:' + e}); - }); - }, false); + resolve('unknown resource type'); + }); +} </script> +</html> diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-canvas-tainting-tests.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-canvas-tainting-tests.js new file mode 100644 index 00000000000..2aada3669ef --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-canvas-tainting-tests.js @@ -0,0 +1,241 @@ +// This is the main driver of the canvas tainting tests. +const NOT_TAINTED = 'NOT_TAINTED'; +const TAINTED = 'TAINTED'; +const LOAD_ERROR = 'LOAD_ERROR'; + +let frame; + +// Creates a single promise_test. +function canvas_taint_test(url, cross_origin, expected_result) { + promise_test(t => { + return frame.contentWindow.create_test_case_promise(url, cross_origin) + .then(result => { + assert_equals(result, expected_result); + }); + }, 'url "' + url + '" with crossOrigin "' + cross_origin + '" should be ' + + expected_result); +} + + +// Runs all the tests. The given |params| has these properties: +// * |resource_path|: the relative path to the (image/video) resource to test. +// * |cache|: when true, the service worker bounces responses into +// Cache Storage and back out before responding with them. +function do_canvas_tainting_tests(params) { + const host_info = get_host_info(); + let resource_path = params.resource_path; + if (params.cache) + resource_path += "&cache=true"; + const resource_url = host_info['HTTPS_ORIGIN'] + resource_path; + const remote_resource_url = host_info['HTTPS_REMOTE_ORIGIN'] + resource_path; + + // Set up the service worker and the frame. + promise_test(function(t) { + const SCOPE = 'resources/fetch-canvas-tainting-iframe.html'; + const SCRIPT = 'resources/fetch-rewrite-worker.js'; + const host_info = get_host_info(); + + // login_https() is needed because some test cases use credentials. + return login_https(t) + .then(function() { + return service_worker_unregister_and_register(t, SCRIPT, SCOPE); + }) + .then(function(registration) { + promise_test(() => { + if (frame) + frame.remove(); + return registration.unregister(); + }, 'restore global state'); + + return wait_for_state(t, registration.installing, 'activated'); + }) + .then(function() { return with_iframe(SCOPE); }) + .then(f => { + frame = f; + }); + }, 'initialize global state'); + + // Reject tests. Add '&reject' so the service worker responds with a rejected promise. + // A load error is expected. + canvas_taint_test(resource_url + '&reject', '', LOAD_ERROR); + canvas_taint_test(resource_url + '&reject', 'anonymous', LOAD_ERROR); + canvas_taint_test(resource_url + '&reject', 'use-credentials', LOAD_ERROR); + + // Fallback tests. Add '&ignore' so the service worker does not respond to the fetch + // request, and we fall back to network. + canvas_taint_test(resource_url + '&ignore', '', NOT_TAINTED); + canvas_taint_test(remote_resource_url + '&ignore', '', TAINTED); + canvas_taint_test(remote_resource_url + '&ignore', 'anonymous', LOAD_ERROR); + canvas_taint_test( + remote_resource_url + '&ACAOrigin=' + host_info['HTTPS_ORIGIN'] + + '&ignore', + 'anonymous', + NOT_TAINTED); + canvas_taint_test(remote_resource_url + '&ignore', 'use-credentials', LOAD_ERROR); + canvas_taint_test( + remote_resource_url + '&ACAOrigin=' + host_info['HTTPS_ORIGIN'] + + '&ignore', + 'use-credentials', + LOAD_ERROR); + canvas_taint_test( + remote_resource_url + '&ACAOrigin=' + host_info['HTTPS_ORIGIN'] + + '&ACACredentials=true&ignore', + 'use-credentials', + NOT_TAINTED); + + // Credential tests (with fallback). Add '&Auth' so the server requires authentication. + // Furthermore, add '&ignore' so the service worker falls back to network. + canvas_taint_test(resource_url + '&Auth&ignore', '', NOT_TAINTED); + canvas_taint_test(remote_resource_url + '&Auth&ignore', '', TAINTED); + canvas_taint_test( + remote_resource_url + '&Auth&ignore', 'anonymous', LOAD_ERROR); + canvas_taint_test( + remote_resource_url + '&Auth&ignore', + 'use-credentials', + LOAD_ERROR); + canvas_taint_test( + remote_resource_url + '&Auth&ACAOrigin=' + host_info['HTTPS_ORIGIN'] + + '&ignore', + 'use-credentials', + LOAD_ERROR); + canvas_taint_test( + remote_resource_url + '&Auth&ACAOrigin=' + host_info['HTTPS_ORIGIN'] + + '&ACACredentials=true&ignore', + 'use-credentials', + NOT_TAINTED); + + // In the following tests, the service worker provides a response. + // Add '&url' so the service worker responds with fetch(url). + // Add '&mode' to configure the fetch request options. + + // Basic response tests. Set &url to the original url. + canvas_taint_test( + resource_url + '&mode=same-origin&url=' + encodeURIComponent(resource_url), + '', + NOT_TAINTED); + canvas_taint_test( + resource_url + '&mode=same-origin&url=' + encodeURIComponent(resource_url), + 'anonymous', + NOT_TAINTED); + canvas_taint_test( + resource_url + '&mode=same-origin&url=' + encodeURIComponent(resource_url), + 'use-credentials', + NOT_TAINTED); + canvas_taint_test( + remote_resource_url + '&mode=same-origin&url=' + + encodeURIComponent(resource_url), + '', + NOT_TAINTED); + canvas_taint_test( + remote_resource_url + '&mode=same-origin&url=' + + encodeURIComponent(resource_url), + 'anonymous', + NOT_TAINTED); + canvas_taint_test( + remote_resource_url + '&mode=same-origin&url=' + + encodeURIComponent(resource_url), + 'use-credentials', + NOT_TAINTED); + + // Opaque response tests. Set &url to the cross-origin URL, and &mode to + // 'no-cors' so we expect an opaque response. + canvas_taint_test( + resource_url + + '&mode=no-cors&url=' + encodeURIComponent(remote_resource_url), + '', + TAINTED); + canvas_taint_test( + resource_url + + '&mode=no-cors&url=' + encodeURIComponent(remote_resource_url), + 'anonymous', + LOAD_ERROR); + canvas_taint_test( + resource_url + + '&mode=no-cors&url=' + encodeURIComponent(remote_resource_url), + 'use-credentials', + LOAD_ERROR); + canvas_taint_test( + remote_resource_url + + '&mode=no-cors&url=' + encodeURIComponent(remote_resource_url), + '', + TAINTED); + canvas_taint_test( + remote_resource_url + + '&mode=no-cors&url=' + encodeURIComponent(remote_resource_url), + 'anonymous', + LOAD_ERROR); + canvas_taint_test( + remote_resource_url + + '&mode=no-cors&url=' + encodeURIComponent(remote_resource_url), + 'use-credentials', + LOAD_ERROR); + + // CORS response tests. Set &url to the cross-origin URL, and &mode + // to 'cors' to attempt a CORS request. + canvas_taint_test( + resource_url + '&mode=cors&url=' + + encodeURIComponent(remote_resource_url + + '&ACAOrigin=' + host_info['HTTPS_ORIGIN']), + '', + LOAD_ERROR); // We expect LOAD_ERROR since the server doesn't respond + // with an Access-Control-Allow-Credentials header. + canvas_taint_test( + resource_url + '&mode=cors&credentials=same-origin&url=' + + encodeURIComponent(remote_resource_url + + '&ACAOrigin=' + host_info['HTTPS_ORIGIN']), + '', + NOT_TAINTED); + canvas_taint_test( + resource_url + '&mode=cors&url=' + + encodeURIComponent(remote_resource_url + + '&ACAOrigin=' + host_info['HTTPS_ORIGIN']), + 'anonymous', + NOT_TAINTED); + canvas_taint_test( + resource_url + '&mode=cors&url=' + + encodeURIComponent(remote_resource_url + + '&ACAOrigin=' + host_info['HTTPS_ORIGIN']), + 'use-credentials', + LOAD_ERROR); // We expect LOAD_ERROR since the server doesn't respond + // with an Access-Control-Allow-Credentials header. + canvas_taint_test( + resource_url + '&mode=cors&url=' + + encodeURIComponent( + remote_resource_url + + '&ACACredentials=true&ACAOrigin=' + host_info['HTTPS_ORIGIN']), + 'use-credentials', + NOT_TAINTED); + canvas_taint_test( + remote_resource_url + '&mode=cors&url=' + + encodeURIComponent(remote_resource_url + + '&ACAOrigin=' + host_info['HTTPS_ORIGIN']), + '', + LOAD_ERROR); // We expect LOAD_ERROR since the server doesn't respond + // with an Access-Control-Allow-Credentials header. + canvas_taint_test( + remote_resource_url + '&mode=cors&credentials=same-origin&url=' + + encodeURIComponent(remote_resource_url + + '&ACAOrigin=' + host_info['HTTPS_ORIGIN']), + '', + NOT_TAINTED); + canvas_taint_test( + remote_resource_url + '&mode=cors&url=' + + encodeURIComponent(remote_resource_url + + '&ACAOrigin=' + host_info['HTTPS_ORIGIN']), + 'anonymous', + NOT_TAINTED); + canvas_taint_test( + remote_resource_url + '&mode=cors&url=' + + encodeURIComponent(remote_resource_url + + '&ACAOrigin=' + host_info['HTTPS_ORIGIN']), + 'use-credentials', + LOAD_ERROR); // We expect LOAD_ERROR since the server doesn't respond + // with an Access-Control-Allow-Credentials header. + canvas_taint_test( + remote_resource_url + '&mode=cors&url=' + + encodeURIComponent( + remote_resource_url + + '&ACACredentials=true&ACAOrigin=' + host_info['HTTPS_ORIGIN']), + 'use-credentials', + NOT_TAINTED); +} diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-rewrite-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-rewrite-worker.js index 9806f2b5b6b..f2d49e2706a 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-rewrite-worker.js +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-rewrite-worker.js @@ -1,3 +1,11 @@ +// By default, this worker responds to fetch events with +// respondWith(fetch(request)). Additionally, if the request has a &url +// parameter, it fetches the provided URL instead. Because it forwards fetch +// events to this other URL, it is called the "fetch rewrite" worker. +// +// The worker also looks for other params on the request to do more custom +// behavior, like falling back to network or throwing an error. + function get_query_params(url) { var search = (new URL(url)).search; if (!search) { @@ -125,6 +133,7 @@ self.addEventListener('fetch', function(event) { } } + // |cache| means to bounce responses through Cache Storage and back. if (params['cache']) { var cacheName = "cached-fetches-" + performance.now() + "-" + event.request.url; diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/local-url-inherit-controller-frame.html b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/local-url-inherit-controller-frame.html new file mode 100644 index 00000000000..d70e2141377 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/local-url-inherit-controller-frame.html @@ -0,0 +1,123 @@ +<!DOCTYPE html> +<html> +<script> + +const fetchURL = new URL('dummy.txt', window.location).href; + +const frameControllerText = +`<script> + let t = navigator.serviceWorker.controller + ? navigator.serviceWorker.controller.scriptURL + : null; + parent.postMessage({ data: t }, '*'); +</` + `script>`; + +const frameFetchText = +`<script> + fetch('${fetchURL}', { mode: 'no-cors' }).then(response => { + return response.text(); + }).then(text => { + parent.postMessage({ data: text }, '*'); + }).catch(e => { + parent.postMessage({ data: e.message }, '*'); + }); +</` + `script>`; + +const workerControllerText = +`let t = navigator.serviceWorker.controller + ? navigator.serviceWorker.controller.scriptURL + : null; +self.postMessage(t);`; + +const workerFetchText = +`fetch('${fetchURL}', { mode: 'no-cors' }).then(response => { + return response.text(); +}).then(text => { + self.postMessage(text); +}).catch(e => { + self.postMessage(e.message); +});` + +function getChildText(opts) { + if (opts.child === 'iframe') { + if (opts.check === 'controller') { + return frameControllerText; + } + + if (opts.check === 'fetch') { + return frameFetchText; + } + + throw('unexpected feature to check: ' + opts.check); + } + + if (opts.child === 'worker') { + if (opts.check === 'controller') { + return workerControllerText; + } + + if (opts.check === 'fetch') { + return workerFetchText; + } + + throw('unexpected feature to check: ' + opts.check); + } + + throw('unexpected child type ' + opts.child); +} + +function makeURL(opts) { + if (opts.scheme === 'blob') { + let blob = new Blob([getChildText(opts)]); + return URL.createObjectURL(blob); + } + + if (opts.scheme === 'data') { + let mimetype = opts.child === 'iframe' ? 'text/html' + : 'text/javascript'; + return `data:${mimetype},${getChildText(opts)}`; + } + + throw(`unexpected URL scheme ${opts.scheme}`); +} + +function testWorkerChild(url) { + let w = new Worker(url); + return new Promise((resolve, reject) => { + w.onmessage = resolve; + w.onerror = evt => { + reject(evt.message); + } + }); +} + +function testIframeChild(url) { + let frame = document.createElement('iframe'); + frame.src = url; + document.body.appendChild(frame); + + return new Promise(resolve => { + addEventListener('message', evt => { + resolve(evt.data); + }, { once: true }); + }); +} + +function testURL(opts, url) { + if (opts.child === 'worker') { + return testWorkerChild(url); + } + + if (opts.child === 'iframe') { + return testIframeChild(url); + } + + throw(`unexpected child type ${opts.child}`); +} + +function checkChildController(opts) { + let url = makeURL(opts); + return testURL(opts, url); +} +</script> +</html> diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/local-url-inherit-controller-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/local-url-inherit-controller-worker.js new file mode 100644 index 00000000000..9d8955f111f --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/local-url-inherit-controller-worker.js @@ -0,0 +1,5 @@ +addEventListener('fetch', evt => { + if (evt.request.url.includes('dummy')) { + evt.respondWith(new Response('intercepted')); + } +}); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/unregister-then-register-new-script.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/unregister-then-register-new-script.https.html index 385430c2d8e..582132a742f 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/unregister-then-register-new-script.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/unregister-then-register-new-script.https.html @@ -90,9 +90,12 @@ async_test(function(t) { return registration.unregister(); }) .then(function() { + // Step 5.1 of Register clears the uninstall flag before fetching + // the script: + // + // https://w3c.github.io/ServiceWorker/#register-algorithm var promise = navigator.serviceWorker.register('this-will-404', { scope: scope }); - iframe.remove(); return promise; }) .then( @@ -100,17 +103,28 @@ async_test(function(t) { assert_unreached('register should reject the promise'); }, function() { + assert_equals(registration.installing, null, + 'registration.installing'); + assert_equals(registration.waiting, null, + 'registration.waiting'); + assert_equals(registration.active.scriptURL, normalizeURL(worker_url), + 'registration.active'); + iframe.remove(); return with_iframe(scope); }) .then(function(frame) { - assert_equals(frame.contentWindow.navigator.serviceWorker.controller, - null, - 'document should not load with a controller'); + assert_equals( + frame.contentWindow.navigator.serviceWorker.controller.scriptURL, + normalizeURL(worker_url), + 'the original worker should control a new document'); frame.remove(); + return registration.unregister(); + }) + .then(function() { t.done(); }) .catch(unreached_rejection(t)); -}, 'Registering a new script URL that 404s does not resurrect an ' + +}, 'Registering a new script URL that 404s does resurrect an ' + 'unregistered registration'); async_test(function(t) { @@ -131,9 +145,12 @@ async_test(function(t) { return registration.unregister(); }) .then(function() { + // Step 5.1 of Register clears the uninstall flag before firing + // the install event: + // + // https://w3c.github.io/ServiceWorker/#register-algorithm var promise = navigator.serviceWorker.register( 'resources/reject-install-worker.js', { scope: scope }); - iframe.remove(); return promise; }) .then(function(r) { @@ -141,12 +158,20 @@ async_test(function(t) { return wait_for_state(t, r.installing, 'redundant'); }) .then(function() { + assert_equals(registration.installing, null, + 'registration.installing'); + assert_equals(registration.waiting, null, + 'registration.waiting'); + assert_equals(registration.active.scriptURL, normalizeURL(worker_url), + 'registration.active'); + iframe.remove(); return with_iframe(scope); }) .then(function(frame) { - assert_equals(frame.contentWindow.navigator.serviceWorker.controller, - null, - 'document should not load with a controller'); + assert_equals( + frame.contentWindow.navigator.serviceWorker.controller.scriptURL, + normalizeURL(worker_url), + 'the original worker should control a new document'); frame.remove(); return registration.unregister(); }) @@ -154,6 +179,6 @@ async_test(function(t) { t.done(); }) .catch(unreached_rejection(t)); - }, 'Registering a new script URL that fails to install does not resurrect ' + + }, 'Registering a new script URL that fails to install does resurrect ' + 'an unregistered registration'); </script> diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/worker-interception.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/worker-interception.https.html index 3ec66a54b6e..4f14746d917 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/worker-interception.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/worker-interception.https.html @@ -81,10 +81,16 @@ promise_test(function(t) { }); }) .then(function(data) { - assert_equals(data, 'dummy-worker-script loaded'); + assert_unreached('intercepted cors response to a same-origin mode ' + + 'worker load should fail'); service_worker_unregister_and_done(t, scope); - }); - }, 'Verify worker script intercepted by cors response succeeds'); + }) + .catch(function(e) { + assert_true(true, 'intercepted cors response to a same-origin mode ' + + 'worker load should fail'); + service_worker_unregister_and_done(t, scope); + }); + }, 'Verify worker script intercepted by cors response fails'); promise_test(function(t) { var worker_url = 'resources/dummy-no-cors-worker.js'; diff --git a/tests/wpt/web-platform-tests/shadow-dom/DocumentOrShadowRoot-prototype-elementFromPoint.html b/tests/wpt/web-platform-tests/shadow-dom/DocumentOrShadowRoot-prototype-elementFromPoint.html new file mode 100644 index 00000000000..8cefa41ae35 --- /dev/null +++ b/tests/wpt/web-platform-tests/shadow-dom/DocumentOrShadowRoot-prototype-elementFromPoint.html @@ -0,0 +1,236 @@ +<!DOCTYPE html> +<html> + <head> + <title>Shadow DOM and CSSOM View: Document.prototype.elementFromPoint</title> + <meta name="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org"> + <meta name="assert" content="DocumentOrShadowRoot must have elementFromPoint and must return retarget the result against the context object."> + <link rel="help" href="https://www.w3.org/TR/cssom-view-1/#dom-document-elementfrompoint"> + <link rel="help" href="https://www.w3.org/TR/shadow-dom/#extensions-to-the-documentorshadowroot-mixin"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + </head> + <body> + <div id="container"></div> + <style> +test-element { display: block; width: 100px; height: 100px; } + </style> + <script> + +function pointInElement(node) { + let x = 5; + let y = 5; + do { + x += node.offsetLeft; + y += node.offsetTop; + node = node.offsetParent; + } while (node); + return [x, y]; +} + +const displayValues = ['inline', 'block', 'inline-block']; +var container = document.getElementById('container'); + +displayValues.forEach(function (displayValue) { + test(function () { + container.innerHTML = ''; + let host = document.createElement('test-element'); + host.style.display = displayValue; + let shadow = host.attachShadow({mode: 'closed'}); + shadow.innerHTML = 'hello'; + container.appendChild(host); + assert_equals(document.elementFromPoint(...pointInElement(host)), host); + assert_equals(shadow.elementFromPoint(...pointInElement(host)), host); + }, 'document.elementFromPoint and shadow.ElementFromPoint must return the shadow host of the hit-tested text node when the hit-tested text node is a direct child of the root and the host has display: ' + displayValue); +}); + +displayValues.forEach(function (displayValue) { + test(function () { + container.innerHTML = ''; + let host = document.createElement('test-element'); + host.style.display = displayValue; + let shadow = host.attachShadow({mode: 'closed'}); + shadow.innerHTML = '<slot></slot>'; + host.innerHTML = 'text'; + container.appendChild(host); + assert_equals(document.elementFromPoint(...pointInElement(host)), host); + assert_equals(shadow.elementFromPoint(...pointInElement(host)), host); + }, 'document.elementFromPoint and shadowRoot.elementFromPoint must return the shadow host when the hit-tested text node is assigned to a slot and the host has display: ' + displayValue); +}); + +displayValues.forEach(function (displayValue) { + test(function () { + container.innerHTML = ''; + let host = document.createElement('test-element'); + host.style.display = displayValue; + let shadow = host.attachShadow({mode: 'closed'}); + shadow.innerHTML = '<slot></slot>'; + host.innerHTML = '<span>text</span>'; + container.appendChild(host); + assert_equals(document.elementFromPoint(...pointInElement(host)), host.querySelector('span')); + assert_equals(shadow.elementFromPoint(...pointInElement(host)), host.querySelector('span')); + }, 'document.elementFromPoint and shadowRoot.elementFromPoint must return the element assigned to a slot when hit-tested text node under an element is assigned to a slot in the shadow tree and the shadow host of the slot has display: ' + displayValue); +}); + +displayValues.forEach(function (displayValue) { + test(function () { + container.innerHTML = ''; + let host = document.createElement('test-element'); + host.style.display = displayValue; + let shadow = host.attachShadow({mode: 'closed'}); + shadow.innerHTML = '<span>text</span>'; + container.appendChild(host); + assert_equals(document.elementFromPoint(...pointInElement(host)), host); + assert_equals(shadow.elementFromPoint(...pointInElement(host)), shadow.querySelector('span')); + }, 'document.elementFromPoint must return the shadow host of the hit-tested element under a shadow root and shadowRoot.elementFromPoint must return the element parent of the hit-tested text node under the point when the shadow host has display: ' + displayValue); +}); + +displayValues.forEach(function (displayValue) { + test(function () { + container.innerHTML = ''; + let host = document.createElement('test-element'); + host.style.display = displayValue; + let shadow = host.attachShadow({mode: 'closed'}); + shadow.innerHTML = '<slot>fallback</slot>'; + container.appendChild(host); + assert_equals(document.elementFromPoint(...pointInElement(host)), host); + assert_equals(shadow.elementFromPoint(...pointInElement(host)), shadow.querySelector('slot')); + }, 'document.elementFromPoint must return the shadow host and shadowRoot.elementFromPoint must return the slot parent of the fallback text when the hit-tested text node is a fallback content and the host has display: ' + displayValue); +}); + + + +displayValues.forEach(function (displayValue) { + test(function () { + container.innerHTML = ''; + let host = document.createElement('test-element'); + host.style.display = displayValue; + let shadow = host.attachShadow({mode: 'closed'}); + shadow.innerHTML = '<slot></slot>'; + host.innerHTML = '<inner-host>hello</inner-host>'; + container.appendChild(host); + + let innerHost = host.querySelector('inner-host'); + let innerShadow = innerHost.attachShadow({mode: 'closed'}); + innerShadow.innerHTML = '<slot></slot>'; + assert_equals(document.elementFromPoint(...pointInElement(host)), innerHost); + assert_equals(shadow.elementFromPoint(...pointInElement(host)), innerHost); + assert_equals(innerShadow.elementFromPoint(...pointInElement(host)), innerHost); + }, 'document.elementFromPoint, shadowRoot.elementFromPoint, innerShadow.elementFromPoint must return a child element assigned to a slot' + + ' when the hit-tested text node is assigned to a slot in the shadow tree of the child element and the outer shadow host has display: ' + displayValue); +}); + +displayValues.forEach(function (displayValue) { + test(function () { + container.innerHTML = ''; + let host = document.createElement('test-element'); + host.style.display = displayValue; + let shadow = host.attachShadow({mode: 'closed'}); + shadow.innerHTML = '<slot></slot>'; + host.innerHTML = '<inner-host></inner-host>'; + container.appendChild(host); + + let innerHost = host.querySelector('inner-host'); + let innerShadow = innerHost.attachShadow({mode: 'closed'}); + innerShadow.innerHTML = 'hello'; + assert_equals(document.elementFromPoint(...pointInElement(host)), innerHost); + assert_equals(shadow.elementFromPoint(...pointInElement(host)), innerHost); + assert_equals(innerShadow.elementFromPoint(...pointInElement(host)), innerHost); + }, 'document.elementFromPoint, shadowRoot.elementFromPoint, innerShadow.elementFromPoint must return a child element with its own shadow tree assigned to a slot' + + ' when the hit-tested text node is its direct child and the outer shadow host has display: ' + displayValue); +}); + +displayValues.forEach(function (displayValue) { + test(function () { + container.innerHTML = ''; + let host = document.createElement('test-element'); + host.style.display = displayValue; + let shadow = host.attachShadow({mode: 'closed'}); + shadow.innerHTML = '<slot></slot>'; + host.innerHTML = '<inner-host></inner-host>'; + container.appendChild(host); + + let innerHost = host.querySelector('inner-host'); + let innerShadow = innerHost.attachShadow({mode: 'closed'}); + innerShadow.innerHTML = '<span>hello</span>'; + + assert_equals(document.elementFromPoint(...pointInElement(host)), innerHost); + assert_equals(shadow.elementFromPoint(...pointInElement(host)), innerHost); + assert_equals(innerShadow.elementFromPoint(...pointInElement(host)), innerShadow.querySelector('span')); + }, 'document.elementFromPoint, shadowRoot.elementFromPoint must return a child element with its own shadow tree assigned to a slot' + + ' when the hit-tested text node is a child of another element and innerShadow.elementFromPoint must return the parent element of the hit-tested text node under it when the outer shadow host has display: ' + displayValue); +}); + +displayValues.forEach(function (displayValue) { + test(function () { + container.innerHTML = ''; + let host = document.createElement('test-element'); + host.style.display = displayValue; + let shadow = host.attachShadow({mode: 'closed'}); + shadow.innerHTML = 'hello'; + container.appendChild(host); + assert_array_equals(document.elementsFromPoint(...pointInElement(host)), [host, container, document.body, document.documentElement]); + assert_array_equals(shadow.elementsFromPoint(...pointInElement(host)), [host, container, document.body, document.documentElement]); + }, 'document.elementsFromPoint and shadow.elementsFromPoint must return the shadow host and its ancestors of the hit-tested text node when the hit-tested text node is a direct child of the root and the host has display: ' + displayValue); +}); + +displayValues.forEach(function (displayValue) { + test(function () { + container.innerHTML = ''; + let host = document.createElement('test-element'); + host.style.display = displayValue; + let shadow = host.attachShadow({mode: 'closed'}); + shadow.innerHTML = '<slot></slot>'; + host.innerHTML = 'text'; + container.appendChild(host); + assert_array_equals(document.elementsFromPoint(...pointInElement(host)), [host, container, document.body, document.documentElement]); + assert_array_equals(shadow.elementsFromPoint(...pointInElement(host)), [host, container, document.body, document.documentElement]); + },'document.elementsFromPoint and shadowRoot.elementsFromPoint must return the shadow host and its ancestors when the hit-tested text node is assigned to a slot and the host has display: ' + displayValue); +}); + +displayValues.forEach(function (displayValue) { + test(function () { + container.innerHTML = ''; + let host = document.createElement('test-element'); + host.style.display = displayValue; + let shadow = host.attachShadow({mode: 'closed'}); + shadow.innerHTML = '<div><slot></slot></div>'; + host.innerHTML = '<span>text</span>'; + container.appendChild(host); + assert_array_equals(document.elementsFromPoint(...pointInElement(host)), [host.querySelector('span'), host, container, document.body, document.documentElement]); + assert_array_equals(shadow.elementsFromPoint(...pointInElement(host)), [host.querySelector('span'), shadow.querySelector('div'), host, container, document.body, document.documentElement]); + }, 'document.elementsFromPoint and shadowRoot.elementsFromPoint must return the element assigned to a slot and its non-shadow ancestors when hit-tested text node under an element is assigned to a slot in the shadow tree and the shadow host of the slot has display: ' + displayValue); +}); + +displayValues.forEach(function (displayValue) { + test(function () { + container.innerHTML = ''; + let host = document.createElement('test-element'); + host.style.display = displayValue; + let shadow = host.attachShadow({mode: 'closed'}); + shadow.innerHTML = '<span>text</span>'; + container.appendChild(host); + assert_array_equals(document.elementsFromPoint(...pointInElement(host)), [host, container, document.body, document.documentElement]); + assert_array_equals(shadow.elementsFromPoint(...pointInElement(host)), [shadow.querySelector('span'), host, container, document.body, document.documentElement]); + }, 'document.elementsFromPoint must return the shadow host and its ancestors of the hit-tested element under a shadow root and' + + 'shadowRoot.elementsFromPoint must return the element parent and its non-shadow ancestors of the hit-tested text node under the point when the shadow host has display: ' + displayValue); +}); + +displayValues.forEach(function (displayValue) { + test(function () { + container.innerHTML = ''; + let host = document.createElement('test-element'); + host.style.display = displayValue; + let shadow = host.attachShadow({mode: 'closed'}); + shadow.innerHTML = '<div><slot>fallback</slot></div>'; + container.appendChild(host); + assert_array_equals(document.elementsFromPoint(...pointInElement(host)), [host, container, document.body, document.documentElement]); + assert_array_equals(shadow.elementsFromPoint(...pointInElement(host)), [shadow.querySelector('slot'), shadow.querySelector('div'), host, container, document.body, document.documentElement]); + }, 'document.elementsFromPoint must return the shadow host and its ancestors and shadowRoot.elementsFromPoint must return the slot parent of the fallback text and its non-shadow ancestors when the hit-tested text node is a fallback content and the host has display: ' + displayValue); +}); + +container.innerHTML = ''; + + </script> + </body> +</html> + diff --git a/tests/wpt/web-platform-tests/shadow-dom/event-composed-path-with-related-target.html b/tests/wpt/web-platform-tests/shadow-dom/event-composed-path-with-related-target.html index 675a7d7b12f..f6dff13a93e 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/event-composed-path-with-related-target.html +++ b/tests/wpt/web-platform-tests/shadow-dom/event-composed-path-with-related-target.html @@ -131,14 +131,12 @@ test(() => { ['sr2', 'target', 'host1', path], ['host2', 'host2', 'host1', path], ['sr1', 'host2', 'host1', path]]); -}, 'Event path for an event with a relatedTarget. relaterTarget is a shadow-including ancestor of target.'); +}, 'Event path for an event with a relatedTarget. relatedTarget is a shadow-including ancestor of target.'); test(() => { let n = createTestTree(test4); let log = dispatchEventWithLog(n, n.host1, new FocusEvent('my-focus', { bubbles: true, composed: true, relatedTarget: n.target })); - let path = ['host1', 'test4']; - assert_event_path_equals(log, [['host1', 'host1', 'host1', path], - ['test4', 'host1', 'host1', path]]); + assert_event_path_equals(log, []); }, 'Event path for an event with a relatedTarget. target is a shadow-including ancestor of relatedTarget.'); </script> diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/extensions-to-event-interface/event-path-001.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/extensions-to-event-interface/event-path-001.html deleted file mode 100644 index 455ee40c383..00000000000 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/extensions-to-event-interface/event-path-001.html +++ /dev/null @@ -1,56 +0,0 @@ -<!DOCTYPE html> -<!-- -Distributed under both the W3C Test Suite License [1] and the W3C -3-clause BSD License [2]. To contribute to a W3C Test Suite, see the -policies and contribution forms [3]. - -[1] http://www.w3.org/Consortium/Legal/2008/04-testsuite-license -[2] http://www.w3.org/Consortium/Legal/2008/03-bsd-license -[3] http://www.w3.org/2004/10/27-testcases ---> -<html> -<head> -<title>Shadow DOM Test - event path</title> -<link rel="author" title="Kazuhito Hokamura" href="mailto:k.hokamura@gmail.com"> -<link rel="help" href="https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#extensions-to-event"> -<meta name="assert" content="Extensions to Event Interface: event.composedPath() cross the shadow boundary"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="../../../../html/resources/common.js"></script> -<script src="../../../resources/shadow-dom-utils.js"></script> -</head> -<body> -<div id="log"></div> -<script> -var t = async_test('event.composedPath() cross the shadow boundary'); - -t.step(unit(function(ctx) { - var doc = newRenderedHTMLDocument(ctx); - var host = doc.createElement('div'); - - var shadowRoot = host.attachShadow({mode: 'open'}); - var child = doc.createElement('div'); - - doc.body.appendChild(host); - shadowRoot.appendChild(child); - - child.addEventListener('click', t.step_func(function(e) { - assert_equals(e.composedPath().length, 7, 'composedPath().length'); - assert_equals(e.composedPath()[0], child, 'composedPath()[0] should be child'); - assert_equals(e.composedPath()[1], shadowRoot, 'composedPath()[1] should be shadowRoot'); - assert_equals(e.composedPath()[2], host, 'composedPath()[2] should be host'); - assert_equals(e.composedPath()[3], doc.body, 'composedPath()[3] should be body'); - assert_equals(e.composedPath()[4], doc.documentElement, 'composedPath()[4] should be html'); - assert_equals(e.composedPath()[5], doc, 'composedPath()[5] should be document'); - assert_equals(e.composedPath()[6], ctx.iframes[0].contentWindow, 'composedPath()[6] should be window'); - - t.done(); - })); - - var event = doc.createEvent('HTMLEvents'); - event.initEvent('click', true, false); - child.dispatchEvent(event); -})); -</script> -</body> -</html> diff --git a/tests/wpt/web-platform-tests/svg/OWNERS b/tests/wpt/web-platform-tests/svg/OWNERS index 54ae635434f..e815ad8af64 100644 --- a/tests/wpt/web-platform-tests/svg/OWNERS +++ b/tests/wpt/web-platform-tests/svg/OWNERS @@ -3,3 +3,4 @@ @boggydigital @ewilligers @AmeliaBR +@svgeesus diff --git a/tests/wpt/web-platform-tests/svg/types/scripted/SVGAnimatedAngle.html b/tests/wpt/web-platform-tests/svg/types/scripted/SVGAnimatedAngle.html new file mode 100644 index 00000000000..5fdc9f3cffb --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/types/scripted/SVGAnimatedAngle.html @@ -0,0 +1,33 @@ +<!DOCTYPE HTML> +<title>SVGAnimatedAngle interface - utilizing the orientAngle property of SVGMarkerElement</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +test(function() { + // This test checks the SVGAnimatedAngle API - utilizing the orientAngle property of SVGMarkerElement. + + var markerElement = document.createElementNS("http://www.w3.org/2000/svg", "marker"); + + // Check initial orientAngle value. + assert_true(markerElement.orientAngle instanceof SVGAnimatedAngle); + assert_true(markerElement.orientAngle.baseVal instanceof SVGAngle); + assert_equals(markerElement.orientAngle.baseVal.value, 0); + + // Check that angles are dynamic, caching value in a local variable and modifying it, should take effect. + var numRef = markerElement.orientAngle.baseVal; + numRef.value = 100; + assert_equals(numRef.value, 100); + assert_equals(markerElement.orientAngle.baseVal.value, 100); + + // Check that assigning to baseVal has no effect, as no setter is defined. + markerElement.orientAngle.baseVal = -1; + assert_equals(markerElement.orientAngle.baseVal.value, 100); + markerElement.orientAngle.baseVal = 'aString'; + assert_equals(markerElement.orientAngle.baseVal.value, 100); + markerElement.orientAngle.baseVal = markerElement; + assert_equals(markerElement.orientAngle.baseVal.value, 100); + + // Check that the orientAngle baseVal type has not been changed. + assert_true(markerElement.orientAngle.baseVal instanceof SVGAngle); +}); +</script> diff --git a/tests/wpt/web-platform-tests/svg/types/scripted/SVGAnimatedBoolean.html b/tests/wpt/web-platform-tests/svg/types/scripted/SVGAnimatedBoolean.html new file mode 100644 index 00000000000..ba52922ed73 --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/types/scripted/SVGAnimatedBoolean.html @@ -0,0 +1,45 @@ +<!DOCTYPE HTML> +<title>SVGAnimatedBoolean interface - utilizing the preserveAlpha property of SVGFEConvolveMatrixElement</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +test(function() { + // This test checks the SVGAnimatedBoolean API - utilizing the preserveAlpha property of SVGFEConvolveMatrixElement. + + var convElement = document.createElementNS("http://www.w3.org/2000/svg", "feConvolveMatrix"); + // Check initial preserveAlpha value. + assert_false(convElement.preserveAlpha.baseVal); + + // Set value to true. + convElement.preserveAlpha.baseVal = true; + assert_true(convElement.preserveAlpha.baseVal); + + // Caching baseVal in local variable. + var baseVal = convElement.preserveAlpha.baseVal; + assert_true(baseVal); + + // Modify local baseVal variable to false. + baseVal = false; + + // Assure that convElement.preserveAlpha has not been changed, but the local baseVal variable. + assert_false(baseVal); + assert_true(convElement.preserveAlpha.baseVal); + + // Check assigning values of various types. + // ECMA-262, 9.2, "ToBoolean" + convElement.preserveAlpha.baseVal = convElement.preserveAlpha; + assert_true(convElement.preserveAlpha.baseVal); + + convElement.preserveAlpha.baseVal = null; + assert_false(convElement.preserveAlpha.baseVal); + + convElement.preserveAlpha.baseVal = 'aString'; + assert_true(convElement.preserveAlpha.baseVal); + + convElement.preserveAlpha.baseVal = false; + assert_false(convElement.preserveAlpha.baseVal); + + convElement.preserveAlpha.baseVal = convElement; + assert_true(convElement.preserveAlpha.baseVal); +}); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/svg/types/scripted/SVGAnimatedInteger.html b/tests/wpt/web-platform-tests/svg/types/scripted/SVGAnimatedInteger.html new file mode 100644 index 00000000000..849c13d3671 --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/types/scripted/SVGAnimatedInteger.html @@ -0,0 +1,35 @@ +<!DOCTYPE HTML> +<title>SVGAnimatedInteger interface - utilizing the targetX property of SVGFEConvolveMatrix</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +test(function() { + // This test checks the SVGAnimatedInteger API - utilizing the targetX property of SVGFEConvolveMatrix. + + var feConvolveMatrix = document.createElementNS("http://www.w3.org/2000/svg", "feConvolveMatrix"); + + // Check initial targetX value. + assert_true(feConvolveMatrix.targetX instanceof SVGAnimatedInteger); + assert_equals(typeof(feConvolveMatrix.targetX.baseVal), "number"); + assert_equals(feConvolveMatrix.targetX.baseVal, 0); + + // Check that integers are static, caching value in a local variable and modifying it, should have no effect. + var numRef = feConvolveMatrix.targetX.baseVal; + numRef = 100; + assert_equals(numRef, 100); + assert_equals(feConvolveMatrix.targetX.baseVal, 0); + + // Check assigning various valid and invalid values. + feConvolveMatrix.targetX.baseVal = -1; + assert_equals(feConvolveMatrix.targetX.baseVal, -1); // Negative values are allowed from SVG DOM, but should lead to an error when rendering (disable the filter) + feConvolveMatrix.targetX.baseVal = 300; + assert_equals(feConvolveMatrix.targetX.baseVal, 300); + // ECMA-262, 9.5, "ToInt32" + feConvolveMatrix.targetX.baseVal = 'aString'; + assert_equals(feConvolveMatrix.targetX.baseVal, 0); + feConvolveMatrix.targetX.baseVal = feConvolveMatrix; + assert_equals(feConvolveMatrix.targetX.baseVal, 0); + feConvolveMatrix.targetX.baseVal = 300; + assert_equals(feConvolveMatrix.targetX.baseVal, 300); +}); +</script> diff --git a/tests/wpt/web-platform-tests/svg/types/scripted/SVGAnimatedLength.html b/tests/wpt/web-platform-tests/svg/types/scripted/SVGAnimatedLength.html new file mode 100644 index 00000000000..788849d8e35 --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/types/scripted/SVGAnimatedLength.html @@ -0,0 +1,33 @@ +<!DOCTYPE HTML> +<title>SVGAnimatedLength interface - utilizing the width property of SVGRectElement</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +test(function() { + // This test checks the SVGAnimatedLength API - utilizing the width property of SVGRectElement. + + var rectElement = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + + // Check initial width value. + assert_true(rectElement.width instanceof SVGAnimatedLength); + assert_true(rectElement.width.baseVal instanceof SVGLength); + assert_equals(rectElement.width.baseVal.value, 0); + + // Check that lengths are dynamic, caching value in a local variable and modifying it, should take effect. + var numRef = rectElement.width.baseVal; + numRef.value = 100; + assert_equals(numRef.value, 100); + assert_equals(rectElement.width.baseVal.value, 100); + + // Check that assigning to baseVal has no effect, as no setter is defined. + rectElement.width.baseVal = -1; + assert_equals(rectElement.width.baseVal.value, 100); + rectElement.width.baseVal = 'aString'; + assert_equals(rectElement.width.baseVal.value, 100); + rectElement.width.baseVal = rectElement; + assert_equals(rectElement.width.baseVal.value, 100); + + // Check that the width baseVal type has not been changed. + assert_true(rectElement.width.baseVal instanceof SVGLength); +}); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/svg/types/scripted/SVGAnimatedLengthList.html b/tests/wpt/web-platform-tests/svg/types/scripted/SVGAnimatedLengthList.html new file mode 100644 index 00000000000..763d804642d --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/types/scripted/SVGAnimatedLengthList.html @@ -0,0 +1,34 @@ +<!DOCTYPE HTML> +<title>SVGAnimatedLengthList interface - utilizing the dx property of SVGTextElement</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +test(function() { + // This test checks the SVGAnimatedLengthList API - utilizing the dx property of SVGTextElement. + + var textElement = document.createElementNS("http://www.w3.org/2000/svg", "text"); + textElement.setAttribute("dx", "50"); + + // Check initial dx value. + assert_true(textElement.dx instanceof SVGAnimatedLengthList); + assert_true(textElement.dx.baseVal instanceof SVGLengthList); + assert_equals(textElement.dx.baseVal.getItem(0).value, 50); + + // Check that length lists are dynamic, caching value in a local variable and modifying it, should take effect. + var numRef = textElement.dx.baseVal; + numRef.getItem(0).value = 100; + assert_equals(numRef.getItem(0).value, 100); + assert_equals(textElement.dx.baseVal.getItem(0).value, 100); + + // Check that assigning to baseVal has no effect, as no setter is defined. + textElement.dx.baseVal = -1; + assert_equals(textElement.dx.baseVal.getItem(0).value, 100); + textElement.dx.baseVal = 'aString'; + assert_equals(textElement.dx.baseVal.getItem(0).value, 100); + textElement.dx.baseVal = textElement; + assert_equals(textElement.dx.baseVal.getItem(0).value, 100); + + // Check that the dx baseVal type has not been changed. + assert_true(textElement.dx.baseVal instanceof SVGLengthList); +}); +</script> diff --git a/tests/wpt/web-platform-tests/svg/types/scripted/SVGAnimatedNumber.html b/tests/wpt/web-platform-tests/svg/types/scripted/SVGAnimatedNumber.html new file mode 100644 index 00000000000..a1697cbf926 --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/types/scripted/SVGAnimatedNumber.html @@ -0,0 +1,42 @@ +<!DOCTYPE HTML> +<title>SVGAnimatedNumber interface - utilizing the surfaceScale property of SVGFESpecularLightingElement</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +test(function() { + // This test checks the SVGAnimatedNumber API - utilizing the surfaceScale property of SVGFESpecularLightingElement. + + var feSpecularLightingElement = document.createElementNS("http://www.w3.org/2000/svg", "feSpecularLighting"); + + // Check initial surfaceScale value. + assert_true(feSpecularLightingElement.surfaceScale instanceof SVGAnimatedNumber); + assert_equals(typeof(feSpecularLightingElement.surfaceScale.baseVal), "number"); + assert_equals(feSpecularLightingElement.surfaceScale.baseVal, 1); + + // Check that integers are static, caching value in a local variable and modifying it, should have no effect. + var numRef = feSpecularLightingElement.surfaceScale.baseVal; + numRef = 100; + assert_equals(numRef, 100); + assert_equals(feSpecularLightingElement.surfaceScale.baseVal, 1); + + // Check assigning various valid and invalid values. + feSpecularLightingElement.surfaceScale.baseVal = -1; // Negative values are allowed from SVG DOM, but should lead to an error when rendering (disable the filter) + assert_equals(feSpecularLightingElement.surfaceScale.baseVal, -1); + feSpecularLightingElement.surfaceScale.baseVal = 300; + assert_equals(feSpecularLightingElement.surfaceScale.baseVal, 300); + + // ECMA-262, 9.3, "ToNumber" + assert_throws(new TypeError(), function() { feSpecularLightingElement.surfaceScale.baseVal = 'aString'; }); + assert_equals(feSpecularLightingElement.surfaceScale.baseVal, 300); + feSpecularLightingElement.surfaceScale.baseVal = 0; + assert_equals(feSpecularLightingElement.surfaceScale.baseVal, 0); + assert_throws(new TypeError(), function() { feSpecularLightingElement.surfaceScale.baseVal = NaN; }); + assert_equals(feSpecularLightingElement.surfaceScale.baseVal, 0); + assert_throws(new TypeError(), function() { feSpecularLightingElement.surfaceScale.baseVal = Infinity; }); + assert_equals(feSpecularLightingElement.surfaceScale.baseVal, 0); + assert_throws(new TypeError(), function() { feSpecularLightingElement.surfaceScale.baseVal = feSpecularLightingElement; }); + assert_equals(feSpecularLightingElement.surfaceScale.baseVal, 0); + feSpecularLightingElement.surfaceScale.baseVal = 300; + assert_equals(feSpecularLightingElement.surfaceScale.baseVal, 300); +}); +</script> diff --git a/tests/wpt/web-platform-tests/svg/types/scripted/SVGAnimatedNumberList.html b/tests/wpt/web-platform-tests/svg/types/scripted/SVGAnimatedNumberList.html new file mode 100644 index 00000000000..5737cd4d318 --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/types/scripted/SVGAnimatedNumberList.html @@ -0,0 +1,34 @@ +<!DOCTYPE HTML> +<title>SVGAnimatedNumberList interface - utilizing the rotate property of SVGTextElement</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +test(function() { + // This test checks the SVGAnimatedNumberList API - utilizing the rotate property of SVGTextElement. + + var textElement = document.createElementNS("http://www.w3.org/2000/svg", "text"); + textElement.setAttribute("rotate", "50"); + + // Check initial rotate value. + assert_true(textElement.rotate instanceof SVGAnimatedNumberList); + assert_true(textElement.rotate.baseVal instanceof SVGNumberList); + assert_equals(textElement.rotate.baseVal.getItem(0).value, 50); + + // Check that number lists are dynamic, caching value in a local variable and modifying it, should take effect. + var numRef = textElement.rotate.baseVal; + numRef.getItem(0).value = 100; + assert_equals(numRef.getItem(0).value, 100); + assert_equals(textElement.rotate.baseVal.getItem(0).value, 100); + + // Check that assigning to baseVal has no effect, as no setter is defined. + textElement.rotate.baseVal = -1; + assert_equals(textElement.rotate.baseVal.getItem(0).value, 100); + textElement.rotate.baseVal = 'aString'; + assert_equals(textElement.rotate.baseVal.getItem(0).value, 100); + textElement.rotate.baseVal = textElement; + assert_equals(textElement.rotate.baseVal.getItem(0).value, 100); + + // Check that the rotate baseVal type has not been changed. + assert_true(textElement.rotate.baseVal instanceof SVGNumberList); +}); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/svg/types/scripted/SVGAnimatedPreserveAspectRatio.html b/tests/wpt/web-platform-tests/svg/types/scripted/SVGAnimatedPreserveAspectRatio.html new file mode 100644 index 00000000000..80b96e99697 --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/types/scripted/SVGAnimatedPreserveAspectRatio.html @@ -0,0 +1,41 @@ +<!DOCTYPE HTML> +<title>SVGAnimatedPreserveAspectRatio interface - utilizing the preserveAspectRatio property of SVGSVGElement</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +test(function() { + // This test checks the SVGAnimatedPreserveAspectRatio API - utilizing the preserveAspectRatio property of SVGSVGElement. + + var svgElement = document.createElementNS("http://www.w3.org/2000/svg", "svg"); + + // Check initial preserveAspectRatio value. + assert_true(svgElement.preserveAspectRatio instanceof SVGAnimatedPreserveAspectRatio); + assert_true(svgElement.preserveAspectRatio.baseVal instanceof SVGPreserveAspectRatio); + assert_equals(svgElement.preserveAspectRatio.baseVal.align, SVGPreserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMIDYMID); + assert_equals(svgElement.preserveAspectRatio.baseVal.meetOrSlice, SVGPreserveAspectRatio.SVG_MEETORSLICE_MEET); + + // Check that preserveAspectRatios are dynamic, caching value in a local variable and modifying it, should take effect; + var aspectRef = svgElement.preserveAspectRatio.baseVal; + aspectRef.align = SVGPreserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMAXYMIN; + aspectRef.meetOrSlice = SVGPreserveAspectRatio.SVG_MEETORSLICE_SLICE; + assert_equals(aspectRef.align, SVGPreserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMAXYMIN); + assert_equals(aspectRef.meetOrSlice, SVGPreserveAspectRatio.SVG_MEETORSLICE_SLICE); + assert_equals(svgElement.preserveAspectRatio.baseVal.align, SVGPreserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMAXYMIN); + assert_equals(svgElement.preserveAspectRatio.baseVal.meetOrSlice, SVGPreserveAspectRatio.SVG_MEETORSLICE_SLICE); + + // Check that assigning to baseVal has no effect, as no setter is defined. + // And the preserveAspectRatio align/meetOrSlice remained xMaxYMin/slice. + svgElement.preserveAspectRatio.baseVal = -1; + assert_equals(svgElement.preserveAspectRatio.baseVal.align, SVGPreserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMAXYMIN); + assert_equals(svgElement.preserveAspectRatio.baseVal.meetOrSlice, SVGPreserveAspectRatio.SVG_MEETORSLICE_SLICE); + svgElement.preserveAspectRatio.baseVal = 'aString'; + assert_equals(svgElement.preserveAspectRatio.baseVal.align, SVGPreserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMAXYMIN); + assert_equals(svgElement.preserveAspectRatio.baseVal.meetOrSlice, SVGPreserveAspectRatio.SVG_MEETORSLICE_SLICE); + svgElement.preserveAspectRatio.baseVal = svgElement; + assert_equals(svgElement.preserveAspectRatio.baseVal.align, SVGPreserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMAXYMIN); + assert_equals(svgElement.preserveAspectRatio.baseVal.meetOrSlice, SVGPreserveAspectRatio.SVG_MEETORSLICE_SLICE); + + // Check that the preserveAspectRatio baseVal type has not been changed. + assert_true(svgElement.preserveAspectRatio.baseVal instanceof SVGPreserveAspectRatio); +}); +</script> diff --git a/tests/wpt/web-platform-tests/svg/types/scripted/SVGAnimatedRect.html b/tests/wpt/web-platform-tests/svg/types/scripted/SVGAnimatedRect.html new file mode 100644 index 00000000000..011f44eee81 --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/types/scripted/SVGAnimatedRect.html @@ -0,0 +1,33 @@ +<!DOCTYPE HTML> +<title>SVGAnimatedRect interface - utilizing the viewBox property of SVGSVGElement</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +test(function() { + // This test checks the SVGAnimatedRect API - utilizing the viewBox property of SVGSVGElement. + + var svgElement = document.createElementNS("http://www.w3.org/2000/svg", "svg"); + + // Check initial viewBox value. + assert_true(svgElement.viewBox instanceof SVGAnimatedRect); + assert_true(svgElement.viewBox.baseVal instanceof SVGRect); + assert_equals(svgElement.viewBox.baseVal.x, 0); + + // Check that rects are dynamic, caching value in a local variable and modifying it, should take effect. + var numRef = svgElement.viewBox.baseVal; + numRef.x = 100; + assert_equals(numRef.x, 100); + assert_equals(svgElement.viewBox.baseVal.x, 100); + + // Check that assigning to baseVal has no effect, as no setter is defined. + svgElement.viewBox.baseVal = -1; + assert_equals(svgElement.viewBox.baseVal.x, 100); + svgElement.viewBox.baseVal = 'aString'; + assert_equals(svgElement.viewBox.baseVal.x, 100); + svgElement.viewBox.baseVal = svgElement; + assert_equals(svgElement.viewBox.baseVal.x, 100); + + // Check that the viewBox baseVal type has not been changed. + assert_true(svgElement.viewBox.baseVal instanceof SVGRect); +}); +</script> diff --git a/tests/wpt/web-platform-tests/tools/lint/lint.py b/tests/wpt/web-platform-tests/tools/lint/lint.py index 3228524353b..c1a6ce02d1e 100644 --- a/tests/wpt/web-platform-tests/tools/lint/lint.py +++ b/tests/wpt/web-platform-tests/tools/lint/lint.py @@ -722,7 +722,8 @@ def changed_files(wpt_root): def lint_paths(kwargs, wpt_root): if kwargs.get("paths"): - paths = kwargs["paths"] + r = os.path.realpath(wpt_root) + paths = [os.path.relpath(os.path.realpath(x), r) for x in kwargs["paths"]] elif kwargs["all"]: paths = list(all_filesystem_paths(wpt_root)) else: diff --git a/tests/wpt/web-platform-tests/tools/lint/tests/test_lint.py b/tests/wpt/web-platform-tests/tools/lint/tests/test_lint.py index e3e530f172e..9375e2f7560 100644 --- a/tests/wpt/web-platform-tests/tools/lint/tests/test_lint.py +++ b/tests/wpt/web-platform-tests/tools/lint/tests/test_lint.py @@ -390,7 +390,10 @@ def test_main_with_args(): sys.argv = ['./lint', 'a', 'b', 'c'] with _mock_lint('lint', return_value=True) as m: lint_mod.main(**vars(create_parser().parse_args())) - m.assert_called_once_with(repo_root, ['a', 'b', 'c'], "normal") + m.assert_called_once_with(repo_root, + [os.path.relpath(os.path.join(os.getcwd(), x), repo_root) + for x in ['a', 'b', 'c']], + "normal") finally: sys.argv = orig_argv diff --git a/tests/wpt/web-platform-tests/tools/pytest.ini b/tests/wpt/web-platform-tests/tools/pytest.ini index ecef9b7173d..b52e465598a 100644 --- a/tests/wpt/web-platform-tests/tools/pytest.ini +++ b/tests/wpt/web-platform-tests/tools/pytest.ini @@ -1,2 +1,3 @@ [pytest] norecursedirs = .* {arch} *.egg html5lib third_party pywebsocket six wpt wptrunner +xfail_strict=true diff --git a/tests/wpt/web-platform-tests/tools/tox.ini b/tests/wpt/web-platform-tests/tools/tox.ini index 159a934eb1a..1db1b4ebb7a 100644 --- a/tests/wpt/web-platform-tests/tools/tox.ini +++ b/tests/wpt/web-platform-tests/tools/tox.ini @@ -16,7 +16,7 @@ deps = pytest-catchlog commands = - pytest --cov + pytest --cov {posargs} flake8 passenv = diff --git a/tests/wpt/web-platform-tests/tools/wpt/tests/test_wpt.py b/tests/wpt/web-platform-tests/tools/wpt/tests/test_wpt.py index 127ed188f3e..fade7024f4a 100644 --- a/tests/wpt/web-platform-tests/tools/wpt/tests/test_wpt.py +++ b/tests/wpt/web-platform-tests/tools/wpt/tests/test_wpt.py @@ -1,7 +1,10 @@ +import errno import os import shutil import socket import subprocess +import sys +import tempfile import time import urllib2 @@ -10,8 +13,42 @@ import pytest from tools.wpt import wpt -pytestmark = pytest.mark.skipif(os.name == "nt", - reason="Tests currently don't work on Windows for path reasons") +def is_port_8000_in_use(): + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + try: + s.bind(("127.0.0.1", 8000)) + except socket.error as e: + if e.errno == errno.EADDRINUSE: + return True + else: + raise e + finally: + s.close() + return False + + +@pytest.fixture(scope="module") +def manifest_dir(): + def update_manifest(): + with pytest.raises(SystemExit) as excinfo: + wpt.main(argv=["manifest", "--no-download", "--path", os.path.join(path, "MANIFEST.json")]) + assert excinfo.value.code == 0 + + if os.environ.get('TRAVIS') == "true": + path = "~/meta" + update_manifest() + yield path + else: + try: + path = tempfile.mkdtemp() + old_path = os.path.join(wpt.localpaths.repo_root, "MANIFEST.json") + if os.path.exists(os.path.join(wpt.localpaths.repo_root, "MANIFEST.json")): + shutil.copyfile(old_path, os.path.join(path, "MANIFEST.json")) + update_manifest() + yield path + finally: + shutil.rmtree(path) + def test_missing(): with pytest.raises(SystemExit): @@ -27,11 +64,17 @@ def test_help(): @pytest.mark.slow -@pytest.mark.system_dependent @pytest.mark.remote_network -def test_run_firefox(): +@pytest.mark.xfail(sys.platform == "darwin", + reason="https://github.com/w3c/web-platform-tests/issues/9090") +@pytest.mark.xfail(sys.platform == "win32", + reason="Tests currently don't work on Windows for path reasons") +def test_run_firefox(manifest_dir): # TODO: It seems like there's a bug in argparse that makes this argument order required # should try to work around that + if is_port_8000_in_use(): + pytest.skip("port 8000 already in use") + os.environ["MOZ_HEADLESS"] = "1" try: fx_path = os.path.join(wpt.localpaths.repo_root, "_venv", "firefox") @@ -39,7 +82,7 @@ def test_run_firefox(): shutil.rmtree(fx_path) with pytest.raises(SystemExit) as excinfo: wpt.main(argv=["run", "--no-pause", "--install-browser", "--yes", - "--metadata", "~/meta/", + "--metadata", manifest_dir, "firefox", "/dom/nodes/Element-tagName.html"]) assert os.path.exists(fx_path) shutil.rmtree(fx_path) @@ -49,17 +92,23 @@ def test_run_firefox(): @pytest.mark.slow -@pytest.mark.system_dependent -def test_run_chrome(): +@pytest.mark.xfail(sys.platform == "win32", + reason="Tests currently don't work on Windows for path reasons") +def test_run_chrome(manifest_dir): + if is_port_8000_in_use(): + pytest.skip("port 8000 already in use") + with pytest.raises(SystemExit) as excinfo: wpt.main(argv=["run", "--yes", "--no-pause", "--binary-arg", "headless", - "--metadata", "~/meta/", + "--metadata", manifest_dir, "chrome", "/dom/nodes/Element-tagName.html"]) assert excinfo.value.code == 0 @pytest.mark.slow @pytest.mark.remote_network +@pytest.mark.xfail(sys.platform == "win32", + reason="Tests currently don't work on Windows for path reasons") def test_install_chromedriver(): chromedriver_path = os.path.join(wpt.localpaths.repo_root, "_venv", "bin", "chromedriver") if os.path.exists(chromedriver_path): @@ -73,6 +122,10 @@ def test_install_chromedriver(): @pytest.mark.slow @pytest.mark.remote_network +@pytest.mark.xfail(sys.platform == "darwin", + reason="https://github.com/w3c/web-platform-tests/issues/9090") +@pytest.mark.xfail(sys.platform == "win32", + reason="Tests currently don't work on Windows for path reasons") def test_install_firefox(): fx_path = os.path.join(wpt.localpaths.repo_root, "_venv", "firefox") if os.path.exists(fx_path): @@ -84,6 +137,8 @@ def test_install_firefox(): shutil.rmtree(fx_path) +@pytest.mark.xfail(sys.platform == "win32", + reason="Tests currently don't work on Windows for path reasons") def test_files_changed(capsys): commit = "9047ac1d9f51b1e9faa4f9fad9c47d109609ab09" with pytest.raises(SystemExit) as excinfo: @@ -120,27 +175,26 @@ def test_files_changed_ignore_rules(): @pytest.mark.slow # this updates the manifest -@pytest.mark.system_dependent -def test_tests_affected(capsys): +@pytest.mark.xfail(sys.platform == "win32", + reason="Tests currently don't work on Windows for path reasons") +def test_tests_affected(capsys, manifest_dir): # This doesn't really work properly for random commits because we test the files in # the current working directory for references to the changed files, not the ones at # that specific commit. But we can at least test it returns something sensible commit = "9047ac1d9f51b1e9faa4f9fad9c47d109609ab09" with pytest.raises(SystemExit) as excinfo: - wpt.main(argv=["tests-affected", "--metadata", "~/meta/", "%s~..%s" % (commit, commit)]) + wpt.main(argv=["tests-affected", "--metadata", manifest_dir, "%s~..%s" % (commit, commit)]) assert excinfo.value.code == 0 out, err = capsys.readouterr() assert "html/browsers/offline/appcache/workers/appcache-worker.html" in out @pytest.mark.slow -@pytest.mark.system_dependent +@pytest.mark.xfail(sys.platform == "win32", + reason="Tests currently don't work on Windows for path reasons") def test_serve(): - def test(): - s = socket.socket() - s.connect(("127.0.0.1", 8000)) - with pytest.raises(socket.error): - test() + if is_port_8000_in_use(): + pytest.skip("port 8000 already in use") p = subprocess.Popen([os.path.join(wpt.localpaths.repo_root, "wpt"), "serve"], preexec_fn=os.setsid) @@ -148,8 +202,10 @@ def test_serve(): start = time.time() try: while True: + if p.poll() is not None: + assert False, "server not running" if time.time() - start > 60: - assert False + assert False, "server did not start responding within 60s" try: resp = urllib2.urlopen("http://web-platform.test:8000") print resp diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/README.rst b/tests/wpt/web-platform-tests/tools/wptrunner/README.rst index 834e07ee41d..4890e3a6e03 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/README.rst +++ b/tests/wpt/web-platform-tests/tools/wptrunner/README.rst @@ -197,7 +197,7 @@ language e.g.:: if debug and (platform == "linux" or platform == "osx"): FAIL -For test expectations the avaliable variables are those in the +For test expectations the available variables are those in the `run_info` which for desktop are `version`, `os`, `bits`, `processor`, `debug` and `product`. diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_sauce.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_sauce.txt index 7b828f84b08..43a7881b64f 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_sauce.txt +++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_sauce.txt @@ -1,2 +1,3 @@ mozprocess >= 0.19 selenium >= 3.3.0 +requests diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/tox.ini b/tests/wpt/web-platform-tests/tools/wptrunner/tox.ini index fa6aa3f7129..9be8c0e422a 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/tox.ini +++ b/tests/wpt/web-platform-tests/tools/wptrunner/tox.ini @@ -2,19 +2,21 @@ xfail_strict=true [tox] -envlist = {py27,pypy}-{base,chrome,firefox,servo},py27-flake8 +envlist = {py27,pypy}-{base,chrome,firefox,sauce,servo},py27-flake8 [testenv] deps = pytest>=2.9 pytest-cov pytest-xdist + mock -r{toxinidir}/requirements.txt chrome: -r{toxinidir}/requirements_chrome.txt firefox: -r{toxinidir}/requirements_firefox.txt + sauce: -r{toxinidir}/requirements_sauce.txt servo: -r{toxinidir}/requirements_servo.txt -commands = pytest --cov +commands = pytest {posargs:--cov} [testenv:py27-flake8] # flake8 versions should be kept in sync across tools/tox.ini, tools/wpt/tox.ini, and tools/wptrunner/tox.ini diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/sauce.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/sauce.py index 25eeb5684c2..4c1be1c0e22 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/sauce.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/sauce.py @@ -156,10 +156,28 @@ class SauceConnect(): "web-platform.test", "*.web-platform.test" ]) - while not os.path.exists('./sauce_is_ready') and not self.sc_process.poll(): - time.sleep(5) - if self.sc_process.returncode is not None and self.sc_process.returncode > 0: + # Timeout config vars + each_sleep_secs = 1 + max_wait = 30 + kill_wait = 5 + + tot_wait = 0 + while not os.path.exists('./sauce_is_ready') and self.sc_process.poll() is None: + if tot_wait >= max_wait: + self.sc_process.terminate() + while self.sc_process.poll() is None: + time.sleep(each_sleep_secs) + tot_wait += each_sleep_secs + if tot_wait >= (max_wait + kill_wait): + self.sc_process.kill() + break + raise SauceException("Sauce Connect Proxy was not ready after %d seconds" % tot_wait) + + time.sleep(each_sleep_secs) + tot_wait += each_sleep_secs + + if self.sc_process.returncode is not None: raise SauceException("Unable to start Sauce Connect Proxy. Process exited with code %s", self.sc_process.returncode) def __exit__(self, exc_type, exc_val, exc_tb): diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executormarionette.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executormarionette.py index 30930c3c2f9..faf087b7a96 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executormarionette.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executormarionette.py @@ -96,7 +96,7 @@ class MarionetteProtocol(Protocol): def teardown(self): try: self.marionette._request_in_app_shutdown() - self.marionette.delete_session(send_request=False, reset_session_id=True) + self.marionette.delete_session(send_request=False) except Exception: # This is typically because the session never started pass @@ -131,13 +131,14 @@ class MarionetteProtocol(Protocol): self.logger.debug("Loading %s" % url) self.runner_handle = self.marionette.current_window_handle try: - self.marionette.navigate(url) + self.dismiss_alert(lambda: self.marionette.navigate(url)) except Exception as e: self.logger.critical( "Loading initial page %s failed. Ensure that the " "there are no other programs bound to this port and " "that your firewall rules or network setup does not " "prevent access.\e%s" % (url, traceback.format_exc(e))) + raise self.marionette.execute_script( "document.title = '%s'" % threading.current_thread().name.replace("'", '"')) @@ -157,6 +158,7 @@ class MarionetteProtocol(Protocol): for handle in handles: try: + self.dismiss_alert(lambda: self.marionette.switch_to_window(handle)) self.marionette.switch_to_window(handle) self.marionette.close() except errors.NoSuchWindowException: @@ -168,6 +170,19 @@ class MarionetteProtocol(Protocol): if runner_handle != self.runner_handle: self.load_runner(protocol) + def dismiss_alert(self, f): + while True: + try: + f() + except errors.UnexpectedAlertOpen: + alert = self.marionette.switch_to_alert() + try: + alert.dismiss() + except errors.NoAlertPresentException: + pass + else: + break + def wait(self): try: socket_timeout = self.marionette.client.socket_timeout diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/pytestrunner/runner.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/pytestrunner/runner.py index 0870b1232ad..8eabf27f47f 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/pytestrunner/runner.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/pytestrunner/runner.py @@ -52,12 +52,13 @@ def run(path, server_config, session_config, timeout=0): with TemporaryDirectory() as cache: try: pytest.main(["--strict", # turn warnings into errors - "--verbose", # show each individual subtest + "-vv", # show each individual subtest and full failure logs "--capture", "no", # enable stdout/stderr from tests "--basetemp", cache, # temporary directory "--showlocals", # display contents of variables in local scope "-p", "no:mozlog", # use the WPT result recorder "-p", "no:cacheprovider", # disable state preservation across invocations + "-o=console_output_style=classic", # disable test progress bar path], plugins=[harness, subtests]) except Exception as e: diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/metadata.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/metadata.py index 9c31e4279ef..92d77ba8d94 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/metadata.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/metadata.py @@ -65,9 +65,9 @@ def update_expected(test_paths, serve_root, log_file_names, for test in tree.iterchildren(): for subtest in test.iterchildren(): if subtest.new_disabled: - print os.path.dirname(subtest.root.test_path) + "/" + subtest.name + print "disabled: %s" % os.path.dirname(subtest.root.test_path) + "/" + subtest.name if test.new_disabled: - print test.root.test_path + print "disabled: %s" % test.root.test_path results_changed = [item.test_path for item in expected_map.itervalues() if item.modified] diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/browsers/test_sauce.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/browsers/test_sauce.py new file mode 100644 index 00000000000..bf3e487bd72 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/browsers/test_sauce.py @@ -0,0 +1,84 @@ +import sys +from os.path import join, dirname + +import mock +import pytest + +sys.path.insert(0, join(dirname(__file__), "..", "..", "..")) + +sauce = pytest.importorskip("wptrunner.browsers.sauce") + + +def test_sauceconnect_success(): + with mock.patch.object(sauce.SauceConnect, "upload_prerun_exec"),\ + mock.patch.object(sauce.subprocess, "Popen") as Popen,\ + mock.patch.object(sauce.os.path, "exists") as exists: + # Act as if it's still running + Popen.return_value.poll.return_value = None + Popen.return_value.returncode = None + # Act as if file created + exists.return_value = True + + sauce_connect = sauce.SauceConnect( + sauce_user="aaa", + sauce_key="bbb", + sauce_tunnel_id="ccc", + sauce_connect_binary="ddd") + + sauce_connect.__enter__(None) + + +@pytest.mark.parametrize("readyfile,returncode", [ + (True, 0), + (True, 1), + (True, 2), + (False, 0), + (False, 1), + (False, 2), +]) +def test_sauceconnect_failure_exit(readyfile, returncode): + with mock.patch.object(sauce.SauceConnect, "upload_prerun_exec"),\ + mock.patch.object(sauce.subprocess, "Popen") as Popen,\ + mock.patch.object(sauce.os.path, "exists") as exists,\ + mock.patch.object(sauce.time, "sleep") as sleep: + Popen.return_value.poll.return_value = returncode + Popen.return_value.returncode = returncode + exists.return_value = readyfile + + sauce_connect = sauce.SauceConnect( + sauce_user="aaa", + sauce_key="bbb", + sauce_tunnel_id="ccc", + sauce_connect_binary="ddd") + + with pytest.raises(sauce.SauceException): + sauce_connect.__enter__(None) + + # Given we appear to exit immediately with these mocks, sleep shouldn't be called + sleep.assert_not_called() + + +def test_sauceconnect_failure_never_ready(): + with mock.patch.object(sauce.SauceConnect, "upload_prerun_exec"),\ + mock.patch.object(sauce.subprocess, "Popen") as Popen,\ + mock.patch.object(sauce.os.path, "exists") as exists,\ + mock.patch.object(sauce.time, "sleep") as sleep: + Popen.return_value.poll.return_value = None + Popen.return_value.returncode = None + exists.return_value = False + + sauce_connect = sauce.SauceConnect( + sauce_user="aaa", + sauce_key="bbb", + sauce_tunnel_id="ccc", + sauce_connect_binary="ddd") + + with pytest.raises(sauce.SauceException): + sauce_connect.__enter__(None) + + # We should sleep while waiting for it to create the readyfile + sleep.assert_called() + + # Check we actually kill it after termination fails + Popen.return_value.terminate.assert_called() + Popen.return_value.kill.assert_called() diff --git a/tests/wpt/web-platform-tests/wai-aria/tools/make_tests.pl b/tests/wpt/web-platform-tests/wai-aria/tools/make_tests.pl index 36de4493264..b680c0eb202 100644 --- a/tests/wpt/web-platform-tests/wai-aria/tools/make_tests.pl +++ b/tests/wpt/web-platform-tests/wai-aria/tools/make_tests.pl @@ -230,6 +230,9 @@ while (<$io>) { $theCode =~ s/ +$//; $theCode =~ s/\t/ /g; $theCode .= $_; + # In MediaWiki, to display & symbol escapes as literal text, one + # must use "&&" for the "&" character. We need to undo that. + $theCode =~ s/&(\S)/&$1/g; } } } elsif ($state == 3) { diff --git a/tests/wpt/web-platform-tests/web-animations/README.md b/tests/wpt/web-platform-tests/web-animations/README.md index 475f58a57b1..f6efbf977f9 100644 --- a/tests/wpt/web-platform-tests/web-animations/README.md +++ b/tests/wpt/web-platform-tests/web-animations/README.md @@ -98,10 +98,19 @@ Guidelines for writing tests Remember, even if we do need to make all tests take, say 200s each, text editors are very good at search and replace. -* Use the `assert_times_equal` assertion for comparing calculated times. - It tests times are equal using the precision recommended in the spec whilst - allowing implementations to override the function to meet their own - precision requirements. +* Use the `assert_times_equal` assertion for comparing times returned from + the API. This asserts that the time values are equal using a tolerance + based on the precision recommended in the spec. This tolerance is applied + to *both* of the values being compared. That is, it effectively allows + double the epsilon that is used when comparing with an absolute value. + + For comparing a time value returned from the API to an absolute value, use + `assert_time_equals_literal`. This tests that the actual value is equal to + the expected value within the precision recommended in the spec. + + Both `assert_times_equal` and `assert_time_equals_literal` are defined in a + way that implementations can override them to meet their own precision + requirements. * There are quite a few bad tests in the repository. We're learning as we go. Don't just copy them blindly—please fix them! diff --git a/tests/wpt/web-platform-tests/web-animations/animation-model/animation-types/property-list.js b/tests/wpt/web-platform-tests/web-animations/animation-model/animation-types/property-list.js index 1220b455b18..4b917957f7f 100644 --- a/tests/wpt/web-platform-tests/web-animations/animation-model/animation-types/property-list.js +++ b/tests/wpt/web-platform-tests/web-animations/animation-model/animation-types/property-list.js @@ -751,19 +751,19 @@ const gCSSProperties = { 'justify-content': { // https://drafts.csswg.org/css-align/#propdef-justify-content types: [ - { type: 'discrete', options: [ [ 'baseline', 'last baseline' ] ] } + { type: 'discrete', options: [ [ 'start', 'end' ] ] } ] }, 'justify-items': { // https://drafts.csswg.org/css-align/#propdef-justify-items types: [ - { type: 'discrete', options: [ [ 'baseline', 'last baseline' ] ] } + { type: 'discrete', options: [ [ 'start', 'end' ] ] } ] }, 'justify-self': { // https://drafts.csswg.org/css-align/#propdef-justify-self types: [ - { type: 'discrete', options: [ [ 'baseline', 'last baseline' ] ] } + { type: 'discrete', options: [ [ 'start', 'end' ] ] } ] }, 'left': { diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/playbackRate.html b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/playbackRate.html index 9a3b76240f0..be5bf969498 100644 --- a/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/playbackRate.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/playbackRate.html @@ -14,16 +14,14 @@ function assert_playbackrate(animation, previousAnimationCurrentTime, previousTimelineCurrentTime, description) { - const accuracy = 0.001; /* accuracy of DOMHighResTimeStamp */ const animationCurrentTimeDifference = animation.currentTime - previousAnimationCurrentTime; const timelineCurrentTimeDifference = animation.timeline.currentTime - previousTimelineCurrentTime; - assert_approx_equals(animationCurrentTimeDifference, - timelineCurrentTimeDifference * animation.playbackRate, - accuracy, - description); + assert_times_equal(animationCurrentTimeDifference, + timelineCurrentTimeDifference * animation.playbackRate, + description); } promise_test(t => { diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/direction.html b/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/direction.html index 7bc315da967..3238f5d7a5e 100644 --- a/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/direction.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/direction.html @@ -31,13 +31,13 @@ test(t => { const div = createDiv(t); const anim = div.animate(null, { duration: 10000, direction: 'normal' }); anim.currentTime = 7000; - assert_times_equal(anim.effect.getComputedTiming().progress, 0.7, - 'progress before updating direction'); + assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.7, + 'progress before updating direction'); anim.effect.timing.direction = 'reverse'; - assert_times_equal(anim.effect.getComputedTiming().progress, 0.3, - 'progress after updating direction'); + assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.3, + 'progress after updating direction'); }, 'Can be changed from \'normal\' to \'reverse\' while in progress'); test(t => { @@ -78,13 +78,13 @@ test(t => { duration: 10000, direction: 'normal' }); anim.currentTime = 17000; - assert_times_equal(anim.effect.getComputedTiming().progress, 0.7, - 'progress before updating direction'); + assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.7, + 'progress before updating direction'); anim.effect.timing.direction = 'alternate'; - assert_times_equal(anim.effect.getComputedTiming().progress, 0.3, - 'progress after updating direction'); + assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.3, + 'progress after updating direction'); }, 'Can be changed from \'normal\' to \'alternate\' while in progress'); test(t => { @@ -94,13 +94,13 @@ test(t => { duration: 10000, direction: 'alternate' }); anim.currentTime = 17000; - assert_times_equal(anim.effect.getComputedTiming().progress, 0.3, - 'progress before updating direction'); + assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.3, + 'progress before updating direction'); anim.effect.timing.direction = 'alternate-reverse'; - assert_times_equal(anim.effect.getComputedTiming().progress, 0.7, - 'progress after updating direction'); + assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.7, + 'progress after updating direction'); }, 'Can be changed from \'alternate\' to \'alternate-reverse\' while in' + ' progress'); diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/duration.html b/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/duration.html index 9caa0e36e05..42913f552dd 100644 --- a/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/duration.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/duration.html @@ -19,10 +19,10 @@ test(t => { const div = createDiv(t); const anim = div.animate({ opacity: [ 0, 1 ] }, 2000); anim.effect.timing.duration = 123.45; - assert_times_equal(anim.effect.timing.duration, 123.45, - 'set duration 123.45'); - assert_times_equal(anim.effect.getComputedTiming().duration, 123.45, - 'getComputedTiming() after set duration 123.45'); + assert_time_equals_literal(anim.effect.timing.duration, 123.45, + 'set duration 123.45'); + assert_time_equals_literal(anim.effect.getComputedTiming().duration, 123.45, + 'getComputedTiming() after set duration 123.45'); }, 'Can be set to a double value'); test(t => { @@ -176,8 +176,8 @@ test(t => { assert_equals(anim.effect.getComputedTiming().progress, 1, 'progress when animation is finished'); anim.effect.timing.duration *= 2; - assert_times_equal(anim.effect.getComputedTiming().progress, 0.5, - 'progress after doubling the duration'); + assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.5, + 'progress after doubling the duration'); anim.effect.timing.duration = 0; assert_equals(anim.effect.getComputedTiming().progress, 1, 'progress after setting duration to zero'); diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/endDelay.html b/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/endDelay.html index b6793edaed5..3062c8c1565 100644 --- a/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/endDelay.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/endDelay.html @@ -19,10 +19,10 @@ test(t => { const div = createDiv(t); const anim = div.animate({ opacity: [ 0, 1 ] }, 2000); anim.effect.timing.endDelay = 123.45; - assert_times_equal(anim.effect.timing.endDelay, 123.45, - 'set endDelay 123.45'); - assert_times_equal(anim.effect.getComputedTiming().endDelay, 123.45, - 'getComputedTiming() after set endDelay 123.45'); + assert_time_equals_literal(anim.effect.timing.endDelay, 123.45, + 'set endDelay 123.45'); + assert_time_equals_literal(anim.effect.getComputedTiming().endDelay, 123.45, + 'getComputedTiming() after set endDelay 123.45'); }, 'Can be set to a positive number'); test(t => { diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/iterationStart.html b/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/iterationStart.html index 5521f1e8594..73bc4810da1 100644 --- a/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/iterationStart.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/iterationStart.html @@ -24,7 +24,7 @@ test(t => { duration: 100, delay: 1 }); anim.effect.timing.iterationStart = 2.5; - assert_times_equal(anim.effect.getComputedTiming().progress, 0.5); + assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.5); assert_equals(anim.effect.getComputedTiming().currentIteration, 2); }, 'Changing the value updates computed timing when backwards-filling'); @@ -37,7 +37,7 @@ test(t => { duration: 100, delay: 0 }); anim.effect.timing.iterationStart = 2.5; - assert_times_equal(anim.effect.getComputedTiming().progress, 0.5); + assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.5); assert_equals(anim.effect.getComputedTiming().currentIteration, 2); }, 'Changing the value updates computed timing during the active phase'); @@ -51,7 +51,7 @@ test(t => { delay: 0 }); anim.finish(); anim.effect.timing.iterationStart = 2.5; - assert_times_equal(anim.effect.getComputedTiming().progress, 0.5); + assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.5); assert_equals(anim.effect.getComputedTiming().currentIteration, 3); }, 'Changing the value updates computed timing when forwards-filling'); diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/iterations.html b/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/iterations.html index 32390626463..3bfaf8e9920 100644 --- a/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/iterations.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/iterations.html @@ -70,10 +70,12 @@ test(t => { anim.effect.timing.iterations = 2; - assert_times_equal(anim.effect.getComputedTiming().progress, 0, - 'progress after adding an iteration'); - assert_times_equal(anim.effect.getComputedTiming().currentIteration, 1, - 'current iteration after adding an iteration'); + assert_time_equals_literal(anim.effect.getComputedTiming().progress, + 0, + 'progress after adding an iteration'); + assert_time_equals_literal(anim.effect.getComputedTiming().currentIteration, + 1, + 'current iteration after adding an iteration'); anim.effect.timing.iterations = 0; diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/composite.html b/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/composite.html index 745f66bc711..82ac633f0a9 100644 --- a/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/composite.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/composite.html @@ -29,8 +29,8 @@ test(t => { anim.effect.composite = 'add'; const keyframes = anim.effect.getKeyframes(); - assert_equals(keyframes[0].composite, undefined, - 'unspecified keyframe composite value should be absent even ' + + assert_equals(keyframes[0].composite, null, + 'unspecified keyframe composite value should be null even ' + 'if effect composite is set'); }, 'Unspecified keyframe composite value when setting effect composite'); diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/constructor.html b/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/constructor.html index b257257b2ca..dfdebde2072 100644 --- a/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/constructor.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/constructor.html @@ -57,7 +57,7 @@ test(t => { assert_equals(effect.getKeyframes()[0].composite, composite, `resulting composite for '${composite}'`); } - for (const composite of gBadCompositeValueTests) { + for (const composite of gBadKeyframeCompositeValueTests) { assert_throws(new TypeError, () => { new KeyframeEffectReadOnly(target, getKeyframe(composite)); }); @@ -76,7 +76,7 @@ test(t => { assert_equals(effect.getKeyframes()[0].composite, composite, `resulting composite for '${composite}'`); } - for (const composite of gBadCompositeValueTests) { + for (const composite of gBadKeyframeCompositeValueTests) { assert_throws(new TypeError, () => { new KeyframeEffectReadOnly(target, getKeyframes(composite)); }); @@ -89,17 +89,17 @@ test(t => { const effect = new KeyframeEffectReadOnly(target, { left: ['10px', '20px'] }, { composite: composite }); - assert_equals(effect.getKeyframes()[0].composite, undefined, + assert_equals(effect.getKeyframes()[0].composite, null, `resulting composite for '${composite}'`); } - for (const composite of gBadCompositeValueTests) { + for (const composite of gBadOptionsCompositeValueTests) { assert_throws(new TypeError, () => { new KeyframeEffectReadOnly(target, { left: ['10px', '20px'] }, { composite: composite }); }); } -}, 'composite value is absent if the composite operation specified on the ' + +}, 'composite value is null if the composite operation specified on the ' + 'keyframe effect is being used'); for (const subtest of gKeyframesTests) { diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/processing-a-keyframes-argument-001.html b/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/processing-a-keyframes-argument-001.html index e6c5c2af851..523019d2913 100644 --- a/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/processing-a-keyframes-argument-001.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/processing-a-keyframes-argument-001.html @@ -180,9 +180,27 @@ test(() => { { done: true }, ])); assert_frame_lists_equal(effect.getKeyframes(), [ - { offset: null, computedOffset: 0, easing: 'linear', left: '100px' }, - { offset: null, computedOffset: 0.5, easing: 'linear', left: '300px' }, - { offset: null, computedOffset: 1, easing: 'linear', left: '200px' }, + { + offset: null, + computedOffset: 0, + easing: 'linear', + left: '100px', + composite: null, + }, + { + offset: null, + computedOffset: 0.5, + easing: 'linear', + left: '300px', + composite: null, + }, + { + offset: null, + computedOffset: 1, + easing: 'linear', + left: '200px', + composite: null, + }, ]); }, 'Keyframes are read from a custom iterator'); @@ -197,9 +215,27 @@ test(() => { keyframes.offset = '0.1'; const effect = new KeyframeEffect(null, keyframes); assert_frame_lists_equal(effect.getKeyframes(), [ - { offset: null, computedOffset: 0, easing: 'linear', left: '100px' }, - { offset: null, computedOffset: 0.5, easing: 'linear', left: '300px' }, - { offset: null, computedOffset: 1, easing: 'linear', left: '200px' }, + { + offset: null, + computedOffset: 0, + easing: 'linear', + left: '100px', + composite: null, + }, + { + offset: null, + computedOffset: 0.5, + easing: 'linear', + left: '300px', + composite: null, + }, + { + offset: null, + computedOffset: 1, + easing: 'linear', + left: '200px', + composite: null, + }, ]); }, '\'easing\' and \'offset\' are ignored on iterable objects'); @@ -211,11 +247,29 @@ test(() => { { done: true }, ])); assert_frame_lists_equal(effect.getKeyframes(), [ - { offset: null, computedOffset: 0, easing: 'linear', left: '100px', - top: '200px' }, - { offset: null, computedOffset: 0.5, easing: 'linear', left: '300px' }, - { offset: null, computedOffset: 1, easing: 'linear', left: '200px', - top: '100px' }, + { + offset: null, + computedOffset: 0, + easing: 'linear', + left: '100px', + top: '200px', + composite: null, + }, + { + offset: null, + computedOffset: 0.5, + easing: 'linear', + left: '300px', + composite: null, + }, + { + offset: null, + computedOffset: 1, + easing: 'linear', + left: '200px', + top: '100px', + composite: null, + }, ]); }, 'Keyframes are read from a custom iterator with multiple properties' + ' specified'); @@ -228,9 +282,27 @@ test(() => { { done: true }, ])); assert_frame_lists_equal(effect.getKeyframes(), [ - { offset: null, computedOffset: 0, easing: 'linear', left: '100px' }, - { offset: 0.75, computedOffset: 0.75, easing: 'linear', left: '250px' }, - { offset: null, computedOffset: 1, easing: 'linear', left: '200px' }, + { + offset: null, + computedOffset: 0, + easing: 'linear', + left: '100px', + composite: null, + }, + { + offset: 0.75, + computedOffset: 0.75, + easing: 'linear', + left: '250px', + composite: null, + }, + { + offset: null, + computedOffset: 1, + easing: 'linear', + left: '200px', + composite: null, + }, ]); }, 'Keyframes are read from a custom iterator with where an offset is' + ' specified'); @@ -253,7 +325,7 @@ test(() => { { done: true }, ])); assert_frame_lists_equal(effect.getKeyframes(), [ - { offset: null, computedOffset: 1, easing: 'linear' } + { offset: null, computedOffset: 1, easing: 'linear', composite: null } ]); }, 'A list of values returned from a custom iterator should be ignored'); @@ -270,8 +342,20 @@ test(() => { const effect = new KeyframeEffect(null, [keyframe, { height: '200px' }]); assert_frame_lists_equal(effect.getKeyframes(), [ - { offset: null, computedOffset: 0, easing: 'linear', height: '100px' }, - { offset: null, computedOffset: 1, easing: 'linear', height: '200px' }, + { + offset: null, + computedOffset: 0, + easing: 'linear', + height: '100px', + composite: null, + }, + { + offset: null, + computedOffset: 1, + easing: 'linear', + height: '200px', + composite: null, + }, ]); }, 'Only enumerable properties on keyframes are read'); @@ -289,8 +373,20 @@ test(() => { const effect = new KeyframeEffect(null, [keyframe, { top: '200px' }]); assert_frame_lists_equal(effect.getKeyframes(), [ - { offset: null, computedOffset: 0, easing: 'linear', top: '100px' }, - { offset: null, computedOffset: 1, easing: 'linear', top: '200px' }, + { + offset: null, + computedOffset: 0, + easing: 'linear', + top: '100px', + composite: null, + }, + { + offset: null, + computedOffset: 1, + easing: 'linear', + top: '200px', + composite: null, + }, ]); }, 'Only properties defined directly on keyframes are read'); @@ -305,8 +401,20 @@ test(() => { const effect = new KeyframeEffect(null, keyframes); assert_frame_lists_equal(effect.getKeyframes(), [ - { offset: null, computedOffset: 0, easing: 'linear', height: '100px' }, - { offset: null, computedOffset: 1, easing: 'linear', height: '200px' }, + { + offset: null, + computedOffset: 0, + easing: 'linear', + height: '100px', + composite: null, + }, + { + offset: null, + computedOffset: 1, + easing: 'linear', + height: '200px', + composite: null, + }, ]); }, 'Only enumerable properties on property-indexed keyframes are read'); @@ -324,8 +432,20 @@ test(() => { const effect = new KeyframeEffect(null, keyframes); assert_frame_lists_equal(effect.getKeyframes(), [ - { offset: null, computedOffset: 0, easing: 'linear', top: '100px' }, - { offset: null, computedOffset: 1, easing: 'linear', top: '200px' }, + { + offset: null, + computedOffset: 0, + easing: 'linear', + top: '100px', + composite: null, + }, + { + offset: null, + computedOffset: 1, + easing: 'linear', + top: '200px', + composite: null, + }, ]); }, 'Only properties defined directly on property-indexed keyframes are read'); diff --git a/tests/wpt/web-platform-tests/web-animations/resources/keyframe-tests.js b/tests/wpt/web-platform-tests/web-animations/resources/keyframe-tests.js index 3aa1c6dba25..f32f5ced8e7 100644 --- a/tests/wpt/web-platform-tests/web-animations/resources/keyframe-tests.js +++ b/tests/wpt/web-platform-tests/web-animations/resources/keyframe-tests.js @@ -12,14 +12,18 @@ // ------------------------------ const gGoodKeyframeCompositeValueTests = [ - 'replace', 'add', 'accumulate', undefined + 'replace', 'add', 'accumulate', null +]; + +const gBadKeyframeCompositeValueTests = [ + 'unrecognised', 'replace ', 'Replace' ]; const gGoodOptionsCompositeValueTests = [ 'replace', 'add', 'accumulate' ]; -const gBadCompositeValueTests = [ +const gBadOptionsCompositeValueTests = [ 'unrecognised', 'replace ', 'Replace', null ]; @@ -50,9 +54,7 @@ const keyframe = (offset, props, easing='linear', composite) => { // Object.assign instead. const result = {}; Object.assign(result, offset, props, { easing }); - if (composite) { - result.composite = composite; - } + result.composite = composite || null; return result; }; diff --git a/tests/wpt/web-platform-tests/web-animations/testcommon.js b/tests/wpt/web-platform-tests/web-animations/testcommon.js index 51b84dd3e53..be3827fd5d8 100644 --- a/tests/wpt/web-platform-tests/web-animations/testcommon.js +++ b/tests/wpt/web-platform-tests/web-animations/testcommon.js @@ -21,10 +21,18 @@ const TIME_PRECISION = 0.0005; // ms // times based on their precision requirements. if (!window.assert_times_equal) { window.assert_times_equal = (actual, expected, description) => { - assert_approx_equals(actual, expected, TIME_PRECISION, description); + assert_approx_equals(actual, expected, TIME_PRECISION * 2, description); }; } +// Allow implementations to substitute an alternative method for comparing +// a time value based on its precision requirements with a fixed value. +if (!window.assert_time_equals_literal) { + window.assert_time_equals_literal = (actual, expected, description) => { + assert_approx_equals(actual, expected, TIME_PRECISION, description); + } +} + // creates div element, appends it to the document body and // removes the created element during test cleanup function createDiv(test, doc) { diff --git a/tests/wpt/web-platform-tests/web-animations/timing-model/animation-effects/active-time.html b/tests/wpt/web-platform-tests/web-animations/timing-model/animation-effects/active-time.html index 3e3b528d534..a2feb2323c3 100644 --- a/tests/wpt/web-platform-tests/web-animations/timing-model/animation-effects/active-time.html +++ b/tests/wpt/web-platform-tests/web-animations/timing-model/animation-effects/active-time.html @@ -25,19 +25,19 @@ test(t => { test(t => { const anim = createDiv(t).animate(null, 1000); anim.currentTime = 500; - assert_times_equal(anim.effect.getComputedTiming().progress, 0.5); + assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.5); }, 'Active time in active phase and no start delay is the local time'); test(t => { const anim = createDiv(t).animate(null, { duration: 1000, delay: 500 }); anim.currentTime = 1000; - assert_times_equal(anim.effect.getComputedTiming().progress, 0.5); + assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.5); }, 'Active time in active phase and positive start delay is the local time' + ' minus the start delay'); test(t => { const anim = createDiv(t).animate(null, { duration: 1000, delay: -500 }); - assert_times_equal(anim.effect.getComputedTiming().progress, 0.5); + assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.5); }, 'Active time in active phase and negative start delay is the local time' + ' minus the start delay'); @@ -58,7 +58,7 @@ test(t => { fill: 'forwards' }); anim.finish(); assert_equals(anim.effect.getComputedTiming().currentIteration, 2); - assert_times_equal(anim.effect.getComputedTiming().progress, 0.3); + assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.3); }, 'Active time in after phase with forwards fill is the active duration'); test(t => { @@ -79,7 +79,7 @@ test(t => { fill: 'forwards' }); anim.finish(); assert_equals(anim.effect.getComputedTiming().currentIteration, 2); - assert_times_equal(anim.effect.getComputedTiming().progress, 0.3); + assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.3); }, 'Active time in after phase with forwards fill and positive end delay' + ' is the active duration'); @@ -91,7 +91,7 @@ test(t => { fill: 'forwards' }); anim.finish(); assert_equals(anim.effect.getComputedTiming().currentIteration, 1); - assert_times_equal(anim.effect.getComputedTiming().progress, 0.5); + assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.5); }, 'Active time in after phase with forwards fill and negative end delay' + ' is the active duration + end delay'); @@ -127,7 +127,7 @@ test(t => { fill: 'both' }); anim.finish(); assert_equals(anim.effect.getComputedTiming().currentIteration, 2); - assert_times_equal(anim.effect.getComputedTiming().progress, 0.3); + assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.3); }, 'Active time in after phase with \'both\' fill is the active duration'); test(t => { diff --git a/tests/wpt/web-platform-tests/web-animations/timing-model/animations/current-time.html b/tests/wpt/web-platform-tests/web-animations/timing-model/animations/current-time.html index d2f5075d1b2..08f90d9f0c1 100644 --- a/tests/wpt/web-platform-tests/web-animations/timing-model/animations/current-time.html +++ b/tests/wpt/web-platform-tests/web-animations/timing-model/animations/current-time.html @@ -68,7 +68,7 @@ promise_test(t => { return animation.ready.then(() => waitForAnimationFrames(1)) .then(() => { - assert_times_equal(animation.currentTime, 0); + assert_time_equals_literal(animation.currentTime, 0); }); }, 'The current time does not progress if playback rate is 0'); diff --git a/tests/wpt/web-platform-tests/web-animations/timing-model/animations/playing-an-animation.html b/tests/wpt/web-platform-tests/web-animations/timing-model/animations/playing-an-animation.html index 2beed475e7e..10641920514 100644 --- a/tests/wpt/web-platform-tests/web-animations/timing-model/animations/playing-an-animation.html +++ b/tests/wpt/web-platform-tests/web-animations/timing-model/animations/playing-an-animation.html @@ -14,26 +14,26 @@ test(t => { const animation = createDiv(t).animate(null, 100 * MS_PER_SEC); animation.currentTime = 1 * MS_PER_SEC; - assert_times_equal(animation.currentTime, 1 * MS_PER_SEC); + assert_time_equals_literal(animation.currentTime, 1 * MS_PER_SEC); animation.play(); - assert_times_equal(animation.currentTime, 1 * MS_PER_SEC); + assert_time_equals_literal(animation.currentTime, 1 * MS_PER_SEC); }, 'Playing a running animation leaves the current time unchanged'); test(t => { const animation = createDiv(t).animate(null, 100 * MS_PER_SEC); animation.finish(); - assert_times_equal(animation.currentTime, 100 * MS_PER_SEC); + assert_time_equals_literal(animation.currentTime, 100 * MS_PER_SEC); animation.play(); - assert_times_equal(animation.currentTime, 0); + assert_time_equals_literal(animation.currentTime, 0); }, 'Playing a finished animation seeks back to the start'); test(t => { const animation = createDiv(t).animate(null, 100 * MS_PER_SEC); animation.playbackRate = -1; animation.currentTime = 0; - assert_times_equal(animation.currentTime, 0); + assert_time_equals_literal(animation.currentTime, 0); animation.play(); - assert_times_equal(animation.currentTime, 100 * MS_PER_SEC); + assert_time_equals_literal(animation.currentTime, 100 * MS_PER_SEC); }, 'Playing a finished and reversed animation seeks to end'); test(t => { diff --git a/tests/wpt/web-platform-tests/web-animations/timing-model/animations/set-the-animation-start-time.html b/tests/wpt/web-platform-tests/web-animations/timing-model/animations/set-the-animation-start-time.html index 1526be05766..d2a311d4dd4 100644 --- a/tests/wpt/web-platform-tests/web-animations/timing-model/animations/set-the-animation-start-time.html +++ b/tests/wpt/web-platform-tests/web-animations/timing-model/animations/set-the-animation-start-time.html @@ -80,9 +80,9 @@ test(t => { // If we set the start time, however, we should clear the hold time. animation.startTime = document.timeline.currentTime - 2000; - assert_times_equal(animation.currentTime, 2000, - 'The current time is calculated from the start time,' - + ' not the hold time'); + assert_time_equals_literal(animation.currentTime, 2000, + 'The current time is calculated from the start' + + ' time, not the hold time'); // Sanity check assert_equals(animation.playState, 'running', @@ -99,13 +99,14 @@ test(t => { // are resolved). animation.startTime = document.timeline.currentTime - 1000; assert_equals(animation.playState, 'running'); - assert_times_equal(animation.currentTime, 1000, - 'Current time is resolved for a running animation') + assert_time_equals_literal(animation.currentTime, 1000, + 'Current time is resolved for a running animation'); // Clear start time animation.startTime = null; - assert_times_equal(animation.currentTime, 1000, - 'Hold time is set after start time is made unresolved'); + assert_time_equals_literal(animation.currentTime, 1000, + 'Hold time is set after start time is made' + + ' unresolved'); assert_equals(animation.playState, 'paused', 'Animation reports it is paused after setting an unresolved' + ' start time'); diff --git a/tests/wpt/web-platform-tests/web-animations/timing-model/animations/set-the-timeline-of-an-animation.html b/tests/wpt/web-platform-tests/web-animations/timing-model/animations/set-the-timeline-of-an-animation.html index 8a4421309b9..24f201d550c 100644 --- a/tests/wpt/web-platform-tests/web-animations/timing-model/animations/set-the-timeline-of-an-animation.html +++ b/tests/wpt/web-platform-tests/web-animations/timing-model/animations/set-the-timeline-of-an-animation.html @@ -26,7 +26,7 @@ test(t => { animation.timeline = document.timeline; assert_equals(animation.playState, 'paused'); - assert_times_equal(animation.currentTime, 50 * MS_PER_SEC); + assert_time_equals_literal(animation.currentTime, 50 * MS_PER_SEC); }, 'After setting timeline on paused animation it is still paused'); test(t => { @@ -39,7 +39,7 @@ test(t => { animation.timeline = document.timeline; assert_equals(animation.playState, 'paused'); - assert_times_equal(animation.currentTime, 200 * MS_PER_SEC); + assert_time_equals_literal(animation.currentTime, 200 * MS_PER_SEC); }, 'After setting timeline on animation paused outside active interval' + ' it is still paused'); @@ -141,7 +141,7 @@ test(t => { assert_false(animation.pending); assert_equals(animation.playState, 'paused'); - assert_times_equal(animation.currentTime, 50 * MS_PER_SEC); + assert_time_equals_literal(animation.currentTime, 50 * MS_PER_SEC); }, 'After clearing timeline on paused animation it is still paused'); test(t => { diff --git a/tests/wpt/web-platform-tests/webauthn/OWNERS b/tests/wpt/web-platform-tests/webauthn/OWNERS index 8fc1758e6f8..1388899abe5 100644 --- a/tests/wpt/web-platform-tests/webauthn/OWNERS +++ b/tests/wpt/web-platform-tests/webauthn/OWNERS @@ -1 +1,2 @@ @apowers313 +@jcjones diff --git a/tests/wpt/web-platform-tests/webauthn/createcredential-badargs-rp.https.html b/tests/wpt/web-platform-tests/webauthn/createcredential-badargs-rp.https.html new file mode 100644 index 00000000000..f06e02cc4ff --- /dev/null +++ b/tests/wpt/web-platform-tests/webauthn/createcredential-badargs-rp.https.html @@ -0,0 +1,42 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>WebAuthn navigator.credentials.create() rp Tests</title> +<link rel="author" title="Adam Powers" href="mailto:adam@fidoalliance.org"> +<link rel="help" href="https://w3c.github.io/webauthn/#iface-credential"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src=helpers.js></script> +<body></body> +<script> +standardSetup(function() { + "use strict"; + + // rp bad values + new CreateCredentialsTest({path: "options.publicKey.rp", value: undefined}).testBadArgs("rp missing"); + new CreateCredentialsTest("options.publicKey.rp", "hi mom").testBadArgs("rp is string"); + // new CreateCredentialsTest("options.publicKey.rp", {}).testBadArgs("rp is empty object"); + + // rp.id + // new CreateCredentialsTest({path: "options.publicKey.rp.id", value: undefined}).testBadArgs("rp missing id"); + new CreateCredentialsTest("options.publicKey.rp.id", {}).testBadArgs("Bad rp: id is object"); + new CreateCredentialsTest("options.publicKey.rp.id", null).testBadArgs("Bad rp: id is null"); + new CreateCredentialsTest("options.publicKey.rp.id", "").testBadArgs("Bad rp: id is empty String"); + + // rp.name + // new CreateCredentialsTest({path: "options.publicKey.rp.name", value: undefined}).testBadArgs("rp missing name"); + new CreateCredentialsTest("options.publicKey.rp.name", {}).testBadArgs("Bad rp: name is object"); + new CreateCredentialsTest("options.publicKey.rp.name", null).testBadArgs("Bad rp: name is null"); + new CreateCredentialsTest("options.publicKey.rp.name", "").testBadArgs("Bad rp: name is empty String"); + + // rp.icon + // new CreateCredentialsTest({path: "options.publicKey.rp.icon", value: undefined}).testBadArgs("rp missing icon"); + new CreateCredentialsTest("options.publicKey.rp.icon", {}).testBadArgs("Bad rp: icon is object"); + new CreateCredentialsTest("options.publicKey.rp.icon", null).testBadArgs("Bad rp: icon is null"); + new CreateCredentialsTest("options.publicKey.rp.icon", "").testBadArgs("Bad rp: icon is empty String"); + // TODO: see https://github.com/w3c/webauthn/issues/587 for the 'undefined' tests that are commented out above + // TODO: unicode tests for icon URL (see also: USVString) +}); + +/* JSHINT */ +/* globals standardSetup, CreateCredentialsTest */ +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/webauthn/createcredential-passing.https.html b/tests/wpt/web-platform-tests/webauthn/createcredential-passing.https.html new file mode 100644 index 00000000000..a66d3c14355 --- /dev/null +++ b/tests/wpt/web-platform-tests/webauthn/createcredential-passing.https.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>WebAuthn credential.create() Passing Tests</title> +<link rel="author" title="Adam Powers" href="mailto:adam@fidoalliance.org"> +<link rel="help" href="https://w3c.github.io/webauthn/#iface-credential"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src=helpers.js></script> +<body></body> +<script> +standardSetup(function() { + "use strict"; + + // CreateCredentialTest passing tests + new CreateCredentialsTest().test(); +}); + +/* JSHINT */ +/* globals standardSetup, CreateCredentialsTest */ +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/webauthn/getcredential-passing.https.html b/tests/wpt/web-platform-tests/webauthn/getcredential-passing.https.html new file mode 100644 index 00000000000..c7cf794cf65 --- /dev/null +++ b/tests/wpt/web-platform-tests/webauthn/getcredential-passing.https.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>WebAuthn credential.get() Passing Tests</title> +<link rel="author" title="Adam Powers" href="mailto:adam@fidoalliance.org"> +<link rel="help" href="https://w3c.github.io/webauthn/#iface-credential"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src=helpers.js></script> +<body></body> +<script> +standardSetup(function() { + "use strict"; + + // GetCredentialsTest passing tests + // new GetCredentialsTest().addCredential(); + new GetCredentialsTest().addCredential().test(); +}); + +/* JSHINT */ +/* globals standardSetup, GetCredentialsTest */ +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/webauthn/helpers.js b/tests/wpt/web-platform-tests/webauthn/helpers.js index e36cb6d7adb..11d0aee044b 100644 --- a/tests/wpt/web-platform-tests/webauthn/helpers.js +++ b/tests/wpt/web-platform-tests/webauthn/helpers.js @@ -1,3 +1,15 @@ + +/* Useful constants for working with COSE key objects */ +const cose_kty = 1; +const cose_kty_ec2 = 2; +const cose_alg = 3; +const cose_alg_ECDSA_w_SHA256 = -7; +const cose_alg_ECDSA_w_SHA512 = -36; +const cose_crv = -1; +const cose_crv_P256 = 1; +const cose_crv_x = -2; +const cose_crv_y = -3; + /** * TestCase * @@ -5,7 +17,7 @@ * Is intended to be overloaded with subclasses that override testObject, testFunction and argOrder * The testObject is the default arguments for the testFunction * The default testObject can be modified with the modify() method, making it easy to create new tests based on the default - * The testFunction is the target of the test and is called by the test() method. test() applies the testObject as arguments via toArgs() + * The testFunction is the target of the test and is called by the doIt() method. doIt() applies the testObject as arguments via toArgs() * toArgs() uses argOrder to make sure the resulting array is in the right order of the arguments for the testFunction */ class TestCase { @@ -15,6 +27,7 @@ class TestCase { }; this.testObject = {}; this.argOrder = []; + this.ctx = null; } /** @@ -70,7 +83,6 @@ class TestCase { } // iterate through each of the desired modifications, and call recursiveSetObject on them - var obj = this.testObject; for (let idx in mods) { var mod = mods[idx]; let paths = mod.path.split("."); @@ -94,105 +106,305 @@ class TestCase { } /** - * test - * + * actually runs the test function with the supplied arguments + */ + doIt() { + if (typeof this.testFunction !== "function") { + throw new Error("Test function not found"); + } + + return this.testFunction.call(this.ctx, ...this.toArgs()); + } + + /** * run the test function with the top-level properties of the test object applied as arguments */ - test() { - return this.testFunction(...this.toArgs()); + test(desc) { + promise_test(() => { + return this.doIt() + .then((ret) => { + // check the result + this.validateRet(ret); + return ret; + }); + }, desc); } /** - * testArgs - * - * calls test() with testObject() and expects it to fail with a TypeError() + * validates the value returned from the test function + */ + validateRet() { + throw new Error("Not implemented"); + } + + /** + * calls doIt() with testObject() and expects it to fail with a TypeError() */ testBadArgs(testDesc) { promise_test(function(t) { - return promise_rejects(t, new TypeError(), this.test()); + return promise_rejects(t, new TypeError(), this.doIt(), "Expected bad parameters to fail"); }.bind(this), testDesc); } } +var createCredentialDefaultArgs = { + options: { + publicKey: { + // Relying Party: + rp: { + name: "Acme" + }, + + // User: + user: { + id: new Uint8Array(), // Won't survive the copy, must be rebuilt + name: "john.p.smith@example.com", + displayName: "John P. Smith", + icon: "https://pics.acme.com/00/p/aBjjjpqPb.png" + }, + + pubKeyCredParams: [{ + type: "public-key", + alg: cose_alg_ECDSA_w_SHA256, + }], + + timeout: 60000, // 1 minute + excludeCredentials: [] // No excludeList + } + } +}; + +function cloneObject(o) { + return JSON.parse(JSON.stringify(o)); +} + /** - * MakeCredentialTest + * CreateCredentialTest * - * tests the WebAuthn makeCredential() interface + * tests the WebAuthn navigator.credentials.create() interface */ -class MakeCredentialTest extends TestCase { +class CreateCredentialsTest extends TestCase { constructor() { // initialize the parent class super(); // the function to be tested - this.testFunction = navigator.authentication.makeCredential; + this.testFunction = navigator.credentials.create; + // the context to call the test function with (i.e. - the 'this' object for the function) + this.ctx = navigator.credentials; // the default object to pass to makeCredential, to be modified with modify() for various tests - // var challenge = Uint8Array.from("Y2xpbWIgYSBtb3VudGFpbg"); + let challengeBytes = new Uint8Array(16); + window.crypto.getRandomValues(challengeBytes); + this.testObject = cloneObject(createCredentialDefaultArgs); + // cloneObject can't clone the BufferSource in user.id, so let's recreate it. + this.testObject.options.publicKey.user.id = new Uint8Array(); + this.testObject.options.publicKey.challenge = challengeBytes; + + // how to order the properties of testObject when passing them to makeCredential + this.argOrder = [ + "options" + ]; + + // enable the constructor to modify the default testObject + // would prefer to do this in the super class, but have to call super() before using `this.*` + if (arguments.length) this.modify(...arguments); + } + + validateRet(ret) { + validatePublicKeyCredential(ret); + validateAuthenticatorAttestationResponse(ret.response); + } +} + +/** + * GetCredentialsTest + * + * tests the WebAuthn navigator.credentials.get() interface + */ +class GetCredentialsTest extends TestCase { + constructor(...args) { + // initialize the parent class + super(); + + // the function to be tested + this.testFunction = navigator.credentials.get; + // the context to call the test function with (i.e. - the 'this' object for the function) + this.ctx = navigator.credentials; + + // default arguments + let challengeBytes = new Uint8Array(16); + window.crypto.getRandomValues(challengeBytes); this.testObject = { - accountInformation: { - rpDisplayName: "ACME", - displayName: "John P. Smith", - name: "johnpsmith@example.com", - id: "1098237235409872", - imageUri: "https://pics.acme.com/00/p/aBjjjpqPb.png" - }, - cryptoParameters: [{ - type: "ScopedCred", - algorithm: "RSASSA-PKCS1-v1_5", - }], - attestationChallenge: Uint8Array.from([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]).buffer + options: { + publicKey: { + challenge: challengeBytes, + // timeout: 60000, + // allowCredentials: [newCredential] + } + } }; // how to order the properties of testObject when passing them to makeCredential this.argOrder = [ - "accountInformation", - "cryptoParameters", - "attestationChallenge", "options" ]; + this.credentialPromiseList = []; + // enable the constructor to modify the default testObject // would prefer to do this in the super class, but have to call super() before using `this.*` - if (arguments.length) this.modify(...arguments); + if (arguments.length) { + if (args.cred instanceof Promise) this.credPromise = args.cred; + else if (typeof args.cred === "object") this.credPromise = Promise.resolve(args.cred); + delete args.cred; + this.modify(...arguments); + } + } + + addCredential(arg) { + // if a Promise was passed in, add it to the list + if (arg instanceof Promise) { + this.credentialPromiseList.push(arg); + return; + } + + // if a credential object was passed in, convert it to a Promise for consistency + if (typeof arg === "object") { + this.credentialPromiseList.push(Promise.resolve(arg)); + return; + } + + // if a credential wasn't passed in, create one + let challengeBytes = new Uint8Array(16); + window.crypto.getRandomValues(challengeBytes); + var createArgs = cloneObject(createCredentialDefaultArgs); + createArgs.options.publicKey.challenge = challengeBytes; + createArgs.options.publicKey.user.id = new Uint8Array(); + var p = navigator.credentials.create(createArgs.options); + this.credentialPromiseList.push(p); + + return this; + } + + test() { + if (!this.credentialPromiseList.length) { + throw new Error("Attempting list without defining credential to test"); + } + + Promise.all(this.credentialPromiseList) + .then((credList) => { + var idList = credList.map((cred) => { + return { + id: cred.rawId, + transports: ["usb", "nfc", "ble"], + type: "public-key" + }; + }); + this.testObject.options.publicKey.allowCredentials = idList; + return super.test(); + }); } + + validateRet(ret) { + validatePublicKeyCredential (ret); + validateAuthenticatorAssertionResponse(ret.response); + } +} + +/** + * runs assertions against a PublicKeyCredential object to ensure it is properly formatted + */ +function validatePublicKeyCredential(cred) { + // class + assert_class_string(cred, "PublicKeyCredential", "Expected return to be instance of 'PublicKeyCredential' class"); + // id + assert_idl_attribute(cred, "id", "should return PublicKeyCredential with id attribute"); + assert_readonly(cred, "id", "should return PublicKeyCredential with readonly id attribute"); + // rawId + assert_idl_attribute(cred, "rawId", "should return PublicKeyCredential with rawId attribute"); + assert_readonly(cred, "rawId", "should return PublicKeyCredential with readonly rawId attribute"); + // type + assert_idl_attribute(cred, "type", "should return PublicKeyCredential with type attribute"); + assert_equals(cred.type, "public-key", "should return PublicKeyCredential with type 'public-key'"); +} + +/** + * runs assertions against a AuthenticatorAttestationResponse object to ensure it is properly formatted + */ +function validateAuthenticatorAttestationResponse(attr) { + // class + assert_class_string(attr, "AuthenticatorAttestationResponse", "Expected credentials.create() to return instance of 'AuthenticatorAttestationResponse' class"); + // clientDataJSON + assert_idl_attribute(attr, "clientDataJSON", "credentials.create() should return AuthenticatorAttestationResponse with clientDataJSON attribute"); + assert_readonly(attr, "clientDataJSON", "credentials.create() should return AuthenticatorAttestationResponse with readonly clientDataJSON attribute"); + // attestationObject + assert_idl_attribute(attr, "attestationObject", "credentials.create() should return AuthenticatorAttestationResponse with attestationObject attribute"); + assert_readonly(attr, "attestationObject", "credentials.create() should return AuthenticatorAttestationResponse with readonly attestationObject attribute"); +} + +/** + * runs assertions against a AuthenticatorAssertionResponse object to ensure it is properly formatted + */ +function validateAuthenticatorAssertionResponse(assert) { + // class + assert_class_string(assert, "AuthenticatorAssertionResponse", "Expected credentials.create() to return instance of 'AuthenticatorAssertionResponse' class"); + // clientDataJSON + assert_idl_attribute(assert, "clientDataJSON", "credentials.get() should return AuthenticatorAssertionResponse with clientDataJSON attribute"); + assert_readonly(assert, "clientDataJSON", "credentials.get() should return AuthenticatorAssertionResponse with readonly clientDataJSON attribute"); + // signature + assert_idl_attribute(assert, "signature", "credentials.get() should return AuthenticatorAssertionResponse with signature attribute"); + assert_readonly(assert, "signature", "credentials.get() should return AuthenticatorAssertionResponse with readonly signature attribute"); + // authenticatorData + assert_idl_attribute(assert, "authenticatorData", "credentials.get() should return AuthenticatorAssertionResponse with authenticatorData attribute"); + assert_readonly(assert, "authenticatorData", "credentials.get() should return AuthenticatorAssertionResponse with readonly authenticatorData attribute"); } -//************* BEGIN DELETE AFTER 1/1/2017 *************** // +//************* BEGIN DELETE AFTER 1/1/2018 *************** // // XXX for development mode only!! // debug() for debugging purposes... we can drop this later if it is considered ugly // note that debug is currently an empty function (i.e. - prints no output) // and debug only prints output if the polyfill is loaded var debug = function() {}; // if the WebAuthn API doesn't exist load a polyfill for testing -// note that the polyfill only gets loaded if navigator.authentication doesn't exist +// note that the polyfill only gets loaded if navigator.credentials create doesn't exist // AND if the polyfill script is found at the right path (i.e. - the polyfill is opt-in) function ensureInterface() { - return new Promise(function(resolve, reject) { - if (typeof navigator.authentication !== "object") { - debug = console.log; - - // dynamic loading of polyfill script by creating new <script> tag and seeing the src= - var scriptElem = document.createElement("script"); - if (typeof scriptElem !== "object") { - debug("ensureInterface: Error creating script element while attempting loading polyfill"); - return reject(new Error("ensureInterface: Error creating script element while loading polyfill")); - } - scriptElem.type = "application/javascript"; - scriptElem.onload = function() { - debug("!!! XXX - LOADING POLYFILL FOR WEBAUTHN TESTING - XXX !!!"); - return resolve(); - }; - scriptElem.onerror = function() { - return reject(new Error("navigator.authentication does not exist")); - }; - scriptElem.src = "/webauthn/webauthn-polyfill/webauthn-polyfill.js"; - if (document.body) { - document.body.appendChild(scriptElem); - } else { - debug("ensureInterface: DOM has no body"); - return reject(new Error("ensureInterface: DOM has no body")); - } + if (typeof navigator.credentials.create !== "function") { + debug = console.log; + + return loadJavaScript("/webauthn/webauthn-polyfill/webauthn-polyfill.js") + .then(() => { + return loadJavaScript("/webauthn/webauthn-soft-authn/soft-authn.js"); + }); + } else { + return Promise.resolve(); + } +} + +function loadJavaScript(path) { + return new Promise((resolve, reject) => { + // dynamic loading of polyfill script by creating new <script> tag and seeing the src= + var scriptElem = document.createElement("script"); + if (typeof scriptElem !== "object") { + debug("ensureInterface: Error creating script element while attempting loading polyfill"); + return reject(new Error("ensureInterface: Error creating script element while loading polyfill")); + } + scriptElem.type = "application/javascript"; + scriptElem.onload = function() { + debug("!!! Loaded " + path + " ..."); + return resolve(); + }; + scriptElem.onerror = function() { + debug("navigator.credentials.create does not exist"); + resolve(); + }; + scriptElem.src = path; + if (document.body) { + document.body.appendChild(scriptElem); + } else { + debug("ensureInterface: DOM has no body"); + return reject(new Error("ensureInterface: DOM has no body")); } }); } @@ -201,9 +413,10 @@ function standardSetup(cb) { return ensureInterface() .then(() => { if (cb) return cb(); - }) - .catch((err) => { - return (err); }); } -//************* END DELETE AFTER 1/1/2017 *************** //
\ No newline at end of file +//************* END DELETE AFTER 1/1/2018 *************** // + +/* JSHINT */ +/* globals promise_rejects, assert_class_string, assert_equals, assert_idl_attribute, assert_readonly, promise_test */ +/* exported standardSetup, CreateCredentialsTest, GetCredentialsTest */
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/webauthn/interfaces.idl b/tests/wpt/web-platform-tests/webauthn/interfaces.idl index 173e5150cd4..dcd1f87b5d3 100644 --- a/tests/wpt/web-platform-tests/webauthn/interfaces.idl +++ b/tests/wpt/web-platform-tests/webauthn/interfaces.idl @@ -1,96 +1,134 @@ -[SecureContext] interface WebAuthentication { - Promise < ScopedCredentialInfo > makeCredential ( - Account accountInformation, - sequence < ScopedCredentialParameters > cryptoParameters, - BufferSource attestationChallenge, - optional ScopedCredentialOptions options - ); +[SecureContext, Exposed=Window] +interface PublicKeyCredential : Credential { + [SameObject] readonly attribute ArrayBuffer rawId; + [SameObject] readonly attribute AuthenticatorResponse response; + AuthenticationExtensions getClientExtensionResults(); +}; - Promise < WebAuthnAssertion > getAssertion ( - BufferSource assertionChallenge, - optional AssertionOptions options - ); +partial dictionary CredentialCreationOptions { + MakePublicKeyCredentialOptions publicKey; }; -[SecureContext] -interface ScopedCredentialInfo { - readonly attribute ScopedCredential credential; - readonly attribute CryptoKey publicKey; - readonly attribute WebAuthnAttestation attestation; +partial dictionary CredentialRequestOptions { + PublicKeyCredentialRequestOptions publicKey; }; -dictionary Account { - required DOMString rpDisplayName; - required DOMString displayName; - required DOMString id; - DOMString name; - DOMString imageURL; +partial interface PublicKeyCredential { + static Promise < boolean > isUserVerifyingPlatformAuthenticatorAvailable(); }; -dictionary ScopedCredentialParameters { - required ScopedCredentialType type; - required AlgorithmIdentifier algorithm; +[SecureContext, Exposed=Window] +interface AuthenticatorResponse { + [SameObject] readonly attribute ArrayBuffer clientDataJSON; }; -dictionary ScopedCredentialOptions { - unsigned long timeoutSeconds; - USVString rpId; - sequence < ScopedCredentialDescriptor > excludeList; - WebAuthnExtensions extensions; +[SecureContext, Exposed=Window] +interface AuthenticatorAttestationResponse : AuthenticatorResponse { + [SameObject] readonly attribute ArrayBuffer attestationObject; }; -[SecureContext] -interface WebAuthnAssertion { - readonly attribute ScopedCredential credential; - readonly attribute ArrayBuffer clientData; - readonly attribute ArrayBuffer authenticatorData; - readonly attribute ArrayBuffer signature; +[SecureContext, Exposed=Window] +interface AuthenticatorAssertionResponse : AuthenticatorResponse { + [SameObject] readonly attribute ArrayBuffer authenticatorData; + [SameObject] readonly attribute ArrayBuffer signature; + [SameObject] readonly attribute ArrayBuffer userHandle; }; -dictionary AssertionOptions { - unsigned long timeoutSeconds; - USVString rpId; - sequence < ScopedCredentialDescriptor > allowList; - WebAuthnExtensions extensions; +dictionary PublicKeyCredentialParameters { + required PublicKeyCredentialType type; + required COSEAlgorithmIdentifier alg; }; -dictionary WebAuthnExtensions { +dictionary MakePublicKeyCredentialOptions { + required PublicKeyCredentialRpEntity rp; + required PublicKeyCredentialUserEntity user; + + required BufferSource challenge; + required sequence<PublicKeyCredentialParameters> pubKeyCredParams; + + unsigned long timeout; + sequence<PublicKeyCredentialDescriptor> excludeCredentials = []; + AuthenticatorSelectionCriteria authenticatorSelection; + AttestationConveyancePreference attestation = "none"; + AuthenticationExtensions extensions; }; -[SecureContext] -interface WebAuthnAttestation { - readonly attribute USVString format; - readonly attribute ArrayBuffer clientData; - readonly attribute ArrayBuffer authenticatorData; - readonly attribute any attestation; +dictionary PublicKeyCredentialEntity { + required DOMString name; + USVString icon; }; -dictionary ClientData { - required DOMString challenge; - required DOMString origin; - required AlgorithmIdentifier hashAlg; - DOMString tokenBinding; - WebAuthnExtensions extensions; +dictionary PublicKeyCredentialRpEntity : PublicKeyCredentialEntity { + DOMString id; }; -enum ScopedCredentialType { - "ScopedCred" +dictionary PublicKeyCredentialUserEntity : PublicKeyCredentialEntity { + required BufferSource id; + required DOMString displayName; }; -[SecureContext] -interface ScopedCredential { - readonly attribute ScopedCredentialType type; - readonly attribute ArrayBuffer id; +dictionary AuthenticatorSelectionCriteria { + AuthenticatorAttachment authenticatorAttachment; + boolean requireResidentKey = false; + UserVerificationRequirement userVerification = "preferred"; }; -dictionary ScopedCredentialDescriptor { - required ScopedCredentialType type; - required BufferSource id; - sequence < Transport > transports; +enum AuthenticatorAttachment { + "platform", // Platform attachment + "cross-platform" // Cross-platform attachment +}; + +enum AttestationConveyancePreference { + "none", + "indirect", + "direct" +}; + +dictionary PublicKeyCredentialRequestOptions { + required BufferSource challenge; + unsigned long timeout; + USVString rpId; + sequence<PublicKeyCredentialDescriptor> allowCredentials = []; + UserVerificationRequirement userVerification = "preferred"; + AuthenticationExtensions extensions; +}; + +typedef record<DOMString, any> AuthenticationExtensions; + +dictionary CollectedClientData { + required DOMString type; + required DOMString challenge; + required DOMString origin; + required DOMString hashAlgorithm; + DOMString tokenBindingId; + AuthenticationExtensions clientExtensions; + AuthenticationExtensions authenticatorExtensions; +}; + +enum PublicKeyCredentialType { + "public-key" +}; + +dictionary PublicKeyCredentialDescriptor { + required PublicKeyCredentialType type; + required BufferSource id; + sequence<AuthenticatorTransport> transports; }; -enum Transport { +enum AuthenticatorTransport { "usb", "nfc", "ble" -};
\ No newline at end of file +}; + +typedef long COSEAlgorithmIdentifier; + +enum UserVerificationRequirement { + "required", + "preferred", + "discouraged" +}; + +typedef sequence<AAGUID> AuthenticatorSelectionList; + +typedef BufferSource AAGUID;
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/webauthn/makecredential-badargs-accountinformation.https.html b/tests/wpt/web-platform-tests/webauthn/makecredential-badargs-accountinformation.https.html deleted file mode 100644 index e0e95e584c7..00000000000 --- a/tests/wpt/web-platform-tests/webauthn/makecredential-badargs-accountinformation.https.html +++ /dev/null @@ -1,34 +0,0 @@ -<!DOCTYPE html> -<meta charset="utf-8"> -<title>WebAuthn makeCredential accountInformation Tests</title> -<link rel="author" title="Adam Powers" href="mailto:adam@fidoalliance.org"> -<link rel="help" href="https://w3c.github.io/webauthn/#iface-credential"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src=helpers.js></script> -<body></body> -<script> -standardSetup(function() { - "use strict"; - - // accountInformation bad values - new MakeCredentialTest({path: "accountInformation", value: undefined}).testBadArgs("accountInformation missing"); - new MakeCredentialTest("accountInformation", "hi mom").testBadArgs("accountInformation is string"); - new MakeCredentialTest("accountInformation", {}).testBadArgs("accountInformation is empty object"); - // accountInformation.rpDisplayName - new MakeCredentialTest({path: "accountInformation.rpDisplayName", value: undefined}).testBadArgs("accountInformation missing rpDisplayName"); - new MakeCredentialTest("accountInformation.rpDisplayName", {}).testBadArgs("Bad accountInformation: rpDisplayName is object"); - new MakeCredentialTest("accountInformation.rpDisplayName", null).testBadArgs("Bad accountInformation: rpDisplayName is null"); - new MakeCredentialTest("accountInformation.rpDisplayName", "").testBadArgs("Bad accountInformation: rpDisplayName is empty String"); - // accountInformation.displayName - new MakeCredentialTest({path: "accountInformation.displayName", value: undefined}).testBadArgs("accountInformation missing displayName"); - new MakeCredentialTest("accountInformation.displayName", {}).testBadArgs("Bad accountInformation: displayName is object"); - new MakeCredentialTest("accountInformation.displayName", null).testBadArgs("Bad accountInformation: displayName is null"); - new MakeCredentialTest("accountInformation.displayName", "").testBadArgs("Bad accountInformation: displayName is empty String"); - // accountInformation.id - new MakeCredentialTest({path: "accountInformation.id", value: undefined}).testBadArgs("accountInformation missing id"); - new MakeCredentialTest("accountInformation.id", {}).testBadArgs("Bad accountInformation: id is object"); - new MakeCredentialTest("accountInformation.id", null).testBadArgs("Bad accountInformation: id is null"); - new MakeCredentialTest("accountInformation.id", "").testBadArgs("Bad accountInformation: id is empty String"); -}); -</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/webauthn/makecredential-badargs-attestationchallenge.https.html b/tests/wpt/web-platform-tests/webauthn/makecredential-badargs-attestationchallenge.https.html deleted file mode 100644 index 441d1adfa2c..00000000000 --- a/tests/wpt/web-platform-tests/webauthn/makecredential-badargs-attestationchallenge.https.html +++ /dev/null @@ -1,20 +0,0 @@ -<!DOCTYPE html> -<meta charset="utf-8"> -<title>WebAuthn makeCredential attestationChallenge Tests</title> -<link rel="author" title="Adam Powers" href="mailto:adam@fidoalliance.org"> -<link rel="help" href="https://w3c.github.io/webauthn/#iface-credential"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src=helpers.js></script> -<body></body> -<script> -standardSetup(function() { - "use strict"; - - // attestationChallenge bad values - new MakeCredentialTest({path: "attestationChallenge", value: undefined}).testBadArgs("attestationChallenge missing"); - new MakeCredentialTest("attestationChallenge", "hi mom").testBadArgs("accountInformation is string"); - new MakeCredentialTest("attestationChallenge", {}).testBadArgs("accountInformation is empty object"); - new MakeCredentialTest("attestationChallenge", Uint8Array.from([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17])).testBadArgs("accountInformation is Uint8Array"); -}); -</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/webauthn/makecredential-badargs-cryptoparameters.https.html b/tests/wpt/web-platform-tests/webauthn/makecredential-badargs-cryptoparameters.https.html deleted file mode 100644 index 7e177573966..00000000000 --- a/tests/wpt/web-platform-tests/webauthn/makecredential-badargs-cryptoparameters.https.html +++ /dev/null @@ -1,33 +0,0 @@ -<!DOCTYPE html> -<meta charset="utf-8"> -<title>WebAuthn makeCredential cryptoParameters Tests</title> -<link rel="author" title="Adam Powers" href="mailto:adam@fidoalliance.org"> -<link rel="help" href="https://w3c.github.io/webauthn/#iface-credential"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src=helpers.js></script> -<body></body> -<script> -standardSetup(function() { - "use strict"; - - // cryptoParameters bad values - new MakeCredentialTest({path: "cryptoParameters", value: undefined}).testBadArgs("cryptoParameters is missing"); - new MakeCredentialTest("cryptoParameters", "hi mom").testBadArgs("cryptoParameters is String"); - new MakeCredentialTest("cryptoParameters", []).testBadArgs("cryptoParameters is empty Array"); - // cryptoParameters.type - new MakeCredentialTest({path: "cryptoParameters.0.type", value: undefined}).testBadArgs("cryptoParameters missing type"); - new MakeCredentialTest("cryptoParameters.0.type", {}).testBadArgs("Bad cryptoParameters: type is object"); - new MakeCredentialTest("cryptoParameters.0.type", null).testBadArgs("Bad cryptoParameters: type is null"); - new MakeCredentialTest("cryptoParameters.0.type", "").testBadArgs("Bad cryptoParameters: type is empty String"); - new MakeCredentialTest("cryptoParameters.0.type", "FIDO_2_0").testBadArgs("Bad cryptoParameters: type is not 'ScopedCred'"); - // cryptoParameters.algorithm - new MakeCredentialTest({path: "cryptoParameters.0.algorithm", value: undefined}).testBadArgs("cryptoParameters missing algorithm"); - new MakeCredentialTest("cryptoParameters.0.algorithm", {}).testBadArgs("Bad cryptoParameters: algorithm is object"); - new MakeCredentialTest("cryptoParameters.0.algorithm", null).testBadArgs("Bad cryptoParameters: algorithm is null"); - new MakeCredentialTest("cryptoParameters.0.algorithm", "").testBadArgs("Bad cryptoParameters: algorithm is empty String"); - // multiple cryptoParameters - new MakeCredentialTest("cryptoParameters.1", {type: "FIDO_2_0", algorithm: "RSASSA-PKCS1-v1_5"}).testBadArgs("Bad cryptoParameters: second param has invalid type"); - new MakeCredentialTest("cryptoParameters.1", {type: "ScopedCred", algorithm: ""}).testBadArgs("Bad cryptoParameters: second param has algorithm of empty String"); -}); -</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/webauthn/securecontext.http.html b/tests/wpt/web-platform-tests/webauthn/securecontext.http.html new file mode 100644 index 00000000000..82464bd8df8 --- /dev/null +++ b/tests/wpt/web-platform-tests/webauthn/securecontext.http.html @@ -0,0 +1,48 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>WebAuthn Secure Context Tests</title> +<link rel="author" title="Adam Powers" href="mailto:adam@fidoalliance.org"> +<link rel="help" href="https://w3c.github.io/webauthn/#iface-credential"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src=helpers.js></script> +<body></body> +<script> +standardSetup(function() { + "use strict"; + + // See https://www.w3.org/TR/secure-contexts/ + // Section 1.1 - 1.4 for list of examples referenced below + + // Example 1 + // http://example.com/ opened in a top-level browsing context is not a secure context, as it was not delivered over an authenticated and encrypted channel. + test (() => { + assert_false (typeof navigator.credentials.create === "function"); + }, "no navigator.credentials.create in non-secure context"); + + // Example 4: TODO + // If a non-secure context opens https://example.com/ in a new window, then things are more complicated. The new window’s status depends on how it was opened. If the non-secure context can obtain a reference to the secure context, or vice-versa, then the new window is not a secure context. + // + // This means that the following will both produce non-secure contexts: + //<a href="https://example.com/" target="_blank">Link!</a> + // <script> + // var w = window.open("https://example.com/"); + // < /script> + + // Example 6: TODO + // If https://example.com/ was somehow able to frame http://non-secure.example.com/ (perhaps the user has overridden mixed content checking?), the top-level frame would remain secure, but the framed content is not a secure context. + + // Example 7: TODO + // If, on the other hand, https://example.com/ is framed inside of http://non-secure.example.com/, then it is not a secure context, as its ancestor is not delivered over an authenticated and encrypted channel. + + // Example 9: TODO + // If http://non-secure.example.com/ in a top-level browsing context frames https://example.com/, which runs https://example.com/worker.js, then neither the framed document nor the worker are secure contexts. + + // Example 12: TODO + // https://example.com/ nested in http://non-secure.example.com/ may not connect to the secure worker, as it is not a secure context. + + // Example 13: TODO + // Likewise, if https://example.com/ nested in http://non-secure.example.com/ runs https://example.com/worker.js as a Shared Worker, then both the document and the worker are considered non-secure. + +}); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/webauthn/securecontext.https.html b/tests/wpt/web-platform-tests/webauthn/securecontext.https.html new file mode 100644 index 00000000000..9810a7fe149 --- /dev/null +++ b/tests/wpt/web-platform-tests/webauthn/securecontext.https.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>WebAuthn Secure Context Tests</title> +<link rel="author" title="Adam Powers" href="mailto:adam@fidoalliance.org"> +<link rel="help" href="https://w3c.github.io/webauthn/#iface-credential"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src=helpers.js></script> +<body></body> +<script> +standardSetup(function() { + "use strict"; + + // See https://www.w3.org/TR/secure-contexts/ + // Section 1.1 - 1.4 for list of examples referenced below + + // Example 2 + // https://example.com/ opened in a top-level browsing context is a secure context, as it was delivered over an authenticated and encrypted channel. + test (() => { + assert_true (typeof navigator.credentials.create === "function"); + }, "navigator.credentials.create exists in secure context"); + + // Example 3: TODO + // Example 5: TODO + // Example 8: TODO + // Example 10: TODO + // Example 11: TODO + +}); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/webdriver/OWNERS b/tests/wpt/web-platform-tests/webdriver/OWNERS index c004c0467e0..4b92bface16 100644 --- a/tests/wpt/web-platform-tests/webdriver/OWNERS +++ b/tests/wpt/web-platform-tests/webdriver/OWNERS @@ -1,5 +1,4 @@ @AutomatedTester -@JKereliuk @andreastt @lukeis @mjzffr diff --git a/tests/wpt/web-platform-tests/webdriver/tests/__init__.py b/tests/wpt/web-platform-tests/webdriver/tests/__init__.py index e69de29bb2d..0ba172ff2e2 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/__init__.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/__init__.py @@ -0,0 +1,4 @@ +import pytest + +# Enable pytest assert introspection for assertion helper +pytest.register_assert_rewrite('tests.support.asserts') diff --git a/tests/wpt/web-platform-tests/webdriver/tests/actions/mouse.py b/tests/wpt/web-platform-tests/webdriver/tests/actions/mouse.py index 95d284c4b72..bb7e1451aae 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/actions/mouse.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/actions/mouse.py @@ -1,7 +1,8 @@ import pytest -from tests.actions.support.mouse import assert_move_to_coordinates, get_center +from tests.actions.support.mouse import get_center from tests.actions.support.refine import get_events, filter_dict +from tests.support.asserts import assert_move_to_coordinates from tests.support.inline import inline from tests.support.wait import wait diff --git a/tests/wpt/web-platform-tests/webdriver/tests/actions/mouse_dblclick.py b/tests/wpt/web-platform-tests/webdriver/tests/actions/mouse_dblclick.py index f73f780a7a7..e9e4c26ad33 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/actions/mouse_dblclick.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/actions/mouse_dblclick.py @@ -1,7 +1,8 @@ import pytest -from tests.actions.support.mouse import assert_move_to_coordinates, get_center +from tests.actions.support.mouse import get_center from tests.actions.support.refine import get_events, filter_dict +from tests.support.asserts import assert_move_to_coordinates _DBLCLICK_INTERVAL = 640 diff --git a/tests/wpt/web-platform-tests/webdriver/tests/actions/support/mouse.py b/tests/wpt/web-platform-tests/webdriver/tests/actions/support/mouse.py index 63a771d9487..d627ebb9d39 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/actions/support/mouse.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/actions/support/mouse.py @@ -1,11 +1,3 @@ -def assert_move_to_coordinates(point, target, events): - for e in events: - if e["type"] != "mousemove": - assert e["pageX"] == point["x"] - assert e["pageY"] == point["y"] - assert e["target"] == target - - def get_center(rect): return { "x": rect["width"] / 2 + rect["x"], diff --git a/tests/wpt/web-platform-tests/webdriver/tests/cookies/add_cookie.py b/tests/wpt/web-platform-tests/webdriver/tests/cookies/add_cookie.py index 1ebbcb41de7..ff4a0c906da 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/cookies/add_cookie.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/cookies/add_cookie.py @@ -17,7 +17,7 @@ def test_add_domain_cookie(session, url, server_config): result = session.transport.send("POST", "session/%s/cookie" % session.session_id, create_cookie_request) assert result.status == 200 assert "value" in result.body - assert isinstance(result.body["value"], dict) + assert result.body["value"] is None result = session.transport.send("GET", "session/%s/cookie" % session.session_id) assert result.status == 200 @@ -54,7 +54,7 @@ def test_add_cookie_for_ip(session, url, server_config, configuration): result = session.transport.send("POST", "session/%s/cookie" % session.session_id, create_cookie_request) assert result.status == 200 assert "value" in result.body - assert isinstance(result.body["value"], dict) + assert result.body["value"] is None result = session.transport.send("GET", "session/%s/cookie" % session.session_id) assert result.status == 200 @@ -89,7 +89,7 @@ def test_add_non_session_cookie(session, url): result = session.transport.send("POST", "session/%s/cookie" % session.session_id, create_cookie_request) assert result.status == 200 assert "value" in result.body - assert isinstance(result.body["value"], dict) + assert result.body["value"] is None result = session.transport.send("GET", "session/%s/cookie" % session.session_id) assert result.status == 200 @@ -122,7 +122,7 @@ def test_add_session_cookie(session, url): result = session.transport.send("POST", "session/%s/cookie" % session.session_id, create_cookie_request) assert result.status == 200 assert "value" in result.body - assert isinstance(result.body["value"], dict) + assert result.body["value"] is None result = session.transport.send("GET", "session/%s/cookie" % session.session_id) assert result.status == 200 @@ -136,8 +136,8 @@ def test_add_session_cookie(session, url): assert isinstance(cookie["name"], basestring) assert "value" in cookie assert isinstance(cookie["value"], basestring) - assert "expiry" in cookie - assert cookie.get("expiry") is None + if "expiry" in cookie: + assert cookie.get("expiry") is None assert cookie["name"] == "hello" assert cookie["value"] == "world" @@ -155,7 +155,7 @@ def test_add_session_cookie_with_leading_dot_character_in_domain(session, url, s result = session.transport.send("POST", "session/%s/cookie" % session.session_id, create_cookie_request) assert result.status == 200 assert "value" in result.body - assert isinstance(result.body["value"], dict) + assert result.body["value"] is None result = session.transport.send("GET", "session/%s/cookie" % session.session_id) assert result.status == 200 diff --git a/tests/wpt/web-platform-tests/webdriver/tests/cookies/delete_cookie.py b/tests/wpt/web-platform-tests/webdriver/tests/cookies/delete_cookie.py index 677fd94e8ba..813ee884070 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/cookies/delete_cookie.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/cookies/delete_cookie.py @@ -119,5 +119,4 @@ def test_unknown_cookie(session): response = delete_cookie(session, "stilton") assert response.status == 200 assert "value" in response.body - assert isinstance(response.body["value"], dict) - assert response.body["value"] == {} + assert response.body["value"] is None diff --git a/tests/wpt/web-platform-tests/webdriver/tests/cookies/get_named_cookie.py b/tests/wpt/web-platform-tests/webdriver/tests/cookies/get_named_cookie.py index f367eccf947..806dda37887 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/cookies/get_named_cookie.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/cookies/get_named_cookie.py @@ -26,8 +26,8 @@ def test_get_named_session_cookie(session, url): assert isinstance(cookie["secure"], bool) assert "httpOnly" in cookie assert isinstance(cookie["httpOnly"], bool) - assert "expiry" in cookie - assert cookie.get("expiry") is None + if "expiry" in cookie: + assert cookie.get("expiry") is None assert cookie["name"] == "foo" assert cookie["value"] == "bar" @@ -77,7 +77,7 @@ def test_duplicated_cookie(session, url, server_config): result = session.transport.send("POST", "session/%s/cookie" % session.session_id, create_cookie_request) assert result.status == 200 assert "value" in result.body - assert isinstance(result.body["value"], dict) + assert result.body["value"] is None session.url = inline("<script>document.cookie = 'hello=newworld; domain=%s; path=/';</script>" % server_config["domains"][""]) result = session.transport.send("GET", "session/%s/cookie" % session.session_id) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/element_click/select.py b/tests/wpt/web-platform-tests/webdriver/tests/element_click/select.py index 15c36fc454f..ca5e498e72e 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/element_click/select.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/element_click/select.py @@ -211,3 +211,15 @@ def test_out_of_view_multiple(session): last_option = options[-1] last_option.click() assert last_option.selected + + +def test_option_disabled(session): + session.url = inline(""" + <select> + <option disabled>foo + </select>""") + option = session.find.css("option", all=False) + assert not option.selected + + option.click() + assert not option.selected diff --git a/tests/wpt/web-platform-tests/webdriver/tests/element_send_keys/form_controls.py b/tests/wpt/web-platform-tests/webdriver/tests/element_send_keys/form_controls.py new file mode 100644 index 00000000000..ee6269e2522 --- /dev/null +++ b/tests/wpt/web-platform-tests/webdriver/tests/element_send_keys/form_controls.py @@ -0,0 +1,94 @@ +import pytest + +from tests.support.asserts import assert_error, assert_same_element, assert_success +from tests.support.inline import inline + + +def element_send_keys(session, element, text): + return session.transport.send( + "POST", + "/session/{session_id}/element/{element_id}/value".format( + session_id=session.session_id, + element_id=element.id), + {"text": text}) + + +def add_event_listeners(element): + element.session.execute_script(""" + let [target] = arguments; + window.events = []; + for (let expected of ["focus", "blur", "change", "keypress", "keydown", "keyup", "input"]) { + target.addEventListener(expected, ({type}) => window.events.push(type)); + } + """, args=(element,)) + + +def get_events(session): + return session.execute_script("return window.events") + + +def test_input(session): + session.url = inline("<input>") + element = session.find.css("input", all=False) + assert element.property("value") == "" + + element_send_keys(session, element, "foo") + assert element.property("value") == "foo" + + +def test_textarea(session): + session.url = inline("<textarea>") + element = session.find.css("textarea", all=False) + assert element.property("value") == "" + + element_send_keys(session, element, "foo") + assert element.property("value") == "foo" + + +def test_input_append(session): + session.url = inline("<input value=a>") + element = session.find.css("input", all=False) + assert element.property("value") == "a" + + element_send_keys(session, element, "b") + assert element.property("value") == "ab" + + element_send_keys(session, element, "c") + assert element.property("value") == "abc" + + +def test_textarea_append(session): + session.url = inline("<textarea>a</textarea>") + element = session.find.css("textarea", all=False) + assert element.property("value") == "a" + + element_send_keys(session, element, "b") + assert element.property("value") == "ab" + + element_send_keys(session, element, "c") + assert element.property("value") == "abc" + + +@pytest.mark.parametrize("tag", ["input", "textarea"]) +def test_events(session, tag): + session.url = inline("<%s>" % tag) + element = session.find.css(tag, all=False) + add_event_listeners(element) + + element_send_keys(session, element, "foo") + assert element.property("value") == "foo" + assert get_events(session) == ["focus", + "keydown", + "keypress", + "input", + "keyup", + "keydown", + "keypress", + "input", + "keyup", + "keydown", + "keypress", + "input", + "keyup", + "change", + "blur"] diff --git a/tests/wpt/web-platform-tests/webdriver/tests/element_send_keys/interactability.py b/tests/wpt/web-platform-tests/webdriver/tests/element_send_keys/interactability.py index 5812f2b305f..bf1959fc415 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/element_send_keys/interactability.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/element_send_keys/interactability.py @@ -46,7 +46,7 @@ def test_document_element_is_interactable(session): response = send_keys_to_element(session, element, "foo") assert_success(response) - assert_same_element(session, element, session.active_element) + assert_same_element(session, body, session.active_element) assert result.property("value") == "foo" @@ -65,7 +65,7 @@ def test_iframe_is_interactable(session): response = send_keys_to_element(session, frame, "foo") assert_success(response) - assert_same_element(session, frame, session.active_element) + assert_same_element(session, body, session.active_element) # Any key events are immediately routed to the nested # browsing context's active document. diff --git a/tests/wpt/web-platform-tests/webdriver/tests/execute_async_script/__init__.py b/tests/wpt/web-platform-tests/webdriver/tests/execute_async_script/__init__.py new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/webdriver/tests/execute_async_script/__init__.py diff --git a/tests/wpt/web-platform-tests/webdriver/tests/execute_script/__init__.py b/tests/wpt/web-platform-tests/webdriver/tests/execute_script/__init__.py new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/webdriver/tests/execute_script/__init__.py diff --git a/tests/wpt/web-platform-tests/webdriver/tests/interaction/element_clear.py b/tests/wpt/web-platform-tests/webdriver/tests/interaction/element_clear.py index f9755f784e5..0443995c21b 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/interaction/element_clear.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/interaction/element_clear.py @@ -1,185 +1,390 @@ +# META: timeout=long + import pytest -from tests.support.asserts import assert_error, assert_success + +from tests.support.asserts import ( + assert_element_has_focus, + assert_error, + assert_success, +) from tests.support.inline import inline -def clear(session, element): - return session.transport.send("POST", "session/{session_id}/element/{element_id}/clear" - .format(session_id=session.session_id, - element_id=element.id)) +def add_event_listeners(element): + element.session.execute_script(""" + let [target] = arguments; + window.events = []; + for (let expected of ["focus", "blur", "change"]) { + target.addEventListener(expected, ({type}) => window.events.push(type)); + } + """, args=(element,)) -# 14.2 Element Clear +def get_events(session): + return session.execute_script("return window.events") -def test_no_browsing_context(session, create_window): - # 14.2 step 1 - session.url = inline("<p>This is not an editable paragraph.") - element = session.find.css("p", all=False) - session.window_handle = create_window() +@pytest.fixture(scope="session") +def text_file(tmpdir_factory): + fh = tmpdir_factory.mktemp("tmp").join("hello.txt") + fh.write("hello") + return fh + + +def element_clear(session, element): + return session.transport.send("POST", "/session/%s/element/%s/clear" % + (session.session_id, element.id)) + + +def test_closed_context(session, create_window): + new_window = create_window() + session.window_handle = new_window + session.url = inline("<input>") + element = session.find.css("input", all=False) session.close() - response = clear(session, element) + response = element_clear(session, element) assert_error(response, "no such window") -def test_element_not_found(session): - # 14.2 Step 2 - response = session.transport.send("POST", "session/{session_id}/element/{element_id}/clear" - .format(session_id=session.session_id, - element_id="box1")) +def test_connected_element(session): + session.url = inline("<input>") + element = session.find.css("input", all=False) - assert_error(response, "no such element") + session.url = inline("<input>") + response = element_clear(session, element) + assert_error(response, "stale element reference") -def test_element_not_editable(session): - # 14.2 Step 3 - session.url = inline("<p>This is not an editable paragraph.") +def test_pointer_interactable(session): + session.url = inline("<input style='margin-left: -1000px' value=foobar>") + element = session.find.css("input", all=False) - element = session.find.css("p", all=False) - response = clear(session, element) - assert_error(response, "invalid element state") + response = element_clear(session, element) + assert_error(response, "element not interactable") -def test_button_element_not_resettable(session): - # 14.2 Step 3 - session.url = inline("<input type=button value=Federer>") +def test_keyboard_interactable(session): + session.url = inline(""" + <input value=foobar> + <div></div> + <style> + div { + position: absolute; + background: blue; + top: 0; + } + </style> + """) + element = session.find.css("input", all=False) + assert element.property("value") == "foobar" + + response = element_clear(session, element) + assert_success(response) + assert element.property("value") == "" + + +@pytest.mark.parametrize("type,value,default", + [("number", "42", ""), + ("range", "42", "50"), + ("email", "foo@example.com", ""), + ("password", "password", ""), + ("search", "search", ""), + ("tel", "999", ""), + ("text", "text", ""), + ("url", "https://example.com/", ""), + ("color", "#ff0000", "#000000"), + ("date", "2017-12-26", ""), + ("datetime", "2017-12-26T19:48", ""), + ("datetime-local", "2017-12-26T19:48", ""), + ("time", "19:48", ""), + ("month", "2017-11", ""), + ("week", "2017-W52", "")]) +def test_input(session, type, value, default): + session.url = inline("<input type=%s value='%s'>" % (type, value)) + element = session.find.css("input", all=False) + add_event_listeners(element) + assert element.property("value") == value + + response = element_clear(session, element) + assert_success(response) + assert element.property("value") == default + events = get_events(session) + assert "focus" in events + assert "change" in events + assert "blur" in events + assert_element_has_focus(session.execute_script("return document.body")) + + +@pytest.mark.parametrize("type", + ["number", + "range", + "email", + "password", + "search", + "tel", + "text", + "url", + "color", + "date", + "datetime", + "datetime-local", + "time", + "month", + "week", + "file"]) +def test_input_disabled(session, type): + session.url = inline("<input type=%s disabled>" % type) element = session.find.css("input", all=False) - response = clear(session, element) - assert_error(response, "invalid element state") + response = element_clear(session, element) + assert_error(response, "invalid element state") -def test_disabled_element_not_resettable(session): - # 14.2 Step 3 - session.url = inline("<input type=text value=Federer disabled>") +@pytest.mark.parametrize("type", + ["number", + "range", + "email", + "password", + "search", + "tel", + "text", + "url", + "color", + "date", + "datetime", + "datetime-local", + "time", + "month", + "week", + "file"]) +def test_input_readonly(session, type): + session.url = inline("<input type=%s readonly>" % type) element = session.find.css("input", all=False) - response = clear(session, element) + + response = element_clear(session, element) assert_error(response, "invalid element state") -def test_scroll_into_element_view(session): - # 14.2 Step 4 - session.url = inline("<input type=text value=Federer><div style= \"height: 200vh; width: 5000vh\">") +def test_textarea(session): + session.url = inline("<textarea>foobar</textarea>") + element = session.find.css("textarea", all=False) + add_event_listeners(element) + assert element.property("value") == "foobar" - # Scroll to the bottom right of the page - session.execute_script("window.scrollTo(document.body.scrollWidth, document.body.scrollHeight);") - element = session.find.css("input", all=False) - # Clear and scroll back to the top of the page - response = clear(session, element) + response = element_clear(session, element) assert_success(response) + assert element.property("value") == "" + events = get_events(session) + assert "focus" in events + assert "change" in events + assert "blur" in events - # Check if element cleared is scrolled into view - rect = session.execute_script("return document.getElementsByTagName(\"input\")[0].getBoundingClientRect()") - pageDict = {} +def test_textarea_disabled(session): + session.url = inline("<textarea disabled></textarea>") + element = session.find.css("textarea", all=False) - pageDict["innerHeight"] = session.execute_script("return window.innerHeight") - pageDict["innerWidth"] = session.execute_script("return window.innerWidth") - pageDict["pageXOffset"] = session.execute_script("return window.pageXOffset") - pageDict["pageYOffset"] = session.execute_script("return window.pageYOffset") + response = element_clear(session, element) + assert_error(response, "invalid element state") - assert rect["top"] < (pageDict["innerHeight"] + pageDict["pageYOffset"]) and \ - rect["left"] < (pageDict["innerWidth"] + pageDict["pageXOffset"]) and \ - (rect["top"] + element.rect["height"]) > pageDict["pageYOffset"] and \ - (rect["left"] + element.rect["width"]) > pageDict["pageXOffset"] +def test_textarea_readonly(session): + session.url = inline("<textarea readonly></textarea>") + element = session.find.css("textarea", all=False) + + response = element_clear(session, element) + assert_error(response, "invalid element state") -# TODO -# Any suggestions on implementation? -# def test_session_implicit_wait_timeout(session): - # 14.2 Step 5 -# TODO -# Any suggestions on implementation? -# def test_element_not_interactable(session): -# # 14.2 Step 6 -# assert_error(response, "element not interactable") +def test_input_file(session, text_file): + session.url = inline("<input type=file>") + element = session.find.css("input", all=False) + element.send_keys(str(text_file)) + response = element_clear(session, element) + assert_success(response) + assert element.property("value") == "" -def test_element_readonly(session): - # 14.2 Step 7 - session.url = inline("<input type=text readonly value=Federer>") +def test_input_file_multiple(session, text_file): + session.url = inline("<input type=file multiple>") element = session.find.css("input", all=False) - response = clear(session, element) + element.send_keys(str(text_file)) + element.send_keys(str(text_file)) + + response = element_clear(session, element) + assert_success(response) + assert element.property("value") == "" + + +def test_select(session): + session.url = inline(""" + <select> + <option>foo + </select> + """) + select = session.find.css("select", all=False) + option = session.find.css("option", all=False) + + response = element_clear(session, select) + assert_error(response, "invalid element state") + response = element_clear(session, option) assert_error(response, "invalid element state") -def test_element_disabled(session): - # 14.2 Step 7 - session.url = inline("<input type=text disabled value=Federer>") +def test_button(session): + session.url = inline("<button></button>") + button = session.find.css("button", all=False) - element = session.find.css("input", all=False) - response = clear(session, element) + response = element_clear(session, button) assert_error(response, "invalid element state") -def test_element_pointer_events_disabled(session): - # 14.2 Step 7 - session.url = inline("<input type=text value=Federer style=\"pointer-events: none\">") +def test_button_with_subtree(session): + """ + Whilst an <input> is normally editable, the focusable area + where it is placed will default to the <button>. I.e. if you + try to click <input> to focus it, you will hit the <button>. + """ + session.url = inline(""" + <button> + <input value=foobar> + </button> + """) + text_field = session.find.css("input", all=False) + + response = element_clear(session, text_field) + assert_error(response, "element not interactable") + + +def test_contenteditable(session): + session.url = inline("<p contenteditable>foobar</p>") + element = session.find.css("p", all=False) + add_event_listeners(element) + assert element.property("innerHTML") == "foobar" + + response = element_clear(session, element) + assert_success(response) + assert element.property("innerHTML") == "" + assert get_events(session) == ["focus", "change", "blur"] + assert_element_has_focus(session.execute_script("return document.body")) + + + +def test_designmode(session): + session.url = inline("foobar") + element = session.find.css("body", all=False) + assert element.property("innerHTML") == "foobar" + session.execute_script("document.designMode = 'on'") + + response = element_clear(session, element) + assert_success(response) + assert element.property("innerHTML") == "<br>" + assert_element_has_focus(session.execute_script("return document.body")) + +def test_resettable_element_focus_when_empty(session): + session.url = inline("<input>") + element = session.find.css("input", all=False) + add_event_listeners(element) + assert element.property("value") == "" + + response = element_clear(session, element) + assert_success(response) + assert element.property("value") == "" + assert get_events(session) == [] + + +@pytest.mark.parametrize("type,invalid_value", + [("number", "foo"), + ("range", "foo"), + ("email", "foo"), + ("url", "foo"), + ("color", "foo"), + ("date", "foo"), + ("datetime", "foo"), + ("datetime-local", "foo"), + ("time", "foo"), + ("month", "foo"), + ("week", "foo")]) +def test_resettable_element_does_not_satisfy_validation_constraints(session, type, invalid_value): + """ + Some UAs allow invalid input to certain types of constrained + form controls. For example, Gecko allows non-valid characters + to be typed into <input type=number> but Chrome does not. + Since we want to test that Element Clear works for clearing the + invalid characters in these UAs, it is fine to skip this test + where UAs do not allow the element to not satisfy its constraints. + """ + session.url = inline("<input type=%s>" % type) + element = session.find.css("input", all=False) + + def is_valid(element): + return session.execute_script(""" + let [input] = arguments; + return input.validity.valid; + """, args=(element,)) + + # value property does not get updated if the input is invalid + element.send_keys(invalid_value) + + # UA does not allow invalid input for this form control type + if is_valid(element): + return + + response = element_clear(session, element) + assert_success(response) + assert is_valid(element) + + +@pytest.mark.parametrize("type", + ["checkbox", + "radio", + "hidden", + "submit", + "button", + "image"]) +def test_non_editable_inputs(session, type): + session.url = inline("<input type=%s>" % type) element = session.find.css("input", all=False) - response = clear(session, element) + + response = element_clear(session, element) assert_error(response, "invalid element state") -@pytest.mark.parametrize("element", [["text", "<input id=text type=text value=\"Federer\"><input id=empty type=text value=\"\">"], - ["search", "<input id=search type=search value=\"Federer\"><input id=empty type=search value=\"\">"], - ["url", "<input id=url type=url value=\"www.hello.com\"><input id=empty type=url value=\"\">"], - ["tele", "<input id=tele type=telephone value=\"2061234567\"><input id=empty type=telephone value=\"\">"], - ["email", "<input id=email type=email value=\"hello@world.com\"><input id=empty type=email value=\"\">"], - ["password", "<input id=password type=password value=\"pass123\"><input id=empty type=password value=\"\">"], - ["date", "<input id=date type=date value=\"2017-12-25\"><input id=empty type=date value=\"\">"], - ["time", "<input id=time type=time value=\"11:11\"><input id=empty type=time value=\"\">"], - ["number", "<input id=number type=number value=\"19\"><input id=empty type=number value=\"\">"], - ["range", "<input id=range type=range min=\"0\" max=\"10\"><input id=empty type=range value=\"\">"], - ["color", "<input id=color type=color value=\"#ff0000\"><input id=empty type=color value=\"\">"], - ["file", "<input id=file type=file value=\"C:\\helloworld.txt\"><input id=empty type=file value=\"\">"], - ["textarea", "<textarea id=textarea>Hello World</textarea><textarea id=empty></textarea>"], - ["sel", "<select id=sel><option></option><option>a</option><option>b</option></select><select id=empty><option></option></select>"], - ["out", "<output id=out value=100></output><output id=empty></output>"], - ["para", "<p id=para contenteditable=true>This is an editable paragraph.</p><p id=empty contenteditable=true></p>"]]) - -def test_clear_content_editable_resettable_element(session, element): - # 14.2 Step 8 - url = element[1] + """<input id=focusCheck type=checkbox> - <input id=blurCheck type=checkbox> - <script> - var id = "%s"; - document.getElementById(id).addEventListener("focus", checkFocus); - document.getElementById(id).addEventListener("blur", checkBlur); - document.getElementById("empty").addEventListener("focus", checkFocus); - document.getElementById("empty").addEventListener("blur", checkBlur); - - function checkFocus() { - document.getElementById("focusCheck").checked = true; - } - function checkBlur() { - document.getElementById("blurCheck").checked = true; - } - </script>""" % element[0] - session.url = inline(url) - # Step 1 - empty_element = session.find.css("#empty", all=False) - clear_element_test_helper(session, empty_element, False) - session.execute_script("document.getElementById(\"focusCheck\").checked = false;") - session.execute_script("document.getElementById(\"blurCheck\").checked = false;") - # Step 2 - 4 - test_element = session.find.css("#" + element[0], all=False) - clear_element_test_helper(session, test_element, True) - - -def clear_element_test_helper(session, element, value): - response = clear(session, element) +def test_scroll_into_view(session): + session.url = inline(""" + <input value=foobar> + <div style='height: 200vh; width: 5000vh'> + """) + element = session.find.css("input", all=False) + assert element.property("value") == "foobar" + assert session.execute_script("return window.scrollY") == 0 + + # scroll to the bottom right of the page + session.execute_script(""" + let {scrollWidth, scrollHeight} = document.body; + window.scrollTo(scrollWidth, scrollHeight); + """) + + # clear and scroll back to the top of the page + response = element_clear(session, element) assert_success(response) - response = session.execute_script("return document.getElementById(\"focusCheck\").checked;") - assert response is value - response = session.execute_script("return document.getElementById(\"blurCheck\").checked;") - assert response is value - if element.name == "p": - response = session.execute_script("return document.getElementById(\"para\").innerHTML;") - assert response == "" - else: - assert element.property("value") == "" + assert element.property("value") == "" + + # check if element cleared is scrolled into view + rect = session.execute_script(""" + let [input] = arguments; + return input.getBoundingClientRect(); + """, args=(element,)) + window = session.execute_script(""" + let {innerHeight, innerWidth, pageXOffset, pageYOffset} = window; + return {innerHeight, innerWidth, pageXOffset, pageYOffset}; + """) + + assert rect["top"] < (window["innerHeight"] + window["pageYOffset"]) and \ + rect["left"] < (window["innerWidth"] + window["pageXOffset"]) and \ + (rect["top"] + element.rect["height"]) > window["pageYOffset"] and \ + (rect["left"] + element.rect["width"]) > window["pageXOffset"] diff --git a/tests/wpt/web-platform-tests/webdriver/tests/sessions/new_session/response.py b/tests/wpt/web-platform-tests/webdriver/tests/sessions/new_session/response.py index 0bec23f9990..c9a8c766eca 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/sessions/new_session/response.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/sessions/new_session/response.py @@ -50,5 +50,5 @@ def test_timeouts(new_session, add_browser_capabilites, platform_name): } def test_pageLoadStrategy(new_session, add_browser_capabilites, platform_name): - resp, _ = new_session({"capabilities": add_browser_capabilites({"alwaysMatch": {"pageLoadStrategy": "eager"}})}) + resp, _ = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({"pageLoadStrategy": "eager"})}}) assert resp["capabilities"]["pageLoadStrategy"] == "eager" diff --git a/tests/wpt/web-platform-tests/webdriver/tests/sessions/new_session/support/create.py b/tests/wpt/web-platform-tests/webdriver/tests/sessions/new_session/support/create.py index 231199d120f..85ae1cd4ea8 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/sessions/new_session/support/create.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/sessions/new_session/support/create.py @@ -6,7 +6,7 @@ valid_data = [ ("platformName", [None]), ("pageLoadStrategy", ["none", "eager", "normal", None]), ("proxy", [None]), - ("timeouts", [{"script": 0, "pageLoad": 2.0, "implicit": 2**64 - 1}, + ("timeouts", [{"script": 0, "pageLoad": 2.0, "implicit": 2**53 - 1}, {"script": 50, "pageLoad": 25}, {"script": 500}, {}]), diff --git a/tests/wpt/web-platform-tests/webdriver/tests/state/get_element_attribute.py b/tests/wpt/web-platform-tests/webdriver/tests/state/get_element_attribute.py index 1301a45a73c..ce78e11d3ff 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/state/get_element_attribute.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/state/get_element_attribute.py @@ -1,3 +1,5 @@ +# META: timeout=long + import pytest from tests.support.asserts import assert_error, assert_success, assert_dialog_handled diff --git a/tests/wpt/web-platform-tests/webdriver/tests/state/get_element_property.py b/tests/wpt/web-platform-tests/webdriver/tests/state/get_element_property.py index c76c5610462..e4da98e0c3f 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/state/get_element_property.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/state/get_element_property.py @@ -1,3 +1,5 @@ +# META: timeout=long + from tests.support.asserts import assert_error, assert_dialog_handled, assert_success from tests.support.inline import inline from tests.support.fixtures import create_dialog diff --git a/tests/wpt/web-platform-tests/webdriver/tests/state/get_element_tag_name.py b/tests/wpt/web-platform-tests/webdriver/tests/state/get_element_tag_name.py index 2dd7528bb20..e3ed83f3f20 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/state/get_element_tag_name.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/state/get_element_tag_name.py @@ -1,3 +1,5 @@ +# META: timeout=long + from tests.support.asserts import assert_error, assert_dialog_handled, assert_success from tests.support.inline import inline from tests.support.fixtures import create_dialog diff --git a/tests/wpt/web-platform-tests/webdriver/tests/state/is_element_selected.py b/tests/wpt/web-platform-tests/webdriver/tests/state/is_element_selected.py index 392929a5828..b51ba020fa4 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/state/is_element_selected.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/state/is_element_selected.py @@ -1,3 +1,5 @@ +# META: timeout=long + from tests.support.asserts import assert_error, assert_dialog_handled, assert_success from tests.support.inline import inline from tests.support.fixtures import create_dialog diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/asserts.py b/tests/wpt/web-platform-tests/webdriver/tests/support/asserts.py index 95859ac3d2b..a1cd0f95419 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/support/asserts.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/support/asserts.py @@ -137,3 +137,22 @@ def assert_same_element(session, a, b): pass raise AssertionError(message) + + +def assert_element_has_focus(target_element): + session = target_element.session + + active_element = session.execute_script("return document.activeElement") + active_tag = active_element.property("localName") + target_tag = target_element.property("localName") + + assert active_element == target_element, ( + "Focussed element is <%s>, not <%s>" % (active_tag, target_tag)) + + +def assert_move_to_coordinates(point, target, events): + for e in events: + if e["type"] != "mousemove": + assert e["pageX"] == point["x"] + assert e["pageY"] == point["y"] + assert e["target"] == target diff --git a/tests/wpt/web-platform-tests/webmessaging/MessageEvent.html b/tests/wpt/web-platform-tests/webmessaging/MessageEvent.html index e95b3efc2ac..4fb68b5999b 100644 --- a/tests/wpt/web-platform-tests/webmessaging/MessageEvent.html +++ b/tests/wpt/web-platform-tests/webmessaging/MessageEvent.html @@ -18,4 +18,11 @@ prefixes.forEach(function(prefix) { assert_false(name in event); }, name + " on the instance"); }); + +test(function() { + var event = new MessageEvent("message"); + assert_throws(new TypeError(), function() { + event.initMessageEvent(); + }, "Not enough arguments to initMessageEvent"); +}, "initMessageEvent with no arguments"); </script> diff --git a/tests/wpt/web-platform-tests/webrtc/RTCStats-helper.js b/tests/wpt/web-platform-tests/webrtc/RTCStats-helper.js index c2be1b3124f..e91b40b6854 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCStats-helper.js +++ b/tests/wpt/web-platform-tests/webrtc/RTCStats-helper.js @@ -178,7 +178,7 @@ function validateRtpStreamStats(statsReport, stats) { assert_optional_unsigned_int_field(stats, 'firCount'); assert_optional_unsigned_int_field(stats, 'pliCount'); - assert_unsigned_int_field(stats, 'nackCount'); + assert_optional_unsigned_int_field(stats, 'nackCount'); assert_optional_unsigned_int_field(stats, 'sliCount'); assert_optional_unsigned_int_field(stats, 'qpSum'); } @@ -211,15 +211,15 @@ function validateCodecStats(statsReport, stats) { validateRtcStats(statsReport, stats); assert_unsigned_int_field(stats, 'payloadType'); - assert_enum_field(stats, 'codecType', ['encode', 'decode']); + assert_optional_enum_field(stats, 'codecType', ['encode', 'decode']); validateOptionalIdField(statsReport, stats, 'transportId', 'transport'); assert_optional_string_field(stats, 'mimeType'); assert_unsigned_int_field(stats, 'clockRate'); - assert_unsigned_int_field(stats, 'channels'); + assert_optional_unsigned_int_field(stats, 'channels'); - assert_string_field(stats, 'sdpFmtpLine'); + assert_optional_string_field(stats, 'sdpFmtpLine'); assert_optional_string_field(stats, 'implementation'); } @@ -365,7 +365,9 @@ function validateOutboundRtpStreamStats(statsReport, stats) { assert_optional_number_field(stats, 'lastPacketSentTimestamp'); assert_optional_number_field(stats, 'targetBitrate'); - assert_unsigned_int_field(stats, 'framesEncoded'); + if (stats['mediaType'] == 'video') { + assert_unsigned_int_field(stats, 'framesEncoded'); + } assert_optional_number_field(stats, 'totalEncodeTime'); assert_optional_number_field(stats, 'averageRTCPInterval'); } @@ -526,35 +528,38 @@ function validateMediaStreamTrackStats(statsReport, stats) { assert_optional_enum_field(stats, 'kind', ['audio', 'video']); assert_optional_number_field(stats, 'estimatedPlayoutTimestamp'); + if (stats['kind'] === 'video') { + assert_unsigned_int_field(stats, 'frameWidth'); + assert_unsigned_int_field(stats, 'frameHeight'); + assert_number_field(stats, 'framesPerSecond'); + if (stats['framesSent']) { + assert_optional_unsigned_int_field(stats, 'framesCaptured'); + assert_unsigned_int_field(stats, 'framesSent'); + assert_optional_unsigned_int_field(stats, 'keyFramesSent'); + } else { + assert_unsigned_int_field(stats, 'framesReceived'); + assert_optional_unsigned_int_field(stats, 'keyFramesReceived'); + assert_unsigned_int_field(stats, 'framesDecoded'); + assert_unsigned_int_field(stats, 'framesDropped'); + assert_unsigned_int_field(stats, 'framesCorrupted'); + } - assert_unsigned_int_field(stats, 'frameWidth'); - assert_unsigned_int_field(stats, 'frameHeight'); - assert_number_field(stats, 'framesPerSecond'); - - assert_optional_unsigned_int_field(stats, 'framesCaptured'); - assert_unsigned_int_field(stats, 'framesSent'); - assert_optional_unsigned_int_field(stats, 'keyFramesSent'); - assert_unsigned_int_field(stats, 'framesReceived'); - assert_optional_unsigned_int_field(stats, 'keyFramesReceived'); - assert_unsigned_int_field(stats, 'framesDecoded'); - assert_unsigned_int_field(stats, 'framesDropped'); - assert_unsigned_int_field(stats, 'framesCorrupted'); - - assert_optional_unsigned_int_field(stats, 'partialFramesLost'); - assert_optional_unsigned_int_field(stats, 'fullFramesLost'); - - assert_number_field(stats, 'audioLevel'); - assert_optional_number_field(stats, 'totalAudioEnergy'); - assert_optional_boolean_field(stats, 'voiceActivityFlag'); - assert_optional_number_field(stats, 'echoReturnLoss'); - assert_optional_number_field(stats, 'echoReturnLossEnhancement'); - - assert_optional_unsigned_int_field(stats, 'totalSamplesSent'); - assert_optional_unsigned_int_field(stats, 'totalSamplesReceived'); - assert_optional_number_field(stats, 'totalSamplesDuration'); - assert_optional_unsigned_int_field(stats, 'concealedSamples'); - assert_optional_unsigned_int_field(stats, 'concealmentEvents'); - assert_optional_number_field(stats, 'jitterBufferDelay'); + assert_optional_unsigned_int_field(stats, 'partialFramesLost'); + assert_optional_unsigned_int_field(stats, 'fullFramesLost'); + } else { + assert_number_field(stats, 'audioLevel'); + assert_optional_number_field(stats, 'totalAudioEnergy'); + assert_optional_boolean_field(stats, 'voiceActivityFlag'); + assert_optional_number_field(stats, 'echoReturnLoss'); + assert_optional_number_field(stats, 'echoReturnLossEnhancement'); + + assert_optional_unsigned_int_field(stats, 'totalSamplesSent'); + assert_optional_unsigned_int_field(stats, 'totalSamplesReceived'); + assert_optional_number_field(stats, 'totalSamplesDuration'); + assert_optional_unsigned_int_field(stats, 'concealedSamples'); + assert_optional_unsigned_int_field(stats, 'concealmentEvents'); + assert_optional_number_field(stats, 'jitterBufferDelay'); + } assert_optional_enum_field(stats, 'priority', ['very-low', 'low', 'medium', 'high']); @@ -651,7 +656,8 @@ function validateTransportStats(statsReport, stats) { assert_unsigned_int_field(stats, 'bytesSent'); assert_unsigned_int_field(stats, 'bytesReceived'); - validateIdField(statsReport, stats, 'rtcpTransportStatsId', 'transport'); + validateOptionalIdField(statsReport, stats, 'rtcpTransportStatsId', + 'transport'); assert_optional_enum_field(stats, 'iceRole', ['controlling', 'controlled']); @@ -721,7 +727,7 @@ function validateIceCandidateStats(statsReport, stats) { ['host', 'srflx', 'prflx', 'relay']); assert_int_field(stats, 'priority'); - assert_string_field(stats, 'url'); + assert_optional_string_field(stats, 'url'); assert_optional_string_field(stats, 'relayProtocol'); assert_optional_boolean_field(stats, 'deleted'); } @@ -788,7 +794,7 @@ function validateIceCandidatePairStats(statsReport, stats) { assert_optional_unsigned_int_field(stats, 'packetsSent'); assert_optional_unsigned_int_field(stats, 'packetsReceived'); assert_unsigned_int_field(stats, 'bytesSent'); - assert_unsigned_int_field(stats, 'byteReceived'); + assert_unsigned_int_field(stats, 'bytesReceived'); assert_optional_number_field(stats, 'lastPacketSentTimestamp'); assert_optional_number_field(stats, 'lastPacketReceivedTimestamp'); @@ -834,5 +840,5 @@ function validateCertificateStats(statsReport, stats) { assert_string_field(stats, 'fingerprint'); assert_string_field(stats, 'fingerprintAlgorithm'); assert_string_field(stats, 'base64Certificate'); - assert_string_field(stats, 'issuerCertificateId'); + assert_optional_string_field(stats, 'issuerCertificateId'); } diff --git a/tests/wpt/web-platform-tests/webxr/resources/webxr_util.js b/tests/wpt/web-platform-tests/webxr/resources/webxr_util.js index a663b2d1d9a..388c7578c5e 100644 --- a/tests/wpt/web-platform-tests/webxr/resources/webxr_util.js +++ b/tests/wpt/web-platform-tests/webxr/resources/webxr_util.js @@ -11,6 +11,7 @@ function forEachWebxrObject(callback) { callback(window.XRSession, 'XRSession'); callback(window.XRSessionCreationOptions, 'XRSessionCreationOptions'); callback(window.XRFrameRequestCallback, 'XRFrameRequestCallback'); + callback(window.XRPresentationContext, 'XRPresentationContext'); callback(window.XRPresentationFrame, 'XRPresentationFrame'); callback(window.XRView, 'XRView'); callback(window.XRViewport, 'XRViewport'); diff --git a/tests/wpt/web-platform-tests/xhr/responsexml-document-properties.htm b/tests/wpt/web-platform-tests/xhr/responsexml-document-properties.htm index 30bf7d03741..f67ea10e24b 100644 --- a/tests/wpt/web-platform-tests/xhr/responsexml-document-properties.htm +++ b/tests/wpt/web-platform-tests/xhr/responsexml-document-properties.htm @@ -24,7 +24,7 @@ readyState:'complete', location:null, defaultView:null, - body:undefined, + body:null, images: undefined, doctype:null, forms:undefined, diff --git a/tests/wpt/web-platform-tests/xhr/xmlhttprequest-sync-default-feature-policy.sub.html b/tests/wpt/web-platform-tests/xhr/xmlhttprequest-sync-default-feature-policy.sub.html index 1866100bf06..5ad5557700d 100644 --- a/tests/wpt/web-platform-tests/xhr/xmlhttprequest-sync-default-feature-policy.sub.html +++ b/tests/wpt/web-platform-tests/xhr/xmlhttprequest-sync-default-feature-policy.sub.html @@ -17,11 +17,15 @@ try { var xhr = new XMLHttpRequest(); xhr.open("GET", "data:,", false); - xhr.send(); - resolve(); + try { + xhr.send(); + } catch(e) { + reject(e); + } } catch(e) { - reject(e); + reject({"name": "UnexpectedException:" + e.name}); } + resolve(); }); }); </script> |