diff options
185 files changed, 3080 insertions, 1071 deletions
diff --git a/tests/wpt/metadata/2dcontext/context-attributes/getContextAttributes.html.ini b/tests/wpt/metadata/2dcontext/context-attributes/getContextAttributes.html.ini index ad09d258bf7..b0402d23dd8 100644 --- a/tests/wpt/metadata/2dcontext/context-attributes/getContextAttributes.html.ini +++ b/tests/wpt/metadata/2dcontext/context-attributes/getContextAttributes.html.ini @@ -8,3 +8,6 @@ [Test default context creation attributes] expected: FAIL + [Test context creation attributes desynchronized: false] + expected: FAIL + diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index adff757c06f..ac63788bfbd 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -7591,18 +7591,6 @@ {} ] ], - "css/css-flexbox/interactive/flexbox_interactive_paged-overflow-2.html": [ - [ - "css/css-flexbox/interactive/flexbox_interactive_paged-overflow-2.html", - {} - ] - ], - "css/css-flexbox/interactive/flexbox_interactive_paged-overflow.html": [ - [ - "css/css-flexbox/interactive/flexbox_interactive_paged-overflow.html", - {} - ] - ], "css/css-fonts/font-family-name-000.xht": [ [ "css/css-fonts/font-family-name-000.xht", @@ -80187,6 +80175,42 @@ {} ] ], + "css/CSS2/sec5/class-000.xht": [ + [ + "css/CSS2/sec5/class-000.xht", + [ + [ + "/css/CSS2/sec5/class-000-ref.html", + "==" + ] + ], + {} + ] + ], + "css/CSS2/sec5/class-001.xht": [ + [ + "css/CSS2/sec5/class-001.xht", + [ + [ + "/css/CSS2/sec5/class-000-ref.html", + "==" + ] + ], + {} + ] + ], + "css/CSS2/sec5/class-002.xht": [ + [ + "css/CSS2/sec5/class-002.xht", + [ + [ + "/css/CSS2/sec5/class-002-ref.html", + "==" + ] + ], + {} + ] + ], "css/CSS2/sec5/descendant-selector-000.xht": [ [ "css/CSS2/sec5/descendant-selector-000.xht", @@ -80211,6 +80235,42 @@ {} ] ], + "css/CSS2/sec5/first-child-000.xht": [ + [ + "css/CSS2/sec5/first-child-000.xht", + [ + [ + "/css/CSS2/sec5/first-child-000-ref.html", + "==" + ] + ], + {} + ] + ], + "css/CSS2/sec5/first-child-001.xht": [ + [ + "css/CSS2/sec5/first-child-001.xht", + [ + [ + "/css/CSS2/sec5/first-child-000-ref.html", + "==" + ] + ], + {} + ] + ], + "css/CSS2/sec5/first-line-000.xht": [ + [ + "css/CSS2/sec5/first-line-000.xht", + [ + [ + "/css/CSS2/sec5/first-line-000-ref.html", + "==" + ] + ], + {} + ] + ], "css/CSS2/sec5/grouping-000.xht": [ [ "css/CSS2/sec5/grouping-000.xht", @@ -80243,6 +80303,102 @@ {} ] ], + "css/CSS2/sec5/id-000.xht": [ + [ + "css/CSS2/sec5/id-000.xht", + [ + [ + "/css/CSS2/sec5/class-000-ref.html", + "==" + ] + ], + {} + ] + ], + "css/CSS2/sec5/id-001.xht": [ + [ + "css/CSS2/sec5/id-001.xht", + [ + [ + "/css/CSS2/sec5/class-000-ref.html", + "==" + ] + ], + {} + ] + ], + "css/CSS2/selector/attribute-value-selector-007.html": [ + [ + "css/CSS2/selector/attribute-value-selector-007.html", + [ + [ + "/css/CSS2/selector/attribute-value-selector-007-ref.html", + "==" + ] + ], + {} + ] + ], + "css/CSS2/selector/attribute-value-selector-008.xht": [ + [ + "css/CSS2/selector/attribute-value-selector-008.xht", + [ + [ + "/css/CSS2/selector/attribute-value-selector-008-ref.html", + "==" + ] + ], + {} + ] + ], + "css/CSS2/selector/attribute-value-selector-009.xht": [ + [ + "css/CSS2/selector/attribute-value-selector-009.xht", + [ + [ + "/css/CSS2/selector/attribute-value-selector-009-ref.html", + "==" + ] + ], + {} + ] + ], + "css/CSS2/selector/attribute-value-selector-010.html": [ + [ + "css/CSS2/selector/attribute-value-selector-010.html", + [ + [ + "/css/CSS2/selector/attribute-value-selector-010-ref.html", + "==" + ] + ], + {} + ] + ], + "css/CSS2/selector/lang-pseudoclass-001.html": [ + [ + "css/CSS2/selector/lang-pseudoclass-001.html", + [ + [ + "/css/CSS2/selector/lang-pseudoclass-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/CSS2/selector/lang-pseudoclass-002.xht": [ + [ + "css/CSS2/selector/lang-pseudoclass-002.xht", + [ + [ + "/css/CSS2/selector/lang-pseudoclass-001-ref.html", + "==" + ] + ], + {} + ] + ], "css/CSS2/selectors/attribute-selector-001.xht": [ [ "css/CSS2/selectors/attribute-selector-001.xht", @@ -138317,6 +138473,18 @@ {} ] ], + "css/css-tables/toggle-row-display-property-001.html": [ + [ + "css/css-tables/toggle-row-display-property-001.html", + [ + [ + "/css/css-tables/toggle-row-display-property-001-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-tables/visibility-collapse-colspan-003.html": [ [ "css/css-tables/visibility-collapse-colspan-003.html", @@ -192975,42 +193143,6 @@ {} ] ], - "html/form-elements/the-textarea-element/multiline-placeholder-cr.html": [ - [ - "html/form-elements/the-textarea-element/multiline-placeholder-cr.html", - [ - [ - "/html/form-elements/the-textarea-element/multiline-placeholder-ref.html", - "==" - ] - ], - {} - ] - ], - "html/form-elements/the-textarea-element/multiline-placeholder-crlf.html": [ - [ - "html/form-elements/the-textarea-element/multiline-placeholder-crlf.html", - [ - [ - "/html/form-elements/the-textarea-element/multiline-placeholder-ref.html", - "==" - ] - ], - {} - ] - ], - "html/form-elements/the-textarea-element/multiline-placeholder.html": [ - [ - "html/form-elements/the-textarea-element/multiline-placeholder.html", - [ - [ - "/html/form-elements/the-textarea-element/multiline-placeholder-ref.html", - "==" - ] - ], - {} - ] - ], "html/input/the-placeholder-attribute/multiline-cr.html": [ [ "html/input/the-placeholder-attribute/multiline-cr.html", @@ -194907,6 +195039,42 @@ {} ] ], + "html/semantics/forms/the-textarea-element/multiline-placeholder-cr.html": [ + [ + "html/semantics/forms/the-textarea-element/multiline-placeholder-cr.html", + [ + [ + "/html/semantics/forms/the-textarea-element/multiline-placeholder-ref.html", + "==" + ] + ], + {} + ] + ], + "html/semantics/forms/the-textarea-element/multiline-placeholder-crlf.html": [ + [ + "html/semantics/forms/the-textarea-element/multiline-placeholder-crlf.html", + [ + [ + "/html/semantics/forms/the-textarea-element/multiline-placeholder-ref.html", + "==" + ] + ], + {} + ] + ], + "html/semantics/forms/the-textarea-element/multiline-placeholder.html": [ + [ + "html/semantics/forms/the-textarea-element/multiline-placeholder.html", + [ + [ + "/html/semantics/forms/the-textarea-element/multiline-placeholder-ref.html", + "==" + ] + ], + {} + ] + ], "html/semantics/forms/the-textarea-element/textarea-newline-bidi.html": [ [ "html/semantics/forms/the-textarea-element/textarea-newline-bidi.html", @@ -195899,6 +196067,18 @@ {} ] ], + "lifecycle/set-composited-layer-position.html": [ + [ + "lifecycle/set-composited-layer-position.html", + [ + [ + "/lifecycle/set-composited-layer-position-ref.html", + "==" + ] + ], + {} + ] + ], "mathml/presentation-markup/fractions/frac-bar-001.html": [ [ "mathml/presentation-markup/fractions/frac-bar-001.html", @@ -195935,6 +196115,42 @@ {} ] ], + "mathml/presentation-markup/fractions/frac-created-dynamically-2.html": [ + [ + "mathml/presentation-markup/fractions/frac-created-dynamically-2.html", + [ + [ + "/mathml/presentation-markup/fractions/frac-created-dynamically-2-ref.html", + "==" + ] + ], + {} + ] + ], + "mathml/presentation-markup/fractions/frac-created-dynamically-3.html": [ + [ + "mathml/presentation-markup/fractions/frac-created-dynamically-3.html", + [ + [ + "/mathml/presentation-markup/fractions/frac-created-dynamically-3-ref.html", + "==" + ] + ], + {} + ] + ], + "mathml/presentation-markup/fractions/frac-created-dynamically.html": [ + [ + "mathml/presentation-markup/fractions/frac-created-dynamically.html", + [ + [ + "/mathml/presentation-markup/fractions/frac-created-dynamically-ref.html", + "==" + ] + ], + {} + ] + ], "mathml/presentation-markup/fractions/frac-linethickness-001.html": [ [ "mathml/presentation-markup/fractions/frac-linethickness-001.html", @@ -196031,6 +196247,18 @@ {} ] ], + "mathml/presentation-markup/spaces/mspace-children.html": [ + [ + "mathml/presentation-markup/spaces/mspace-children.html", + [ + [ + "/mathml/presentation-markup/spaces/mspace-children-ref.html", + "==" + ] + ], + {} + ] + ], "mathml/presentation-markup/spaces/space-2.html": [ [ "mathml/presentation-markup/spaces/space-2.html", @@ -196655,6 +196883,18 @@ {} ] ], + "svg/embedded/image-embedding-svg-viewref-with-viewbox.svg": [ + [ + "svg/embedded/image-embedding-svg-viewref-with-viewbox.svg", + [ + [ + "/svg/embedded/reference/green-rect-100x100.svg", + "==" + ] + ], + {} + ] + ], "svg/embedded/image-embedding-svg-with-viewport-units-inline-style.svg": [ [ "svg/embedded/image-embedding-svg-with-viewport-units-inline-style.svg", @@ -202121,6 +202361,11 @@ {} ] ], + ".github/main.workflow": [ + [ + {} + ] + ], ".gitignore": [ [ {} @@ -202146,11 +202391,6 @@ {} ] ], - ".travis.yml": [ - [ - {} - ] - ], ".well-known/README.md": [ [ {} @@ -204586,11 +204826,6 @@ {} ] ], - "annotation-model/annotations/.gitignore": [ - [ - {} - ] - ], "annotation-model/annotations/3.1-annotationContextValidated.json": [ [ {} @@ -204836,11 +205071,6 @@ {} ] ], - "annotation-model/annotations/bodiesTargets/.gitignore": [ - [ - {} - ] - ], "annotation-model/annotations/bodiesTargets/3.2.1-bodyEWR.json": [ [ {} @@ -205466,11 +205696,6 @@ {} ] ], - "annotation-model/collections/.gitignore": [ - [ - {} - ] - ], "annotation-model/collections/3.3.1-collectionCreatedImplemented.json": [ [ {} @@ -205786,11 +206011,6 @@ {} ] ], - "annotation-model/definitions/.gitignore": [ - [ - {} - ] - ], "annotation-model/definitions/annotations.json": [ [ {} @@ -206281,11 +206501,6 @@ {} ] ], - "annotation-protocol/server/.gitignore": [ - [ - {} - ] - ], "annotation-protocol/tools/protocol-server.py": [ [ {} @@ -206296,11 +206511,6 @@ {} ] ], - "annotation-vocab/tools/.gitignore": [ - [ - {} - ] - ], "annotation-vocab/tools/README.md": [ [ {} @@ -207506,6 +207716,11 @@ {} ] ], + "common/echo.py": [ + [ + {} + ] + ], "common/entities.json": [ [ {} @@ -207696,11 +207911,6 @@ {} ] ], - "conformance-checkers/.gitignore": [ - [ - {} - ] - ], "conformance-checkers/META.yml": [ [ {} @@ -216506,6 +216716,11 @@ {} ] ], + "conformance-checkers/html/elements/a/download-novalid.html": [ + [ + {} + ] + ], "conformance-checkers/html/elements/a/href-isvalid.html": [ [ {} @@ -233266,11 +233481,6 @@ {} ] ], - "cors/resources/.gitignore": [ - [ - {} - ] - ], "cors/resources/304.py": [ [ {} @@ -233356,11 +233566,6 @@ {} ] ], - "css/.gitignore": [ - [ - {} - ] - ], "css/.htaccess": [ [ {} @@ -246071,11 +246276,31 @@ {} ] ], + "css/CSS2/sec5/class-000-ref.html": [ + [ + {} + ] + ], + "css/CSS2/sec5/class-002-ref.html": [ + [ + {} + ] + ], "css/CSS2/sec5/descendant-selector-000-ref.xht": [ [ {} ] ], + "css/CSS2/sec5/first-child-000-ref.html": [ + [ + {} + ] + ], + "css/CSS2/sec5/first-line-000-ref.html": [ + [ + {} + ] + ], "css/CSS2/sec5/grouping-000-notref.xht": [ [ {} @@ -246091,6 +246316,31 @@ {} ] ], + "css/CSS2/selector/attribute-value-selector-007-ref.html": [ + [ + {} + ] + ], + "css/CSS2/selector/attribute-value-selector-008-ref.html": [ + [ + {} + ] + ], + "css/CSS2/selector/attribute-value-selector-009-ref.html": [ + [ + {} + ] + ], + "css/CSS2/selector/attribute-value-selector-010-ref.html": [ + [ + {} + ] + ], + "css/CSS2/selector/lang-pseudoclass-001-ref.html": [ + [ + {} + ] + ], "css/CSS2/selectors/.htaccess": [ [ {} @@ -271721,11 +271971,6 @@ {} ] ], - "css/css-rhythm/tools/generators/.gitignore": [ - [ - {} - ] - ], "css/css-rhythm/tools/generators/README.md": [ [ {} @@ -272811,6 +273056,11 @@ {} ] ], + "css/css-tables/toggle-row-display-property-001-ref.html": [ + [ + {} + ] + ], "css/css-tables/tools/markup-generator.html": [ [ {} @@ -281791,11 +282041,6 @@ {} ] ], - "css/css-writing-modes/tools/generators/.gitignore": [ - [ - {} - ] - ], "css/css-writing-modes/tools/generators/README.md": [ [ {} @@ -289436,6 +289681,11 @@ {} ] ], + "element-timing/resources/iframe-with-square-sends-entry.html": [ + [ + {} + ] + ], "element-timing/resources/iframe-with-square.html": [ [ {} @@ -291296,12 +291546,12 @@ {} ] ], - "feature-policy/reporting/unoptimized-images-reporting-onload.html.headers": [ + "feature-policy/reporting/unoptimized-lossy-images-reporting-onload.html.headers": [ [ {} ] ], - "feature-policy/reporting/unoptimized-images-reporting.html.headers": [ + "feature-policy/reporting/unoptimized-lossy-images-reporting.html.headers": [ [ {} ] @@ -299536,16 +299786,6 @@ {} ] ], - "html/form-elements/the-textarea-element/multiline-placeholder-ref.html": [ - [ - {} - ] - ], - "html/form-elements/the-textarea-element/support/placeholder.css": [ - [ - {} - ] - ], "html/iana/application-x-www-form-urlencoded/original-id.json": [ [ {} @@ -301681,6 +301921,16 @@ {} ] ], + "html/semantics/forms/the-textarea-element/multiline-placeholder-ref.html": [ + [ + {} + ] + ], + "html/semantics/forms/the-textarea-element/support/placeholder.css": [ + [ + {} + ] + ], "html/semantics/forms/the-textarea-element/textarea-newline-bidi-ref.html": [ [ {} @@ -305156,6 +305406,11 @@ {} ] ], + "lifecycle/set-composited-layer-position-ref.html": [ + [ + {} + ] + ], "lint.whitelist": [ [ {} @@ -305241,6 +305496,21 @@ {} ] ], + "mathml/presentation-markup/fractions/frac-created-dynamically-2-ref.html": [ + [ + {} + ] + ], + "mathml/presentation-markup/fractions/frac-created-dynamically-3-ref.html": [ + [ + {} + ] + ], + "mathml/presentation-markup/fractions/frac-created-dynamically-ref.html": [ + [ + {} + ] + ], "mathml/presentation-markup/fractions/frac-linethickness-001-ref.html": [ [ {} @@ -305281,6 +305551,11 @@ {} ] ], + "mathml/presentation-markup/spaces/mspace-children-ref.html": [ + [ + {} + ] + ], "mathml/presentation-markup/spaces/space-2-ref.html": [ [ {} @@ -307886,12 +308161,12 @@ {} ] ], - "preload/link-header-preload-nonce.html.headers": [ + "preload/link-header-preload-imagesrcset.html.headers": [ [ {} ] ], - "preload/link-header-preload-srcset.tentative.html.headers": [ + "preload/link-header-preload-nonce.html.headers": [ [ {} ] @@ -311531,11 +311806,6 @@ {} ] ], - "resources/.gitignore": [ - [ - {} - ] - ], "resources/.htaccess": [ [ {} @@ -317616,6 +317886,11 @@ {} ] ], + "tools/ci/action_manifest_build.sh": [ + [ + {} + ] + ], "tools/ci/azure/README.md": [ [ {} @@ -317696,11 +317971,6 @@ {} ] ], - "tools/ci/before_install.sh": [ - [ - {} - ] - ], "tools/ci/ci_built_diff.sh": [ [ {} @@ -317711,11 +317981,6 @@ {} ] ], - "tools/ci/ci_manifest.sh": [ - [ - {} - ] - ], "tools/ci/ci_resources_unittest.sh": [ [ {} @@ -317741,11 +318006,6 @@ {} ] ], - "tools/ci/install.sh": [ - [ - {} - ] - ], "tools/ci/jobs.py": [ [ {} @@ -317756,21 +318016,11 @@ {} ] ], - "tools/ci/run.sh": [ - [ - {} - ] - ], "tools/ci/run_tc.py": [ [ {} ] ], - "tools/ci/start.sh": [ - [ - {} - ] - ], "tools/ci/tag_master.py": [ [ {} @@ -317811,6 +318061,11 @@ {} ] ], + "tools/docker/github/Dockerfile": [ + [ + {} + ] + ], "tools/docker/retry.py": [ [ {} @@ -325951,11 +326206,6 @@ {} ] ], - "webaudio/.gitignore": [ - [ - {} - ] - ], "webaudio/META.yml": [ [ {} @@ -336151,13 +336401,25 @@ [ "FileAPI/url/url-format.any.html", { - "script_metadata": [] + "script_metadata": [ + [ + "timeout", + "long" + ] + ], + "timeout": "long" } ], [ "FileAPI/url/url-format.any.worker.html", { - "script_metadata": [] + "script_metadata": [ + [ + "timeout", + "long" + ] + ], + "timeout": "long" } ] ], @@ -351151,6 +351413,12 @@ {} ] ], + "cors/client-hint-request-headers-2.tentative.htm": [ + [ + "cors/client-hint-request-headers-2.tentative.htm", + {} + ] + ], "cors/client-hint-request-headers.htm": [ [ "cors/client-hint-request-headers.htm", @@ -351277,6 +351545,12 @@ {} ] ], + "cors/simple-requests-ch.tentative.htm": [ + [ + "cors/simple-requests-ch.tentative.htm", + {} + ] + ], "cors/simple-requests.htm": [ [ "cors/simple-requests.htm", @@ -351506,6 +351780,24 @@ {} ] ], + "css/css-align/baseline-rules/synthesized-baseline-flexbox-001.html": [ + [ + "css/css-align/baseline-rules/synthesized-baseline-flexbox-001.html", + {} + ] + ], + "css/css-align/baseline-rules/synthesized-baseline-grid-001.html": [ + [ + "css/css-align/baseline-rules/synthesized-baseline-grid-001.html", + {} + ] + ], + "css/css-align/baseline-rules/synthesized-baseline-inline-block-001.html": [ + [ + "css/css-align/baseline-rules/synthesized-baseline-inline-block-001.html", + {} + ] + ], "css/css-align/content-distribution/parse-align-content-001.html": [ [ "css/css-align/content-distribution/parse-align-content-001.html", @@ -358448,6 +358740,12 @@ {} ] ], + "css/css-sizing/fit-content-percentage-padding.html": [ + [ + "css/css-sizing/fit-content-percentage-padding.html", + {} + ] + ], "css/css-sizing/percentage-height-in-flexbox.html": [ [ "css/css-sizing/percentage-height-in-flexbox.html", @@ -363316,6 +363614,12 @@ {} ] ], + "css/css-ui/text-overflow-ellipsis-abspos-in-inline-block-crash-001.html": [ + [ + "css/css-ui/text-overflow-ellipsis-abspos-in-inline-block-crash-001.html", + {} + ] + ], "css/css-values/absolute-length-units-001.html": [ [ "css/css-values/absolute-length-units-001.html", @@ -369665,12 +369969,30 @@ {} ] ], + "element-timing/image-carousel.html": [ + [ + "element-timing/image-carousel.html", + {} + ] + ], + "element-timing/image-clipped-svg.html": [ + [ + "element-timing/image-clipped-svg.html", + {} + ] + ], "element-timing/image-not-fully-visible.html": [ [ "element-timing/image-not-fully-visible.html", {} ] ], + "element-timing/image-rect-iframe.html": [ + [ + "element-timing/image-rect-iframe.html", + {} + ] + ], "element-timing/images-repeated-resource.html": [ [ "element-timing/images-repeated-resource.html", @@ -380101,15 +380423,15 @@ {} ] ], - "feature-policy/reporting/unoptimized-images-reporting-onload.html": [ + "feature-policy/reporting/unoptimized-lossy-images-reporting-onload.html": [ [ - "feature-policy/reporting/unoptimized-images-reporting-onload.html", + "feature-policy/reporting/unoptimized-lossy-images-reporting-onload.html", {} ] ], - "feature-policy/reporting/unoptimized-images-reporting.html": [ + "feature-policy/reporting/unoptimized-lossy-images-reporting.html": [ [ - "feature-policy/reporting/unoptimized-images-reporting.html", + "feature-policy/reporting/unoptimized-lossy-images-reporting.html", {} ] ], @@ -383279,6 +383601,12 @@ {} ] ], + "fetch/sec-metadata/navigation.https.sub.html": [ + [ + "fetch/sec-metadata/navigation.https.sub.html", + {} + ] + ], "fetch/sec-metadata/object.tentative.https.sub.html": [ [ "fetch/sec-metadata/object.tentative.https.sub.html", @@ -383357,6 +383685,12 @@ {} ] ], + "fetch/sec-metadata/trailing-dot.tentative.https.sub.html": [ + [ + "fetch/sec-metadata/trailing-dot.tentative.https.sub.html", + {} + ] + ], "fetch/sec-metadata/window-open.tentative.https.sub.html": [ [ "fetch/sec-metadata/window-open.tentative.https.sub.html", @@ -385666,6 +386000,19 @@ {} ] ], + "html/browsers/the-window-object/named-access-on-the-window-object/navigated-named-objects.window.js": [ + [ + "html/browsers/the-window-object/named-access-on-the-window-object/navigated-named-objects.window.html", + { + "script_metadata": [ + [ + "script", + "/common/get-host-info.sub.js" + ] + ] + } + ] + ], "html/browsers/the-window-object/named-access-on-the-window-object/window-named-properties.html": [ [ "html/browsers/the-window-object/named-access-on-the-window-object/window-named-properties.html", @@ -387657,12 +388004,6 @@ {} ] ], - "html/scripting/the-noscript-element/non-html-noscript.html": [ - [ - "html/scripting/the-noscript-element/non-html-noscript.html", - {} - ] - ], "html/semantics/disabled-elements/disabledElement.html": [ [ "html/semantics/disabled-elements/disabledElement.html", @@ -392685,6 +393026,12 @@ {} ] ], + "html/semantics/scripting-1/the-noscript-element/non-html-noscript.html": [ + [ + "html/semantics/scripting-1/the-noscript-element/non-html-noscript.html", + {} + ] + ], "html/semantics/scripting-1/the-script-element/async_001.htm": [ [ "html/semantics/scripting-1/the-script-element/async_001.htm", @@ -416259,6 +416606,14 @@ {} ] ], + "picture-in-picture/css-selector.html": [ + [ + "picture-in-picture/css-selector.html", + { + "testdriver": true + } + ] + ], "picture-in-picture/disable-picture-in-picture.html": [ [ "picture-in-picture/disable-picture-in-picture.html", @@ -416901,9 +417256,9 @@ {} ] ], - "preload/dynamic-adding-preload-imagesrcset.tentative.html": [ + "preload/dynamic-adding-preload-imagesrcset.html": [ [ - "preload/dynamic-adding-preload-imagesrcset.tentative.html", + "preload/dynamic-adding-preload-imagesrcset.html", {} ] ], @@ -416931,15 +417286,15 @@ {} ] ], - "preload/link-header-preload-nonce.html": [ + "preload/link-header-preload-imagesrcset.html": [ [ - "preload/link-header-preload-nonce.html", + "preload/link-header-preload-imagesrcset.html", {} ] ], - "preload/link-header-preload-srcset.tentative.html": [ + "preload/link-header-preload-nonce.html": [ [ - "preload/link-header-preload-srcset.tentative.html", + "preload/link-header-preload-nonce.html", {} ] ], @@ -427803,6 +428158,14 @@ } ] ], + "screen-orientation/active-lock.html": [ + [ + "screen-orientation/active-lock.html", + { + "testdriver": true + } + ] + ], "screen-orientation/event-before-promise.html": [ [ "screen-orientation/event-before-promise.html", @@ -445332,9 +445695,9 @@ {} ] ], - "webrtc/RTCPeerConnection-connectionState.html": [ + "webrtc/RTCPeerConnection-connectionState.https.html": [ [ - "webrtc/RTCPeerConnection-connectionState.html", + "webrtc/RTCPeerConnection-connectionState.https.html", {} ] ], @@ -445789,6 +446152,12 @@ {} ] ], + "webrtc/protocol/simulcast-answer.html": [ + [ + "webrtc/protocol/simulcast-answer.html", + {} + ] + ], "webrtc/protocol/simulcast-offer.html": [ [ "webrtc/protocol/simulcast-offer.html", @@ -461934,96 +462303,12 @@ {} ] ], - "css/CSS2/sec5/class-000.xht": [ - [ - "css/CSS2/sec5/class-000.xht", - {} - ] - ], - "css/CSS2/sec5/class-001.xht": [ - [ - "css/CSS2/sec5/class-001.xht", - {} - ] - ], - "css/CSS2/sec5/class-002.xht": [ - [ - "css/CSS2/sec5/class-002.xht", - {} - ] - ], - "css/CSS2/sec5/first-child-000.xht": [ - [ - "css/CSS2/sec5/first-child-000.xht", - {} - ] - ], - "css/CSS2/sec5/first-child-001.xht": [ - [ - "css/CSS2/sec5/first-child-001.xht", - {} - ] - ], "css/CSS2/sec5/first-letter-000.xht": [ [ "css/CSS2/sec5/first-letter-000.xht", {} ] ], - "css/CSS2/sec5/first-line-000.xht": [ - [ - "css/CSS2/sec5/first-line-000.xht", - {} - ] - ], - "css/CSS2/sec5/id-000.xht": [ - [ - "css/CSS2/sec5/id-000.xht", - {} - ] - ], - "css/CSS2/sec5/id-001.xht": [ - [ - "css/CSS2/sec5/id-001.xht", - {} - ] - ], - "css/CSS2/selector/attribute-value-selector-007.html": [ - [ - "css/CSS2/selector/attribute-value-selector-007.html", - {} - ] - ], - "css/CSS2/selector/attribute-value-selector-008.xht": [ - [ - "css/CSS2/selector/attribute-value-selector-008.xht", - {} - ] - ], - "css/CSS2/selector/attribute-value-selector-009.xht": [ - [ - "css/CSS2/selector/attribute-value-selector-009.xht", - {} - ] - ], - "css/CSS2/selector/attribute-value-selector-010.html": [ - [ - "css/CSS2/selector/attribute-value-selector-010.html", - {} - ] - ], - "css/CSS2/selector/lang-pseudoclass-001.html": [ - [ - "css/CSS2/selector/lang-pseudoclass-001.html", - {} - ] - ], - "css/CSS2/selector/lang-pseudoclass-002.xht": [ - [ - "css/CSS2/selector/lang-pseudoclass-002.xht", - {} - ] - ], "css/CSS2/selectors/bidi-first-letter-001.xht": [ [ "css/CSS2/selectors/bidi-first-letter-001.xht", @@ -475350,15 +475635,19 @@ }, "paths": { ".azure-pipelines.yml": [ - "08cda381b350c7226e5f752aaf0f14f8713c5818", + "b0a60cf98816141332d91ec1027c8a39bd2a6be7", "support" ], ".codecov.yml": [ "904cf85a4fd7576bb470172ade7317de94435dd0", "support" ], + ".github/main.workflow": [ + "b1b61554f91aa0256fbd4a58e0cbbe16ecdb1c6e", + "support" + ], ".gitignore": [ - "8e3a85183ef9d5c8f91007ccbd6eee604155c89b", + "cc4bd700eeaed676aad4548ad8af7287e70d18bf", "support" ], ".gitmodules": [ @@ -475374,11 +475663,7 @@ "support" ], ".taskcluster.yml": [ - "d67608f47b4deceedccd08193290b6eabeefed16", - "support" - ], - ".travis.yml": [ - "02d760ca98f75c41f9f0540567204f063e32b9af", + "6ad97f7e104d04278cf4b2087e107bcdb849ab7d", "support" ], ".well-known/README.md": [ @@ -476106,7 +476391,7 @@ "testharness" ], "2dcontext/context-attributes/getContextAttributes.html": [ - "cff02ea06f6e6d50647ea7f7992cbcb89dd878a0", + "fd1a4adb3a7766b96e8213e01cc7b92ab5e863a0", "testharness" ], "2dcontext/drawing-images-to-the-canvas/2d.drawImage.3arg.html": [ @@ -480010,7 +480295,7 @@ "testharness" ], "FileAPI/url/url-format.any.js": [ - "d485bfaac61a3b995a22a61521268590610da3e7", + "33732fa61fc3ddd0f52b23fe83ea824cc6abae06", "testharness" ], "FileAPI/url/url-in-tags-revoke.window.js": [ @@ -483501,10 +483786,6 @@ "d2855cc9f4dd37f49b5d81d016285d68f443dd63", "support" ], - "annotation-model/annotations/.gitignore": [ - "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", - "support" - ], "annotation-model/annotations/3.1-annotationContextValidated.json": [ "b5c165f3c46b3ebbb24597311e69e9dc336bfe6e", "support" @@ -483713,10 +483994,6 @@ "3b6616eed80bef552d645ec1f09f3a7504879c3f", "support" ], - "annotation-model/annotations/bodiesTargets/.gitignore": [ - "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", - "support" - ], "annotation-model/annotations/bodiesTargets/3.2.1-bodyEWR.json": [ "e22585b905b9f60e0dde41e488e1ecfc755d87cd", "support" @@ -484217,10 +484494,6 @@ "f2002d597e96180f584f36d54cb4f6f1dc37b03c", "support" ], - "annotation-model/collections/.gitignore": [ - "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", - "support" - ], "annotation-model/collections/3.3.1-collectionCreatedImplemented.json": [ "d57ecd1efefbd9dc394ebd85d57419dbecd26e9e", "support" @@ -484489,10 +484762,6 @@ "39fac8f93c15403a2619c51890f8dcf5bcc140b3", "support" ], - "annotation-model/definitions/.gitignore": [ - "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", - "support" - ], "annotation-model/definitions/annotations.json": [ "df1f73613ab1b574089568b0e02fc2db1808ad72", "support" @@ -484885,10 +485154,6 @@ "f800ea081e43d57f138fe5b5fccab23dd582fc9c", "support" ], - "annotation-protocol/server/.gitignore": [ - "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", - "support" - ], "annotation-protocol/server/server-manual.html": [ "3a04a599175b4b2177b23f6b544953cdf82e3295", "manual" @@ -484925,10 +485190,6 @@ "f99f921d352cbffa724fb0fa031eb60d2ceb2b83", "support" ], - "annotation-vocab/tools/.gitignore": [ - "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", - "support" - ], "annotation-vocab/tools/README.md": [ "ae44a58fa8e60cec0d6b7ab7089e1510870ce61e", "support" @@ -486869,6 +487130,10 @@ "4a60c3035fcc3617de38a514159a281e2422b067", "support" ], + "common/echo.py": [ + "2ee403645b1bb27cdb27bcea716e166729b81af8", + "support" + ], "common/entities.json": [ "8a1f590a6abe4872d3b8b4c665d9b165d7dce84d", "support" @@ -487093,10 +487358,6 @@ "4eb37e9e9519ad4ed7aab6bc5d45a2a6023b9ec5", "reftest" ], - "conformance-checkers/.gitignore": [ - "3837fedbba66f2bacb83069ffa35065d895c53d4", - "support" - ], "conformance-checkers/META.yml": [ "978b5c85721c28f267ec21ceb620017514441385", "support" @@ -494138,7 +494399,11 @@ "support" ], "conformance-checkers/html/elements/a/download-isvalid.html": [ - "0d1fe6f1e188283dff132413614adb585b6bf058", + "ed85411ccf79728687b022d0539cd33dec9f3f4f", + "support" + ], + "conformance-checkers/html/elements/a/download-novalid.html": [ + "f9b9d13bd0fe19a87cea0559723318d18ea348a5", "support" ], "conformance-checkers/html/elements/a/href-isvalid.html": [ @@ -504162,7 +504427,7 @@ "support" ], "conformance-checkers/messages.json": [ - "029e5a39acea4b6e6df3f046d8e8a5d77632f025", + "36eed1ad44a478e9460ea6888d40cd324650e541", "support" ], "conformance-checkers/tools/build-svg-tests.py": [ @@ -510621,8 +510886,12 @@ "96cc4b98be9646742c2e81f4fcc0edbf8bcb4035", "testharness" ], + "cors/client-hint-request-headers-2.tentative.htm": [ + "4ec217c8347c69a58b3d073cd752fea0de2259cf", + "testharness" + ], "cors/client-hint-request-headers.htm": [ - "ee6c7ea7e86f032e3da96e99747c743a16ba44e2", + "251be668b7dcfd9e9595d7fbcb5b2b4c5d2a2c16", "testharness" ], "cors/cors-safelisted-request-header.any.js": [ @@ -510677,10 +510946,6 @@ "289f402191ebbd7d47d70e13a58f30b8db62520f", "testharness" ], - "cors/resources/.gitignore": [ - "7b987d03655fd023ff65cbe22c1dce3dca9737ac", - "support" - ], "cors/resources/304.py": [ "2fc83b9aea3879320a76d7df44eca8f16f050bb2", "support" @@ -510737,8 +511002,12 @@ "e164ca6f41b761c93884854298742ddf50c79a97", "testharness" ], + "cors/simple-requests-ch.tentative.htm": [ + "f9955ac86a4c5833062c7a5e0b1f90a22f7f1cad", + "testharness" + ], "cors/simple-requests.htm": [ - "be4b53495c61a61517a7a3699b9b01be194624c4", + "185e9a75e39f81b14055237ab5f547cfb57931e2", "testharness" ], "cors/status-async.htm": [ @@ -510793,10 +511062,6 @@ "0ec584d73d1f6d8626efe4c7190e5160fe527286", "support" ], - "css/.gitignore": [ - "7b1bd439b774021cdf9b79e6a12eee9c65ff74a1", - "support" - ], "css/.htaccess": [ "cb8abdbe3dae48a0015e6845a8b956faf215bddf", "support" @@ -547861,17 +548126,25 @@ "d9f9d3684ff21417b2fc773cb32dac3be5db84e8", "support" ], + "css/CSS2/sec5/class-000-ref.html": [ + "8eb5f528a42db93801c81f4f9e754d2fc5efef72", + "support" + ], "css/CSS2/sec5/class-000.xht": [ - "ab33d7c8d0ca916c255b3c5cad9bcc1ee775e903", - "visual" + "2998fa41c416cc31c5b45844f1567a6f91fd033d", + "reftest" ], "css/CSS2/sec5/class-001.xht": [ - "db3451d80953c655130596d41fec42d934bb522b", - "visual" + "ae1dc0a8f8d9cc5a32151f3f135d290e98c550b6", + "reftest" + ], + "css/CSS2/sec5/class-002-ref.html": [ + "fff0f9eaefe06010daf19e54eadfbca9d2441bc5", + "support" ], "css/CSS2/sec5/class-002.xht": [ - "6a167df134a3add4d445d5a26dcbc5863e28285d", - "visual" + "77a411512fa91a0c75d2a60f58fdab3008bedee1", + "reftest" ], "css/CSS2/sec5/descendant-selector-000-ref.xht": [ "3dfe06f0d1f8671a950c97684beb5140c930a092", @@ -547901,21 +548174,29 @@ "2192e1b548a0db758cdf46484c5ba081bedb38f9", "manual" ], + "css/CSS2/sec5/first-child-000-ref.html": [ + "6c65404bfcdf1eeae726e7f814f482053dfcce89", + "support" + ], "css/CSS2/sec5/first-child-000.xht": [ - "d345e9e18df490cc6ef63e9515d0f23fabbecd3c", - "visual" + "3ec9004855c9b0ea4c79255d202cb4388f318f9c", + "reftest" ], "css/CSS2/sec5/first-child-001.xht": [ - "47334c60744b7309bf45e3833bbf9625ab01c001", - "visual" + "082c4f46afa2fac7ef87b633e2b626f9ce5b8675", + "reftest" ], "css/CSS2/sec5/first-letter-000.xht": [ "7ea16af4ab622ce99654b53706507addbb2844d1", "visual" ], + "css/CSS2/sec5/first-line-000-ref.html": [ + "4999f4fa5d547088287a4a12fda137cc23645984", + "support" + ], "css/CSS2/sec5/first-line-000.xht": [ - "53ff8b953e317f0921bd9ce413c83c5f0d7b6a40", - "visual" + "7b5202eb421df15e603a41e3404c8fcb668cf172", + "reftest" ], "css/CSS2/sec5/grouping-000-notref.xht": [ "ec3361343a6e1fc47bb5686c1f338f29c7336117", @@ -547934,40 +548215,60 @@ "reftest" ], "css/CSS2/sec5/id-000.xht": [ - "f7a616b1573424f50ec552f631d1e5735803373e", - "visual" + "15044f60b70945553951d0ca0c48de1cd4173d58", + "reftest" ], "css/CSS2/sec5/id-001.xht": [ - "3605ad50a9461bafa749e094770499f9d6239b9f", - "visual" + "3143368728ce88084d2944abd4e2a7c219857029", + "reftest" ], "css/CSS2/section-index.xht": [ "6240f86f0e42a63ebbde1553d24cc3b61854d4e5", "support" ], + "css/CSS2/selector/attribute-value-selector-007-ref.html": [ + "778b8d386f4493c5dc766a4c50686a6b782cade6", + "support" + ], "css/CSS2/selector/attribute-value-selector-007.html": [ - "15d8b238da4415b1e01afabc09d72ad47b410fed", - "visual" + "9299a24fafe965bae783279bb86b25f67911c812", + "reftest" + ], + "css/CSS2/selector/attribute-value-selector-008-ref.html": [ + "d0c5f80a476885991408383ff69a69773a9960e9", + "support" ], "css/CSS2/selector/attribute-value-selector-008.xht": [ - "d34739196b2f90120145abf9117fc2aefa0dd730", - "visual" + "7a17b3202ca71bc8bbe9ab7b015661e2999526d4", + "reftest" + ], + "css/CSS2/selector/attribute-value-selector-009-ref.html": [ + "78f497708d496f0fb727e9bd8bba9e6a2d4f93be", + "support" ], "css/CSS2/selector/attribute-value-selector-009.xht": [ - "52018fbbdbf66e5b3900c07792656d913fd3ef19", - "visual" + "566fca5cbc7efe95120cca9cb4b6e2a9671925ab", + "reftest" + ], + "css/CSS2/selector/attribute-value-selector-010-ref.html": [ + "1e2975c57f09cb16fa04ffeb052a61abe5dfc75e", + "support" ], "css/CSS2/selector/attribute-value-selector-010.html": [ - "ad1e44aff8a6786532a1a85e7bc46d244fc07448", - "visual" + "ca6bdb6950a0a13ff7c435297bbb0f2cd55aef66", + "reftest" + ], + "css/CSS2/selector/lang-pseudoclass-001-ref.html": [ + "ac83e80d95576decce333b6294d25d45e08a2e84", + "support" ], "css/CSS2/selector/lang-pseudoclass-001.html": [ - "cf9bd79fbc7019d26d54fad6aebe3a99a7bd5503", - "visual" + "4028be17606cdb69fe0578a478ad27d99510f249", + "reftest" ], "css/CSS2/selector/lang-pseudoclass-002.xht": [ - "a962ae323f6be881674bd308eb64f3ceb758c39c", - "visual" + "44aacfc28ac37603dcc6fa296827bfa6fff076df", + "reftest" ], "css/CSS2/selectors/.htaccess": [ "fab8039332539455f8cb02dfaf3de509a0b83fb2", @@ -569705,6 +570006,18 @@ "5511d6d68ad0b531cdd31da352e7a78e3a6b85b7", "reftest" ], + "css/css-align/baseline-rules/synthesized-baseline-flexbox-001.html": [ + "af2dac4cc5f91e2464bbc65f218ca400b6252c74", + "testharness" + ], + "css/css-align/baseline-rules/synthesized-baseline-grid-001.html": [ + "50ffdd1dee5cc93c4ecbde2e2286cb6ca06ce32b", + "testharness" + ], + "css/css-align/baseline-rules/synthesized-baseline-inline-block-001.html": [ + "fde0c2c432d0b9ac1bdf0fe210e1d48d80789f6e", + "testharness" + ], "css/css-align/content-distribution/parse-align-content-001.html": [ "c5cd4254f707824dacd0475eab9e8e1c59c02632", "testharness" @@ -581101,14 +581414,6 @@ "684233223b82c7105a9550e4957597acc0153e75", "manual" ], - "css/css-flexbox/interactive/flexbox_interactive_paged-overflow-2.html": [ - "5c682d348e5cb45cd7576bf768981bdc6fa1fcd3", - "manual" - ], - "css/css-flexbox/interactive/flexbox_interactive_paged-overflow.html": [ - "0220d79d901cca14324ea331d0ddfd9c086a08ee", - "manual" - ], "css/css-flexbox/item-with-table-with-infinite-max-intrinsic-width.html": [ "f475db5bcffd1449be231da943cd1511b15e20b1", "reftest" @@ -599885,10 +600190,6 @@ "bcf49514d679970fdfe35aacb46dfc8e568ff2f6", "support" ], - "css/css-rhythm/tools/generators/.gitignore": [ - "3c3629e647f5ddf82548912e337bea9826b434af", - "support" - ], "css/css-rhythm/tools/generators/README.md": [ "cc7cc5bcb77517a1cbcd27d88c094a1b10344d98", "support" @@ -601965,6 +602266,10 @@ "fc265d4d933a85280e4ebb26990163a1805d0634", "reftest" ], + "css/css-sizing/fit-content-percentage-padding.html": [ + "4ff3f786c6c6ea263c97771635bfb9f3c8076320", + "testharness" + ], "css/css-sizing/image-percentage-max-height-in-anonymous-block.html": [ "5b1713975eb21e96a558933f81412a7bb0007d19", "reftest" @@ -602957,6 +603262,14 @@ "13af8b9db4e70af3b1b9a3fa80ff8770cb5ba7c7", "testharness" ], + "css/css-tables/toggle-row-display-property-001-ref.html": [ + "a99f69eb4498ae55312122d51ea518327cdf9e12", + "support" + ], + "css/css-tables/toggle-row-display-property-001.html": [ + "08e6635e12c42a4201ca955722227010834883e8", + "reftest" + ], "css/css-tables/tools/markup-generator.html": [ "3b37e6c5feee6453ca344e86d456fc0bd2a12343", "support" @@ -606054,7 +606367,7 @@ "reftest" ], "css/css-text/overflow-wrap/overflow-wrap-break-word-006.html": [ - "6dc1b4dff52459d7f5516da64f4e09be313257d1", + "806457ddb325be568f3395b408a598fa2f155498", "reftest" ], "css/css-text/overflow-wrap/overflow-wrap-break-word-007.html": [ @@ -607970,23 +608283,23 @@ "reftest" ], "css/css-text/white-space/break-spaces-004.html": [ - "e2c043ec42ec13af1d4b8d4cca93ded78ec6519e", + "13770b7b8d189a404d44e73dfe19eba1c0e48b58", "reftest" ], "css/css-text/white-space/break-spaces-005.html": [ - "d0dafd38c047c54e93ef197e0600aeafea4af6a6", + "c7f996fbc7bfc112cb605619736759ca20d65ddb", "reftest" ], "css/css-text/white-space/break-spaces-006.html": [ - "5f9d605866d7e7455ef399554b7d97238d5974a7", + "f3973169303e00e4853aa70b6bf9f8273f50bf33", "reftest" ], "css/css-text/white-space/break-spaces-007.html": [ - "77213618bd97299e87b2d6dc4040b78f87030dfc", + "d14aae72f517377d28c1828531569a760c1388b7", "reftest" ], "css/css-text/white-space/break-spaces-008.html": [ - "d183cac942f7ad982f582567fdad798b30460e59", + "7bcb9dd33758baf715060aa288d9a091e9cb0c94", "reftest" ], "css/css-text/white-space/control-chars-000.html": [ @@ -608298,11 +608611,11 @@ "reftest" ], "css/css-text/white-space/pre-wrap-015.html": [ - "b17af29bf54b573268522619d6e993750f9b51be", + "176259b72ed7e5807b318d848ce1d2b7c9657873", "reftest" ], "css/css-text/white-space/pre-wrap-016.html": [ - "5f66a7be92b3c2a9aa9596c1237dd0ceaeac9b6d", + "e88c3eda1990aae01756d40d1b4d1e5e8be77e41", "reftest" ], "css/css-text/white-space/pre-wrap-float-001.html": [ @@ -608810,7 +609123,7 @@ "reftest" ], "css/css-text/word-break/word-break-break-all-010.html": [ - "be46d29d7ddf6a4b8013956a86828dbd10e6ca75", + "64800edf4ef43d2a5669fa3796b01d53e06080bc", "reftest" ], "css/css-text/word-break/word-break-break-all-011.html": [ @@ -608818,11 +609131,11 @@ "reftest" ], "css/css-text/word-break/word-break-break-all-012.html": [ - "6cbcbad92c4483021d645a3ba529a4441c26ba7d", + "fd3b12efcd59de04b5f6dd375d4e6cf01a0f9f68", "reftest" ], "css/css-text/word-break/word-break-break-all-013.html": [ - "5029e4d891b221eca7da7e4991ec0d1809ea4d03", + "9eff25cf8807aa46ad5aa81cda582d37200aede3", "reftest" ], "css/css-text/word-break/word-break-break-all-014.html": [ @@ -619021,6 +619334,10 @@ "0ccd59c12a20aa82de45370eff45565acdb2fc6e", "reftest" ], + "css/css-ui/text-overflow-ellipsis-abspos-in-inline-block-crash-001.html": [ + "23291d433901497735235cdc24b76ebd756dc371", + "testharness" + ], "css/css-ui/text-overflow-ref.html": [ "a8795599ec3cdfe71090b06e1a6ad19941dd21b1", "support" @@ -626301,10 +626618,6 @@ "d69a328e8b56ed4359542628d5f7bd1cccb0aac0", "reftest" ], - "css/css-writing-modes/tools/generators/.gitignore": [ - "3c3629e647f5ddf82548912e337bea9826b434af", - "support" - ], "css/css-writing-modes/tools/generators/README.md": [ "7c584899e3f99e8a5fb537a1e331f59b57f0b124", "support" @@ -631370,7 +631683,7 @@ "support" ], "css/tools/w3ctestlib/Indexer.py": [ - "3b71f5bab748baa3010f5bce9e86376c2fe3cc99", + "f7e2eb2a17318298bf1a979800c11229e73b61db", "support" ], "css/tools/w3ctestlib/OutputFormats.py": [ @@ -631378,7 +631691,7 @@ "support" ], "css/tools/w3ctestlib/Sources.py": [ - "1528cbb83414220ed374e6a4fb24743952c7a45e", + "fa704bf6dbc4a27b761886b7f2ae96728682fe5f", "support" ], "css/tools/w3ctestlib/Suite.py": [ @@ -641966,7 +642279,7 @@ "support" ], "dom/nodes/Document-createElement-namespace.html": [ - "add66bf9a0119023f1917e6424509be562b4360d", + "cea61f1aecbea7c0f38c192195debda0061537de", "testharness" ], "dom/nodes/Document-createElement.html": [ @@ -643330,7 +643643,7 @@ "support" ], "editing/data/outdent.js": [ - "271824bee51e951a19d24cf83762423b2c4e11aa", + "ad613122ef395faaaa76fbc650a31061783fe193", "support" ], "editing/data/removeformat.js": [ @@ -643573,10 +643886,22 @@ "3ba12a7d01f1c8b9f0069f0382d6fcc4bda2e639", "testharness" ], + "element-timing/image-carousel.html": [ + "0bd99ab2507a1009071ef91d0146973b0257e4ae", + "testharness" + ], + "element-timing/image-clipped-svg.html": [ + "13c4a81a1e02fd5035565e5f765047ad510f39f9", + "testharness" + ], "element-timing/image-not-fully-visible.html": [ "d3e2c105bffdf9a78ba2b51ade49dbb0df91e2fe", "testharness" ], + "element-timing/image-rect-iframe.html": [ + "da46d785a0b7dca251cbcc26a13b14d8ce742f3f", + "testharness" + ], "element-timing/images-repeated-resource.html": [ "18c72cdad1b310972a35dab0878c92af1bba75bf", "testharness" @@ -643598,7 +643923,7 @@ "testharness" ], "element-timing/observe-svg-image.html": [ - "f127152cf8693481703e5a38306204232e4a9ce5", + "fdfe25ec9ff8b1bbf50ee902e0a38d9bcf258c50", "testharness" ], "element-timing/observe-video-poster.html": [ @@ -643621,6 +643946,10 @@ "e952930ef5e49cf9da25b29c333e752e09c75e60", "support" ], + "element-timing/resources/iframe-with-square-sends-entry.html": [ + "3c43a41c7d910e025837326e6c7b018060b10621", + "support" + ], "element-timing/resources/iframe-with-square.html": [ "0a905d22b9a7d66271074163b57431ac75d29f7e", "support" @@ -646761,20 +647090,20 @@ "599137a55d710fe6b8d3052c05c81915622ea0d0", "support" ], - "feature-policy/reporting/unoptimized-images-reporting-onload.html": [ - "d39b6807d09767ee2859e800c3ca20b27d70cd12", + "feature-policy/reporting/unoptimized-lossy-images-reporting-onload.html": [ + "8c060477230c92c0932e73fbb91bf374316d2d9f", "testharness" ], - "feature-policy/reporting/unoptimized-images-reporting-onload.html.headers": [ - "10b41235409ea38507d9ffe29a18547174351cc3", + "feature-policy/reporting/unoptimized-lossy-images-reporting-onload.html.headers": [ + "5cda6ae012803cdd9425cbcafcfd929921e06236", "support" ], - "feature-policy/reporting/unoptimized-images-reporting.html": [ - "fb27a13996a46b0e4592f4d28cc3574ae1745fb5", + "feature-policy/reporting/unoptimized-lossy-images-reporting.html": [ + "62a5469f8ca7de0ca19985361e377b6463c01aaf", "testharness" ], - "feature-policy/reporting/unoptimized-images-reporting.html.headers": [ - "10b41235409ea38507d9ffe29a18547174351cc3", + "feature-policy/reporting/unoptimized-lossy-images-reporting.html.headers": [ + "5cda6ae012803cdd9425cbcafcfd929921e06236", "support" ], "feature-policy/reporting/unsized-media-reporting.html": [ @@ -647170,7 +647499,7 @@ "testharness" ], "fetch/api/headers/headers-no-cors.window.js": [ - "9ea76e03e138f1604053771bb1a75130758726f7", + "2f3a819ba1a6d1cb7418b0507e6f8130458ba988", "testharness" ], "fetch/api/headers/headers-normalize.html": [ @@ -648258,7 +648587,7 @@ "testharness" ], "fetch/sec-metadata/iframe.tentative.https.sub.html": [ - "73bd90745d1ab9dd52b88cc49871544375bb7703", + "056d8fdba945ddc9e3daed1f6d4f915b084a3da9", "testharness" ], "fetch/sec-metadata/iframe.tentative.sub.html": [ @@ -648269,6 +648598,10 @@ "802ae25b775c0b246d162cc8f41df0c47cd52867", "testharness" ], + "fetch/sec-metadata/navigation.https.sub.html": [ + "12ebfc584ed9d36fd90eb4aa186d27b494edc5c6", + "testharness" + ], "fetch/sec-metadata/object.tentative.https.sub.html": [ "2a0e8de85568c1ae6008af793f4ca9a6fad77a3d", "testharness" @@ -648314,7 +648647,7 @@ "support" ], "fetch/sec-metadata/resources/helper.js": [ - "4bee68996e86e7fc9736f97cbdf3a002b73ad817", + "1968cfc0dd8ed94047a9c436458ea1c568c15bf1", "support" ], "fetch/sec-metadata/resources/post-to-owner.py": [ @@ -648357,8 +648690,12 @@ "89933f22c393711dd599cbdc4c3a18251005b7f6", "testharness" ], + "fetch/sec-metadata/trailing-dot.tentative.https.sub.html": [ + "85f9c73c6ae22fb34a8bd76b624f286367ba0265", + "testharness" + ], "fetch/sec-metadata/window-open.tentative.https.sub.html": [ - "2957dad40a437aae77914f3b6cc7120894da0b26", + "ef2bc81824ea5f90551da75daf6e10f41ef2cdcd", "testharness" ], "fetch/sec-metadata/worker.tentative.https.sub.html": [ @@ -649950,7 +650287,7 @@ "testharness" ], "html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/scroll-restoration-fragment-scrolling-samedoc.html": [ - "d837b8f63f0ee3273a3f6b9cfa0856cd0ab3eef4", + "073e0f6e06f98bf800f3947c63fe911937923eb2", "testharness" ], "html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/scroll-restoration-navigation-cross-origin.html": [ @@ -652029,6 +652366,10 @@ "d5b1789d59455603d1f5929a7a7f05d8a7218d52", "testharness" ], + "html/browsers/the-window-object/named-access-on-the-window-object/navigated-named-objects.window.js": [ + "59d94efc994e365301c20dbc5ff1b14409dfcaab", + "testharness" + ], "html/browsers/the-window-object/named-access-on-the-window-object/test.html": [ "c3b3cc185255d159b0f9ff9fd97aae71170d0af6", "support" @@ -652682,7 +653023,7 @@ "testharness" ], "html/dom/elements-embedded.js": [ - "d0c5dbcb76b531bcd805e15d26a61ad4f4c046aa", + "af6c79e74f4ee302027c8f647bd09dedd43c414e", "support" ], "html/dom/elements-forms.js": [ @@ -657553,26 +657894,6 @@ "a5f08f6b2738be67061855def02da1400b353833", "reftest" ], - "html/form-elements/the-textarea-element/multiline-placeholder-cr.html": [ - "8879ca4647911f564df8ed600b5d3ad8214d629a", - "reftest" - ], - "html/form-elements/the-textarea-element/multiline-placeholder-crlf.html": [ - "9632ef1bb6c296771136d5650323327f2cd0db8e", - "reftest" - ], - "html/form-elements/the-textarea-element/multiline-placeholder-ref.html": [ - "0234ed64c9ad7155a42b254a5fe35a39535cbff8", - "support" - ], - "html/form-elements/the-textarea-element/multiline-placeholder.html": [ - "00bb9696d1a4aa6a08f6a36885958dd89f46a417", - "reftest" - ], - "html/form-elements/the-textarea-element/support/placeholder.css": [ - "9aaed05c86ac001a9c9b7749424b501b8a38281a", - "support" - ], "html/iana/application-x-www-form-urlencoded/original-id.json": [ "6a52a7a5ffa4a9a06acba06c18568d1017461e4a", "support" @@ -659113,10 +659434,6 @@ "273f3a47be6707f3722922e34bcb272889636003", "support" ], - "html/scripting/the-noscript-element/non-html-noscript.html": [ - "2f85d1d47dc4f4ca38267842bf9e8285973d1e41", - "testharness" - ], "html/semantics/disabled-elements/disabledElement.html": [ "03f57424d22e3fdad505e5652c27b94b4cc2933c", "testharness" @@ -663769,6 +664086,26 @@ "7a85bd26a1f273519a51f534acad13fdc05996c3", "testharness" ], + "html/semantics/forms/the-textarea-element/multiline-placeholder-cr.html": [ + "08d0982ba53ac4e21a419c2aacc8540e890418e7", + "reftest" + ], + "html/semantics/forms/the-textarea-element/multiline-placeholder-crlf.html": [ + "b82a203076191f274c38986c138658d047e03027", + "reftest" + ], + "html/semantics/forms/the-textarea-element/multiline-placeholder-ref.html": [ + "0234ed64c9ad7155a42b254a5fe35a39535cbff8", + "support" + ], + "html/semantics/forms/the-textarea-element/multiline-placeholder.html": [ + "4e835a6f56f7fa2a8cd9349dc5d261c1935d5f78", + "reftest" + ], + "html/semantics/forms/the-textarea-element/support/placeholder.css": [ + "9aaed05c86ac001a9c9b7749424b501b8a38281a", + "support" + ], "html/semantics/forms/the-textarea-element/textarea-maxlength.html": [ "ff4e8f1b65c922c5983cd0dcdedb4b9a55d3747b", "testharness" @@ -664305,6 +664642,10 @@ "0f3cf596537f8c467940284cbe94d9afb1b9da49", "support" ], + "html/semantics/scripting-1/the-noscript-element/non-html-noscript.html": [ + "2f85d1d47dc4f4ca38267842bf9e8285973d1e41", + "testharness" + ], "html/semantics/scripting-1/the-script-element/async_001.htm": [ "370152683b9ca38f778e7d9fe5e7d8fb6ccc884f", "testharness" @@ -668754,7 +669095,7 @@ "support" ], "idle-detection/basics.tentative.https.any.js": [ - "df547570a78c31686d56065edfb7af243afde635", + "c31faff8fcbdbd58b4aad6ea562d4d8671b738cc", "testharness" ], "idle-detection/idle-detection-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html": [ @@ -668790,11 +669131,11 @@ "support" ], "idle-detection/idlharness.https.any.js": [ - "482e2f4d40088a33809e8629051194605b0627cd", + "e6aa2f91bfee747649aeb63ca845a2eef8fec55b", "testharness" ], "idle-detection/interceptor.https.html": [ - "37922c8cf795eeeb6ec0443c3f6539aecbbce840", + "f47a9e7f8cad9c6faac8bfaf0c20c83e3d4cf111", "testharness" ], "idle-detection/mock.js": [ @@ -669606,7 +669947,7 @@ "testharness" ], "infrastructure/testdriver/actions/eventOrder.html": [ - "c85b861c7fd9b199ce7baa5c9eac49525db4754b", + "1fed285a27ab62d30617581506b48d281fd598f5", "testharness" ], "infrastructure/testdriver/actions/multiDevice.html": [ @@ -669814,7 +670155,7 @@ "support" ], "interfaces/css-font-loading.idl": [ - "c2ef551b4ed46bd2aa172548d684034f69290aff", + "2bbc35a25912256fb1d56ada3372d35e59ca69e5", "support" ], "interfaces/css-fonts.idl": [ @@ -670038,7 +670379,7 @@ "support" ], "interfaces/payment-method-basic-card.idl": [ - "25cb62170dc71714ec13120c50dd3b32bd067857", + "91f1d197b9460a4d3feaf5d19e64a8af42066ca3", "support" ], "interfaces/payment-request.idl": [ @@ -670106,7 +670447,7 @@ "support" ], "interfaces/screen-capture.idl": [ - "612480cb080dfa3052186558732cc4ec1768f036", + "f22f7a9a810e0d1330ee43b425fb778e7c4da911", "support" ], "interfaces/screen-orientation.idl": [ @@ -670174,11 +670515,11 @@ "support" ], "interfaces/wake-lock.idl": [ - "10e714828d9b7c730555884d1c849ec3550e440c", + "7ef19dc64754f3ab060035163bd3854dce32aaef", "support" ], "interfaces/wasm-js-api.idl": [ - "2bd2ecba828df359fc61b18cde10ff9f7e80c4de", + "62bc0b7a839cce5308a85b162585bd387efb1163", "support" ], "interfaces/wasm-web-api.idl": [ @@ -670214,7 +670555,7 @@ "support" ], "interfaces/webgl1.idl": [ - "7f5130ef707661e6879f09a67efa3a7f74c041cd", + "8fb5e01b0449feb22d9d2f1a67f19f73da168d64", "support" ], "interfaces/webgl2.idl": [ @@ -670486,7 +670827,7 @@ "testharness" ], "js/builtins/Object.prototype.freeze.html": [ - "47a50b33d775d98501772fe9cae020c5663fa3b0", + "028aa1ecd5473a2387ddd7a92b48ad98ba8f3d8b", "testharness" ], "js/builtins/Object.prototype.getOwnPropertyNames.html": [ @@ -670502,11 +670843,11 @@ "testharness" ], "js/builtins/Object.prototype.preventExtensions.html": [ - "36ac328d2e5273367d9449cff64015d578c35546", + "41ce2b9a2e9e0e8a4c95a97e4d52204d64f50f9a", "testharness" ], "js/builtins/Object.prototype.seal.html": [ - "446d627865c22caf25d7aef45c25cda7ef976c09", + "ae371dd664a04a275449a0be9a1ad6e2e583ca87", "testharness" ], "js/builtins/Promise-incumbent-global-subframe.sub.html": [ @@ -670705,8 +671046,16 @@ "69fdbc0986633793d501a4bddfee9e88f76e1348", "support" ], + "lifecycle/set-composited-layer-position-ref.html": [ + "217edfaf5d928109b09ccd8ed162cc13e704e6dd", + "support" + ], + "lifecycle/set-composited-layer-position.html": [ + "543677a5006a63affc0141466794c7853b7981fa", + "reftest" + ], "lint.whitelist": [ - "96fd7ed0c2939411333b4b204687e68f61001fc8", + "f354fd95df3f7968a621043760f4765bd96469bd", "support" ], "loading/preloader-css-import-no-quote.tentative.html": [ @@ -670901,6 +671250,30 @@ "597acab652c4ad9b94ec5c612b4fda53c422309c", "reftest" ], + "mathml/presentation-markup/fractions/frac-created-dynamically-2-ref.html": [ + "d389906112f5028b28b0f1e89c54c12e833238a5", + "support" + ], + "mathml/presentation-markup/fractions/frac-created-dynamically-2.html": [ + "4c8b7e303bd9b81a7fc3b25c3206f6f0f88f6e81", + "reftest" + ], + "mathml/presentation-markup/fractions/frac-created-dynamically-3-ref.html": [ + "b274e90b9e7f2f4ecff5d259d7b9d764e81a258d", + "support" + ], + "mathml/presentation-markup/fractions/frac-created-dynamically-3.html": [ + "d5079473b757dc2fffae1f3851c4b2b9a299c89c", + "reftest" + ], + "mathml/presentation-markup/fractions/frac-created-dynamically-ref.html": [ + "e10405c572fcf04e0913e0d3bc3e144565330fea", + "support" + ], + "mathml/presentation-markup/fractions/frac-created-dynamically.html": [ + "f6c2f2e4324becfc1730d97348e6ddd6f59b1086", + "reftest" + ], "mathml/presentation-markup/fractions/frac-linethickness-001-ref.html": [ "d4be8ea03bfc29506af0e26a3d94d5eeafaaf472", "support" @@ -671029,6 +671402,14 @@ "bfc3cafa913fb38dde5cecf83be0a4a710bfb763", "testharness" ], + "mathml/presentation-markup/spaces/mspace-children-ref.html": [ + "ae74024c2fcfc587ba96180aa62a9aa091e2a07b", + "support" + ], + "mathml/presentation-markup/spaces/mspace-children.html": [ + "90d524ab418ed8c141da037eba9334c83fb5cced", + "reftest" + ], "mathml/presentation-markup/spaces/space-1.html": [ "7bc5b8e5128d031c14d73b53939926a63265b3c9", "testharness" @@ -671070,7 +671451,7 @@ "support" ], "mathml/relations/css-styling/lengths-1.html": [ - "0e3a74d46f99090883f5e12dd1d0701bf50bda8a", + "30916d5a567a882eb9b0fb7c6a07b7c2e02416f2", "reftest" ], "mathml/relations/css-styling/lengths-2-ref.html": [ @@ -682498,7 +682879,7 @@ "testharness" ], "payment-request/PaymentRequestUpdateEvent/updateWith-call-immediate-manual.https.html": [ - "28dfe1e448baea444698f38a20c70ff38e9d312a", + "243250080bd86cab7706e34af1703877830855c5", "manual" ], "payment-request/PaymentRequestUpdateEvent/updateWith-duplicate-shipping-options-manual.https.html": [ @@ -682909,6 +683290,10 @@ "b878dd547b8267196db6563b0009035af3d4f52a", "support" ], + "picture-in-picture/css-selector.html": [ + "bf64a1421f56e2696dfe6829a6929f402b2ff01e", + "testharness" + ], "picture-in-picture/disable-picture-in-picture.html": [ "5075c011632e549848dfbd3420d733d60e84dc8a", "testharness" @@ -682954,7 +683339,7 @@ "support" ], "picture-in-picture/shadow-dom.html": [ - "2bf4374607522dcf6d1840eaab1de23a684f8c8e", + "e2335cd5ddc77123340bc5f0767bd686a08dd032", "testharness" ], "pointerevents/META.yml": [ @@ -683633,7 +684018,7 @@ "510ebb480457e9e1b0d6ea788a8bd36c825bc634", "testharness" ], - "preload/dynamic-adding-preload-imagesrcset.tentative.html": [ + "preload/dynamic-adding-preload-imagesrcset.html": [ "e1b8431d7bcaca618014496342055d533ba7399c", "testharness" ], @@ -683661,20 +684046,20 @@ "a9ca424d4beee0c62226430e78af351d918dd3c3", "support" ], - "preload/link-header-preload-nonce.html": [ - "dc1ec100776916319a637daa0397589a05a23804", + "preload/link-header-preload-imagesrcset.html": [ + "54f6252506b27d1c4314dcd58eddbb0504bf8035", "testharness" ], - "preload/link-header-preload-nonce.html.headers": [ - "a54b69378e9cc785ee02ec4a37694f90c366403b", + "preload/link-header-preload-imagesrcset.html.headers": [ + "906de0c95aeb58e24d1b7e779f1ed99de40d7af1", "support" ], - "preload/link-header-preload-srcset.tentative.html": [ - "8d057549a1930dea4502ef7400f44c9113ec3e62", + "preload/link-header-preload-nonce.html": [ + "dc1ec100776916319a637daa0397589a05a23804", "testharness" ], - "preload/link-header-preload-srcset.tentative.html.headers": [ - "906de0c95aeb58e24d1b7e779f1ed99de40d7af1", + "preload/link-header-preload-nonce.html.headers": [ + "a54b69378e9cc785ee02ec4a37694f90c366403b", "support" ], "preload/link-header-preload.html": [ @@ -693777,10 +694162,6 @@ "598a727bf88e7f47556d509f6929a86b64b0506c", "support" ], - "resources/.gitignore": [ - "04fdeda1cc4ea15291c2d398163b1970c13ddd82", - "support" - ], "resources/.htaccess": [ "fd46101ca0099e76a8ed5723515f6e1bd220aebb", "support" @@ -695185,6 +695566,10 @@ "3ddb3b0507d54269c54a552227771a0bf9131a0e", "support" ], + "screen-orientation/active-lock.html": [ + "84fb603eaeb48420c2abe47bc561516dd24a6e49", + "testharness" + ], "screen-orientation/event-before-promise.html": [ "51b41e19357141d5bf9699d41f8968378dcc8956", "testharness" @@ -699290,7 +699675,7 @@ "testharness" ], "shadow-dom/untriaged/html-elements-in-shadow-trees/html-forms/test-003.html": [ - "e1c64e6415187affc9653fb9083033408d6dece0", + "b795fc38f9ca9358ea26c774ded8784314f835d7", "testharness" ], "shadow-dom/untriaged/html-elements-in-shadow-trees/inert-html-elements/test-001.html": [ @@ -700625,6 +701010,10 @@ "6966d8cbc88de06a3170fbd2d5941f858d004fe2", "support" ], + "svg/embedded/image-embedding-svg-viewref-with-viewbox.svg": [ + "6340c19d2a0e7c72faec83e2fb990ed9abe487f8", + "reftest" + ], "svg/embedded/image-embedding-svg-with-viewport-units-inline-style.svg": [ "7ef2655dc91c815d57d1496d2e5707d54ac94c5d", "reftest" @@ -704561,6 +704950,10 @@ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", "support" ], + "tools/ci/action_manifest_build.sh": [ + "ad6a4cb16e7b24cf6c67d52e50b9248c64b8e754", + "support" + ], "tools/ci/azure/README.md": [ "afe5021efcad78a13d1767fb423d846557b92ee0", "support" @@ -704578,7 +704971,7 @@ "support" ], "tools/ci/azure/fyi_hook.yml": [ - "5af16af31bcc34558ae3af3831ee2f3e39ba87e7", + "3d23da3bb7411fde847b3d3de8b95a1c33935eb9", "support" ], "tools/ci/azure/install_certs.yml": [ @@ -704602,7 +704995,7 @@ "support" ], "tools/ci/azure/install_safari.yml": [ - "3329190a13cb847a8b8e5c9ffad8dc85b601318e", + "88381085665fe71c40933a5ad4a59cbe15463236", "support" ], "tools/ci/azure/pip_install.yml": [ @@ -704625,10 +705018,6 @@ "453ac2ac3c05cf873bcf66d1be990324bd20036e", "support" ], - "tools/ci/before_install.sh": [ - "cde1879211b36654bc82d9a033017b514860c773", - "support" - ], "tools/ci/ci_built_diff.sh": [ "709cc2aa7e6867f548d4efdd62d74abc185e657b", "support" @@ -704637,10 +705026,6 @@ "bf98f209eba1330c9a69d13ed0ca9380e3ec24a2", "support" ], - "tools/ci/ci_manifest.sh": [ - "7d0d5ca04189a099d8ac4d782f7be295437c648f", - "support" - ], "tools/ci/ci_resources_unittest.sh": [ "11190fc58d64491bae719f9ac91adb1e879886fb", "support" @@ -704661,10 +705046,6 @@ "841fd855c8056829afd347e3067e55804ca65139", "support" ], - "tools/ci/install.sh": [ - "f91a24c88e0729ed03473c206a5539558ddcbfba", - "support" - ], "tools/ci/jobs.py": [ "2b54327ad20506c23f6698ddd6c5c5f1def8b09f", "support" @@ -704673,20 +705054,12 @@ "d0a80ab46c7a86b476776d2dff0fcd23776dfc9e", "support" ], - "tools/ci/run.sh": [ - "5af38d0b56c1bbabb3e3748633cb7dca4f15c5e6", - "support" - ], "tools/ci/run_tc.py": [ - "cb4d6ae5fdca190843d52b6836843fc3f0fd3d00", - "support" - ], - "tools/ci/start.sh": [ - "18e2784e6cd01bcad8bcc556a362a019d00defdc", + "32eef7cb69cf0d4450d3d177e891740cb42b4fd7", "support" ], "tools/ci/tag_master.py": [ - "0ae2801dfe70b2e3409800f210410a107ea53d81", + "d672d13fe2339ed6ae85324147cdf108fdccc8a4", "support" ], "tools/ci/taskcluster-run.py": [ @@ -704717,12 +705090,16 @@ "e60b4ea6a3a1c909c715fb7248a6f1b0cc6e9d4e", "support" ], + "tools/docker/github/Dockerfile": [ + "22d47f3e5fa9032e5f016f6f15720fa98e1ba625", + "support" + ], "tools/docker/retry.py": [ "6126b781bfadd15e82b8a3a3b9494050939eab6c", "support" ], "tools/docker/start.sh": [ - "0675a0af2da2bb81b9a1d2f8cd062e3ee383e6b7", + "b1ff4a7faa5ef7a3519fb8797a02557432de2c34", "support" ], "tools/gitignore/__init__.py": [ @@ -704754,7 +705131,7 @@ "support" ], "tools/lint/lint.py": [ - "9976314c8fb2eaa202ad0ad418cfe22b8b3d6353", + "b07dbcbeb9293d7a22e83880672411ac445f0ba6", "support" ], "tools/lint/tests/__init__.py": [ @@ -709454,7 +709831,7 @@ "support" ], "tools/wpt/run.py": [ - "1178c5a3f6d3f041ed5e4fe8597139d21d64de00", + "0ffc779d9339c20d78c673b6102d35aba71ad636", "support" ], "tools/wpt/testfiles.py": [ @@ -709550,7 +709927,7 @@ "support" ], "tools/wptrunner/requirements_chrome.txt": [ - "1bf6ef32ad473a716cc969d06f147e5e827ade35", + "470aaf9a93996d0231e13e05cc35557a36d25de9", "support" ], "tools/wptrunner/requirements_chrome_android.txt": [ @@ -709578,7 +709955,7 @@ "support" ], "tools/wptrunner/requirements_safari.txt": [ - "1bf6ef32ad473a716cc969d06f147e5e827ade35", + "470aaf9a93996d0231e13e05cc35557a36d25de9", "support" ], "tools/wptrunner/requirements_sauce.txt": [ @@ -709734,7 +710111,7 @@ "support" ], "tools/wptrunner/wptrunner/browsers/edge.py": [ - "25309617ad00813cfb79ce385e0e8d5c806de82d", + "027c8f87d493c29f5c38e02d7e0540aa8cca9fcd", "support" ], "tools/wptrunner/wptrunner/browsers/edge_webdriver.py": [ @@ -711726,7 +712103,7 @@ "manual" ], "visual-viewport/viewport-scrollbars-cause-resize.html": [ - "d0158c6f6259dd4181c0e8d921ebe3ecc9fa9d73", + "2767fcc48a3728218c5d73ad3ef60cafa7376a45", "testharness" ], "visual-viewport/viewport-type.html": [ @@ -713753,10 +714130,6 @@ "cf933b8bc7fcac181ead4c2e1059539525e84197", "testharness" ], - "webaudio/.gitignore": [ - "068fd1ef0665ee2c7c1eee0703f530a5540a7075", - "support" - ], "webaudio/META.yml": [ "e8f8cc59489e381dba1fd35e9d088a6de86a3783", "support" @@ -716485,8 +716858,8 @@ "09ad67751a73a6482415a6ff6c2dac70e049c82c", "testharness" ], - "webrtc/RTCPeerConnection-connectionState.html": [ - "a461bf16997b6bee497decec65148506e88b773b", + "webrtc/RTCPeerConnection-connectionState.https.html": [ + "9ed5808727a6a293eedc705f40abdc7dc62f8eb4", "testharness" ], "webrtc/RTCPeerConnection-constructor.html": [ @@ -716522,15 +716895,15 @@ "testharness" ], "webrtc/RTCPeerConnection-helper.js": [ - "310f028c605cbf0b841f97fc5725e868a09a26d8", + "90867b24fdab3f3228d8d25a1685ce62d03db69d", "support" ], "webrtc/RTCPeerConnection-iceConnectionState.https.html": [ - "768da23ddbf7eeed91bf351f080c12b8338696fa", + "8acabf49766ba08999b8857d8cb6589d1587c843", "testharness" ], "webrtc/RTCPeerConnection-iceGatheringState.html": [ - "e170e4a2f87fc4c3260a7acd323a98e1adfa3726", + "e6d8d062701a795a289ad011fa4cfae143a342e9", "testharness" ], "webrtc/RTCPeerConnection-ondatachannel.html": [ @@ -716562,11 +716935,11 @@ "testharness" ], "webrtc/RTCPeerConnection-setLocalDescription-answer.html": [ - "b783d854738a926cfdf0ecc7ecd7897b5b86b200", + "e8b3ef5071e480941cc5b4c6f3117ebfa519ac9e", "testharness" ], "webrtc/RTCPeerConnection-setLocalDescription-offer.html": [ - "41662f3158fe886b848121ffbc9e970160666a01", + "31c85227a857fb445e22c583611dcf2da9f128cc", "testharness" ], "webrtc/RTCPeerConnection-setLocalDescription-pranswer.html": [ @@ -716766,7 +717139,7 @@ "testharness" ], "webrtc/idlharness.https.window.js": [ - "6e9b7e9afa2a1a1ef0448307b2e39e7fbc7a358f", + "66abc25b0840335f8de783c010796942793fb14f", "testharness" ], "webrtc/legacy/README.txt": [ @@ -716813,6 +717186,10 @@ "9630919b80861b6559bbf90339788c826f581465", "testharness" ], + "webrtc/protocol/simulcast-answer.html": [ + "b5e8792409f4e4c84b79a1be7abe4b68a98ff136", + "testharness" + ], "webrtc/protocol/simulcast-offer.html": [ "77ae7f9510c1e4c8aa1dc0156bdae586b2ff1fd3", "testharness" @@ -723178,7 +723555,7 @@ "testharness" ], "xhr/abort-after-stop.htm": [ - "d28d046fa9896ca50a98efc39a4b70a05ae586ff", + "8aa18a681d38c05e9e138e3e3c707d47ca10ba2f", "testharness" ], "xhr/abort-after-timeout.htm": [ @@ -723290,7 +723667,7 @@ "testharness" ], "xhr/access-control-basic-cors-safelisted-request-headers.htm": [ - "20b875b9bddc3c15520eb2e462a4011334fba332", + "56870493b4ed9dfe843258ceb1ae23e569750c0f", "testharness" ], "xhr/access-control-basic-cors-safelisted-response-headers.htm": [ @@ -723622,7 +723999,7 @@ "testharness" ], "xhr/open-during-abort-processing.htm": [ - "5d80babd9d015bd527a3e8a49b0f4165fd711c81", + "706eb32a20548a70f5121e081f782888415096a1", "testharness" ], "xhr/open-during-abort.htm": [ diff --git a/tests/wpt/metadata/cors/client-hint-request-headers-2.tentative.htm.ini b/tests/wpt/metadata/cors/client-hint-request-headers-2.tentative.htm.ini new file mode 100644 index 00000000000..b87fc809bc2 --- /dev/null +++ b/tests/wpt/metadata/cors/client-hint-request-headers-2.tentative.htm.ini @@ -0,0 +1,4 @@ +[client-hint-request-headers-2.tentative.htm] + [Client hint headers are simple headers] + expected: FAIL + diff --git a/tests/wpt/metadata/cors/simple-requests-ch.tentative.htm.ini b/tests/wpt/metadata/cors/simple-requests-ch.tentative.htm.ini new file mode 100644 index 00000000000..f7ee232e445 --- /dev/null +++ b/tests/wpt/metadata/cors/simple-requests-ch.tentative.htm.ini @@ -0,0 +1,10 @@ +[simple-requests-ch.tentative.htm] + [No preflight HEAD and {"save-data":"on","device-memory":"2.0","dpr":"3.0","width":"1200","viewport-width":"1300"}] + expected: FAIL + + [No preflight POST and {"save-data":"on","device-memory":"2.0","dpr":"3.0","width":"1200","viewport-width":"1300"}] + expected: FAIL + + [No preflight GET and {"save-data":"on","device-memory":"2.0","dpr":"3.0","width":"1200","viewport-width":"1300"}] + expected: FAIL + diff --git a/tests/wpt/metadata/css/CSS2/sec5/first-line-000.xht.ini b/tests/wpt/metadata/css/CSS2/sec5/first-line-000.xht.ini new file mode 100644 index 00000000000..8ac2a9ae3a1 --- /dev/null +++ b/tests/wpt/metadata/css/CSS2/sec5/first-line-000.xht.ini @@ -0,0 +1,2 @@ +[first-line-000.xht] + expected: FAIL diff --git a/tests/wpt/metadata/css/CSS2/selector/lang-pseudoclass-002.xht.ini b/tests/wpt/metadata/css/CSS2/selector/lang-pseudoclass-002.xht.ini new file mode 100644 index 00000000000..803cd9688a2 --- /dev/null +++ b/tests/wpt/metadata/css/CSS2/selector/lang-pseudoclass-002.xht.ini @@ -0,0 +1,2 @@ +[lang-pseudoclass-002.xht] + expected: FAIL diff --git a/tests/wpt/metadata/encoding/single-byte-decoder.html.ini b/tests/wpt/metadata/encoding/single-byte-decoder.html.ini index b0227e4c668..e85a200d4e9 100644 --- a/tests/wpt/metadata/encoding/single-byte-decoder.html.ini +++ b/tests/wpt/metadata/encoding/single-byte-decoder.html.ini @@ -32,7 +32,7 @@ [single-byte-decoder.html?XMLHttpRequest] - expected: CRASH + expected: TIMEOUT [ISO-8859-2: iso_8859-2:1987 (XMLHttpRequest)] expected: FAIL @@ -55,17 +55,14 @@ expected: FAIL [windows-1252: iso_8859-1:1987 (XMLHttpRequest)] - expected: FAIL + expected: TIMEOUT [windows-1254: iso_8859-9:1989 (XMLHttpRequest)] - expected: TIMEOUT + expected: FAIL [windows-1254: windows-1254 (XMLHttpRequest)] expected: TIMEOUT - [x-mac-cyrillic: x-mac-ukrainian (XMLHttpRequest)] - expected: TIMEOUT - [windows-1257: cp1257 (XMLHttpRequest)] expected: TIMEOUT @@ -78,9 +75,6 @@ [windows-1254: latin5 (XMLHttpRequest)] expected: TIMEOUT - [windows-1256: x-cp1256 (XMLHttpRequest)] - expected: TIMEOUT - [windows-1255: cp1255 (XMLHttpRequest)] expected: TIMEOUT @@ -90,18 +84,12 @@ [windows-1258: x-cp1258 (XMLHttpRequest)] expected: TIMEOUT - [windows-1255: x-cp1255 (XMLHttpRequest)] - expected: TIMEOUT - [x-mac-cyrillic: x-mac-cyrillic (XMLHttpRequest)] expected: TIMEOUT [windows-1258: cp1258 (XMLHttpRequest)] expected: TIMEOUT - [windows-1256: cp1256 (XMLHttpRequest)] - expected: TIMEOUT - [windows-1257: x-cp1257 (XMLHttpRequest)] expected: TIMEOUT @@ -126,7 +114,34 @@ [windows-1254: iso-ir-148 (XMLHttpRequest)] expected: TIMEOUT - [windows-1256: windows-1256 (XMLHttpRequest)] + [windows-1254: iso_8859-9 (XMLHttpRequest)] + expected: TIMEOUT + + [windows-1257: windows-1257 (XMLHttpRequest)] + expected: TIMEOUT + + [windows-1252: iso_8859-1 (XMLHttpRequest)] + expected: TIMEOUT + + [windows-1253: windows-1253 (XMLHttpRequest)] + expected: TIMEOUT + + [windows-1253: cp1253 (XMLHttpRequest)] + expected: TIMEOUT + + [windows-1252: x-cp1252 (XMLHttpRequest)] + expected: TIMEOUT + + [windows-1258: windows-1258 (XMLHttpRequest)] + expected: TIMEOUT + + [windows-1252: l1 (XMLHttpRequest)] + expected: TIMEOUT + + [windows-1252: windows-1252 (XMLHttpRequest)] + expected: TIMEOUT + + [windows-1252: us-ascii (XMLHttpRequest)] expected: TIMEOUT diff --git a/tests/wpt/metadata/fetch/content-type/response.window.js.ini b/tests/wpt/metadata/fetch/content-type/response.window.js.ini index 58d171deb36..18f786d4963 100644 --- a/tests/wpt/metadata/fetch/content-type/response.window.js.ini +++ b/tests/wpt/metadata/fetch/content-type/response.window.js.ini @@ -312,18 +312,3 @@ [<iframe>: separate response Content-Type: text/plain */*;charset=gbk] expected: FAIL - [<iframe>: separate response Content-Type: text/html */*;charset=gbk] - expected: FAIL - - [<iframe>: combined response Content-Type: text/html */*;charset=gbk] - expected: FAIL - - [<iframe>: combined response Content-Type: text/html */*] - expected: FAIL - - [<iframe>: separate response Content-Type: text/plain;charset=gbk text/html] - expected: FAIL - - [<iframe>: separate response Content-Type: text/html;" \\" text/plain] - expected: FAIL - diff --git a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini index 2023a855086..87c807a49ff 100644 --- a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini +++ b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini @@ -11,6 +11,3 @@ [X-Content-Type-Options%3A%20nosniff%0C] expected: FAIL - [X-Content-Type-Options%3A%20no%0D%0AX-Content-Type-Options%3A%20nosniff] - expected: FAIL - diff --git a/tests/wpt/metadata/fetch/sec-metadata/navigation.https.sub.html.ini b/tests/wpt/metadata/fetch/sec-metadata/navigation.https.sub.html.ini new file mode 100644 index 00000000000..a53ed577de8 --- /dev/null +++ b/tests/wpt/metadata/fetch/sec-metadata/navigation.https.sub.html.ini @@ -0,0 +1,2 @@ +[navigation.https.sub.html] + expected: TIMEOUT diff --git a/tests/wpt/metadata/fetch/sec-metadata/trailing-dot.tentative.https.sub.html.ini b/tests/wpt/metadata/fetch/sec-metadata/trailing-dot.tentative.https.sub.html.ini new file mode 100644 index 00000000000..21cbeae87cc --- /dev/null +++ b/tests/wpt/metadata/fetch/sec-metadata/trailing-dot.tentative.https.sub.html.ini @@ -0,0 +1,10 @@ +[trailing-dot.tentative.https.sub.html] + [Fetching a resource from a cross-site host, spelled with a trailing dot.] + expected: FAIL + + [Fetching a resource from the same origin, but spelled with a trailing dot.] + expected: FAIL + + [Fetching a resource from the same site, but spelled with a trailing dot.] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-abort/javascript-url-abort-return-value-undefined.tentative.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-abort/javascript-url-abort-return-value-undefined.tentative.html.ini deleted file mode 100644 index 78879bad5f1..00000000000 --- a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-abort/javascript-url-abort-return-value-undefined.tentative.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[javascript-url-abort-return-value-undefined.tentative.html] - expected: TIMEOUT - [Not aborting fetch for javascript:undefined navigation] - expected: TIMEOUT - diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini deleted file mode 100644 index 87b07c3e670..00000000000 --- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[traverse_the_history_1.html] - [Multiple history traversals from the same task] - expected: FAIL - diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini deleted file mode 100644 index 385376c7321..00000000000 --- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[traverse_the_history_4.html] - [Multiple history traversals, last would be aborted] - expected: FAIL - diff --git a/tests/wpt/metadata/html/browsers/the-window-object/named-access-on-the-window-object/navigated-named-objects.window.js.ini b/tests/wpt/metadata/html/browsers/the-window-object/named-access-on-the-window-object/navigated-named-objects.window.js.ini new file mode 100644 index 00000000000..6665eaa484e --- /dev/null +++ b/tests/wpt/metadata/html/browsers/the-window-object/named-access-on-the-window-object/navigated-named-objects.window.js.ini @@ -0,0 +1,37 @@ +[navigated-named-objects.window.html] + [Window's associated Document object is used for finding named objects (<iframe> via same-origin <iframe>)] + expected: FAIL + + [Window's associated Document object is used for finding named objects (<object> via srcdoc <iframe>)] + expected: FAIL + + [Window's associated Document object is used for finding named objects (<iframe> via cross-site <iframe>)] + expected: FAIL + + [Window's associated Document object is used for finding named objects (<div> via same-origin <iframe>)] + expected: FAIL + + [Window's associated Document object is used for finding named objects (<object> with browsing ccontext via srcdoc <iframe)>] + expected: FAIL + + [Window's associated Document object is used for finding named objects (<div> via cross-site <iframe>)] + expected: FAIL + + [Window's associated Document object is used for finding named objects (<object> with browsing ccontext via same-origin <iframe)>] + expected: FAIL + + [Window's associated Document object is used for finding named objects (<object> with browsing ccontext via cross-site <iframe)>] + expected: FAIL + + [Window's associated Document object is used for finding named objects (<div> via srcdoc <iframe>)] + expected: FAIL + + [Window's associated Document object is used for finding named objects (<object> via same-origin <iframe>)] + expected: FAIL + + [Window's associated Document object is used for finding named objects (<object> via cross-site <iframe>)] + expected: FAIL + + [Window's associated Document object is used for finding named objects (<iframe> via srcdoc <iframe>)] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini deleted file mode 100644 index 8cc42056d34..00000000000 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini +++ /dev/null @@ -1,10 +0,0 @@ -[non-active-document.html] - [DOMParser] - expected: FAIL - - [createHTMLDocument] - expected: FAIL - - [<template>] - expected: FAIL - diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini index 66bd350083b..a56bad443a2 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini @@ -1,4 +1,5 @@ [realtimeanalyser-fft-scaling.html] + expected: TIMEOUT [X 2048-point FFT peak position is not equal to 64. Got 0.] expected: FAIL diff --git a/tests/wpt/metadata/workers/semantics/run-a-worker/003.html.ini b/tests/wpt/metadata/workers/semantics/run-a-worker/003.html.ini index 49f489d2a1c..d6e39444229 100644 --- a/tests/wpt/metadata/workers/semantics/run-a-worker/003.html.ini +++ b/tests/wpt/metadata/workers/semantics/run-a-worker/003.html.ini @@ -1,6 +1,5 @@ [003.html] type: testharness - expected: ERROR [shared] expected: FAIL diff --git a/tests/wpt/metadata/xhr/access-control-basic-cors-safelisted-request-headers.htm.ini b/tests/wpt/metadata/xhr/access-control-basic-cors-safelisted-request-headers.htm.ini deleted file mode 100644 index 2373b260a04..00000000000 --- a/tests/wpt/metadata/xhr/access-control-basic-cors-safelisted-request-headers.htm.ini +++ /dev/null @@ -1,5 +0,0 @@ -[access-control-basic-cors-safelisted-request-headers.htm] - type: testharness - [Request with CORS-safelisted headers] - expected: FAIL - diff --git a/tests/wpt/mozilla/meta/css/transition_calc_implicit.html.ini b/tests/wpt/mozilla/meta/css/transition_calc_implicit.html.ini deleted file mode 100644 index dbea4f293ad..00000000000 --- a/tests/wpt/mozilla/meta/css/transition_calc_implicit.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[transition_calc_implicit.html] - expected: TIMEOUT diff --git a/tests/wpt/web-platform-tests/.azure-pipelines.yml b/tests/wpt/web-platform-tests/.azure-pipelines.yml index 08cda381b35..b0a60cf9881 100644 --- a/tests/wpt/web-platform-tests/.azure-pipelines.yml +++ b/tests/wpt/web-platform-tests/.azure-pipelines.yml @@ -163,11 +163,14 @@ jobs: condition: always() - template: tools/ci/azure/cleanup_win10.yml +# All `./wpt run` tests are run from epochs/* branches on a schedule. See +# documentation at the top of this file for required setup. - job: results_edge displayName: 'all tests (Edge)' - # This job is only triggered manually until it has been shown to be robust. - condition: and(eq(variables['Build.Reason'], 'Manual'), variables['run_all_edge']) - # There are 5 agents in the pool, but use more jobs so that each takes <1h. + condition: | + or(eq(variables['Build.Reason'], 'Schedule'), + and(eq(variables['Build.Reason'], 'Manual'), variables['run_all_edge'])) + # There are 12 agents in the pool, but use more jobs so that each takes <1h. strategy: parallel: 20 timeoutInMinutes: 360 @@ -195,8 +198,40 @@ jobs: dependsOn: results_edge artifactName: edge-results -# All `./wpt run` tests are run from epochs/* branches on a schedule. See -# documentation at the top of this file for required setup. +- job: results_safari + displayName: 'all tests (Safari)' + condition: eq(variables['Build.Reason'], 'Schedule') + strategy: + parallel: 4 # chosen to make runtime ~2h + timeoutInMinutes: 360 + pool: + vmImage: 'macOS-10.13' + steps: + - template: tools/ci/azure/checkout.yml + - template: tools/ci/azure/pip_install.yml + parameters: + packages: virtualenv + - template: tools/ci/azure/install_fonts.yml + - template: tools/ci/azure/install_certs.yml + - template: tools/ci/azure/install_safari.yml + parameters: + channel: stable + - template: tools/ci/azure/update_hosts.yml + - template: tools/ci/azure/update_manifest.yml + - script: | + # TODO: drop this when `safaridriver --version` is supported. + SAFARI_VERSION="$(/usr/libexec/PlistBuddy -c 'Print :CFBundleShortVersionString' /Applications/Safari.app/Contents/Info.plist) ($(/usr/libexec/PlistBuddy -c 'Print :CFBundleVersion' /Applications/Safari.app/Contents/Info.plist))" + no_proxy='*' ./wpt run --no-manifest-update --no-restart-on-unexpected --no-fail-on-unexpected --this-chunk=$(System.JobPositionInPhase) --total-chunks=$(System.TotalJobsInPhase) --chunk-type hash --log-wptreport $(Build.ArtifactStagingDirectory)/wpt_report_$(System.JobPositionInPhase).json --log-wptscreenshot $(Build.ArtifactStagingDirectory)/wpt_screenshot_$(System.JobPositionInPhase).txt --browser-version "$SAFARI_VERSION" safari + displayName: 'Run tests' + - task: PublishBuildArtifacts@1 + displayName: 'Publish results' + inputs: + artifactName: 'safari-results' +- template: tools/ci/azure/fyi_hook.yml + parameters: + dependsOn: results_safari + artifactName: safari-results + - job: results_safari_preview displayName: 'all tests (Safari Technology Preview)' condition: | diff --git a/tests/wpt/web-platform-tests/.github/main.workflow b/tests/wpt/web-platform-tests/.github/main.workflow new file mode 100644 index 00000000000..b1b61554f91 --- /dev/null +++ b/tests/wpt/web-platform-tests/.github/main.workflow @@ -0,0 +1,16 @@ +workflow "Build & Release Manifest" { + on = "push" + resolves = ["tag-master"] +} + +action "build-manifest" { + uses = "./tools/docker/github" + runs = ["bash", "-c", "tools/ci/action_manifest_build.sh"] +} + +action "tag-master" { + needs = "build-manifest" + uses = "./tools/docker/github" + runs = ["python", "tools/ci/tag_master.py"] + secrets = ["GITHUB_TOKEN"] +} diff --git a/tests/wpt/web-platform-tests/.gitignore b/tests/wpt/web-platform-tests/.gitignore index 8e3a85183ef..cc4bd700eea 100644 --- a/tests/wpt/web-platform-tests/.gitignore +++ b/tests/wpt/web-platform-tests/.gitignore @@ -1,18 +1,20 @@ # Python *.py[co] -.virtualenv/ -_venv/ .cache/ +.coverage* .pytest_cache/ .tox/ -.coverage* +.virtualenv/ +_venv/ +_virtualenv/ # Node node_modules/ # WPT repo stuff -/MANIFEST.json .wptcache/ +/MANIFEST.json +/_certs /config.json # Files generated when regenerating pre-generated certs @@ -22,11 +24,25 @@ node_modules/ # Various OS/editor specific files *# +*.orig +*.rej +*.svn *.sw[po] +*.xcodeproj +*Thumbs.db *~ -\#* -scratch +.DS_Store +.directory* .idea/ .vscode/ -.DS_Store -*.rej +\#* +scratch + +# Testsuite-specific rules +/conformance-checkers/vnu.jar +/cors/resources/log.txt +/css/build-temp +/css/dist +/css/dist_last +/css/tools/cache +/webaudio/idl/* diff --git a/tests/wpt/web-platform-tests/.taskcluster.yml b/tests/wpt/web-platform-tests/.taskcluster.yml index d67608f47b4..6ad97f7e104 100644 --- a/tests/wpt/web-platform-tests/.taskcluster.yml +++ b/tests/wpt/web-platform-tests/.taskcluster.yml @@ -64,7 +64,7 @@ tasks: owner: ${event.pusher.email} source: ${event.repository.url} payload: - image: harjgam/web-platform-tests:0.30 + image: harjgam/web-platform-tests:0.32 maxRunTime: 7200 artifacts: public/results: @@ -80,10 +80,10 @@ tasks: echo "wpt-${browser.name}-${browser.channel}-${chunk[0]}-${chunk[1]}"; ~/start.sh ${event.repository.url} - ${event.ref} - ${event.after}; + ${event.ref}; cd ~/web-platform-tests; ./tools/ci/run_tc.py + --checkout=${event.after} --oom-killer --hosts --browser=${browser.name} @@ -112,15 +112,15 @@ tasks: $map: # This is the main place to define new stability checks - name: wpt-${browser.name}-${browser.channel}-stability - checkout: FETCH_HEAD - diff_range: HEAD^ + checkout: task_head + diff_base: base_head description: >- Verify that all tests affected by a pull request are stable when executed in ${browser.name}. extra_args: '--verify' - name: wpt-${browser.name}-${browser.channel}-results - checkout: FETCH_HEAD - diff_range: HEAD^ + checkout: task_head + diff_base: base_head description: >- Collect results for all tests affected by a pull request in ${browser.name}. @@ -129,8 +129,8 @@ tasks: --log-wptreport=../artifacts/wpt_report.json --log-wptscreenshot=../artifacts/wpt_screenshot.txt - name: wpt-${browser.name}-${browser.channel}-results-without-changes - checkout: FETCH_HEAD^ - diff_range: FETCH_HEAD + checkout: base_head + diff_base: task_head description: >- Collect results for all tests affected by a pull request in ${browser.name} but without the changes in the PR. @@ -156,7 +156,7 @@ tasks: owner: ${event.pull_request.user.login}@users.noreply.github.com source: ${event.repository.url} payload: - image: harjgam/web-platform-tests:0.30 + image: harjgam/web-platform-tests:0.32 maxRunTime: 7200 artifacts: public/results: @@ -178,8 +178,7 @@ tasks: echo "${operation.name}"; ~/start.sh ${event.repository.clone_url} - refs/pull/${event.number}/merge - FETCH_HEAD; + refs/pull/${event.number}/merge; cd web-platform-tests; ./tools/ci/run_tc.py --checkout=${operation.checkout} @@ -189,7 +188,7 @@ tasks: --xvfb stability ./tools/ci/taskcluster-run.py - --commit-range ${operation.diff_range} + --commit-range ${operation.diff_base} ${browser.name} -- --channel=${browser.channel} @@ -310,7 +309,7 @@ tasks: owner: ${event.sender.login}@users.noreply.github.com source: ${event.repository.url} payload: - image: harjgam/web-platform-tests:0.30 + image: harjgam/web-platform-tests:0.32 maxRunTime: 7200 artifacts: public/results: @@ -326,7 +325,6 @@ tasks: echo "${operation.name}"; ~/start.sh ${event.repository.clone_url} - ${checkout_ref} - FETCH_HEAD; + ${checkout_ref}; cd ~/web-platform-tests; ${operation.script}; diff --git a/tests/wpt/web-platform-tests/.travis.yml b/tests/wpt/web-platform-tests/.travis.yml deleted file mode 100644 index 02d760ca98f..00000000000 --- a/tests/wpt/web-platform-tests/.travis.yml +++ /dev/null @@ -1,49 +0,0 @@ -dist: trusty -sudo: required -language: python -branches: - only: - - master -before_install: - # This needs be sourced as it sets various env vars - - . ./tools/ci/before_install.sh -install: - - ./tools/ci/install.sh -matrix: - # The use of `if` conditionals to exclude jobs from master should align with - # jobs unconditionally listed by `./wpt test-jobs`, regardless of affected - # paths. (The reverse is not true, as the manifest job could run on PRs too.) - fast_finish: true - include: - - name: "tag master + upload manifest" - if: type = push AND branch = master - os: linux - python: "2.7" - env: - - JOB=manifest_upload SCRIPT=tools/ci/ci_manifest.sh - - secure: "FrlMkMZiwggnhJbLiLxZ4imtXxuzFNozty94g1mneMPEVLrnyhb6c/g2SwN37KKU0WSDlGTz26IYnFvo1ftfSOx+sjRz0HqwW7JnrXULKYo7jiPttIcmeJxlSVeW9yS4blbLaBakytHjSnsf+za7bAaf1aS7RRAtAINgifA6Chg=" - deploy: - provider: releases - api_key: - secure: "EljDx50oNpDLs7rzwIv+z1PxIgB5KMnx1W0OQkpNvltR0rBW9g/aQaE+Z/c8M/sPqN1bkvKPybKzGKjb6j9Dw3/EJhah4SskH78r3yMAe2DU/ngxqqjjfXcCc2t5MKxzHAILTAxqScPj2z+lG1jeK1Z+K5hTbSP9lk+AvS0D16w=" - file: $WPT_MANIFEST_FILE.gz - skip_cleanup: true - - name: "build-css-testsuites.sh" - if: type = pull_request - os: linux - python: "2.7" - env: JOB=build_css SCRIPT=css/build-css-testsuites.sh - exclude: - - env: # exclude empty env from the top-level above - allow_failures: - - env: JOB=build_css SCRIPT=css/build-css-testsuites.sh -script: - - ./tools/ci/run.sh -cache: - directories: - - $HOME/.cache/pip - - $HOME/meta -notifications: - email: - on_success: never - on_failure: always diff --git a/tests/wpt/web-platform-tests/2dcontext/context-attributes/getContextAttributes.html b/tests/wpt/web-platform-tests/2dcontext/context-attributes/getContextAttributes.html index cff02ea06f6..fd1a4adb3a7 100644 --- a/tests/wpt/web-platform-tests/2dcontext/context-attributes/getContextAttributes.html +++ b/tests/wpt/web-platform-tests/2dcontext/context-attributes/getContextAttributes.html @@ -6,13 +6,16 @@ var testScenarios = [ {testDescription: "Test default context creation attributes", canvasContextAttributes: {}, - expectedContextAttributes: {alpha : true}}, + expectedContextAttributes: {alpha : true, desynchronized: false}}, {testDescription: "Test context creation attributes alpha: true", canvasContextAttributes: {alpha: true}, expectedContextAttributes: {alpha : true}}, {testDescription: "Test context creation attributes alpha: false", canvasContextAttributes: {alpha: false}, expectedContextAttributes: {alpha : false}}, + {testDescription: "Test context creation attributes desynchronized: false", + canvasContextAttributes: {desynchronized: false}, + expectedContextAttributes: {desynchronized : false}}, ]; function runTestScenario(testScenario) { @@ -20,8 +23,14 @@ function runTestScenario(testScenario) { var canvas = document. createElement('canvas'); var ctx = canvas.getContext('2d', testScenario.canvasContextAttributes); var contextAttributes = ctx.getContextAttributes(); - assert_equals(contextAttributes.alpha, - testScenario.expectedContextAttributes.alpha); + if (testScenario.expectedContextAttributes.alpha !== undefined) { + assert_equals(contextAttributes.alpha, + testScenario.expectedContextAttributes.alpha); + } + if (testScenario.expectedContextAttributes.desynchronized !== undefined) { + assert_equals(contextAttributes.desynchronized, + testScenario.expectedContextAttributes.desynchronized); + } }, testScenario.testDescription); } diff --git a/tests/wpt/web-platform-tests/FileAPI/url/url-format.any.js b/tests/wpt/web-platform-tests/FileAPI/url/url-format.any.js index d485bfaac61..33732fa61fc 100644 --- a/tests/wpt/web-platform-tests/FileAPI/url/url-format.any.js +++ b/tests/wpt/web-platform-tests/FileAPI/url/url-format.any.js @@ -1,3 +1,4 @@ +// META: timeout=long const blob = new Blob(['test']); const file = new File(['test'], 'name'); diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/.gitignore b/tests/wpt/web-platform-tests/annotation-model/annotations/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 --- a/tests/wpt/web-platform-tests/annotation-model/annotations/.gitignore +++ /dev/null diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/.gitignore b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 --- a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/.gitignore +++ /dev/null diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/.gitignore b/tests/wpt/web-platform-tests/annotation-model/collections/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 --- a/tests/wpt/web-platform-tests/annotation-model/collections/.gitignore +++ /dev/null diff --git a/tests/wpt/web-platform-tests/annotation-model/definitions/.gitignore b/tests/wpt/web-platform-tests/annotation-model/definitions/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 --- a/tests/wpt/web-platform-tests/annotation-model/definitions/.gitignore +++ /dev/null diff --git a/tests/wpt/web-platform-tests/annotation-protocol/server/.gitignore b/tests/wpt/web-platform-tests/annotation-protocol/server/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 --- a/tests/wpt/web-platform-tests/annotation-protocol/server/.gitignore +++ /dev/null diff --git a/tests/wpt/web-platform-tests/annotation-vocab/tools/.gitignore b/tests/wpt/web-platform-tests/annotation-vocab/tools/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 --- a/tests/wpt/web-platform-tests/annotation-vocab/tools/.gitignore +++ /dev/null diff --git a/tests/wpt/web-platform-tests/common/echo.py b/tests/wpt/web-platform-tests/common/echo.py new file mode 100644 index 00000000000..2ee403645b1 --- /dev/null +++ b/tests/wpt/web-platform-tests/common/echo.py @@ -0,0 +1,6 @@ +def main(request, response): + # Without X-XSS-Protection to disable non-standard XSS protection the functionality this + # resource offers is useless + response.headers.set("X-XSS-Protection", "0") + response.headers.set("Content-Type", "text/html") + response.content = request.GET.first("content") diff --git a/tests/wpt/web-platform-tests/conformance-checkers/.gitignore b/tests/wpt/web-platform-tests/conformance-checkers/.gitignore deleted file mode 100644 index 3837fedbba6..00000000000 --- a/tests/wpt/web-platform-tests/conformance-checkers/.gitignore +++ /dev/null @@ -1 +0,0 @@ -vnu.jar diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/a/download-isvalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/a/download-isvalid.html index 0d1fe6f1e18..ed85411ccf7 100644 --- a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/a/download-isvalid.html +++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/a/download-isvalid.html @@ -1,5 +1,6 @@ <!doctype html> +<html lang=""> <meta charset=utf-8> <title>valid download</title> -<a download>foo</a><!-- empty download --> -<a download=baz>foo</a><!-- arbitrary value for download --> +<a href=foo download>foo</a><!-- empty download --> +<a href=foo download=baz>foo</a><!-- arbitrary value for download --> diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/a/download-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/a/download-novalid.html new file mode 100644 index 00000000000..f9b9d13bd0f --- /dev/null +++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/a/download-novalid.html @@ -0,0 +1,5 @@ +<!doctype html> +<html lang=""> +<meta charset=utf-8> +<title>invalid download</title> +<a download>foo</a><!-- download without href --> diff --git a/tests/wpt/web-platform-tests/conformance-checkers/messages.json b/tests/wpt/web-platform-tests/conformance-checkers/messages.json index 029e5a39ace..36eed1ad44a 100644 --- a/tests/wpt/web-platform-tests/conformance-checkers/messages.json +++ b/tests/wpt/web-platform-tests/conformance-checkers/messages.json @@ -98,6 +98,7 @@ "html/attributes/lang/xmllang-only-novalid.html": "When the attribute \u201cxml:lang\u201d in no namespace is specified, the element must also have the attribute \u201clang\u201d present with the same value.", "html/attributes/role/unrecognized-role-name-novalid.html": "Discarding unrecognized token \u201cinput\u201d from value of attribute \u201crole\u201d. Browsers ignore any token that is not a defined ARIA non-abstract role.", "html/attributes/spellcheck/value-bad-novalid.html": "Bad value \u201cbadvalue\u201d for attribute \u201cspellcheck\u201d on element \u201cp\u201d.", + "html/elements/a/download-novalid.html": "Element \u201ca\u201d is missing required attribute \u201chref\u201d.", "html/elements/a/href/fragment-backslash-novalid.html": "Bad value \u201c#\\\u201d for attribute \u201chref\u201d on element \u201ca\u201d: Bad URL: Illegal character in fragment: \u201c\\\u201d is not allowed.", "html/elements/a/href/fragment-contains-hash-novalid.html": "Bad value \u201chttp://foo/path#f#g\u201d for attribute \u201chref\u201d on element \u201ca\u201d: Bad URL: Illegal character in fragment: \u201c#\u201d is not allowed.", "html/elements/a/href/fragment-leading-space-novalid.html": "Bad value \u201chttp://f:21/b# e\u201d for attribute \u201chref\u201d on element \u201ca\u201d: Bad URL: Illegal character in fragment: space is not allowed.", diff --git a/tests/wpt/web-platform-tests/cors/client-hint-request-headers-2.tentative.htm b/tests/wpt/web-platform-tests/cors/client-hint-request-headers-2.tentative.htm new file mode 100644 index 00000000000..4ec217c8347 --- /dev/null +++ b/tests/wpt/web-platform-tests/cors/client-hint-request-headers-2.tentative.htm @@ -0,0 +1,41 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>CORS and Client Hints, potentially</title> + +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src=support.js?pipe=sub></script> + +<h1>Request headers</h1> +<div id=log></div> +<script> + +test(function() { + var client = new XMLHttpRequest() + client.open('GET', CROSSDOMAIN + 'resources/cors-makeheader.py?headers=x-print,', false) + client.setRequestHeader('x-print', 'unicorn') + client.setRequestHeader('content-type', 'text/plain') + client.setRequestHeader('accept', 'test') + client.setRequestHeader('accept-language', 'nn') + client.setRequestHeader('content-language', 'nn') + client.setRequestHeader('save-data', 'on') + client.setRequestHeader('device-memory', '1.0') + client.setRequestHeader('dpr', '2.0') + client.setRequestHeader('width', '35') + client.setRequestHeader('viewport-width', '42') + client.send(null) + + const res = JSON.parse(client.response) + assert_equals(res['x-print'], 'unicorn') + assert_equals(res['content-type'], 'text/plain') + assert_equals(res['accept'], 'test') + assert_equals(res['accept-language'], 'nn') + assert_equals(res['content-language'], 'nn') + assert_equals(res['save-data'], 'on') + assert_equals(res['device-memory'], '1.0') + assert_equals(res['dpr'], '2.0') + assert_equals(res['width'], '35') + assert_equals(res['viewport-width'], '42') +}, 'Client hint headers are simple headers') + +</script> diff --git a/tests/wpt/web-platform-tests/cors/client-hint-request-headers.htm b/tests/wpt/web-platform-tests/cors/client-hint-request-headers.htm index ee6c7ea7e86..251be668b7d 100644 --- a/tests/wpt/web-platform-tests/cors/client-hint-request-headers.htm +++ b/tests/wpt/web-platform-tests/cors/client-hint-request-headers.htm @@ -1,6 +1,6 @@ <!DOCTYPE html> <meta charset=utf-8> -<title>CORS - client hint request headers - Access-Control-Allow-Headers</title> +<title>CORS and Client Hints</title> <script src=/resources/testharness.js></script> <script src=/resources/testharnessreport.js></script> @@ -12,34 +12,6 @@ test(function() { var client = new XMLHttpRequest() - client.open('GET', CROSSDOMAIN + 'resources/cors-makeheader.py?headers=x-print,', false) - client.setRequestHeader('x-print', 'unicorn') - client.setRequestHeader('content-type', 'text/plain') - client.setRequestHeader('accept', 'test') - client.setRequestHeader('accept-language', 'nn') - client.setRequestHeader('content-language', 'nn') - client.setRequestHeader('save-data', 'on') - client.setRequestHeader('device-memory', '1.0') - client.setRequestHeader('dpr', '2.0') - client.setRequestHeader('width', '35') - client.setRequestHeader('viewport-width', '42') - client.send(null) - - const res = JSON.parse(client.response) - assert_equals(res['x-print'], 'unicorn') - assert_equals(res['content-type'], 'text/plain') - assert_equals(res['accept'], 'test') - assert_equals(res['accept-language'], 'nn') - assert_equals(res['content-language'], 'nn') - assert_equals(res['save-data'], 'on') - assert_equals(res['device-memory'], '1.0') - assert_equals(res['dpr'], '2.0') - assert_equals(res['width'], '35') - assert_equals(res['viewport-width'], '42') -}, 'Client hint headers are simple headers') - -test(function() { - var client = new XMLHttpRequest() client.open('GET', CROSSDOMAIN + 'resources/cors-makeheader.py?headers=x-print', false) client.setRequestHeader('x-print', 'unicorn') client.setRequestHeader('y-print', 'unicorn') diff --git a/tests/wpt/web-platform-tests/cors/resources/.gitignore b/tests/wpt/web-platform-tests/cors/resources/.gitignore deleted file mode 100644 index 7b987d03655..00000000000 --- a/tests/wpt/web-platform-tests/cors/resources/.gitignore +++ /dev/null @@ -1 +0,0 @@ -logs.txt diff --git a/tests/wpt/web-platform-tests/cors/simple-requests-ch.tentative.htm b/tests/wpt/web-platform-tests/cors/simple-requests-ch.tentative.htm new file mode 100644 index 00000000000..f9955ac86a4 --- /dev/null +++ b/tests/wpt/web-platform-tests/cors/simple-requests-ch.tentative.htm @@ -0,0 +1,57 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>CORS - simple requests</title> +<meta name=author title="Odin Hørthe Omdal" href="mailto:odiho@opera.com"> + +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src=support.js?pipe=sub></script> +<script src=/common/utils.js></script> + +<h1>Simple requests</h1> +<p>Simple requests shouldn't trigger preflight</p> + +<div id=log></div> +<script> + +var test_c = 0; + +function check_simple(method, headers) +{ + test(function() { + var client = new XMLHttpRequest() + var uuid_token = token(); + client.open(method, CROSSDOMAIN + 'resources/preflight.py?token=' + + uuid_token, false) + for (head in headers) + client.setRequestHeader(head, headers[head]) + client.send("data") + assert_equals(client.getResponseHeader('content-type'), "text/plain") + if (method == 'HEAD') + assert_equals(client.response, '', 'response') + else + assert_equals(client.response, 'NO', 'response') + + client.open('GET', 'resources/preflight.py?check&token=' + + uuid_token, false) + client.send("data") + assert_equals(client.response, "0", "Found preflight log") + }, + 'No preflight ' + method + ' and ' + JSON.stringify(headers)) +} + +function check_simple_headers(headers) { + check_simple('GET', headers) + check_simple('HEAD', headers) + check_simple('POST', headers) +} + +check_simple_headers({ + 'save-data': 'on', + 'device-memory': '2.0', + 'dpr': '3.0', + 'width': '1200', + 'viewport-width': '1300' + }) + +</script> diff --git a/tests/wpt/web-platform-tests/cors/simple-requests.htm b/tests/wpt/web-platform-tests/cors/simple-requests.htm index be4b53495c6..185e9a75e39 100644 --- a/tests/wpt/web-platform-tests/cors/simple-requests.htm +++ b/tests/wpt/web-platform-tests/cors/simple-requests.htm @@ -61,14 +61,6 @@ check_simple_headers({ 'content-type': 'text/plain; parameter=whatever' }) -check_simple_headers({ - 'save-data': 'on', - 'device-memory': '2.0', - 'dpr': '3.0', - 'width': '1200', - 'viewport-width': '1300' - }) - check_simple('Get', {'content-type': 'text/plain; parameter=extra_bonus'}) check_simple('post', {'content-type': 'text/plain'}) diff --git a/tests/wpt/web-platform-tests/css/.gitignore b/tests/wpt/web-platform-tests/css/.gitignore deleted file mode 100644 index 7b1bd439b77..00000000000 --- a/tests/wpt/web-platform-tests/css/.gitignore +++ /dev/null @@ -1,15 +0,0 @@ -/dist -/dist_last -/build-temp -/tools/cache -/tools/_virtualenv -*.xcodeproj -*.DS_Store -*.pyc -*.svn -.directory* -*~ -*.orig -*Thumbs.db -/_certs -/config.json diff --git a/tests/wpt/web-platform-tests/css/CSS2/sec5/class-000-ref.html b/tests/wpt/web-platform-tests/css/CSS2/sec5/class-000-ref.html new file mode 100644 index 00000000000..8eb5f528a42 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/CSS2/sec5/class-000-ref.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Reference</title> +<style> + p { + color: fuchsia; + } + div { + color: orange; + } + h4 { + color: blue; + } +</style> +<body> + <p>This text should be fuchsia.</p> + <div>This text should be orange.</div> + <h4>This text should be blue.</h4> +</body> diff --git a/tests/wpt/web-platform-tests/css/CSS2/sec5/class-000.xht b/tests/wpt/web-platform-tests/css/CSS2/sec5/class-000.xht index ab33d7c8d0c..2998fa41c41 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/sec5/class-000.xht +++ b/tests/wpt/web-platform-tests/css/CSS2/sec5/class-000.xht @@ -5,6 +5,7 @@ <title>CSS Test: Selectors: Class selectors</title> <link rel="author" title="Gabriele Romanato" href="mailto:gabriele.romanato@gmail.com" /> <link rel="help" href="http://www.w3.org/TR/CSS21/selector.html#class-html" /> + <link rel="match" href="class-000-ref.html"/> <meta name="flags" content="" /> <meta name="assert" content="Browsers should apply each rule to the elements which have the specified class"/> <style type="text/css"> diff --git a/tests/wpt/web-platform-tests/css/CSS2/sec5/class-001.xht b/tests/wpt/web-platform-tests/css/CSS2/sec5/class-001.xht index db3451d8095..ae1dc0a8f8d 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/sec5/class-001.xht +++ b/tests/wpt/web-platform-tests/css/CSS2/sec5/class-001.xht @@ -5,6 +5,7 @@ <title>CSS Test: Selectors: Class selectors with the universal selector</title> <link rel="author" title="Gabriele Romanato" href="mailto:gabriele.romanato@gmail.com" /> <link rel="help" href="http://www.w3.org/TR/CSS21/selector.html#class-html" /> + <link rel="match" href="class-000-ref.html"/> <meta name="flags" content="" /> <meta name="assert" content="Browsers should apply each rule to the elements which have the specified class"/> <style type="text/css"> diff --git a/tests/wpt/web-platform-tests/css/CSS2/sec5/class-002-ref.html b/tests/wpt/web-platform-tests/css/CSS2/sec5/class-002-ref.html new file mode 100644 index 00000000000..fff0f9eaefe --- /dev/null +++ b/tests/wpt/web-platform-tests/css/CSS2/sec5/class-002-ref.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Reference</title> +<style> + p { + color: fuchsia; + } + div { + color: fuchsia; + border: thin solid; + } + h4 { + color: blue; + } +</style> +<body> + <p>This text should be fuchsia.</p> + <div>This text should be fuchsia with a thin fuchsia border.</div> + <h4>This text should be blue without any border.</h4> +</body> diff --git a/tests/wpt/web-platform-tests/css/CSS2/sec5/class-002.xht b/tests/wpt/web-platform-tests/css/CSS2/sec5/class-002.xht index 6a167df134a..77a411512fa 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/sec5/class-002.xht +++ b/tests/wpt/web-platform-tests/css/CSS2/sec5/class-002.xht @@ -5,6 +5,7 @@ <title>CSS Test: Selectors: Class selectors: Multiple classes</title> <link rel="author" title="Gabriele Romanato" href="mailto:gabriele.romanato@gmail.com" /> <link rel="help" href="http://www.w3.org/TR/CSS21/selector.html#class-html" /> + <link rel="match" href="class-002-ref.html"/> <meta name="flags" content="" /> <meta name="assert" content="Browsers should apply each rule to the elements which have the specified class or classes"/> <style type="text/css"> diff --git a/tests/wpt/web-platform-tests/css/CSS2/sec5/first-child-000-ref.html b/tests/wpt/web-platform-tests/css/CSS2/sec5/first-child-000-ref.html new file mode 100644 index 00000000000..6c65404bfcd --- /dev/null +++ b/tests/wpt/web-platform-tests/css/CSS2/sec5/first-child-000-ref.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Reference</title> +<style> + p { + color: fuchsia; + } + div { + color: orange; + } + h4 { + color: blue; + } + .silver { + color: silver; + } +</style> +<body> + <p><em>This text should be fuchsia.</em> <span class="silver">Filler text.</span></p> + <div>This text should be orange.</div> + <p class="silver">Filler text.</p> + <h4>This text should be blue. <span class="silver">Filler text.</span></h4> +</body> diff --git a/tests/wpt/web-platform-tests/css/CSS2/sec5/first-child-000.xht b/tests/wpt/web-platform-tests/css/CSS2/sec5/first-child-000.xht index d345e9e18df..3ec9004855c 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/sec5/first-child-000.xht +++ b/tests/wpt/web-platform-tests/css/CSS2/sec5/first-child-000.xht @@ -5,6 +5,7 @@ <title>CSS Test: Selectors: The :first-child pseudo-class</title> <link rel="author" title="Gabriele Romanato" href="mailto:gabriele.romanato@gmail.com" /> <link rel="help" href="http://www.w3.org/TR/CSS21/selector.html#first-child" /> + <link rel="match" href="first-child-000-ref.html"/> <meta name="flags" content="" /> <meta name="assert" content="Browsers should apply each rule to the element which is the first child of its parent"/> <style type="text/css"> diff --git a/tests/wpt/web-platform-tests/css/CSS2/sec5/first-child-001.xht b/tests/wpt/web-platform-tests/css/CSS2/sec5/first-child-001.xht index 47334c60744..082c4f46afa 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/sec5/first-child-001.xht +++ b/tests/wpt/web-platform-tests/css/CSS2/sec5/first-child-001.xht @@ -5,6 +5,7 @@ <title>CSS Test: Selectors: The :first-child pseudo-class with the universal selector</title> <link rel="author" title="Gabriele Romanato" href="mailto:gabriele.romanato@gmail.com" /> <link rel="help" href="http://www.w3.org/TR/CSS21/selector.html#first-child" /> + <link rel="match" href="first-child-000-ref.html"/> <meta name="flags" content="" /> <meta name="assert" content="Browsers should apply each rule to the element which is the first child of its parent"/> <style type="text/css"> diff --git a/tests/wpt/web-platform-tests/css/CSS2/sec5/first-line-000-ref.html b/tests/wpt/web-platform-tests/css/CSS2/sec5/first-line-000-ref.html new file mode 100644 index 00000000000..4999f4fa5d5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/CSS2/sec5/first-line-000-ref.html @@ -0,0 +1,15 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Reference</title> +<style> + p { + color: fuchsia; + } + span { + color: silver; + } +</style> +<body> + <p>The first line of this paragraph should be fuchsia (same as in the next block).<br /><span>Filler text.</span></p> + <p>Lorem ipsum dolor.<br /><span>Filler text.</span></p> +</body> diff --git a/tests/wpt/web-platform-tests/css/CSS2/sec5/first-line-000.xht b/tests/wpt/web-platform-tests/css/CSS2/sec5/first-line-000.xht index 53ff8b953e3..7b5202eb421 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/sec5/first-line-000.xht +++ b/tests/wpt/web-platform-tests/css/CSS2/sec5/first-line-000.xht @@ -5,6 +5,7 @@ <title>CSS Test: Selectors: The :first-line pseudo-element</title> <link rel="author" title="Gabriele Romanato" href="mailto:gabriele.romanato@gmail.com" /> <link rel="help" href="http://www.w3.org/TR/CSS21/selector.html#first-line-pseudo" /> + <link rel="match" href="first-line-000-ref.html"/> <meta name="flags" content="" /> <meta name="assert" content="Browsers should apply the rule only to the first line of a block-level element"/> <style type="text/css"> diff --git a/tests/wpt/web-platform-tests/css/CSS2/sec5/id-000.xht b/tests/wpt/web-platform-tests/css/CSS2/sec5/id-000.xht index f7a616b1573..15044f60b70 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/sec5/id-000.xht +++ b/tests/wpt/web-platform-tests/css/CSS2/sec5/id-000.xht @@ -5,6 +5,7 @@ <title>CSS Test: Selectors: ID selectors</title> <link rel="author" title="Gabriele Romanato" href="mailto:gabriele.romanato@gmail.com" /> <link rel="help" href="http://www.w3.org/TR/CSS21/selector.html#id-selectors" /> + <link rel="match" href="class-000-ref.html"/> <meta name="flags" content="" /> <meta name="assert" content="Browsers should apply each rule to the elements which have the specified ID"/> <style type="text/css"> diff --git a/tests/wpt/web-platform-tests/css/CSS2/sec5/id-001.xht b/tests/wpt/web-platform-tests/css/CSS2/sec5/id-001.xht index 3605ad50a94..3143368728c 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/sec5/id-001.xht +++ b/tests/wpt/web-platform-tests/css/CSS2/sec5/id-001.xht @@ -5,6 +5,7 @@ <title>CSS Test: Selectors: ID selectors with universal selector</title> <link rel="author" title="Gabriele Romanato" href="mailto:gabriele.romanato@gmail.com" /> <link rel="help" href="http://www.w3.org/TR/CSS21/selector.html#id-selectors" /> + <link rel="match" href="class-000-ref.html"/> <meta name="flags" content="" /> <meta name="assert" content="Browsers should apply each rule to the elements which have the specified ID"/> <style type="text/css"> diff --git a/tests/wpt/web-platform-tests/css/CSS2/selector/attribute-value-selector-007-ref.html b/tests/wpt/web-platform-tests/css/CSS2/selector/attribute-value-selector-007-ref.html new file mode 100644 index 00000000000..778b8d386f4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/CSS2/selector/attribute-value-selector-007-ref.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Reference</title> +<style> + .green { + background-color: green; + color: white; + } +</style> +<body> + <div class="green">This line should be green</div> + <div class="green">This line should be green</div> + <div class="green">This line should be green</div> + <div class="green">This line should be green</div> + <p class="green">This line should be green <em>and this should also be green</em></p> + + <div>This line should NOT be green</div> + <div>This line should NOT be green</div> + <div>This line should NOT be green</div> + <div>This line should NOT be green</div> + <div>This line should NOT be green</div> + <div>This line should NOT be green</div> + <div>This line should NOT be green<p>This line should NOT be green</p></div> + <p>This line should NOT be green <em>and this should not be green either</em></p> +</body> diff --git a/tests/wpt/web-platform-tests/css/CSS2/selector/attribute-value-selector-007.html b/tests/wpt/web-platform-tests/css/CSS2/selector/attribute-value-selector-007.html index 15d8b238da4..9299a24fafe 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/selector/attribute-value-selector-007.html +++ b/tests/wpt/web-platform-tests/css/CSS2/selector/attribute-value-selector-007.html @@ -5,6 +5,7 @@ <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> <link rel="author" title="Eira Monstad, Opera Software ASA" href="mailto:public-testsuites@opera.com"> <link rel="help" href="http://www.w3.org/TR/CSS21/selector.html#attribute-selectors"> + <link rel="match" href="attribute-value-selector-007-ref.html" /> <meta name="flags" content="HTMLonly"> <meta name="assert" content="lang attribute selector with att=val in HTML should not be case sensitive, and should only match when att is exactly val"> <style type="text/css"> diff --git a/tests/wpt/web-platform-tests/css/CSS2/selector/attribute-value-selector-008-ref.html b/tests/wpt/web-platform-tests/css/CSS2/selector/attribute-value-selector-008-ref.html new file mode 100644 index 00000000000..d0c5f80a476 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/CSS2/selector/attribute-value-selector-008-ref.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Reference</title> +<style> + .green { + background-color: green; + color: white; + } +</style> +<body> + <div class="green">This line should be green</div> + <div class="green">This line should be green</div> + <div class="green">This line should be green</div> + <p class="green">This line should be green <em>and this should also be green</em></p> + + <div>This line should NOT be green</div> + <div>This line should NOT be green</div> + <div>This line should NOT be green</div> + <div>This line should NOT be green</div> + <div>This line should NOT be green</div> + <div>This line should NOT be green</div> + <div>This line should NOT be green</div> + <div>This line should NOT be green<p>This line should NOT be green</p></div> + <p>This line should NOT be green <em>and this should not be green either</em></p> +</body> diff --git a/tests/wpt/web-platform-tests/css/CSS2/selector/attribute-value-selector-008.xht b/tests/wpt/web-platform-tests/css/CSS2/selector/attribute-value-selector-008.xht index d34739196b2..7a17b3202ca 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/selector/attribute-value-selector-008.xht +++ b/tests/wpt/web-platform-tests/css/CSS2/selector/attribute-value-selector-008.xht @@ -5,6 +5,7 @@ <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/> <link rel="author" title="Eira Monstad, Opera Software ASA" href="mailto:public-testsuites@opera.com"/> <link rel="help" href="http://www.w3.org/TR/CSS21/selector.html#attribute-selectors"/> + <link rel="match" href="attribute-value-selector-008-ref.html" /> <meta name="flags" content="nonHTML"/> <meta name="assert" content="attribute selector with att=val in XHTML should be case sensitive, and should only match when att is exactly val"/> <style type="text/css"><![CDATA[ diff --git a/tests/wpt/web-platform-tests/css/CSS2/selector/attribute-value-selector-009-ref.html b/tests/wpt/web-platform-tests/css/CSS2/selector/attribute-value-selector-009-ref.html new file mode 100644 index 00000000000..78f497708d4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/CSS2/selector/attribute-value-selector-009-ref.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Reference</title> +<style> + .green { + background-color: green; + color: white; + } +</style> +<body> + <div class="green">This line should be green</div> + <div class="green">This line should be green</div> + <div class="green">This line should be green</div> + <div class="green">This line should be green</div> + <p class="green">This line should be green <em>and this should be green too</em></p> + + <div>This line should NOT be green</div> + <div>This line should NOT be green</div> + <div>This line should NOT be green</div> + <div>This line should NOT be green</div> + <div>This line should NOT be green</div> + <div>This line should NOT be green<p>This line should NOT be green</p></div> + <p>This line should NOT be green <em>and this should not be green either</em></p> +</body> diff --git a/tests/wpt/web-platform-tests/css/CSS2/selector/attribute-value-selector-009.xht b/tests/wpt/web-platform-tests/css/CSS2/selector/attribute-value-selector-009.xht index 52018fbbdbf..566fca5cbc7 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/selector/attribute-value-selector-009.xht +++ b/tests/wpt/web-platform-tests/css/CSS2/selector/attribute-value-selector-009.xht @@ -5,6 +5,7 @@ <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/> <link rel="author" title="Eira Monstad, Opera Software ASA" href="mailto:public-testsuites@opera.com"/> <link rel="help" href="http://www.w3.org/TR/CSS21/selector.html#attribute-selectors"/> + <link rel="match" href="attribute-value-selector-009-ref.html" /> <meta name="flags" content="nonHTML"/> <meta name="assert" content="lang attribute selector with 'att |= val' in XHTML should be case sensitive, and match hyphen-separated list"/> <style type="text/css"><![CDATA[ diff --git a/tests/wpt/web-platform-tests/css/CSS2/selector/attribute-value-selector-010-ref.html b/tests/wpt/web-platform-tests/css/CSS2/selector/attribute-value-selector-010-ref.html new file mode 100644 index 00000000000..1e2975c57f0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/CSS2/selector/attribute-value-selector-010-ref.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Reference</title> +<style> + .green { + background-color: green; + color: white; + } +</style> +<body> + <div class="green">This line should be green</div> + <div class="green">This line should be green</div> + <div class="green">This line should be green</div> + <div class="green">This line should be green</div> + <div class="green">This line should be green</div> + <p class="green">This line should be green <em>and this should be green too</em></p> + + <div>This line should NOT be green</div> + <div>This line should NOT be green</div> + <div>This line should NOT be green</div> + <div>This line should NOT be green</div> + <div>This line should NOT be green<p>This line should NOT be green</p></div> + <p>This line should NOT be green <em>and this should not be green either</em></p> +</body> diff --git a/tests/wpt/web-platform-tests/css/CSS2/selector/attribute-value-selector-010.html b/tests/wpt/web-platform-tests/css/CSS2/selector/attribute-value-selector-010.html index ad1e44aff8a..ca6bdb6950a 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/selector/attribute-value-selector-010.html +++ b/tests/wpt/web-platform-tests/css/CSS2/selector/attribute-value-selector-010.html @@ -5,6 +5,7 @@ <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> <link rel="author" title="Eira Monstad, Opera Software ASA" href="mailto:public-testsuites@opera.com"> <link rel="help" href="http://www.w3.org/TR/CSS21/selector.html#attribute-selectors"> + <link rel="match" href="attribute-value-selector-010-ref.html" /> <meta name="flags" content="HTMLonly"> <meta name="assert" content="lang attribute selector with 'att |= val' in HTML should not be case sensitive, and match hyphen-separated list"> <style type="text/css"> diff --git a/tests/wpt/web-platform-tests/css/CSS2/selector/lang-pseudoclass-001-ref.html b/tests/wpt/web-platform-tests/css/CSS2/selector/lang-pseudoclass-001-ref.html new file mode 100644 index 00000000000..ac83e80d955 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/CSS2/selector/lang-pseudoclass-001-ref.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Reference</title> +<style> + .green { + background-color: green; + color: white; + } +</style> +<body> + <div class="green">This line should be green</div> + <div class="green">This line should be green</div> + <div class="green">This line should be green</div> + <div class="green">This line should be green</div> + <div class="green">This line should be green</div> + + <p class="green">This line should be green <em>and this should be green too</em></p> + <div><p class="green">This line should be green</p>This line should NOT be green</div> + <p>This line should NOT be green <em class="green">but this should be green</em></p> + + <div>This line should NOT be green</div> + <div>This line should NOT be green</div> + <div>This line should NOT be green</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/CSS2/selector/lang-pseudoclass-001.html b/tests/wpt/web-platform-tests/css/CSS2/selector/lang-pseudoclass-001.html index cf9bd79fbc7..4028be17606 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/selector/lang-pseudoclass-001.html +++ b/tests/wpt/web-platform-tests/css/CSS2/selector/lang-pseudoclass-001.html @@ -5,6 +5,7 @@ <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> <link rel="author" title="Eira Monstad, Opera Software ASA" href="mailto:public-testsuites@opera.com"> <link rel="help" href="http://www.w3.org/TR/CSS21/selector.html#lang"> + <link rel="match" href="lang-pseudoclass-001-ref.html" /> <meta name="flags" content="HTMLonly" > <meta name="assert" content=":lang pseudoclass in HTML should not be case-sensitive, and match a substring"> <style type="text/css"> diff --git a/tests/wpt/web-platform-tests/css/CSS2/selector/lang-pseudoclass-002.xht b/tests/wpt/web-platform-tests/css/CSS2/selector/lang-pseudoclass-002.xht index a962ae323f6..44aacfc28ac 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/selector/lang-pseudoclass-002.xht +++ b/tests/wpt/web-platform-tests/css/CSS2/selector/lang-pseudoclass-002.xht @@ -5,6 +5,7 @@ <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/> <link rel="author" title="Eira Monstad, Opera Software ASA" href="mailto:public-testsuites@opera.com"/> <link rel="help" href="http://www.w3.org/TR/CSS21/selector.html#lang"/> + <link rel="match" href="lang-pseudoclass-001-ref.html" /> <meta name="flags" content="nonHTML" /> <meta name="assert" content=":lang pseudoclass in XHTML should be case sensitive, and match a substring"/> <style type="text/css"><![CDATA[ @@ -24,8 +25,6 @@ <div xml:lang="en-GB">This line should be green</div> <div xml:lang="en-GB-scouse">This line should be green</div> - <div xml:lang="es">This line should be green</div> - <p xml:lang="es">This line should be green <em>and this should be green too</em></p> <div xml:lang="fr"><p>This line should be green</p>This line should NOT be green</div> diff --git a/tests/wpt/web-platform-tests/css/css-align/baseline-rules/synthesized-baseline-flexbox-001.html b/tests/wpt/web-platform-tests/css/css-align/baseline-rules/synthesized-baseline-flexbox-001.html new file mode 100644 index 00000000000..af2dac4cc5f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-align/baseline-rules/synthesized-baseline-flexbox-001.html @@ -0,0 +1,94 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Box Alignment Test: Synthesized baseline flexbox</title> +<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#baseline-rules"> +<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#flex-baselines"> +<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#valdef-align-items-baseline"> +<meta name="flags" content="ahem"> +<meta name="assert" content="This test check the synthesized of a flexbox container if it has no items (it should use the flex container margin box) or if the items have no baseline (in that case it should use the flex item's border box)."> +<style> +.wrapper { + border: solid thick; + position: relative; + width: 200px; + height: 150px; + margin: 10px; +} +canvas { + width: 100px; + height: 100px; + background: blue; +} +.magenta-dotted-border { + border: 5px dotted magenta; +} +.border-padding-margin { + border: 10px solid cyan; + padding: 15px; + margin: 20px 0px; + background: yellow; +} +</style> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> + +<body onload="checkLayout('.wrapper')"> + +<div id="log"></div> + +<div class="wrapper"> + <canvas></canvas> + <div style="display: inline-flex;" class="border-padding-margin" + data-offset-y="30"></div> +</div> +<div class="wrapper"> + <canvas></canvas> + <div style="display: inline-block;" class="magenta-dotted-border" + data-offset-y="5"> + <div style="display: inline-flex;" class="border-padding-margin" + data-offset-y="30"></div> + </div> +</div> +<div class="wrapper"> + <canvas></canvas> + <div style="display: inline-block;" class="magenta-dotted-border" + data-offset-y="0"> + <div style="display: flex;" class="border-padding-margin" + data-offset-y="25"></div> + </div> +</div> +<div class="wrapper"> + <canvas></canvas> + <div style="display: inline-flex;" class="magenta-dotted-border" + data-offset-y="25"> + <div class="border-padding-margin" data-offset-y="50"></div> + </div> +</div> +<div class="wrapper"> + <canvas></canvas> + <div style="display: inline-block;" class="magenta-dotted-border" + data-offset-y="25"> + <div style="display: flex;" + data-offset-y="30"> + <div class="border-padding-margin" data-offset-y="50"></div> + </div> + </div> +</div> +<div class="wrapper" style="display: flex; align-items: baseline;"> + <canvas></canvas> + <div style="display: inline-flex;" class="magenta-dotted-border" + data-offset-y="25"> + <div class="border-padding-margin" data-offset-y="50"></div> + </div> +</div> +<div class="wrapper" style="display: flex; align-items: baseline;"> + <canvas></canvas> + <div style="display: flex;" class="magenta-dotted-border" + data-offset-y="25"> + <div class="border-padding-margin" data-offset-y="50"></div> + </div> +</div> + +</body> diff --git a/tests/wpt/web-platform-tests/css/css-align/baseline-rules/synthesized-baseline-grid-001.html b/tests/wpt/web-platform-tests/css/css-align/baseline-rules/synthesized-baseline-grid-001.html new file mode 100644 index 00000000000..50ffdd1dee5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-align/baseline-rules/synthesized-baseline-grid-001.html @@ -0,0 +1,94 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Box Alignment Test: Synthesized baseline grid container</title> +<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#baseline-rules"> +<link rel="help" href="https://drafts.csswg.org/css-grid-1/#grid-baselines"> +<link rel="help" href="https://drafts.csswg.org/css-grid-1/#valdef-align-items-baseline"> +<meta name="flags" content="ahem"> +<meta name="assert" content="This test check the synthesized of a grid container if it has no items (it should use the grid container margin box) or if the items have no baseline (in that case it should use the grid item's border box)."> +<style> +.wrapper { + border: solid thick; + position: relative; + width: 300px; + height: 150px; + margin: 10px; +} +canvas { + width: 100px; + height: 100px; + background: blue; +} +.magenta-dotted-border { + border: 5px dotted magenta; +} +.border-padding-margin { + border: 10px solid cyan; + padding: 15px; + margin: 20px 0px; + background: yellow; +} +</style> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> + +<body onload="checkLayout('.wrapper')"> + +<div id="log"></div> + +<div class="wrapper"> + <canvas></canvas> + <div style="display: inline-grid;" class="border-padding-margin" + data-offset-y="30"></div> +</div> +<div class="wrapper"> + <canvas></canvas> + <div style="display: inline-block;" class="magenta-dotted-border" + data-offset-y="5"> + <div style="display: inline-grid;" class="border-padding-margin" + data-offset-y="30"></div> + </div> +</div> +<div class="wrapper"> + <canvas></canvas> + <div style="display: inline-block;" class="magenta-dotted-border" + data-offset-y="0"> + <div style="display: grid;" class="border-padding-margin" + data-offset-y="25"></div> + </div> +</div> +<div class="wrapper"> + <canvas></canvas> + <div style="display: inline-grid;" class="magenta-dotted-border" + data-offset-y="25"> + <div class="border-padding-margin" data-offset-y="50"></div> + </div> +</div> +<div class="wrapper"> + <canvas></canvas> + <div style="display: inline-block;" class="magenta-dotted-border" + data-offset-y="25"> + <div style="display: grid;" + data-offset-y="30"> + <div class="border-padding-margin" data-offset-y="50"></div> + </div> + </div> +</div> +<div class="wrapper" style="display: flex; align-items: baseline;"> + <canvas></canvas> + <div style="display: inline-grid;" class="magenta-dotted-border" + data-offset-y="25"> + <div class="border-padding-margin" data-offset-y="50"></div> + </div> +</div> +<div class="wrapper" style="display: flex; align-items: baseline;"> + <canvas></canvas> + <div style="display: grid;" class="magenta-dotted-border" + data-offset-y="25"> + <div class="border-padding-margin" data-offset-y="50"></div> + </div> +</div> + +</body> diff --git a/tests/wpt/web-platform-tests/css/css-align/baseline-rules/synthesized-baseline-inline-block-001.html b/tests/wpt/web-platform-tests/css/css-align/baseline-rules/synthesized-baseline-inline-block-001.html new file mode 100644 index 00000000000..fde0c2c432d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-align/baseline-rules/synthesized-baseline-inline-block-001.html @@ -0,0 +1,61 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Box Alignment Test: Synthesized baseline inline blocks</title> +<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#baseline-rules"> +<link rel="help" href="https://drafts.csswg.org/css-inline-3/#alignment-baseline-property"> +<meta name="flags" content="ahem"> +<meta name="assert" content="Inline blocks synthesized baseline use the margin box."> +<style> +.wrapper { + border: solid thick; + position: relative; + width: 200px; + height: 150px; + margin: 10px; +} +canvas { + width: 100px; + height: 100px; + background: blue; +} +.magenta-dotted-border { + border: 5px dotted magenta; +} +.border-padding-margin { + border: 10px solid cyan; + padding: 15px; + margin: 20px 0px; + background: yellow; +} +</style> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> + +<body onload="checkLayout('.wrapper')"> + +<div id="log"></div> + +<div class="wrapper"> + <canvas></canvas> + <div style="display: inline-block;" class="border-padding-margin" + data-offset-y="30"></div> +</div> +<div class="wrapper"> + <canvas></canvas> + <div style="display: inline-block;" class="magenta-dotted-border" + data-offset-y="5"> + <div style="display: inline-block;" class="border-padding-margin" + data-offset-y="30"></div> + </div> +</div> +<div class="wrapper"> + <canvas></canvas> + <div style="display: inline-block;" class="magenta-dotted-border" + data-offset-y="0"> + <div class="border-padding-margin" data-offset-y="25"></div> + </div> +</div> + +</body> diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/interactive/flexbox_interactive_paged-overflow-2.html b/tests/wpt/web-platform-tests/css/css-flexbox/interactive/flexbox_interactive_paged-overflow-2.html deleted file mode 100644 index 5c682d348e5..00000000000 --- a/tests/wpt/web-platform-tests/css/css-flexbox/interactive/flexbox_interactive_paged-overflow-2.html +++ /dev/null @@ -1,23 +0,0 @@ -<!DOCTYPE html> -<title>flexbox | paged overflow</title> -<link rel="author" href="http://opera.com" title="Opera Software"> -<link rel="help" href="http://www.w3.org/TR/css-flexbox-1/#pagination"> -<meta name="flags" content="interact paged"> -<style> -* {widows: 1; orphans: 1; margin: 0;} -html { - overflow: -o-paged-x; -} -h4 { - position: fixed; -} -div { - display: flex; - break-before: page; - background: red; -} -</style> - -<h4>There should be NO RED onload.</h4> - -<div>FAIL</div> diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/interactive/flexbox_interactive_paged-overflow.html b/tests/wpt/web-platform-tests/css/css-flexbox/interactive/flexbox_interactive_paged-overflow.html deleted file mode 100644 index 0220d79d901..00000000000 --- a/tests/wpt/web-platform-tests/css/css-flexbox/interactive/flexbox_interactive_paged-overflow.html +++ /dev/null @@ -1,47 +0,0 @@ -<!DOCTYPE html> -<title>flexbox | @page and paged overflow</title> -<link rel="author" href="http://opera.com" title="Opera Software"> -<link rel="help" href="http://www.w3.org/TR/css-flexbox-1/#pagination"> -<meta name="flags" content="interact paged"> -<style> -* {widows: 1; orphans: 1; margin: 0;} -@page { - width: 600px; - height: 3em; -} -html { - overflow: -o-paged-x; -} -h4 { - position: fixed; - top: 10em; -} -div { - width: 12em; - - display: flex; - flex-wrap: wrap; -} -p { - margin: 0; - width: 3em; - height: 4em; - - flex: auto; -} -p:nth-child(2) { - break-before: page; -} -p:nth-child(2)~p { - background: red; -} -</style> - -<h4>There should be NO RED onload.</h4> - -<div> - <p>x</p> - <p>x</p> - <p>fail</p> - <p>fail</p> -</div> diff --git a/tests/wpt/web-platform-tests/css/css-rhythm/tools/generators/.gitignore b/tests/wpt/web-platform-tests/css/css-rhythm/tools/generators/.gitignore deleted file mode 100644 index 3c3629e647f..00000000000 --- a/tests/wpt/web-platform-tests/css/css-rhythm/tools/generators/.gitignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/tests/wpt/web-platform-tests/css/css-sizing/fit-content-percentage-padding.html b/tests/wpt/web-platform-tests/css/css-sizing/fit-content-percentage-padding.html new file mode 100644 index 00000000000..4ff3f786c6c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/fit-content-percentage-padding.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org"> +<link rel="help" href="https://www.w3.org/TR/CSS22/box.html#propdef-padding-left"> +<link rel="help" href="https://www.w3.org/TR/css-sizing-3/#valdef-width-fit-content-length-percentage"> +<meta name="assert" content="The shrink-to-fit container (#stf) should be just wide enough to fit both floats beside each other. The percentage padding shouldn't be affected by intrinsic sizing; it's simply resolved from its containing block (#container), which doesn't participate in the intrinsic size calculation at all."> +<div id="container" style="width:400px; height:200px;"> + <div id="stf" style="width:fit-content; padding-left:20%;"> + <div style="float:left; width:50px; height:100px; background:cyan;"></div> + <div style="float:left; width:50px; height:100px; background:hotpink;"></div> + </div> +</div> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + var container = document.getElementById("container"); + var stf = document.getElementById("stf"); + test(()=> { + assert_equals(stf.offsetWidth, 180); + }, "Initial layout"); + + test(()=> { + container.style.width = "300px"; + assert_equals(stf.offsetWidth, 160); + }, "Shrink width"); + + test(()=> { + container.style.width = "500px"; + assert_equals(stf.offsetWidth, 200); + }, "Grow width"); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-tables/toggle-row-display-property-001-ref.html b/tests/wpt/web-platform-tests/css/css-tables/toggle-row-display-property-001-ref.html new file mode 100644 index 00000000000..a99f69eb449 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-tables/toggle-row-display-property-001-ref.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<style> +td, th { + border: 1px solid black; +} +</style> + +<table> + <tr> + <th colspan="4">This cell must span all columns for repro in chrome</th> + </tr> + <tr> + <td rowspan="3" style="height:200px">A</td> + </tr> + <tr> + <td>1</td> + <td>2</td> + <td>3</td> + </tr> + <tr> + <td>1</td> + <td>2</td> + <td>3</td> + </tr> +</table> diff --git a/tests/wpt/web-platform-tests/css/css-tables/toggle-row-display-property-001.html b/tests/wpt/web-platform-tests/css/css-tables/toggle-row-display-property-001.html new file mode 100644 index 00000000000..08e6635e12c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-tables/toggle-row-display-property-001.html @@ -0,0 +1,43 @@ +<!DOCTYPE html> +<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org"> +<link rel="help" href="https://www.w3.org/TR/CSS2/visuren.html#display-prop"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=764031"> +<link rel="match" href="toggle-row-display-property-001-ref.html"> +<meta name="flags" content="" /> +<meta name="assert" content="After setting display:table-row on tr elements with display:none, the table should look same as if display:none were never used." /> + +<style> +td, th { + border: 1px solid black; +} +tr { + display: none; +} +</style> + +<table id=theTable> + <tr> + <th colspan="4">This cell must span all columns for repro in chrome</th> + </tr> + <tr> + <td rowspan="3" style="height:200px">A</td> + </tr> + <tr> + <td>1</td> + <td>2</td> + <td>3</td> + </tr> + <tr> + <td>1</td> + <td>2</td> + <td>3</td> + </tr> +</table> + +<script> +theTable.offsetTop; +let rows = document.querySelectorAll('tr'); +for (var i = 0; i < rows.length; i++) { + rows[i].style.display = 'table-row'; +} +</script> diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-006.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-006.html index 6dc1b4dff52..806457ddb32 100644 --- a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-006.html +++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-006.html @@ -9,9 +9,10 @@ <meta name="assert" content="A Single leading white-space constitutes a soft breaking opportunity, honoring the 'white-space: break-spaces' property, that must prevent the word to be broken."> <style> div { - position: relative; - font-size: 20px; - font-family: Ahem; + position: relative; + font-size: 20px; + font-family: Ahem; + line-height: 1em; } .red { position: absolute; @@ -23,8 +24,8 @@ div { } .test { color: green; - line-height: 1em; width: 5ch; + white-space: break-spaces; overflow-wrap: break-word; } diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-004.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-004.html index e2c043ec42e..13770b7b8d1 100644 --- a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-004.html +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-004.html @@ -11,8 +11,8 @@ <meta name="assert" content="The word is not broken if there are previous breaking opportunities, honoring the 'white-space: break-spaces' value."> <style> div { - position: relative; - font: 20px/1 Ahem; + position: relative; + font: 20px/1 Ahem; } .fail { position: absolute; diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-005.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-005.html index d0dafd38c04..c7f996fbc7b 100644 --- a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-005.html +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-005.html @@ -9,8 +9,8 @@ <meta name="assert" content="If 'white-space' is set to 'break-spaces', collapsing preserved white-spaces' advance width is not allowed, so that they can be wrapped honoring the 'white-space' propery."> <style> div { - position: relative; - font: 10px/1 Ahem; + position: relative; + font: 10px/1 Ahem; } .fail { position: absolute; diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-006.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-006.html index 5f9d605866d..f3973169303 100644 --- a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-006.html +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-006.html @@ -11,8 +11,8 @@ <meta name="assert" content="White spaces are preserved, honoring the 'white-space: break-spaces', but the words are broken, honring the 'word-beak: break-all' even though there are previous breaking opportunities in the white-spaces."> <style> div { - position: relative; - font: 25px/1 Ahem; + position: relative; + font: 25px/1 Ahem; } .fail { position: absolute; diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-007.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-007.html index 77213618bd9..d14aae72f51 100644 --- a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-007.html +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-007.html @@ -11,8 +11,8 @@ <meta name="assert" content="A single leading white-space should be used, honoring white-space: break-spaces, to avoid overflow; however, a single preserved white-space at the end of the line cannot be wrapped, hence it hangs when breaking after it to move the rest of the text to the next line."> <style> div { - position: relative; - font: 25px/1 Ahem; + position: relative; + font: 25px/1 Ahem; } .fail { position: absolute; diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-008.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-008.html index d183cac942f..7bcb9dd3375 100644 --- a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-008.html +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-008.html @@ -11,8 +11,8 @@ <meta name="assert" content="White spaces are preserved, honoring the 'white-space: break-spaces', which may lead to overfow. However, we can break before the first white-space after the word honoring the 'break-all' value."> <style> div { - position: relative; - font: 25px/1 Ahem; + position: relative; + font: 25px/1 Ahem; } .fail { position: absolute; diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-015.html b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-015.html index b17af29bf54..176259b72ed 100644 --- a/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-015.html +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-015.html @@ -9,8 +9,8 @@ <meta name="assert" content="The text is broken at the end of the space between the two words, never before, so it hangs and cause an overflow"> <style> div { - position: relative; - font: 20px/1 Ahem; + position: relative; + font: 20px/1 Ahem; } .ref { position: absolute; diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-016.html b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-016.html index 5f66a7be92b..e88c3eda199 100644 --- a/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-016.html +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-016.html @@ -12,6 +12,7 @@ div { position: relative; font-size: 20px; font-family: Ahem; + line-height: 1em; } .red { position: absolute; @@ -24,7 +25,6 @@ div { } .test { color: green; - line-height: 1em; width: 2ch; white-space: pre-wrap; diff --git a/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-010.html b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-010.html index be46d29d7dd..64800edf4ef 100644 --- a/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-010.html +++ b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-010.html @@ -26,6 +26,7 @@ div { .test { color: green; width: 5ch; + white-space: pre-wrap; word-break: break-all; } diff --git a/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-012.html b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-012.html index 6cbcbad92c4..fd3b12efcd5 100644 --- a/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-012.html +++ b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-012.html @@ -9,9 +9,10 @@ <meta name="assert" content="The word is broken even if white-space: break-spaces provides a former breaking opportunity in leading white-space."> <style> div { - position: relative; - font-size: 20px; - font-family: Ahem; + position: relative; + font-size: 20px; + font-family: Ahem; + line-height: 1em; } .red { position: absolute; @@ -24,7 +25,6 @@ div { } .test { color: green; - line-height: 1em; width: 5ch; white-space: break-spaces; diff --git a/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-013.html b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-013.html index 5029e4d891b..9eff25cf880 100644 --- a/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-013.html +++ b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-013.html @@ -9,9 +9,10 @@ <meta name="assert" content="A single leading white-space should account as soft breaking opportunity, honoring the 'white-space: break-spaces', on top to the ones provided by 'word-break: break-all'."> <style> div { - position: relative; - font-size: 20px; - font-family: Ahem; + position: relative; + font-size: 20px; + font-family: Ahem; + line-height: 1em; } .red { position: absolute; @@ -24,7 +25,6 @@ div { } .test { color: green; - line-height: 1em; width: 1ch; white-space: break-spaces; word-break: break-all; diff --git a/tests/wpt/web-platform-tests/css/css-ui/text-overflow-ellipsis-abspos-in-inline-block-crash-001.html b/tests/wpt/web-platform-tests/css/css-ui/text-overflow-ellipsis-abspos-in-inline-block-crash-001.html new file mode 100644 index 00000000000..23291d43390 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-ui/text-overflow-ellipsis-abspos-in-inline-block-crash-001.html @@ -0,0 +1,44 @@ +<!DOCTYPE html> +<title>Ellipsizing inline blocks that have absolute positioned objects should not crash</title> +<link rel="author" href="kojii@chromium.org"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=945690"> +<meta name="assert" content="Ellipsizing inline blocks that have absolute positioned objects should not crash"> +<style> +div { + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + width: 5ch; +} +.inline-block { + display: inline-block; +} +.abs { + position: absolute; +} +</style> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div> + 12345678 + <span class="inline-block"> + <span class="abs">abs</span> + </span> +</div> +<div> + 12345678 + <span class="inline-block"> + 999 + <span class="abs">abs</span> + </span> +</div> +<div> + 12 + <span class="inline-block"> + 3456789 + <span class="abs">abs</span> + </span> +</div> +<script> +test(() => {}, 'No crash or DCHECK failure'); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/tools/generators/.gitignore b/tests/wpt/web-platform-tests/css/css-writing-modes/tools/generators/.gitignore deleted file mode 100644 index 3c3629e647f..00000000000 --- a/tests/wpt/web-platform-tests/css/css-writing-modes/tools/generators/.gitignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/tests/wpt/web-platform-tests/css/tools/w3ctestlib/Indexer.py b/tests/wpt/web-platform-tests/css/tools/w3ctestlib/Indexer.py index 3b71f5bab74..f7e2eb2a173 100644 --- a/tests/wpt/web-platform-tests/css/tools/w3ctestlib/Indexer.py +++ b/tests/wpt/web-platform-tests/css/tools/w3ctestlib/Indexer.py @@ -124,9 +124,8 @@ class Indexer: def __writeTemplate(self, template, data, outfile): o = self.tt.process(template, data) - f = open(outfile, 'w') - f.write(o.encode('utf-8')) - f.close() + with open(outfile, 'w') as f: + f.write(o.encode('utf-8')) def writeOverview(self, destDir, errorOut=sys.stderr, addTests=[]): """Write format-agnostic pages such as test suite overview pages, diff --git a/tests/wpt/web-platform-tests/css/tools/w3ctestlib/Sources.py b/tests/wpt/web-platform-tests/css/tools/w3ctestlib/Sources.py index 1528cbb8341..fa704bf6dbc 100644 --- a/tests/wpt/web-platform-tests/css/tools/w3ctestlib/Sources.py +++ b/tests/wpt/web-platform-tests/css/tools/w3ctestlib/Sources.py @@ -525,7 +525,8 @@ class FileSource: def data(self): """Return file contents as a byte string.""" if (self._data is None): - self._data = open(self.sourcepath, 'r').read() + with open(self.sourcepath, 'r') as f: + self._data = f.read() if (self._data.startswith(codecs.BOM_UTF8)): self.encoding = 'utf-8-sig' # XXX look for other unicode BOMs return self._data @@ -580,8 +581,8 @@ class FileSource: def write(self, format): """Writes FileSource.data() out to `self.relpath` through Format `format`.""" data = self.data() - f = open(format.dest(self.relpath), 'w') - f.write(data) + with open(format.dest(self.relpath), 'w') as f: + f.write(data) if (self.metaSource): self.metaSource.write(format) # XXX need to get output path from format, but not let it choose actual format @@ -818,7 +819,8 @@ class ConfigSource(FileSource): """Merge contents of all config files represented by this source.""" data = '' for src in self.sourcepath: - data += open(src).read() + with open(src) as f: + data += f.read() data += '\n' return data @@ -868,35 +870,36 @@ class ReftestManifest(ConfigSource): for src in self.sourcepath: relbase = basepath(self.relpath) srcbase = basepath(src) - for line in open(src): - strip = self.baseRE.search(line) - if strip: - striplist.append(strip.group(1)) - line = self.stripRE.sub('', line) - m = self.parseRE.search(line) - if m: - record = ((join(srcbase, m.group(2)), join(srcbase, m.group(3))), \ - (join(relbase, m.group(2)), join(relbase, m.group(3))), \ - m.group(1)) -# for strip in striplist: - # strip relrecord - if not exists(record[0][0]): - raise ReftestFilepathError("Manifest Error in %s: " - "Reftest test file %s does not exist." \ - % (src, record[0][0])) - elif not exists(record[0][1]): - raise ReftestFilepathError("Manifest Error in %s: " - "Reftest reference file %s does not exist." \ - % (src, record[0][1])) - elif not isPathInsideBase(record[1][0]): - raise ReftestFilepathError("Manifest Error in %s: " - "Reftest test replath %s not within relpath root." \ - % (src, record[1][0])) - elif not isPathInsideBase(record[1][1]): - raise ReftestFilepathError("Manifest Error in %s: " - "Reftest test replath %s not within relpath root." \ - % (src, record[1][1])) - yield record + with open(src) as f: + for line in f: + strip = self.baseRE.search(line) + if strip: + striplist.append(strip.group(1)) + line = self.stripRE.sub('', line) + m = self.parseRE.search(line) + if m: + record = ((join(srcbase, m.group(2)), join(srcbase, m.group(3))), \ + (join(relbase, m.group(2)), join(relbase, m.group(3))), \ + m.group(1)) + # for strip in striplist: + # strip relrecord + if not exists(record[0][0]): + raise ReftestFilepathError("Manifest Error in %s: " + "Reftest test file %s does not exist." \ + % (src, record[0][0])) + elif not exists(record[0][1]): + raise ReftestFilepathError("Manifest Error in %s: " + "Reftest reference file %s does not exist." \ + % (src, record[0][1])) + elif not isPathInsideBase(record[1][0]): + raise ReftestFilepathError("Manifest Error in %s: " + "Reftest test replath %s not within relpath root." \ + % (src, record[1][0])) + elif not isPathInsideBase(record[1][1]): + raise ReftestFilepathError("Manifest Error in %s: " + "Reftest test replath %s not within relpath root." \ + % (src, record[1][1])) + yield record import Utils # set up XML catalog xhtmlns = '{http://www.w3.org/1999/xhtml}' @@ -1026,9 +1029,8 @@ class XMLSource(FileSource): output = self.unicode() # write - f = open(format.dest(self.relpath), 'w') - f.write(output.encode(self.encoding, 'xmlcharrefreplace')) - f.close() + with open(format.dest(self.relpath), 'w') as f: + f.write(output.encode(self.encoding, 'xmlcharrefreplace')) def compact(self): self.tree = None diff --git a/tests/wpt/web-platform-tests/dom/nodes/Document-createElement-namespace.html b/tests/wpt/web-platform-tests/dom/nodes/Document-createElement-namespace.html index add66bf9a01..cea61f1aecb 100644 --- a/tests/wpt/web-platform-tests/dom/nodes/Document-createElement-namespace.html +++ b/tests/wpt/web-platform-tests/dom/nodes/Document-createElement-namespace.html @@ -102,18 +102,16 @@ var tests = [ tests.forEach(function(testName) { Object.keys(testExtensions).forEach(function(ext) { - var iframe = document.createElement("iframe"); - iframe.src = "Document-createElement-namespace-tests/" + - testName + "." + ext; - var t = async_test("Created element's namespace in " + testName + "." + ext); - iframe.onload = function() { - t.step(function() { + async_test(function(t) { + var iframe = document.createElement("iframe"); + iframe.src = "Document-createElement-namespace-tests/" + + testName + "." + ext; + iframe.onload = t.step_func_done(function() { testDoc(iframe.contentDocument, testExtensions[ext]); + document.body.removeChild(iframe); }); - document.body.removeChild(iframe); - t.done(); - }; - document.body.appendChild(iframe); + document.body.appendChild(iframe); + }, "Created element's namespace in " + testName + "." + ext); }); }); </script> diff --git a/tests/wpt/web-platform-tests/editing/data/outdent.js b/tests/wpt/web-platform-tests/editing/data/outdent.js index 271824bee51..ad613122ef3 100644 --- a/tests/wpt/web-platform-tests/editing/data/outdent.js +++ b/tests/wpt/web-platform-tests/editing/data/outdent.js @@ -874,5 +874,10 @@ var browserTests = [ [["outdent",""]], "<blockquote>foo</blockquote><span>[bar]</span>", [true], + {"outdent":[false,false,"",false,false,""]}], +["<ul><ul><li><span style=\"color:rgb(255, 0, 0)\">[]foo</span></li></ul></ul>", + [["outdent",""]], + "<ul><li><span style=\"color:rgb(255, 0, 0)\">[]foo</span></li></ul>", + [true], {"outdent":[false,false,"",false,false,""]}] ] diff --git a/tests/wpt/web-platform-tests/element-timing/image-carousel.html b/tests/wpt/web-platform-tests/element-timing/image-carousel.html new file mode 100644 index 00000000000..0bd99ab2507 --- /dev/null +++ b/tests/wpt/web-platform-tests/element-timing/image-carousel.html @@ -0,0 +1,73 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Element Timing: observe images in carousel</title> +<style> +body { + margin: 0; +} +/* Do not display images by default */ +.carousel-image { + display: none; +} +</style> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/element-timing-helpers.js"></script> + +<div class="slideshow-container"> + <div class='carousel-image'> + <img src="resources/circle.svg" elementtiming='image0'> + </div> + <div class='carousel-image'> + <img src="resources/square100.png" elementtiming='image1'> + </div> +</div> + +<script> + async_test(function (t) { + const beforeRenderTimes = []; + let entry_count = 0; + const entry_count_per_element = [0, 0]; + const index = window.location.href.lastIndexOf('/'); + const pathname0 = window.location.href.substring(0, index) + + '/resources/circle.svg'; + const pathname1 = window.location.href.substring(0, index) + + '/resources/square100.png'; + const observer = new PerformanceObserver(list => { + list.getEntries().forEach(entry => { + if (entry_count % 2 == 0) { + checkElement(entry, pathname0, 'image0', beforeRenderTimes[entry_count]); + checkRect(entry, [0, 200, 0, 200]); + entry_count_per_element[0]++; + } + else { + checkElement(entry, pathname1, 'image1', beforeRenderTimes[entry_count]); + checkRect(entry, [0, 100, 0, 100]); + entry_count_per_element[1]++; + } + entry_count++; + // Check each image twice before ending the test. + if (entry_count == 4) { + assert_equals(entry_count_per_element[0], 2); + assert_equals(entry_count_per_element[1], 2); + t.done(); + } + }) + }); + observer.observe({entryTypes: ['element']}); + let slideIndex = 0; + showCarousel(); + + function showCarousel() { + beforeRenderTimes.push(performance.now()); + const slides = document.getElementsByClassName("carousel-image"); + slides[slideIndex].style.display = "block"; + slides[1 - slideIndex].style.display = "none"; + slideIndex = 1 - slideIndex; + t.step_timeout(showCarousel, 50); // Change image every 50 ms. + } + }, 'Entries for elements within an image carousel are dispatched when the elements are redrawn.'); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/element-timing/image-clipped-svg.html b/tests/wpt/web-platform-tests/element-timing/image-clipped-svg.html new file mode 100644 index 00000000000..13c4a81a1e0 --- /dev/null +++ b/tests/wpt/web-platform-tests/element-timing/image-clipped-svg.html @@ -0,0 +1,33 @@ +<!DOCTYPE HTML> +<meta charset=utf-8> +<title>Element Timing: observe image inside SVG with small dimensions</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/element-timing-helpers.js"></script> +<script> +let beforeRender; +async_test(function (t) { + const observer = new PerformanceObserver( + t.step_func_done(function(entryList) { + assert_equals(entryList.getEntries().length, 1); + const entry = entryList.getEntries()[0]; + const index = window.location.href.lastIndexOf('/'); + const pathname = window.location.href.substring(0, index) + + '/resources/circle.svg'; + checkElement(entry, pathname, 'my_svg', beforeRender); + // Image size is 200x200 but SVG size is 100x100 so it is clipped. + checkRect(entry, [0, 100, 0, 100]); + }) + ); + observer.observe({entryTypes: ['element']}); + beforeRender = performance.now(); +}, "Able to observe svg image."); +</script> +<style> +body { + margin: 0; +} +</style> +<svg width="100" height="100"> + <image href='resources/circle.svg' elementtiming='my_svg'/> +</svg> diff --git a/tests/wpt/web-platform-tests/element-timing/image-rect-iframe.html b/tests/wpt/web-platform-tests/element-timing/image-rect-iframe.html new file mode 100644 index 00000000000..da46d785a0b --- /dev/null +++ b/tests/wpt/web-platform-tests/element-timing/image-rect-iframe.html @@ -0,0 +1,28 @@ +<!DOCTYPE HTML> +<meta charset=utf-8> +<title>Element Timing: check intersectionRect for element in iframe</title> +<body> +<style> +body { + margin: 50px; +} +</style> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + async_test((t) => { + on_event(window, 'message', e => { + assert_equals(e.data.length, 1); + assert_equals(e.data.entryType, 'element'); + const rect = e.data.rect; + // rect should start at (0,0) even though main frame has a margin. + assert_equals(rect.left, 0); + assert_equals(rect.right, 100); + assert_equals(rect.top, 0); + assert_equals(rect.bottom, 100); + t.done(); + }); + }, 'Element Timing entry in iframe has coordinates relative to the iframe.'); +</script> +<iframe src="resources/iframe-with-square-sends-entry.html"/> +</body> diff --git a/tests/wpt/web-platform-tests/element-timing/observe-svg-image.html b/tests/wpt/web-platform-tests/element-timing/observe-svg-image.html index f127152cf86..fdfe25ec9ff 100644 --- a/tests/wpt/web-platform-tests/element-timing/observe-svg-image.html +++ b/tests/wpt/web-platform-tests/element-timing/observe-svg-image.html @@ -28,6 +28,6 @@ body { margin: 0; } </style> -<svg> +<svg width="300" height="300"> <image href='resources/circle.svg' elementtiming='my_svg'/> </svg> diff --git a/tests/wpt/web-platform-tests/element-timing/resources/iframe-with-square-sends-entry.html b/tests/wpt/web-platform-tests/element-timing/resources/iframe-with-square-sends-entry.html new file mode 100644 index 00000000000..3c43a41c7d9 --- /dev/null +++ b/tests/wpt/web-platform-tests/element-timing/resources/iframe-with-square-sends-entry.html @@ -0,0 +1,21 @@ +<!DOCType html> +<html> +<style> +body { + margin: 0; +} +</style> +<body> +<script> + const observer = new PerformanceObserver(entryList => { + top.postMessage({ + 'length' : entryList.getEntries().length, + 'entryType' : entryList.getEntries()[0].entryType, + 'rect' : entryList.getEntries()[0].intersectionRect, + }, '*'); + }); + observer.observe({entryTypes: ['element']}); +</script> +<img src=square100.png elementtiming=my_image/> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/unoptimized-images-reporting-onload.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/unoptimized-images-reporting-onload.html.headers deleted file mode 100644 index 10b41235409..00000000000 --- a/tests/wpt/web-platform-tests/feature-policy/reporting/unoptimized-images-reporting-onload.html.headers +++ /dev/null @@ -1 +0,0 @@ -Feature-Policy: unoptimized-images 'none' diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/unoptimized-images-reporting.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/unoptimized-images-reporting.html.headers deleted file mode 100644 index 10b41235409..00000000000 --- a/tests/wpt/web-platform-tests/feature-policy/reporting/unoptimized-images-reporting.html.headers +++ /dev/null @@ -1 +0,0 @@ -Feature-Policy: unoptimized-images 'none' diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/unoptimized-images-reporting-onload.html b/tests/wpt/web-platform-tests/feature-policy/reporting/unoptimized-lossy-images-reporting-onload.html index d39b6807d09..8c060477230 100644 --- a/tests/wpt/web-platform-tests/feature-policy/reporting/unoptimized-images-reporting-onload.html +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/unoptimized-lossy-images-reporting-onload.html @@ -13,7 +13,7 @@ var check_report_format = (reports, observer) => { let report = reports[0]; assert_equals(report.type, "feature-policy-violation"); assert_equals(report.url, document.location.href); - assert_equals(report.body.featureId, "unoptimized-images"); + assert_equals(report.body.featureId, "unoptimized-lossy-images"); assert_equals(report.body.disposition, "enforce"); }; diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/unoptimized-lossy-images-reporting-onload.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/unoptimized-lossy-images-reporting-onload.html.headers new file mode 100644 index 00000000000..5cda6ae0128 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/unoptimized-lossy-images-reporting-onload.html.headers @@ -0,0 +1 @@ +Feature-Policy: unoptimized-lossy-images 'none' diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/unoptimized-images-reporting.html b/tests/wpt/web-platform-tests/feature-policy/reporting/unoptimized-lossy-images-reporting.html index fb27a13996a..62a5469f8ca 100644 --- a/tests/wpt/web-platform-tests/feature-policy/reporting/unoptimized-images-reporting.html +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/unoptimized-lossy-images-reporting.html @@ -11,7 +11,7 @@ var check_report_format = (reports, observer) => { let report = reports[0]; assert_equals(report.type, "feature-policy-violation"); assert_equals(report.url, document.location.href); - assert_equals(report.body.featureId, "unoptimized-images"); + assert_equals(report.body.featureId, "unoptimized-lossy-images"); assert_equals(report.body.disposition, "enforce"); }; diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/unoptimized-lossy-images-reporting.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/unoptimized-lossy-images-reporting.html.headers new file mode 100644 index 00000000000..5cda6ae0128 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/unoptimized-lossy-images-reporting.html.headers @@ -0,0 +1 @@ +Feature-Policy: unoptimized-lossy-images 'none' diff --git a/tests/wpt/web-platform-tests/fetch/api/headers/headers-no-cors.window.js b/tests/wpt/web-platform-tests/fetch/api/headers/headers-no-cors.window.js index 9ea76e03e13..2f3a819ba1a 100644 --- a/tests/wpt/web-platform-tests/fetch/api/headers/headers-no-cors.window.js +++ b/tests/wpt/web-platform-tests/fetch/api/headers/headers-no-cors.window.js @@ -34,10 +34,11 @@ const longValue = "s".repeat(127); function runTests(testArray) { testArray = testArray.concat([ ["dpr", "2"], - ["downlink", "1"], // https://wicg.github.io/netinfo/ + ["downlink", "1"], ["save-data", "on"], ["viewport-width", "100"], - ["width", "100"] + ["width", "100"], + ["unknown", "doesitmatter"] ]); testArray.forEach(testItem => { const [headerName, headerValue] = testItem; diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/iframe.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/iframe.tentative.https.sub.html index 73bd90745d1..056d8fdba94 100644 --- a/tests/wpt/web-platform-tests/fetch/sec-metadata/iframe.tentative.https.sub.html +++ b/tests/wpt/web-platform-tests/fetch/sec-metadata/iframe.tentative.https.sub.html @@ -15,7 +15,7 @@ "dest": "nested-document", "site": "same-origin", "user": "?F", - "mode": "navigate" + "mode": "nested-navigate" }); t.done(); })); @@ -34,7 +34,7 @@ "dest": "nested-document", "site": "same-site", "user": "?F", - "mode": "navigate" + "mode": "nested-navigate" }); t.done(); })); @@ -53,7 +53,7 @@ "dest": "nested-document", "site": "cross-site", "user": "?F", - "mode": "navigate" + "mode": "nested-navigate" }); t.done(); })); diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/navigation.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/navigation.https.sub.html new file mode 100644 index 00000000000..12ebfc584ed --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/sec-metadata/navigation.https.sub.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src=/fetch/sec-metadata/resources/helper.js></script> +<script> + test(t => { + let expected = { + "dest": "document", + "mode": "navigate", + "site": "none", + }; + + let actual = { + "dest": "{{headers[sec-fetch-dest]}}", + "mode": "{{headers[sec-fetch-mode]}}", + "site": "{{headers[sec-fetch-site]}}", + // Skipping `Sec-Fetch-User`, as the test harness isn't consistent here. + }; + + assert_header_equals(actual, expected); + }, "This page's top-level navigation."); +</script> diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/resources/helper.js b/tests/wpt/web-platform-tests/fetch/sec-metadata/resources/helper.js index 4bee68996e8..1968cfc0dd8 100644 --- a/tests/wpt/web-platform-tests/fetch/sec-metadata/resources/helper.js +++ b/tests/wpt/web-platform-tests/fetch/sec-metadata/resources/helper.js @@ -6,5 +6,6 @@ function assert_header_equals(value, expected) { assert_equals(value.dest, expected.dest, "dest"); assert_equals(value.mode, expected.mode, "mode"); assert_equals(value.site, expected.site, "site"); - assert_equals(value.user, expected.user, "user"); + if (expected.hasOwnProperty("user")) + assert_equals(value.user, expected.user, "user"); } diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/trailing-dot.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/trailing-dot.tentative.https.sub.html new file mode 100644 index 00000000000..85f9c73c6ae --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/sec-metadata/trailing-dot.tentative.https.sub.html @@ -0,0 +1,45 @@ +<!DOCTYPE html> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src=/fetch/sec-metadata/resources/helper.js></script> +<script> + // Site + promise_test(t => { + return fetch("https://{{host}}.:{{ports[https][0]}}/fetch/sec-metadata/resources/echo-as-json.py") + .then(r => r.json()) + .then(j => { + assert_header_equals(j, { + "dest": "empty", + "site": "cross-site", + "user": "?F", + "mode": "cors", + }); + }); + }, "Fetching a resource from the same origin, but spelled with a trailing dot."); + + promise_test(t => { + return fetch("https://{{hosts[][www]}}.:{{ports[https][0]}}/fetch/sec-metadata/resources/echo-as-json.py") + .then(r => r.json()) + .then(j => { + assert_header_equals(j, { + "dest": "empty", + "site": "cross-site", + "user": "?F", + "mode": "cors", + }); + }); + }, "Fetching a resource from the same site, but spelled with a trailing dot."); + + promise_test(t => { + return fetch("https://{{hosts[alt][www]}}.:{{ports[https][0]}}/fetch/sec-metadata/resources/echo-as-json.py") + .then(r => r.json()) + .then(j => { + assert_header_equals(j, { + "dest": "empty", + "site": "cross-site", + "user": "?F", + "mode": "cors", + }); + }); + }, "Fetching a resource from a cross-site host, spelled with a trailing dot."); +</script> diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/window-open.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/window-open.tentative.https.sub.html index 2957dad40a4..ef2bc81824e 100644 --- a/tests/wpt/web-platform-tests/fetch/sec-metadata/window-open.tentative.https.sub.html +++ b/tests/wpt/web-platform-tests/fetch/sec-metadata/window-open.tentative.https.sub.html @@ -58,6 +58,78 @@ })); }, "Cross-site window, forced"); + async_test(t => { + let w = window.open("https://{{host}}:{{ports[https][0]}}/fetch/sec-metadata/resources/post-to-owner.py"); + t.add_cleanup(_ => w.close()); + let messages = 0; + window.addEventListener('message', t.step_func(e => { + messages++; + if (e.source != w) + return; + + assert_header_equals(e.data, { + "dest": "document", + "site": "same-origin", + "user": "?F", + "mode": "navigate", + }); + + if (messages == 1) { + w.location.reload(); + } else { + t.done(); + } + })); + }, "Same-origin window, forced, reloaded"); + + async_test(t => { + let w = window.open("https://{{hosts[][www]}}:{{ports[https][0]}}/fetch/sec-metadata/resources/post-to-owner.py"); + t.add_cleanup(_ => w.close()); + let messages = 0; + window.addEventListener('message', t.step_func(e => { + messages++; + if (e.source != w) + return; + + assert_header_equals(e.data, { + "dest": "document", + "site": "same-site", + "user": "?F", + "mode": "navigate", + }); + + if (messages == 1) { + w.location.reload(); + } else { + t.done(); + } + })); + }, "Same-site window, forced, reloaded"); + + async_test(t => { + let w = window.open("https://{{hosts[alt][www]}}:{{ports[https][0]}}/fetch/sec-metadata/resources/post-to-owner.py"); + t.add_cleanup(_ => w.close()); + let messages = 0; + window.addEventListener('message', t.step_func(e => { + messages++; + if (e.source != w) + return; + + assert_header_equals(e.data, { + "dest": "document", + "site": "cross-site", + "user": "?F", + "mode": "navigate", + }); + + if (messages == 1) { + w.location.reload(); + } else { + t.done(); + } + })); + }, "Cross-site window, forced, reloaded"); + // User-activated navigations: async_test(t => { let b = document.createElement('button'); diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/scroll-restoration-fragment-scrolling-samedoc.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/scroll-restoration-fragment-scrolling-samedoc.html index d837b8f63f0..073e0f6e06f 100644 --- a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/scroll-restoration-fragment-scrolling-samedoc.html +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/scroll-restoration-fragment-scrolling-samedoc.html @@ -1,4 +1,5 @@ <!DOCTYPE html> +<meta name="viewport" content="width=device-width, initial-scale=1.0"> <style> body { height: 2000px; diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/named-access-on-the-window-object/navigated-named-objects.window.js b/tests/wpt/web-platform-tests/html/browsers/the-window-object/named-access-on-the-window-object/navigated-named-objects.window.js new file mode 100644 index 00000000000..59d94efc994 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/named-access-on-the-window-object/navigated-named-objects.window.js @@ -0,0 +1,67 @@ +// META: script=/common/get-host-info.sub.js + +function echoURL(content) { + return `/common/echo.py?content=${encodeURIComponent(content)}`; +} + +function setSrc(frame, type, content) { + if (type === "same-origin") { + frame.src = echoURL(content); + } else if (type === "cross-site") { + frame.src = `${get_host_info().HTTP_NOTSAMESITE_ORIGIN}${echoURL(content)}`; + } else { + frame.srcdoc = content; + } +} + +["srcdoc", "same-origin", "cross-site"].forEach(type => { + const initialType = type === "srcdoc" ? type : "same-origin"; + + [ + { + "namedObject": "<div id=abc></div>", + "namedObjectLocalName": "div" + }, + { + "namedObject": "<object name=abc></object>", + "namedObjectLocalName": "object" + }, + { + "namedObject": "<iframe id=abc></iframe>", + "namedObjectLocalName": "iframe" + } + ].forEach(testData => { + async_test(t => { + const frame = document.createElement("iframe"); + t.add_cleanup(() => frame.remove()); + setSrc(frame, initialType, `<script>function f() { return abc }</script>${testData.namedObject}`); + frame.onload = t.step_func(() => { + const f = frame.contentWindow.f, + associatedAbc = f(); + frame.onload = t.step_func_done(() => { + assert_equals(f(), associatedAbc); + assert_equals(associatedAbc.localName, testData.namedObjectLocalName); + }); + setSrc(frame, type, "<span id=abc></span>"); + }); + document.body.append(frame); + }, `Window's associated Document object is used for finding named objects (<${testData.namedObjectLocalName}> via ${type} <iframe>)`); + }); + + async_test(t => { + const frame = document.createElement("iframe"); + t.add_cleanup(() => frame.remove()); + setSrc(frame, initialType, "<script>function f() { return abc }</script><object name=abc data='about:blank'></object>"); + frame.onload = t.step_func(() => { + const f = frame.contentWindow.f, + associatedAbc = f(), + associatedAbcContainer = associatedAbc.frameElement; + frame.onload = t.step_func_done(() => { + assert_equals(f(), associatedAbcContainer); + assert_equals(associatedAbcContainer.contentWindow, null); + }); + setSrc(frame, type, "<span id=abc></span>"); + }); + document.body.append(frame); + }, `Window's associated Document object is used for finding named objects (<object> with browsing ccontext via ${type} <iframe)>`); +}); diff --git a/tests/wpt/web-platform-tests/html/dom/elements-embedded.js b/tests/wpt/web-platform-tests/html/dom/elements-embedded.js index d0c5dbcb76b..af6c79e74f4 100644 --- a/tests/wpt/web-platform-tests/html/dom/elements-embedded.js +++ b/tests/wpt/web-platform-tests/html/dom/elements-embedded.js @@ -99,7 +99,8 @@ var embeddedElements = { width: "unsigned long", height: "unsigned long", - poster: "url" + poster: "url", + playsInline: "boolean", }, audio: { // HTMLMediaElement diff --git a/tests/wpt/web-platform-tests/html/form-elements/the-textarea-element/multiline-placeholder-cr.html b/tests/wpt/web-platform-tests/html/form-elements/the-textarea-element/multiline-placeholder-cr.html deleted file mode 100644 index 8879ca46479..00000000000 --- a/tests/wpt/web-platform-tests/html/form-elements/the-textarea-element/multiline-placeholder-cr.html +++ /dev/null @@ -1 +0,0 @@ -<!doctype html>
<html class="reftest-wait">
<meta charset="utf-8">
<title>textarea multiline placeholder (CR)</title>
<link rel="help" href="https://html.spec.whatwg.org/multipage/form-elements.html#attr-textarea-placeholder">
<meta name="assert" content="textarea element's placeholder preserves newlines (CR)">
<link rel="match" href="/html/form-elements/the-textarea-element/multiline-placeholder-ref.html">
<link rel="stylesheet" href="support/placeholder.css">
<textarea rows="5" placeholder="this is
a multiline
placeholder"></textarea>
<textarea rows="5" placeholder="this is
a multiline

placeholder"></textarea>
<textarea rows="5" id="dynamic"></textarea>
<script>
document.querySelector("#dynamic")
.setAttribute("placeholder", "this is\ra multiline\r\rplaceholder");
document.documentElement.classList.remove("reftest-wait");
</script>
</html>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/multiline-placeholder-cr.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/multiline-placeholder-cr.html new file mode 100644 index 00000000000..08d0982ba53 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/multiline-placeholder-cr.html @@ -0,0 +1 @@ +<!doctype html>
<html class="reftest-wait">
<meta charset="utf-8">
<title>textarea multiline placeholder (CR)</title>
<link rel="help" href="https://html.spec.whatwg.org/multipage/form-elements.html#attr-textarea-placeholder">
<meta name="assert" content="textarea element's placeholder preserves newlines (CR)">
<link rel="match" href="multiline-placeholder-ref.html">
<link rel="stylesheet" href="support/placeholder.css">
<textarea rows="5" placeholder="this is
a multiline
placeholder"></textarea>
<textarea rows="5" placeholder="this is
a multiline

placeholder"></textarea>
<textarea rows="5" id="dynamic"></textarea>
<script>
document.querySelector("#dynamic")
.setAttribute("placeholder", "this is\ra multiline\r\rplaceholder");
document.documentElement.classList.remove("reftest-wait");
</script>
</html>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/form-elements/the-textarea-element/multiline-placeholder-crlf.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/multiline-placeholder-crlf.html index 9632ef1bb6c..b82a2030761 100644 --- a/tests/wpt/web-platform-tests/html/form-elements/the-textarea-element/multiline-placeholder-crlf.html +++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/multiline-placeholder-crlf.html @@ -4,7 +4,7 @@ <title>textarea multiline placeholder (CRLF)</title>
<link rel="help" href="https://html.spec.whatwg.org/multipage/form-elements.html#attr-textarea-placeholder">
<meta name="assert" content="textarea element's placeholder preserves newlines (CRLF)">
-<link rel="match" href="/html/form-elements/the-textarea-element/multiline-placeholder-ref.html">
+<link rel="match" href="multiline-placeholder-ref.html">
<link rel="stylesheet" href="support/placeholder.css">
<textarea rows="5" placeholder="this is
a multiline
diff --git a/tests/wpt/web-platform-tests/html/form-elements/the-textarea-element/multiline-placeholder-ref.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/multiline-placeholder-ref.html index 0234ed64c9a..0234ed64c9a 100644 --- a/tests/wpt/web-platform-tests/html/form-elements/the-textarea-element/multiline-placeholder-ref.html +++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/multiline-placeholder-ref.html diff --git a/tests/wpt/web-platform-tests/html/form-elements/the-textarea-element/multiline-placeholder.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/multiline-placeholder.html index 00bb9696d1a..4e835a6f56f 100644 --- a/tests/wpt/web-platform-tests/html/form-elements/the-textarea-element/multiline-placeholder.html +++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/multiline-placeholder.html @@ -4,7 +4,7 @@ <title>textarea multiline placeholder</title> <link rel="help" href="https://html.spec.whatwg.org/multipage/form-elements.html#attr-textarea-placeholder"> <meta name="assert" content="textarea element's placeholder preserves newlines"> -<link rel="match" href="/html/form-elements/the-textarea-element/multiline-placeholder-ref.html"> +<link rel="match" href="multiline-placeholder-ref.html"> <link rel="stylesheet" href="support/placeholder.css"> <textarea rows="5" placeholder="this is a multiline diff --git a/tests/wpt/web-platform-tests/html/form-elements/the-textarea-element/support/placeholder.css b/tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/support/placeholder.css index 9aaed05c86a..9aaed05c86a 100644 --- a/tests/wpt/web-platform-tests/html/form-elements/the-textarea-element/support/placeholder.css +++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/support/placeholder.css diff --git a/tests/wpt/web-platform-tests/html/scripting/the-noscript-element/non-html-noscript.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-noscript-element/non-html-noscript.html index 2f85d1d47dc..2f85d1d47dc 100644 --- a/tests/wpt/web-platform-tests/html/scripting/the-noscript-element/non-html-noscript.html +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-noscript-element/non-html-noscript.html diff --git a/tests/wpt/web-platform-tests/idle-detection/basics.tentative.https.any.js b/tests/wpt/web-platform-tests/idle-detection/basics.tentative.https.any.js index df547570a78..c31faff8fcb 100644 --- a/tests/wpt/web-platform-tests/idle-detection/basics.tentative.https.any.js +++ b/tests/wpt/web-platform-tests/idle-detection/basics.tentative.https.any.js @@ -24,7 +24,7 @@ promise_test(async t => { new IdleDetector({ get threshold() { used = true; - return 1; + return 60; } }); @@ -34,7 +34,7 @@ promise_test(async t => { promise_test(async t => { try { new IdleDetector({threshold: 0}); - assert_unreached('Threshold of 0 should reject'); + assert_unreached('Threshold under 60 should reject'); } catch (error) { assert_equals(error.name, 'TypeError'); } @@ -42,6 +42,23 @@ promise_test(async t => { promise_test(async t => { try { + new IdleDetector({threshold: 59}); + assert_unreached('Threshold under 60 should reject'); + } catch (error) { + assert_equals(error.name, 'TypeError'); + } +}, 'constructor throws with threshold below minimum (59)'); + +promise_test(async t => { + new IdleDetector({threshold: 60}); +}, 'constructor allows threshold (60)'); + +promise_test(async t => { + new IdleDetector({threshold: 61}); +}, 'constructor allows threshold (61)'); + +promise_test(async t => { + try { new IdleDetector({threshold: null}); assert_unreached('Threshold of null should reject'); } catch (error) { @@ -75,4 +92,3 @@ promise_test(async t => { new IdleDetector({threshold: undefined}); }, 'constructor uses a default value for the threshold'); - diff --git a/tests/wpt/web-platform-tests/idle-detection/idlharness.https.any.js b/tests/wpt/web-platform-tests/idle-detection/idlharness.https.any.js index 482e2f4d400..e6aa2f91bfe 100644 --- a/tests/wpt/web-platform-tests/idle-detection/idlharness.https.any.js +++ b/tests/wpt/web-platform-tests/idle-detection/idlharness.https.any.js @@ -19,7 +19,7 @@ promise_test(async (t) => { idl_array.add_dependency_idls(dom); idl_array.add_dependency_idls(html); - self.idle = new IdleDetector({threshold: 1}); + self.idle = new IdleDetector({threshold: 60}); let watcher = new EventWatcher(t, self.idle, ["change"]); diff --git a/tests/wpt/web-platform-tests/idle-detection/interceptor.https.html b/tests/wpt/web-platform-tests/idle-detection/interceptor.https.html index 37922c8cf79..f47a9e7f8ca 100644 --- a/tests/wpt/web-platform-tests/idle-detection/interceptor.https.html +++ b/tests/wpt/web-platform-tests/idle-detection/interceptor.https.html @@ -23,7 +23,7 @@ promise_test(async t => { }); }); - let detector = new IdleDetector({threshold: 10}); + let detector = new IdleDetector({threshold: 60}); let watcher = new EventWatcher(t, detector, ["change"]); @@ -59,7 +59,7 @@ promise_test(async t => { return first; }); - let detector = new IdleDetector({threshold: 10}); + let detector = new IdleDetector({threshold: 60}); let watcher = new EventWatcher(t, detector, ["change"]); @@ -106,7 +106,7 @@ promise_test(async t => { return first; }); - let detector = new IdleDetector({threshold: 10}); + let detector = new IdleDetector({threshold: 60}); let watcher = new EventWatcher(t, detector, ["change"]); @@ -137,7 +137,7 @@ promise_test(async t => { }); }); - let detector = new IdleDetector({threshold: 10}); + let detector = new IdleDetector({threshold: 60}); let watcher = new EventWatcher(t, detector, ["change"]); @@ -161,7 +161,7 @@ promise_test(async t => { }); }); - let detector = new IdleDetector({threshold: 10}); + let detector = new IdleDetector({threshold: 60}); let event = new Promise((resolve, reject) => { detector.onchange = resolve; @@ -188,7 +188,7 @@ promise_test(async t => { }); }); - let detector = new IdleDetector({threshold: 10}); + let detector = new IdleDetector({threshold: 60}); let watcher = new EventWatcher(t, detector, ["change"]); @@ -220,7 +220,7 @@ promise_test(async t => { }); }); - let detector = new IdleDetector({threshold: 10}); + let detector = new IdleDetector({threshold: 60}); // Calling stop() before start() is a no-op. detector.stop(); @@ -247,7 +247,7 @@ promise_test(async t => { }); }); - let detector = new IdleDetector({threshold: 10}); + let detector = new IdleDetector({threshold: 60}); let watcher = new EventWatcher(t, detector, ["change"]); diff --git a/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/eventOrder.html b/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/eventOrder.html index c85b861c7fd..1fed285a27a 100644 --- a/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/eventOrder.html +++ b/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/eventOrder.html @@ -9,19 +9,20 @@ <button id="a">Button a</button> <button id="b">Button b</button> +<input id="text-input"> <script> // Pointer 1 is added before Pointer 2 so it comes first in the list of sources // Therefore its actions happen first let events = []; -async_test(t => { +promise_test(() => { Array.prototype.forEach.call(document.getElementsByTagName("button"), (x) => x.addEventListener("mousedown", () => {events.push(x.id)})); let button_a = document.getElementById("a"); let button_b = document.getElementById("b"); - let actions = new test_driver.Actions() + return new test_driver.Actions() .addPointer("pointer1") .addPointer("pointer2") .pointerMove(0, 0, {origin: button_a, sourceName: "pointer1"}) @@ -31,7 +32,30 @@ async_test(t => { .pointerUp({sourceName: "pointer2"}) .pointerUp({sourceName: "pointer1"}) .send() - .then(t.step_func_done(() => assert_array_equals(events, ["a", "b"]))) - .catch(e => t.step_func(() => assert_unreached("Actions sequence failed " + e))); + .then(() => assert_array_equals(events, ["a", "b"])); }); + +// This test uses a large number of keyboard sources to force race conditions +// in implementations which incorrectly dispatch events. Despite belonging to +// the same "tick," each action's initial event should be dispatched in series. +promise_test(() => { + const input = document.getElementById("text-input"); + const actions = new test_driver.Actions(); + const code_for_a = "a".charCodeAt(0); + const keys = Array.from(Array(26)) + .map((_, index) => ({ + sourceName: "keyboard" + index, + code: String.fromCharCode(code_for_a + index) + })); + + keys.forEach(({sourceName}) => actions.addKeyboard(sourceName)); + keys.forEach(({code, sourceName}) => actions.keyDown(code, {sourceName})); + keys.forEach(({code, sourceName}) => actions.keyUp(code,{sourceName})); + + return test_driver.click(input) + .then(() => actions.send()) + .then(() => { + assert_equals(input.value, "abcdefghijklmnopqrstuvwxyz"); + }); +}, "indivisible actions on the same track dispatch events in series"); </script> diff --git a/tests/wpt/web-platform-tests/interfaces/css-font-loading.idl b/tests/wpt/web-platform-tests/interfaces/css-font-loading.idl index c2ef551b4ed..2bbc35a2591 100644 --- a/tests/wpt/web-platform-tests/interfaces/css-font-loading.idl +++ b/tests/wpt/web-platform-tests/interfaces/css-font-loading.idl @@ -81,11 +81,9 @@ interface FontFaceSet : EventTarget { readonly attribute FontFaceSetLoadStatus status; }; -[Exposed=(Window,Worker), - NoInterfaceObject] -interface FontFaceSource { +interface mixin FontFaceSource { readonly attribute FontFaceSet fonts; }; -Document implements FontFaceSource; -WorkerGlobalScope implements FontFaceSource; +Document includes FontFaceSource; +WorkerGlobalScope includes FontFaceSource; diff --git a/tests/wpt/web-platform-tests/interfaces/payment-method-basic-card.idl b/tests/wpt/web-platform-tests/interfaces/payment-method-basic-card.idl index 25cb62170dc..91f1d197b94 100644 --- a/tests/wpt/web-platform-tests/interfaces/payment-method-basic-card.idl +++ b/tests/wpt/web-platform-tests/interfaces/payment-method-basic-card.idl @@ -4,20 +4,20 @@ // Source: Payment Method: Basic Card (https://w3c.github.io/payment-method-basic-card/) dictionary BasicCardRequest { - sequence<DOMString> supportedNetworks; + sequence<DOMString> supportedNetworks = []; }; dictionary BasicCardChangeDetails { - PaymentAddress? billingAddress; + PaymentAddress? billingAddress = null; }; dictionary BasicCardResponse { required DOMString cardNumber; - DOMString cardholderName; - DOMString cardSecurityCode; - DOMString expiryMonth; - DOMString expiryYear; - PaymentAddress? billingAddress; + DOMString cardholderName = ""; + DOMString cardSecurityCode = ""; + DOMString expiryMonth = ""; + DOMString expiryYear = ""; + PaymentAddress? billingAddress = null; }; dictionary BasicCardErrors { diff --git a/tests/wpt/web-platform-tests/interfaces/screen-capture.idl b/tests/wpt/web-platform-tests/interfaces/screen-capture.idl index 612480cb080..f22f7a9a810 100644 --- a/tests/wpt/web-platform-tests/interfaces/screen-capture.idl +++ b/tests/wpt/web-platform-tests/interfaces/screen-capture.idl @@ -16,12 +16,14 @@ partial dictionary MediaTrackSupportedConstraints { boolean displaySurface = true; boolean logicalSurface = true; boolean cursor = true; + boolean restrictOwnAudio = true; }; partial dictionary MediaTrackConstraintSet { ConstrainDOMString displaySurface; ConstrainBoolean logicalSurface; ConstrainDOMString cursor; + ConstrainBoolean restrictOwnAudio; }; partial dictionary MediaTrackSettings { diff --git a/tests/wpt/web-platform-tests/interfaces/wake-lock.idl b/tests/wpt/web-platform-tests/interfaces/wake-lock.idl index 10e714828d9..7ef19dc6475 100644 --- a/tests/wpt/web-platform-tests/interfaces/wake-lock.idl +++ b/tests/wpt/web-platform-tests/interfaces/wake-lock.idl @@ -3,6 +3,10 @@ // (https://github.com/tidoust/reffy-reports) // Source: Wake Lock API (https://w3c.github.io/wake-lock/) +dictionary WakeLockPermissionDescriptor : PermissionDescriptor { + WakeLockType type; +}; + enum WakeLockType { "screen", "system" }; [Constructor(WakeLockType type), SecureContext, Exposed=(DedicatedWorker,Window)] diff --git a/tests/wpt/web-platform-tests/interfaces/wasm-js-api.idl b/tests/wpt/web-platform-tests/interfaces/wasm-js-api.idl index 2bd2ecba828..62bc0b7a839 100644 --- a/tests/wpt/web-platform-tests/interfaces/wasm-js-api.idl +++ b/tests/wpt/web-platform-tests/interfaces/wasm-js-api.idl @@ -82,8 +82,15 @@ interface Table { readonly attribute unsigned long length; }; +enum ValueType { + "i32", + "i64", + "f32", + "f64" +}; + dictionary GlobalDescriptor { - required USVString value; + required ValueType value; boolean mutable = false; }; diff --git a/tests/wpt/web-platform-tests/interfaces/webgl1.idl b/tests/wpt/web-platform-tests/interfaces/webgl1.idl index 7f5130ef707..8fb5e01b044 100644 --- a/tests/wpt/web-platform-tests/interfaces/webgl1.idl +++ b/tests/wpt/web-platform-tests/interfaces/webgl1.idl @@ -32,6 +32,7 @@ dictionary WebGLContextAttributes { boolean preserveDrawingBuffer = false; WebGLPowerPreference powerPreference = "default"; boolean failIfMajorPerformanceCaveat = false; + boolean desynchronized = false; }; [Exposed=(Window,Worker)] diff --git a/tests/wpt/web-platform-tests/js/builtins/Object.prototype.freeze.html b/tests/wpt/web-platform-tests/js/builtins/Object.prototype.freeze.html index 47a50b33d77..028aa1ecd54 100644 --- a/tests/wpt/web-platform-tests/js/builtins/Object.prototype.freeze.html +++ b/tests/wpt/web-platform-tests/js/builtins/Object.prototype.freeze.html @@ -38,14 +38,6 @@ test(function() { assert_equals('exist', that.prop, 'Confirm to prevent deleting a property.'); }); }); - - -test(function() { - ['foo', 42, null, undefined].forEach(function(that) { - assert_throws(new TypeError(), - function() { Object.freeze(that) }); - }); -}); </script> </body> diff --git a/tests/wpt/web-platform-tests/js/builtins/Object.prototype.preventExtensions.html b/tests/wpt/web-platform-tests/js/builtins/Object.prototype.preventExtensions.html index 36ac328d2e5..41ce2b9a2e9 100644 --- a/tests/wpt/web-platform-tests/js/builtins/Object.prototype.preventExtensions.html +++ b/tests/wpt/web-platform-tests/js/builtins/Object.prototype.preventExtensions.html @@ -38,13 +38,6 @@ test(function() { assert_equals(undefined, that.prop, 'Confirm to be able to delete a property.'); }); }); - -test(function() { - ['foo', 42, null, undefined].forEach(function(that) { - assert_throws(new TypeError(), - function() { Object.preventExtensions(that) }); - }); -}); </script> </body> diff --git a/tests/wpt/web-platform-tests/js/builtins/Object.prototype.seal.html b/tests/wpt/web-platform-tests/js/builtins/Object.prototype.seal.html index 446d627865c..ae371dd664a 100644 --- a/tests/wpt/web-platform-tests/js/builtins/Object.prototype.seal.html +++ b/tests/wpt/web-platform-tests/js/builtins/Object.prototype.seal.html @@ -38,13 +38,6 @@ test(function() { assert_equals('changed', that.prop, 'Confirm to prevent deleting a property.'); }); }); - -test(function() { - ['foo', 42, null, undefined].forEach(function(that) { - assert_throws(new TypeError(), - function() { Object.seal(that) }); - }); -}); </script> </body> diff --git a/tests/wpt/web-platform-tests/lifecycle/set-composited-layer-position-ref.html b/tests/wpt/web-platform-tests/lifecycle/set-composited-layer-position-ref.html new file mode 100644 index 00000000000..217edfaf5d9 --- /dev/null +++ b/tests/wpt/web-platform-tests/lifecycle/set-composited-layer-position-ref.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> + +<meta charset="utf-8"> +<title>Setting composited layer position paints properly</title> +<link rel="author" title="Mason Freed" href="masonfreed@chromium.org"> + + + +<div id="box"></div> +<style> +div { + position: absolute; + top: 0; + left: 0; + width: 200px; + height: 200px; + background: green; +} diff --git a/tests/wpt/web-platform-tests/lifecycle/set-composited-layer-position.html b/tests/wpt/web-platform-tests/lifecycle/set-composited-layer-position.html new file mode 100644 index 00000000000..543677a5006 --- /dev/null +++ b/tests/wpt/web-platform-tests/lifecycle/set-composited-layer-position.html @@ -0,0 +1,45 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<meta charset="utf-8"> +<title>Setting composited layer position paints properly</title> +<link rel="author" title="Mason Freed" href="masonfreed@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/cssom-view-1/"> +<link rel="match" href="set-composited-layer-position-ref.html"> + +<div id="box"></div> +<div id="tomove"></div> +<style> +div { + position: absolute; + top: 0; + left: 0; + will-change: transform; + width: 200px; + height: 200px; +} +#box { + background: red; +} +#tomove { + background: green; + top: 200px; + left: 200px; + filter: invert(0); +} +</style> +<script> + window.onload = function() { + requestAnimationFrame(function() { + requestAnimationFrame(function() { + tomove = document.getElementById("tomove"); + tomove.style.top = 0; + tomove.style.left = 0; + document.documentElement.classList.remove("reftest-wait"); + }); + }); + } +</script> +</html> + + + diff --git a/tests/wpt/web-platform-tests/lint.whitelist b/tests/wpt/web-platform-tests/lint.whitelist index 96fd7ed0c29..f354fd95df3 100644 --- a/tests/wpt/web-platform-tests/lint.whitelist +++ b/tests/wpt/web-platform-tests/lint.whitelist @@ -93,8 +93,8 @@ AHEM COPY: css/vendor-imports/mozilla/mozilla-central-reftests/*/Ahem.ttf # Intentional use of CRLF CR AT EOL: WebIDL/valid/idl/documentation-dos.widl CR AT EOL: cors/resources/cors-headers.asis -CR AT EOL: html/form-elements/the-textarea-element/multiline-placeholder-cr.html -CR AT EOL: html/form-elements/the-textarea-element/multiline-placeholder-crlf.html +CR AT EOL: html/semantics/forms/the-textarea-element/multiline-placeholder-cr.html +CR AT EOL: html/semantics/forms/the-textarea-element/multiline-placeholder-crlf.html CR AT EOL: html/input/the-placeholder-attribute/multiline-cr.html CR AT EOL: html/input/the-placeholder-attribute/multiline-crlf.html CR AT EOL: webvtt/parsing/file-parsing/tests/support/newlines.vtt diff --git a/tests/wpt/web-platform-tests/mathml/presentation-markup/fractions/frac-created-dynamically-2-ref.html b/tests/wpt/web-platform-tests/mathml/presentation-markup/fractions/frac-created-dynamically-2-ref.html new file mode 100644 index 00000000000..d389906112f --- /dev/null +++ b/tests/wpt/web-platform-tests/mathml/presentation-markup/fractions/frac-created-dynamically-2-ref.html @@ -0,0 +1,17 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8"> + <title>mfrac created dynamically</title> + </head> + <body> + <p>This test passes if it renders the same as an invalid fraction with 3 children.</p> + <math> + <mfrac> + <mspace width="50px" height="50px" style="background: black"></mspace> + <mspace width="50px" height="50px" style="background: black"></mspace> + <mspace width="50px" height="50px" style="background: black"></mspace> + </mfrac> + </math> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/mathml/presentation-markup/fractions/frac-created-dynamically-2.html b/tests/wpt/web-platform-tests/mathml/presentation-markup/fractions/frac-created-dynamically-2.html new file mode 100644 index 00000000000..4c8b7e303bd --- /dev/null +++ b/tests/wpt/web-platform-tests/mathml/presentation-markup/fractions/frac-created-dynamically-2.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>mfrac created dynamically</title> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#mfrac"> +<meta name="assert" content="A dynamically added mfrac should render like the equivalent markup."> +<link rel="match" href="frac-created-dynamically-2-ref.html"> +<script> + window.addEventListener("DOMContentLoaded", function() { + var mfrac = document.createElementNS("http://www.w3.org/1998/Math/MathML","mfrac"); + var mspace1 = document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace"); + mspace1.setAttribute("width", "50px"); + mspace1.setAttribute("height", "50px"); + mspace1.setAttribute("style", "background: black"); + var mspace2 = document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace"); + mspace2.setAttribute("width", "50px"); + mspace2.setAttribute("height", "50px"); + mspace2.setAttribute("style", "background: black"); + var mspace3 = document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace"); + mspace3.setAttribute("width", "50px"); + mspace3.setAttribute("height", "50px"); + mspace3.setAttribute("style", "background: black"); + document.getElementsByTagName("math")[0].appendChild(mfrac); + mfrac.appendChild(mspace1); + mfrac.appendChild(mspace2); + mfrac.appendChild(mspace3); + }); +</script> +</head> +<body> + <p>This test passes if it renders the same as an invalid fraction with 3 children.</p> + <math> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/mathml/presentation-markup/fractions/frac-created-dynamically-3-ref.html b/tests/wpt/web-platform-tests/mathml/presentation-markup/fractions/frac-created-dynamically-3-ref.html new file mode 100644 index 00000000000..b274e90b9e7 --- /dev/null +++ b/tests/wpt/web-platform-tests/mathml/presentation-markup/fractions/frac-created-dynamically-3-ref.html @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8"> + <title>mfrac created dynamically</title> + </head> + <body> + <p>This test passes if you see a fraction 1/3.</p> + <math> + <mfrac> + <mi>1</mi> + <mi>3</mi> + </mfrac> + </math> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/mathml/presentation-markup/fractions/frac-created-dynamically-3.html b/tests/wpt/web-platform-tests/mathml/presentation-markup/fractions/frac-created-dynamically-3.html new file mode 100644 index 00000000000..d5079473b75 --- /dev/null +++ b/tests/wpt/web-platform-tests/mathml/presentation-markup/fractions/frac-created-dynamically-3.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>mfrac created dynamically</title> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#mfrac"> +<meta name="assert" content="A dynamically added mfrac should render like the equivalent markup."> +<link rel="match" href="frac-created-dynamically-3-ref.html"> +<script> + window.addEventListener("DOMContentLoaded", function() { + var mi3 = document.createElementNS("http://www.w3.org/1998/Math/MathML","mi"); + mi3.appendChild(document.createTextNode("3")); + document.getElementsByTagName("mfrac")[0].appendChild(mi3); + document.getElementById("mi2").remove(); + }); +</script> +</head> +<body> + <p>This test passes if you see a fraction 1/3.</p> + <math> + <mfrac> + <mi>1</mi> + <mi id="mi2">2</mi> + </mfrac> + </math> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/mathml/presentation-markup/fractions/frac-created-dynamically-ref.html b/tests/wpt/web-platform-tests/mathml/presentation-markup/fractions/frac-created-dynamically-ref.html new file mode 100644 index 00000000000..e10405c572f --- /dev/null +++ b/tests/wpt/web-platform-tests/mathml/presentation-markup/fractions/frac-created-dynamically-ref.html @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8"> + <title>mfrac created dynamically</title> + </head> + <body> + <p>This test passes if you see a fraction.</p> + <math> + <mfrac> + <mspace width="50px" height="50px" style="background: black"></mspace> + <mspace width="50px" height="50px" style="background: black"></mspace> + </mfrac> + </math> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/mathml/presentation-markup/fractions/frac-created-dynamically.html b/tests/wpt/web-platform-tests/mathml/presentation-markup/fractions/frac-created-dynamically.html new file mode 100644 index 00000000000..f6c2f2e4324 --- /dev/null +++ b/tests/wpt/web-platform-tests/mathml/presentation-markup/fractions/frac-created-dynamically.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>mfrac created dynamically</title> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#mfrac"> +<meta name="assert" content="A dynamically added mfrac should render like the equivalent markup."> +<link rel="match" href="frac-created-dynamically-ref.html"> +<script> + window.addEventListener("DOMContentLoaded", function() { + var mfrac = document.createElementNS("http://www.w3.org/1998/Math/MathML","mfrac"); + var mspace1 = document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace"); + mspace1.setAttribute("width", "50px"); + mspace1.setAttribute("height", "50px"); + mspace1.setAttribute("style", "background: black"); + var mspace2 = document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace"); + mspace2.setAttribute("width", "50px"); + mspace2.setAttribute("height", "50px"); + mspace2.setAttribute("style", "background: black"); + mfrac.appendChild(mspace1); + mfrac.appendChild(mspace2); + document.getElementsByTagName("math")[0].appendChild(mfrac); + }); +</script> +</head> +<body> + <p>This test passes if you see a fraction.</p> + <math> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/mathml/presentation-markup/spaces/mspace-children-ref.html b/tests/wpt/web-platform-tests/mathml/presentation-markup/spaces/mspace-children-ref.html new file mode 100644 index 00000000000..ae74024c2fc --- /dev/null +++ b/tests/wpt/web-platform-tests/mathml/presentation-markup/spaces/mspace-children-ref.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>space (reference)</title> +</head> +<body> + <p>Test passes if you see a green square and no text.</p> + <math><mspace width="200px" height="200px" style="background: green"></mspace></math> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/mathml/presentation-markup/spaces/mspace-children.html b/tests/wpt/web-platform-tests/mathml/presentation-markup/spaces/mspace-children.html new file mode 100644 index 00000000000..90d524ab418 --- /dev/null +++ b/tests/wpt/web-platform-tests/mathml/presentation-markup/spaces/mspace-children.html @@ -0,0 +1,13 @@ +<!DOCTYPE html> +<head> +<meta charset="utf-8"> +<title>space</title> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#mspace"> +<link rel="match" href="mspace-children-ref.html"/> +<meta name="assert" content="Verify mspace visual rendering of its children"> +</head> +<body> + <p>Test passes if you see a green square and no text.</p> + <math><mspace width="200px" height="200px" style="background: green">Text Node <mtext>x</mtext></mspace></math> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/mathml/relations/css-styling/lengths-1.html b/tests/wpt/web-platform-tests/mathml/relations/css-styling/lengths-1.html index 0e3a74d46f9..30916d5a567 100644 --- a/tests/wpt/web-platform-tests/mathml/relations/css-styling/lengths-1.html +++ b/tests/wpt/web-platform-tests/mathml/relations/css-styling/lengths-1.html @@ -68,9 +68,9 @@ <span style="top: 160px"><math><mstyle mathsize="2000%"><mspace width="1em"/></mstyle></math></span> <span style="top: 170px; width: 200px"></span> - <!-- unitless --> + <!-- unitless nonzero values should be ignored --> <span style="top: 180px"><math><mstyle mathsize="20.0"><mspace width="1em"/></mstyle></math></span> - <span style="top: 190px; width: 200px"></span> + <span style="top: 190px; width: 10px"></span> </div> <div id="green" style="position: absolute; width: 200px; height: 200px;"> @@ -110,9 +110,9 @@ <span style="top: 170px"><math><mstyle mathsize="2000%"><mspace width="1em"/></mstyle></math></span> <span style="top: 160px; width: 200px"></span> - <!-- unitless --> + <!-- unitless nonzero values should be ignored --> <span style="top: 190px"><math><mstyle mathsize="20.0"><mspace width="1em"/></mstyle></math></span> - <span style="top: 180px; width: 200px"></span> + <span style="top: 180px; width: 10px"></span> </div> </div> </body> diff --git a/tests/wpt/web-platform-tests/payment-request/PaymentRequestUpdateEvent/updateWith-call-immediate-manual.https.html b/tests/wpt/web-platform-tests/payment-request/PaymentRequestUpdateEvent/updateWith-call-immediate-manual.https.html index 28dfe1e448b..243250080bd 100644 --- a/tests/wpt/web-platform-tests/payment-request/PaymentRequestUpdateEvent/updateWith-call-immediate-manual.https.html +++ b/tests/wpt/web-platform-tests/payment-request/PaymentRequestUpdateEvent/updateWith-call-immediate-manual.https.html @@ -55,26 +55,29 @@ function testImmediateUpdate({ textContent: testName }) { const eventPromise = new Promise((resolve, reject) => { request.addEventListener( "shippingaddresschange", - async ev => { - // spin the event loop, sets [[waitForUpdate]] to true. - await Promise.resolve(); - try { - ev.updateWith(validDetails); - resolve(); // This is bad. - } catch (err) { - reject(err); // this is good. - } + ev => { + // Forces updateWith() to be run in the next event loop tick so that + // [[waitForUpdate]] is already true when it runs. + t.step_timeout(() => { + try { + ev.updateWith(validDetails); + resolve(); // This is bad. + } catch (err) { + reject(err); // this is good. + } + }); }, { once: true } ); }); - const response = await request.show(); + const acceptPromise = request.show(); await promise_rejects( t, "InvalidStateError", eventPromise, "The event loop already spun, so [[waitForUpdate]] is now true" ); + const response = await acceptPromise; await response.complete(); }, testName.trim()); } diff --git a/tests/wpt/web-platform-tests/picture-in-picture/css-selector.html b/tests/wpt/web-platform-tests/picture-in-picture/css-selector.html new file mode 100644 index 00000000000..bf64a1421f5 --- /dev/null +++ b/tests/wpt/web-platform-tests/picture-in-picture/css-selector.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<title>Test CSS selector :picture-in-picture</title> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="resources/picture-in-picture-helpers.js"></script> +<style> + video { + color: rgb(0, 0, 255); + } + :picture-in-picture { + color: rgb(0, 255, 0); + } + /* illegal selector list */ + video, :picture-in-picture(*) { + color: rgb(255, 0, 0); + } +</style> +<body></body> +<script> +promise_test(async t => { + const video = await loadVideo(); + document.body.appendChild(video); + assert_equals(getComputedStyle(video).color, 'rgb(0, 0, 255)'); + + await requestPictureInPictureWithTrustedClick(video); + assert_equals(getComputedStyle(video).color, 'rgb(0, 255, 0)'); + + await document.exitPictureInPicture(); + assert_equals(getComputedStyle(video).color, 'rgb(0, 0, 255)'); +}, 'Entering and leaving Picture-in-Picture toggles CSS selector'); +</script> diff --git a/tests/wpt/web-platform-tests/picture-in-picture/shadow-dom.html b/tests/wpt/web-platform-tests/picture-in-picture/shadow-dom.html index 2bf43746075..e2335cd5ddc 100644 --- a/tests/wpt/web-platform-tests/picture-in-picture/shadow-dom.html +++ b/tests/wpt/web-platform-tests/picture-in-picture/shadow-dom.html @@ -1,5 +1,5 @@ <!DOCTYPE html> -<title>Test for pictureInPictureElement adjustment for Shadow DOM</title> +<title>Test for Picture-In-Picture and Shadow DOM</title> <script src="/common/media.js"></script> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> @@ -7,6 +7,10 @@ <script src="/resources/testdriver-vendor.js"></script> <script src="resources/picture-in-picture-helpers.js"></script> <script src="../shadow-dom/resources/shadow-dom.js"></script> +<style> + #host2 { color: rgb(0, 0, 254); } + #host2:picture-in-picture { color: rgb(0, 0, 255); } +</style> <body> <div id='host'> <template data-mode='open' id='root'> @@ -14,8 +18,16 @@ </template> <div id='host2'> <template data-mode='open' id='root2'> + <style> + #host3 { color: rgb(0, 0, 127); } + #host3:picture-in-picture { color: rgb(0, 0, 128); } + </style> <div id='host3'> <template data-mode='open' id='root3'> + <style> + video { color: rgb(0, 254, 0); } + video:picture-in-picture { color: rgb(0, 255, 0); } + </style> <video id='video'></video> <div id='host4'> <template data-mode='open' id='root4'> @@ -45,6 +57,10 @@ promise_test(async t => { assert_equals(ids.root4.pictureInPictureElement, null); assert_equals(ids.root5.pictureInPictureElement, null); + assert_equals(getComputedStyle(ids.video).color, 'rgb(0, 254, 0)'); + assert_equals(getComputedStyle(ids.host3).color, 'rgb(0, 0, 127)'); + assert_equals(getComputedStyle(ids.host2).color, 'rgb(0, 0, 254)'); + await new Promise(resolve => { ids.video.src = getVideoURI('/media/movie_5'); ids.video.onloadeddata = resolve; @@ -57,7 +73,16 @@ promise_test(async t => { assert_equals(ids.root3.pictureInPictureElement, ids.video); assert_equals(ids.root4.pictureInPictureElement, null); assert_equals(ids.root5.pictureInPictureElement, null); + + assert_equals(getComputedStyle(ids.video).color, 'rgb(0, 255, 0)'); + assert_equals(getComputedStyle(ids.host3).color, 'rgb(0, 0, 128)'); + assert_equals(getComputedStyle(ids.host2).color, 'rgb(0, 0, 255)'); }) - .then(() => document.exitPictureInPicture()); + .then(() => document.exitPictureInPicture()) + .then(() => { + assert_equals(getComputedStyle(ids.video).color, 'rgb(0, 254, 0)'); + assert_equals(getComputedStyle(ids.host3).color, 'rgb(0, 0, 127)'); + assert_equals(getComputedStyle(ids.host2).color, 'rgb(0, 0, 254)'); + }); }); </script> diff --git a/tests/wpt/web-platform-tests/preload/dynamic-adding-preload-imagesrcset.tentative.html b/tests/wpt/web-platform-tests/preload/dynamic-adding-preload-imagesrcset.html index e1b8431d7bc..e1b8431d7bc 100644 --- a/tests/wpt/web-platform-tests/preload/dynamic-adding-preload-imagesrcset.tentative.html +++ b/tests/wpt/web-platform-tests/preload/dynamic-adding-preload-imagesrcset.html diff --git a/tests/wpt/web-platform-tests/preload/link-header-preload-srcset.tentative.html b/tests/wpt/web-platform-tests/preload/link-header-preload-imagesrcset.html index 8d057549a19..54f6252506b 100644 --- a/tests/wpt/web-platform-tests/preload/link-header-preload-srcset.tentative.html +++ b/tests/wpt/web-platform-tests/preload/link-header-preload-imagesrcset.html @@ -4,7 +4,7 @@ <script src="/resources/testharnessreport.js"></script> <script src="/preload/resources/preload_helper.js"></script> <script> - var t = async_test('Makes sure that Link headers preload images with (experimental) imagesrcset/imagesizes attributes.'); + var t = async_test('Makes sure that Link headers preload images with imagesrcset/imagesizes attributes.'); </script> <body> <script> diff --git a/tests/wpt/web-platform-tests/preload/link-header-preload-srcset.tentative.html.headers b/tests/wpt/web-platform-tests/preload/link-header-preload-imagesrcset.html.headers index 906de0c95ae..906de0c95ae 100644 --- a/tests/wpt/web-platform-tests/preload/link-header-preload-srcset.tentative.html.headers +++ b/tests/wpt/web-platform-tests/preload/link-header-preload-imagesrcset.html.headers diff --git a/tests/wpt/web-platform-tests/resources/.gitignore b/tests/wpt/web-platform-tests/resources/.gitignore deleted file mode 100644 index 04fdeda1cc4..00000000000 --- a/tests/wpt/web-platform-tests/resources/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -ROBIN-TODO.txt -scratch -node_modules diff --git a/tests/wpt/web-platform-tests/screen-orientation/active-lock.html b/tests/wpt/web-platform-tests/screen-orientation/active-lock.html new file mode 100644 index 00000000000..84fb603eaeb --- /dev/null +++ b/tests/wpt/web-platform-tests/screen-orientation/active-lock.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> +<p id="#fragment"></p> +<script> + promise_test(async t => { + await test_driver.bless("request full screen", () => { + return document.documentElement.requestFullscreen(); + }); + const fragment = document.createElement("p"); + fragment.id = "fragment"; + document.body.appendChild(fragment); + const { type: preType } = screen.orientation; + const isPortrait = preType.startsWith("portrait"); + const newType = `${isPortrait ? "landscape" : "portrait"}-primary`; + const p = screen.orientation.lock(newType); + screen.orientation.onchange = t.unreached_func( + "change event must not fire" + ); + window.location.href = "#fragment"; + await p; + }, "When performing a fragment navigation, the orientation must not change or unlock"); +</script> diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/html-elements-in-shadow-trees/html-forms/test-003.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/html-elements-in-shadow-trees/html-forms/test-003.html index e1c64e64151..b795fc38f9c 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/html-elements-in-shadow-trees/html-forms/test-003.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/html-elements-in-shadow-trees/html-forms/test-003.html @@ -51,7 +51,6 @@ A_08_02_03_T01.step(function () { iframe.src = '../../resources/blank.html'; iframe.setAttribute('name', 'targetIframe'); - d.body.appendChild(iframe); // create form var form = d.createElement('form'); @@ -77,11 +76,13 @@ A_08_02_03_T01.step(function () { input2.setAttribute('value', 'value2'); s.appendChild(input2); - // submit the form - form.submit(); - - // set timeout to give the iframe time to load content - setTimeout(checkIframeContent, 2000); + // Wait for the first 'load' event for blank.html. + iframe.onload = A_08_02_03_T01.step_func(() => { + // Wait for the second 'load' event for the submission. + iframe.onload = checkIframeContent; + form.submit(); + }); + d.body.appendChild(iframe); }); </script> </body> diff --git a/tests/wpt/web-platform-tests/svg/embedded/image-embedding-svg-viewref-with-viewbox.svg b/tests/wpt/web-platform-tests/svg/embedded/image-embedding-svg-viewref-with-viewbox.svg new file mode 100644 index 00000000000..6340c19d2a0 --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/embedded/image-embedding-svg-viewref-with-viewbox.svg @@ -0,0 +1,14 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:h="http://www.w3.org/1999/xhtml"> + <title><image> referencing SVG image with <view> with 'viewBox'</title> + <h:link rel="help" href="https://svgwg.org/svg2-draft/embedded.html#ImageElement"/> + <h:link rel="help" href="https://svgwg.org/svg2-draft/linking.html#LinksIntoSVG"/> + <h:link rel="match" href="reference/green-rect-100x100.svg"/> + <rect x="-355" y="-1110" width="455" height="1210" fill="red"/> + <image preserveAspectRatio="none" x="-355" y="-1110" width="455" height="1210" + xlink:href="data:image/svg+xml, + %3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 2317 2320'%3e + %3cview id='view' preserveAspectRatio='none' viewBox='0 0 455 1210'/%3e + %3crect width='455' height='1210' fill='green'/%3e + %3c/svg%3e#view"/> +</svg> diff --git a/tests/wpt/web-platform-tests/tools/ci/action_manifest_build.sh b/tests/wpt/web-platform-tests/tools/ci/action_manifest_build.sh new file mode 100755 index 00000000000..ad6a4cb16e7 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/ci/action_manifest_build.sh @@ -0,0 +1,11 @@ +#!/bin/bash +set -ex + +mkdir -p ~/meta + +WPT_MANIFEST_FILE=~/meta/MANIFEST.json + +./wpt manifest -p $WPT_MANIFEST_FILE +gzip -k -f --best $WPT_MANIFEST_FILE +bzip2 -k -f --best $WPT_MANIFEST_FILE +zstd -k -f --ultra -22 $WPT_MANIFEST_FILE diff --git a/tests/wpt/web-platform-tests/tools/ci/azure/fyi_hook.yml b/tests/wpt/web-platform-tests/tools/ci/azure/fyi_hook.yml index 5af16af31bc..3d23da3bb74 100644 --- a/tests/wpt/web-platform-tests/tools/ci/azure/fyi_hook.yml +++ b/tests/wpt/web-platform-tests/tools/ci/azure/fyi_hook.yml @@ -12,6 +12,7 @@ jobs: pool: vmImage: 'ubuntu-16.04' steps: + - checkout: none - script: curl -f -s -S -d "artifact=${{ parameters.artifactName }}" -X POST https://wpt.fyi/api/checks/azure/$(Build.BuildId) displayName: 'Invoke wpt.fyi hook' - script: curl -f -s -S -d "artifact=${{ parameters.artifactName }}" -X POST https://staging.wpt.fyi/api/checks/azure/$(Build.BuildId) diff --git a/tests/wpt/web-platform-tests/tools/ci/azure/install_safari.yml b/tests/wpt/web-platform-tests/tools/ci/azure/install_safari.yml index 3329190a13c..88381085665 100644 --- a/tests/wpt/web-platform-tests/tools/ci/azure/install_safari.yml +++ b/tests/wpt/web-platform-tests/tools/ci/azure/install_safari.yml @@ -1,9 +1,19 @@ +parameters: + channel: preview + steps: -- script: | - # This is equivalent to `Homebrew/homebrew-cask-versions/safari-technology-preview`, - # but the raw URL is used to bypass caching. - HOMEBREW_NO_AUTO_UPDATE=1 brew cask install https://raw.githubusercontent.com/Homebrew/homebrew-cask-versions/master/Casks/safari-technology-preview.rb - # https://web-platform-tests.org/running-tests/safari.html - sudo "/Applications/Safari Technology Preview.app/Contents/MacOS/safaridriver" --enable - defaults write com.apple.Safari WebKitJavaScriptCanOpenWindowsAutomatically 1 - displayName: 'Install Safari Technology Preview' +- ${{ if eq(parameters.channel, 'preview') }}: + - script: | + # This is equivalent to `Homebrew/homebrew-cask-versions/safari-technology-preview`, + # but the raw URL is used to bypass caching. + HOMEBREW_NO_AUTO_UPDATE=1 brew cask install https://raw.githubusercontent.com/Homebrew/homebrew-cask-versions/master/Casks/safari-technology-preview.rb + # https://web-platform-tests.org/running-tests/safari.html + sudo "/Applications/Safari Technology Preview.app/Contents/MacOS/safaridriver" --enable + defaults write com.apple.Safari WebKitJavaScriptCanOpenWindowsAutomatically 1 + displayName: 'Install Safari Technology Preview' +- ${{ if eq(parameters.channel, 'stable') }}: + - script: | + # https://web-platform-tests.org/running-tests/safari.html + sudo safaridriver --enable + defaults write com.apple.Safari WebKitJavaScriptCanOpenWindowsAutomatically 1 + displayName: 'Configure Safari' diff --git a/tests/wpt/web-platform-tests/tools/ci/before_install.sh b/tests/wpt/web-platform-tests/tools/ci/before_install.sh deleted file mode 100755 index cde1879211b..00000000000 --- a/tests/wpt/web-platform-tests/tools/ci/before_install.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash -set -e - -export GITHUB_PULL_REQUEST=$TRAVIS_PULL_REQUEST -export GITHUB_BRANCH=$TRAVIS_BRANCH - -if [[ $RUN_JOB -eq 1 ]] || ./wpt test-jobs --includes $JOB; then - export RUN_JOB=1 - git submodule update --init --recursive 1>&2 - export DISPLAY=:99.0 - sh -e /etc/init.d/xvfb start 1>&2 - # For uploading the manifest - export WPT_MANIFEST_FILE=$HOME/meta/MANIFEST-$(git rev-parse HEAD).json -else - export RUN_JOB=0 -fi diff --git a/tests/wpt/web-platform-tests/tools/ci/ci_manifest.sh b/tests/wpt/web-platform-tests/tools/ci/ci_manifest.sh deleted file mode 100755 index 7d0d5ca0418..00000000000 --- a/tests/wpt/web-platform-tests/tools/ci/ci_manifest.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash -set -ex - -SCRIPT_DIR=$(cd $(dirname "$0") && pwd -P) -WPT_ROOT=$SCRIPT_DIR/../.. -cd $WPT_ROOT - -mkdir -p ~/meta - -python tools/ci/tag_master.py -./wpt manifest -p ~/meta/MANIFEST.json -cp ~/meta/MANIFEST.json $WPT_MANIFEST_FILE -# Force overwrite of any existing file -gzip -f $WPT_MANIFEST_FILE diff --git a/tests/wpt/web-platform-tests/tools/ci/install.sh b/tests/wpt/web-platform-tests/tools/ci/install.sh deleted file mode 100755 index f91a24c88e0..00000000000 --- a/tests/wpt/web-platform-tests/tools/ci/install.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash -set -ex - -SCRIPT_DIR=$(cd $(dirname "$0") && pwd -P) -WPT_ROOT=$SCRIPT_DIR/../.. -cd $WPT_ROOT - -if [[ $RUN_JOB -eq 1 ]]; then - pip install -U setuptools - pip install -U requests -fi diff --git a/tests/wpt/web-platform-tests/tools/ci/run.sh b/tests/wpt/web-platform-tests/tools/ci/run.sh deleted file mode 100755 index 5af38d0b56c..00000000000 --- a/tests/wpt/web-platform-tests/tools/ci/run.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash -set -ex - -SCRIPT_DIR=$(cd $(dirname "$0") && pwd -P) -WPT_ROOT=$SCRIPT_DIR/../.. -cd $WPT_ROOT - -if [[ $RUN_JOB -eq 1 ]]; then - $SCRIPT -fi diff --git a/tests/wpt/web-platform-tests/tools/ci/run_tc.py b/tests/wpt/web-platform-tests/tools/ci/run_tc.py index cb4d6ae5fdc..32eef7cb69c 100755 --- a/tests/wpt/web-platform-tests/tools/ci/run_tc.py +++ b/tests/wpt/web-platform-tests/tools/ci/run_tc.py @@ -117,7 +117,7 @@ def make_hosts_file(): def checkout_revision(rev): - subprocess.check_call(["git", "checkout", "-q", rev]) + subprocess.check_call(["git", "checkout", "--quiet", rev]) def install_chrome(channel): @@ -135,8 +135,8 @@ def install_chrome(channel): with open(dest, "w") as f: f.write(resp.read()) - subprocess.check_call(["sudo", "apt-get", "-qqy", "update"]) - subprocess.check_call(["sudo", "gdebi", "-n", "/tmp/%s" % deb_archive]) + run(["sudo", "apt-get", "-qqy", "update"]) + run(["sudo", "gdebi", "-qn", "/tmp/%s" % deb_archive]) def start_xvfb(): @@ -191,9 +191,9 @@ def set_variables(event): def include_job(job): - # Special case things that unconditionally run on master + # Special case things that unconditionally run on pushes, + # assuming a higher layer is filtering the required list of branches if (os.environ["GITHUB_PULL_REQUEST"] == "false" and - os.environ["GITHUB_BRANCH"] == "master" and job == "run-all"): return True @@ -221,6 +221,27 @@ def setup_environment(args): checkout_revision(args.checkout) +def setup_repository(): + if os.environ.get("GITHUB_PULL_REQUEST", "false") != "false": + parents = run(["git", "show", "--format=%P", "task_head"], return_stdout=True).strip().split() + if len(parents) == 2: + base_head = parents[0] + pr_head = parents[1] + + run(["git", "branch", "base_head", base_head]) + run(["git", "branch", "pr_head", pr_head]) + else: + print("ERROR: Pull request HEAD wasn't a 2-parent merge commit; " + "expected to test the merge of PR into the base") + sys.exit(1) + + branch = os.environ.get("GITHUB_BRANCH") + if branch: + # Ensure that the remote base branch exists + # TODO: move this somewhere earlier in the task + run(["git", "fetch", "--quiet", "origin", "%s:%s" % (branch, branch)]) + + def main(): args = get_parser().parse_args() try: @@ -233,11 +254,7 @@ def main(): if event: set_variables(event) - if os.environ.get("GITHUB_BRANCH"): - # Ensure that the remote base branch exists - # TODO: move this somewhere earlier in the task - run(["git", "fetch", "origin", "%s:%s" % (os.environ["GITHUB_BRANCH"], - os.environ["GITHUB_BRANCH"])]) + setup_repository() extra_jobs = get_extra_jobs(event) @@ -260,7 +277,7 @@ def main(): setup_environment(args) os.chdir(root) cmd = [args.script] + args.script_args - print(cmd) + print(" ".join(cmd)) sys.exit(subprocess.call(cmd)) diff --git a/tests/wpt/web-platform-tests/tools/ci/start.sh b/tests/wpt/web-platform-tests/tools/ci/start.sh deleted file mode 100644 index 18e2784e6cd..00000000000 --- a/tests/wpt/web-platform-tests/tools/ci/start.sh +++ /dev/null @@ -1 +0,0 @@ -# Contents of this script superceeded by tools/ci/run_tc.py diff --git a/tests/wpt/web-platform-tests/tools/ci/tag_master.py b/tests/wpt/web-platform-tests/tools/ci/tag_master.py index 0ae2801dfe7..d672d13fe23 100644 --- a/tests/wpt/web-platform-tests/tools/ci/tag_master.py +++ b/tests/wpt/web-platform-tests/tools/ci/tag_master.py @@ -1,9 +1,9 @@ -import base64 import json import logging import os import sys -import urllib2 + +import requests here = os.path.abspath(os.path.dirname(__file__)) wpt_root = os.path.abspath(os.path.join(here, os.pardir, os.pardir)) @@ -17,26 +17,54 @@ logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) -def get_pr(owner, repo, sha): - url = ("https://api.github.com/search/issues?q=type:pr+is:merged+repo:%s/%s+sha:%s" % - (owner, repo, sha)) +def request(url, desc, data=None, json_data=None, params=None, headers=None): + github_token = os.environ.get("GITHUB_TOKEN") + default_headers = { + "Authorization": "token %s" % github_token, + "Accept": "application/vnd.github.machine-man-preview+json" + } + + _headers = default_headers + if headers is not None: + _headers.update(headers) + + kwargs = {"params": params, + "headers": _headers} try: - resp = urllib2.urlopen(url) - body = resp.read() + logger.info("Loading URL %s" % url) + if json_data is not None or data is not None: + method = requests.post + kwargs["json"] = json_data + kwargs["data"] = data + else: + method = requests.get + + resp = method(url, **kwargs) + except Exception as e: - logger.error(e) + logger.error("%s failed:\n%s" % (desc, e)) return None - if resp.code != 200: - logger.error("Got HTTP status %s. Response:" % resp.code) - logger.error(body) + try: + resp.raise_for_status() + except requests.HTTPError: + logger.error("%s failed: Got HTTP status %s. Response:" % + (desc, resp.status_code)) + logger.error(resp.text) return None try: - data = json.loads(body) + return resp.json() except ValueError: - logger.error("Failed to read response as JSON:") - logger.error(body) + logger.error("%s failed: Returned data was not JSON Response:" % + (desc, resp.status_code)) + logger.error(resp.text) + + +def get_pr(owner, repo, sha): + data = request("https://api.github.com/search/issues?q=type:pr+is:merged+repo:%s/%s+sha:%s" % + (owner, repo, sha), "Getting PR") + if data is None: return None items = data["items"] @@ -52,50 +80,98 @@ def get_pr(owner, repo, sha): def tag(owner, repo, sha, tag): - data = json.dumps({"ref": "refs/tags/%s" % tag, - "sha": sha}) - try: - url = "https://api.github.com/repos/%s/%s/git/refs" % (owner, repo) - req = urllib2.Request(url, data=data) + data = {"ref": "refs/tags/%s" % tag, + "sha": sha} + url = "https://api.github.com/repos/%s/%s/git/refs" % (owner, repo) - base64string = base64.b64encode(os.environ["GH_TOKEN"]) - req.add_header("Authorization", "Basic %s" % base64string) + resp_data = request(url, "Tag creation", json_data=data) + if not resp_data: + return False - opener = urllib2.build_opener(urllib2.HTTPSHandler()) + logger.info("Tagged %s as %s" % (sha, tag)) + return True - resp = opener.open(req) - except Exception as e: - logger.error("Tag creation failed:\n%s" % e) - return False - if resp.code != 201: - logger.error("Got HTTP status %s. Response:" % resp.code) - logger.error(resp.read()) +def create_release(owner, repo, sha, tag, summary, body): + if body: + body = "%s\n%s" % (summary, body) + else: + body = summary + + create_url = "https://api.github.com/repos/%s/%s/releases" % (owner, repo) + create_data = {"tag_name": tag, + "name": tag, + "body": body} + create_data = request(create_url, "Release creation", json_data=create_data) + if not create_data: return False - logger.info("Tagged %s as %s" % (sha, tag)) + # Upload URL contains '{?name,label}' at the end which we want to remove + upload_url = create_data["upload_url"].split("{", 1)[0] + + success = True + + upload_exts = [".gz", ".bz2", ".zst"] + for upload_ext in upload_exts: + upload_filename = "MANIFEST-%s.json%s" % (sha, upload_ext) + params = {"name": upload_filename, + "label": "MANIFEST.json%s" % upload_ext} + + with open(os.path.expanduser("~/meta/MANIFEST.json%s" % upload_ext), "rb") as f: + upload_data = f.read() + + logger.info("Uploading %s bytes" % len(upload_data)) + + upload_resp = request(upload_url, "Manifest upload", data=upload_data, params=params, + headers={'Content-Type': 'application/octet-stream'}) + if not upload_resp: + success = False + + return success + + +def should_run_action(): + with open(os.environ["GITHUB_EVENT_PATH"]) as f: + event = json.load(f) + logger.info(json.dumps(event, indent=2)) + + if "pull_request" in event: + logger.info("Not tagging for PR") + return False + if event.get("ref") != "refs/heads/master": + logger.info("Not tagging for ref %s" % event.get("ref")) + return False return True def main(): - owner, repo = os.environ["TRAVIS_REPO_SLUG"].split("/", 1) - if os.environ["TRAVIS_PULL_REQUEST"] != "false": - logger.info("Not tagging for PR") - return - if os.environ["TRAVIS_BRANCH"] != "master": - logger.info("Not tagging for non-master branch") + repo_key = "GITHUB_REPOSITORY" + + if not should_run_action(): return + owner, repo = os.environ[repo_key].split("/", 1) + git = get_git_cmd(wpt_root) head_rev = git("rev-parse", "HEAD") pr = get_pr(owner, repo, head_rev) if pr is None: - sys.exit(1) - tagged = tag(owner, repo, head_rev, "merge_pr_%s" % pr) + # This should only really happen during testing + tag_name = "merge_commit_%s" % head_rev + else: + tag_name = "merge_pr_%s" % pr + + tagged = tag(owner, repo, head_rev, tag_name) if not tagged: sys.exit(1) + summary = git("show", "--no-patch", '--format="%s"', "HEAD") + body = git("show", "--no-patch", '--format="%b"', "HEAD") + + if not create_release(owner, repo, head_rev, tag_name, summary, body): + sys.exit(1) + if __name__ == "__main__": main() diff --git a/tests/wpt/web-platform-tests/tools/docker/github/Dockerfile b/tests/wpt/web-platform-tests/tools/docker/github/Dockerfile new file mode 100644 index 00000000000..22d47f3e5fa --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/docker/github/Dockerfile @@ -0,0 +1,29 @@ +FROM ubuntu:18.04 + +# No interactive frontend during docker build +ENV DEBIAN_FRONTEND=noninteractive \ + DEBCONF_NONINTERACTIVE_SEEN=true + +RUN apt-get -qqy update \ + && apt-get -qqy install \ + bzip2 \ + git \ + locales \ + python \ + python-pip \ + tzdata \ + zstd + +RUN pip install --upgrade pip +RUN pip install virtualenv +RUN pip install requests + +ENV TZ "UTC" +RUN echo "${TZ}" > /etc/timezone \ + && dpkg-reconfigure --frontend noninteractive tzdata + +# Set the locale +RUN locale-gen en_US.UTF-8 +ENV LANG en_US.UTF-8 +ENV LANGUAGE en_US:en +ENV LC_ALL en_US.UTF-8 diff --git a/tests/wpt/web-platform-tests/tools/docker/start.sh b/tests/wpt/web-platform-tests/tools/docker/start.sh index 0675a0af2da..b1ff4a7faa5 100755 --- a/tests/wpt/web-platform-tests/tools/docker/start.sh +++ b/tests/wpt/web-platform-tests/tools/docker/start.sh @@ -14,9 +14,6 @@ set -ex REMOTE=${1:-https://github.com/web-platform-tests/wpt} REF=${2:-master} -REVISION=${3:-FETCH_HEAD} -BROWSER=${4:-all} -CHANNEL=${5:-nightly} cd ~ @@ -27,15 +24,6 @@ git init git remote add origin ${REMOTE} # Initially we just fetch 50 commits in order to save several minutes of fetching -retry git fetch --quiet --depth=50 --tags origin ${REF} - -if [[ ! `git rev-parse --verify -q ${REVISION}` ]]; -then - # But if for some reason the commit under test isn't in that range, we give in and - # fetch everything - retry git fetch -q --unshallow ${REMOTE} - git rev-parse --verify ${REVISION} -fi -git checkout -b build ${REVISION} - -source tools/ci/start.sh +retry git fetch --quiet --depth=50 --tags origin ${REF}:task_head + +git checkout --quiet task_head diff --git a/tests/wpt/web-platform-tests/tools/lint/lint.py b/tests/wpt/web-platform-tests/tools/lint/lint.py index 9976314c8fb..b07dbcbeb92 100644 --- a/tests/wpt/web-platform-tests/tools/lint/lint.py +++ b/tests/wpt/web-platform-tests/tools/lint/lint.py @@ -134,6 +134,28 @@ def check_worker_collision(repo_root, path): return [] +def check_gitignore_file(repo_root, path): + if not path.endswith(".gitignore"): + return [] + + path_parts = path.split(os.path.sep) + if len(path_parts) == 1: + return [] + + if path_parts[-1] != ".gitignore": + return [] + + if (path_parts[0] in ["tools", "docs"] or + path_parts[:2] == ["resources", "webidl2"] or + path_parts[:3] == ["css", "tools", "apiclient"]): + return [] + + return [("GITIGNORE", + ".gitignore found outside the root", + path, + None)] + + def check_ahem_copy(repo_root, path): lpath = path.lower() if "ahem" in lpath and lpath.endswith(".ttf"): @@ -908,7 +930,7 @@ def lint(repo_root, paths, output_format): logger.info(line) return sum(itervalues(error_count)) -path_lints = [check_path_length, check_worker_collision, check_ahem_copy] +path_lints = [check_path_length, check_worker_collision, check_ahem_copy, check_gitignore_file] all_paths_lints = [check_css_globally_unique] file_lints = [check_regexp_line, check_parsed, check_python_ast, check_script_metadata] diff --git a/tests/wpt/web-platform-tests/tools/wpt/run.py b/tests/wpt/web-platform-tests/tools/wpt/run.py index 1178c5a3f6d..0ffc779d933 100644 --- a/tests/wpt/web-platform-tests/tools/wpt/run.py +++ b/tests/wpt/web-platform-tests/tools/wpt/run.py @@ -568,8 +568,12 @@ def setup_wptrunner(venv, prompt=True, install_browser=False, **kwargs): if not venv.skip_virtualenv_setup: venv.install_requirements(os.path.join(wptrunner_path, "requirements.txt")) - kwargs['browser_version'] = setup_cls.browser.version(binary=kwargs.get("binary"), - webdriver_binary=kwargs.get("webdriver_binary")) + # Only update browser_version if it was not given as a command line + # argument, so that it can be overridden on the command line. + if not kwargs["browser_version"]: + kwargs["browser_version"] = setup_cls.browser.version(binary=kwargs.get("binary"), + webdriver_binary=kwargs.get("webdriver_binary")) + return kwargs diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_chrome.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_chrome.txt index 1bf6ef32ad4..470aaf9a939 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_chrome.txt +++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_chrome.txt @@ -1,2 +1 @@ mozprocess==1.0.0 -selenium==3.141.0 diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_safari.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_safari.txt index 1bf6ef32ad4..470aaf9a939 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_safari.txt +++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_safari.txt @@ -1,2 +1 @@ mozprocess==1.0.0 -selenium==3.141.0 diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/edge.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/edge.py index 25309617ad0..027c8f87d49 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/edge.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/edge.py @@ -1,4 +1,5 @@ from __future__ import print_function +import subprocess from .base import Browser, ExecutorBrowser, require_arg from ..webdriver_server import EdgeDriverServer from ..executors import executor_kwargs as base_executor_kwargs @@ -16,6 +17,7 @@ __wptrunner__ = {"product": "edge", "executor_kwargs": "executor_kwargs", "env_extras": "env_extras", "env_options": "env_options", + "run_info_extras": "run_info_extras", "timeout_multiplier": "get_timeout_multiplier"} @@ -97,3 +99,17 @@ class EdgeBrowser(Browser): def executor_browser(self): return ExecutorBrowser, {"webdriver_url": self.server.url} + + +def run_info_extras(**kwargs): + osReleaseCommand = "(Get-ItemProperty 'HKLM:\Software\Microsoft\Windows NT\CurrentVersion').ReleaseId" + osBuildCommand = "(Get-ItemProperty 'HKLM:\Software\Microsoft\Windows NT\CurrentVersion').BuildLabEx" + try: + os_release = subprocess.check_output(["powershell.exe", osReleaseCommand]).strip() + os_build = subprocess.check_output(["powershell.exe", osBuildCommand]).strip() + except (subprocess.CalledProcessError, OSError): + return {} + + rv = {"os_build": os_build, + "os_release": os_release} + return rv diff --git a/tests/wpt/web-platform-tests/visual-viewport/viewport-scrollbars-cause-resize.html b/tests/wpt/web-platform-tests/visual-viewport/viewport-scrollbars-cause-resize.html index d0158c6f625..2767fcc48a3 100644 --- a/tests/wpt/web-platform-tests/visual-viewport/viewport-scrollbars-cause-resize.html +++ b/tests/wpt/web-platform-tests/visual-viewport/viewport-scrollbars-cause-resize.html @@ -15,6 +15,8 @@ scrollbars will cause a resize event to be fired at window.visualViewport. </h4> <script> + setup({ explicit_done: true }); + function runTest() { var scrollbarThickness = calculateScrollbarThickness(); @@ -59,7 +61,13 @@ // Run the test after load to make sure any resize from a previous test // doesn't interfere. - window.onload = runTest; + window.onload = function() { + try { + runTest(); + } finally { + done(); + } + }; </script> <div id="log"></div> </body> diff --git a/tests/wpt/web-platform-tests/webaudio/.gitignore b/tests/wpt/web-platform-tests/webaudio/.gitignore deleted file mode 100644 index 068fd1ef066..00000000000 --- a/tests/wpt/web-platform-tests/webaudio/.gitignore +++ /dev/null @@ -1 +0,0 @@ -idl/*
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-connectionState.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-connectionState.https.html index a461bf16997..9ed5808727a 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-connectionState.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-connectionState.https.html @@ -234,4 +234,40 @@ closed The RTCIceTransport has shut down and is no longer responding to STUN requests. */ + promise_test(async t => { + const caller = new RTCPeerConnection(); + t.add_cleanup(() => caller.close()); + const callee = new RTCPeerConnection(); + t.add_cleanup(() => callee.close()); + const stream = await navigator.mediaDevices.getUserMedia({audio: true}); + t.add_cleanup(() => stream.getTracks().forEach(track => track.stop())); + const [track] = stream.getTracks(); + caller.addTrack(track, stream); + + await doSignalingHandshake(caller, callee); + + assert_equals(caller.iceConnectionState, 'new'); + assert_equals(callee.iceConnectionState, 'new'); + }, 'connectionState remains new when not adding remote ice candidates'); + + promise_test(async t => { + + const caller = new RTCPeerConnection(); + t.add_cleanup(() => caller.close()); + const callee = new RTCPeerConnection(); + t.add_cleanup(() => callee.close()); + const stream = await navigator.mediaDevices.getUserMedia({audio: true}); + t.add_cleanup(() => stream.getTracks().forEach(track => track.stop())); + const [track] = stream.getTracks(); + caller.addTrack(track, stream); + + const states = []; + caller.addEventListener('connectionstatechange', () => states.push(caller.connectionState)); + exchangeIceCandidates(caller, callee); + await doSignalingHandshake(caller, callee); + + await listenToConnected(caller); + + assert_array_equals(states, ['connecting', 'connected']); + }, 'connectionState transitions to connected via connecting'); </script> diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-helper.js b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-helper.js index 310f028c605..90867b24fda 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-helper.js +++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-helper.js @@ -217,10 +217,10 @@ function listenToIceConnected(pc) { resolve(); return; } - pc.oniceconnectionstatechange = () => { + pc.addEventListener('iceconnectionstatechange', () => { if (isConnected(pc)) resolve(); - }; + }); }); } diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html index 768da23ddbf..8acabf49766 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html @@ -148,21 +148,21 @@ async_test(t => { const { iceConnectionState } = pc1; if(iceConnectionState === 'checking') { - const iceTransport = pc1.sctp.transport.iceTransport; + const iceTransport = pc1.sctp.transport.transport; assert_equals(iceTransport.state, 'checking', 'Expect ICE transport to be in checking state when' + ' iceConnectionState is checking'); } else if(iceConnectionState === 'connected') { - const iceTransport = pc1.sctp.transport.iceTransport; + const iceTransport = pc1.sctp.transport.transport; assert_equals(iceTransport.state, 'connected', 'Expect ICE transport to be in connected state when' + ' iceConnectionState is connected'); } else if(iceConnectionState === 'completed') { - const iceTransport = pc1.sctp.transport.iceTransport; + const iceTransport = pc1.sctp.transport.transport; assert_equals(iceTransport.state, 'completed', 'Expect ICE transport to be in connected state when' + diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-iceGatheringState.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-iceGatheringState.html index e170e4a2f87..e6d8d062701 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-iceGatheringState.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-iceGatheringState.html @@ -108,13 +108,13 @@ const { iceGatheringState } = pc2; if(iceGatheringState === 'gathering') { - const iceTransport = pc2.sctp.transport.iceTransport; + const iceTransport = pc2.sctp.transport.transport; assert_equals(iceTransport.gatheringState, 'gathering', 'Expect ICE transport to be in checking gatheringState when iceGatheringState is checking'); } else if(iceGatheringState === 'complete') { - const iceTransport = pc2.sctp.transport.iceTransport; + const iceTransport = pc2.sctp.transport.transport; assert_equals(iceTransport.gatheringState, 'complete', 'Expect ICE transport to be in complete gatheringState when iceGatheringState is complete'); diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setLocalDescription-answer.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setLocalDescription-answer.html index b783d854738..e8b3ef5071e 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setLocalDescription-answer.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setLocalDescription-answer.html @@ -171,4 +171,19 @@ pc.setLocalDescription(answer))); }, 'Calling setLocalDescription(answer) from have-local-offer state should reject with InvalidStateError'); + promise_test(async t => { + const pc1 = new RTCPeerConnection(); + t.add_cleanup(() => pc1.close()); + const pc2 = new RTCPeerConnection(); + t.add_cleanup(() => pc2.close()); + + const offer = await pc1.createOffer({offerToReceiveAudio: true}); + await pc2.setRemoteDescription(offer); + const answer = await pc2.createAnswer(); // [[LastAnswer]] slot set + await pc2.setRemoteDescription({type: "rollback"}); + await pc2.createOffer({offerToReceiveVideo: true}); // [[LastOffer]] slot set + await pc2.setRemoteDescription(offer); + await pc2.setLocalDescription(answer); // Should check against [[LastAnswer]], not [[LastOffer]] + }, "Setting previously generated answer after a call to createOffer should work"); + </script> diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setLocalDescription-offer.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setLocalDescription-offer.html index 41662f3158f..31c85227a85 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setLocalDescription-offer.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setLocalDescription-offer.html @@ -157,4 +157,18 @@ })))); }, 'Creating and setting offer multiple times should succeed'); + promise_test(async t => { + const pc1 = new RTCPeerConnection(); + t.add_cleanup(() => pc1.close()); + const pc2 = new RTCPeerConnection(); + t.add_cleanup(() => pc2.close()); + + const offer = await pc1.createOffer({offerToReceiveAudio: true}); // [[LastOffer]] set + const offer2 = await pc2.createOffer({offerToReceiveVideo: true}); + await pc1.setRemoteDescription(offer2); + await pc1.createAnswer(); // [[LastAnswer]] set + await pc1.setRemoteDescription({type: "rollback"}); + await pc1.setLocalDescription(offer); + }, "Setting previously generated offer after a call to createAnswer should work"); + </script> diff --git a/tests/wpt/web-platform-tests/webrtc/idlharness.https.window.js b/tests/wpt/web-platform-tests/webrtc/idlharness.https.window.js index 6e9b7e9afa2..66abc25b084 100644 --- a/tests/wpt/web-platform-tests/webrtc/idlharness.https.window.js +++ b/tests/wpt/web-platform-tests/webrtc/idlharness.https.window.js @@ -102,7 +102,7 @@ function asyncInit() { idl_test( ['webrtc'], - ['mediacapture-streams', 'dom'], + ['mediacapture-streams', 'dom', 'html'], async idlArray => { idlArray.add_objects({ RTCPeerConnection: [`new RTCPeerConnection()`], diff --git a/tests/wpt/web-platform-tests/webrtc/protocol/simulcast-answer.html b/tests/wpt/web-platform-tests/webrtc/protocol/simulcast-answer.html new file mode 100644 index 00000000000..b5e8792409f --- /dev/null +++ b/tests/wpt/web-platform-tests/webrtc/protocol/simulcast-answer.html @@ -0,0 +1,62 @@ +<!doctype html> +<meta charset=utf-8> +<title>RTCPeerConnection Simulcast Answer</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +'use strict'; + +// Tests for the construction of answers with simulcast according to: +// draft-ietf-mmusic-sdp-simulcast-13 +// draft-ietf-mmusic-rid-15 +promise_test(async t => { + const pc = new RTCPeerConnection(); + t.add_cleanup(() => pc.close()); + const expected_rids = ['foo', 'bar', 'baz']; + + const offer_sdp = `v=0 +o=- 3840232462471583827 2 IN IP4 127.0.0.1 +s=- +t=0 0 +a=group:BUNDLE 0 +a=msid-semantic: WMS +m=video 9 UDP/TLS/RTP/SAVPF 96 +c=IN IP4 0.0.0.0 +a=rtcp:9 IN IP4 0.0.0.0 +a=ice-ufrag:Li6+ +a=ice-pwd:3C05CTZBRQVmGCAq7hVasHlT +a=ice-options:trickle +a=fingerprint:sha-256 5B:D3:8E:66:0E:7D:D3:F3:8E:E6:80:28:19:FC:55:AD:58:5D:B9:3D:A8:DE:45:4A:E7:87:02:F8:3C:0B:3B:B3 +a=setup:actpass +a=mid:0 +a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id +a=recvonly +a=rtcp-mux +a=rtpmap:96 VP8/90000 +a=rtcp-fb:96 goog-remb +a=rtcp-fb:96 transport-cc +a=rtcp-fb:96 ccm fir +a=rid:foo send +a=rid:bar send +a=rid:baz send +a=simulcast:recv foo;bar;baz +`; + + await pc.setRemoteDescription({type: 'offer', sdp: offer_sdp}); + const transceiver = pc.getTransceivers()[0]; + // The created transceiver should be in "recvonly" state. Allow it to send. + transceiver.direction = "sendonly"; + const answer = await pc.createAnswer(); + let answer_lines = answer.sdp.split('\r\n'); + // Check for a RID line for each layer. + for (const rid of expected_rids) { + let result = answer_lines.find(line => line.startsWith(`a=rid:${rid}`)); + assert_not_equals(result, undefined, `RID attribute for '${rid}' missing.`); + } + + // Check for simulcast attribute with send direction and all RIDs. + let result = answer_lines.find( + line => line.startsWith(`a=simulcast:send ${expected_rids.join(';')}`)); + assert_not_equals(result, undefined, "Could not find simulcast attribute."); +}, 'createOffer() with multiple send encodings should create simulcast offer'); +</script> diff --git a/tests/wpt/web-platform-tests/xhr/abort-after-stop.htm b/tests/wpt/web-platform-tests/xhr/abort-after-stop.htm index d28d046fa98..8aa18a681d3 100644 --- a/tests/wpt/web-platform-tests/xhr/abort-after-stop.htm +++ b/tests/wpt/web-platform-tests/xhr/abort-after-stop.htm @@ -17,6 +17,7 @@ client.onabort = test.step_func(function (e) { assert_false(sync); assert_equals(e.type, 'abort'); + assert_equals(client.status, 0); abortFired = true; }); client.open("GET", "resources/delay.py?ms=3000", true); diff --git a/tests/wpt/web-platform-tests/xhr/access-control-basic-cors-safelisted-request-headers.htm b/tests/wpt/web-platform-tests/xhr/access-control-basic-cors-safelisted-request-headers.htm index 20b875b9bdd..56870493b4e 100644 --- a/tests/wpt/web-platform-tests/xhr/access-control-basic-cors-safelisted-request-headers.htm +++ b/tests/wpt/web-platform-tests/xhr/access-control-basic-cors-safelisted-request-headers.htm @@ -17,7 +17,6 @@ xhr.setRequestHeader("Accept-Language", "ru"); xhr.setRequestHeader("Content-Language", "ru"); xhr.setRequestHeader("Content-Type", "text/plain"); - xhr.setRequestHeader("Save-Data", "on"); xhr.send(); diff --git a/tests/wpt/web-platform-tests/xhr/open-during-abort-processing.htm b/tests/wpt/web-platform-tests/xhr/open-during-abort-processing.htm index 5d80babd9d0..706eb32a205 100644 --- a/tests/wpt/web-platform-tests/xhr/open-during-abort-processing.htm +++ b/tests/wpt/web-platform-tests/xhr/open-during-abort-processing.htm @@ -13,8 +13,6 @@ async_test(t => { "onreadystatechange readyState before open() 4", "onreadystatechange readyState after open() 1", "onloadstart readyState 1", - "upload.onabort 1", - "upload.onloadend 1", "client.onabort 1", "readyState after abort() 1", "client.onload 4" |