diff --git a/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini b/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini index 76b398963aee..a9e467132440 100644 --- a/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini +++ b/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini @@ -7,7 +7,7 @@ expected: FAIL [Opening a blob URL in a new window immediately before revoking it works.] - expected: FAIL + expected: TIMEOUT [Opening a blob URL in a noopener about:blank window immediately before revoking it works.] expected: FAIL diff --git a/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini b/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini index 6a3af4e2ece2..947e223fb28f 100644 --- a/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini +++ b/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini @@ -14,9 +14,6 @@ [Revoke blob URL after creating Request, will fetch] expected: FAIL - [Revoke blob URL after calling fetch, fetch should succeed] - expected: FAIL - [url-with-fetch.any.html] [Untitled] diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index 69b95ee43d7b..fe2077f0d1fe 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -9103,369 +9103,333 @@ {} ] ], - "css/css-transitions/transition-delay-000.html": [ + "css/css-transitions/transition-delay-000-manual.html": [ [ - "css/css-transitions/transition-delay-000.html", + "css/css-transitions/transition-delay-000-manual.html", {} ] ], - "css/css-transitions/transition-delay-002.html": [ + "css/css-transitions/transition-delay-002-manual.html": [ [ - "css/css-transitions/transition-delay-002.html", + "css/css-transitions/transition-delay-002-manual.html", {} ] ], - "css/css-transitions/transition-delay-003.html": [ + "css/css-transitions/transition-delay-003-manual.html": [ [ - "css/css-transitions/transition-delay-003.html", + "css/css-transitions/transition-delay-003-manual.html", {} ] ], - "css/css-transitions/transition-duration-002.html": [ + "css/css-transitions/transition-duration-002-manual.html": [ [ - "css/css-transitions/transition-duration-002.html", + "css/css-transitions/transition-duration-002-manual.html", {} ] ], - "css/css-transitions/transition-duration-003.html": [ + "css/css-transitions/transition-duration-003-manual.html": [ [ - "css/css-transitions/transition-duration-003.html", + "css/css-transitions/transition-duration-003-manual.html", {} ] ], - "css/css-transitions/transition-duration-004.html": [ + "css/css-transitions/transition-duration-004-manual.html": [ [ - "css/css-transitions/transition-duration-004.html", + "css/css-transitions/transition-duration-004-manual.html", {} ] ], - "css/css-transitions/transition-property-003.html": [ + "css/css-transitions/transition-property-003-manual.html": [ [ - "css/css-transitions/transition-property-003.html", + "css/css-transitions/transition-property-003-manual.html", {} ] ], - "css/css-transitions/transition-property-004.html": [ + "css/css-transitions/transition-property-004-manual.html": [ [ - "css/css-transitions/transition-property-004.html", + "css/css-transitions/transition-property-004-manual.html", {} ] ], - "css/css-transitions/transition-property-005.html": [ + "css/css-transitions/transition-property-005-manual.html": [ [ - "css/css-transitions/transition-property-005.html", + "css/css-transitions/transition-property-005-manual.html", {} ] ], - "css/css-transitions/transition-property-006.html": [ + "css/css-transitions/transition-property-006-manual.html": [ [ - "css/css-transitions/transition-property-006.html", + "css/css-transitions/transition-property-006-manual.html", {} ] ], - "css/css-transitions/transition-property-007.html": [ + "css/css-transitions/transition-property-007-manual.html": [ [ - "css/css-transitions/transition-property-007.html", + "css/css-transitions/transition-property-007-manual.html", {} ] ], - "css/css-transitions/transition-property-008.html": [ + "css/css-transitions/transition-property-008-manual.html": [ [ - "css/css-transitions/transition-property-008.html", + "css/css-transitions/transition-property-008-manual.html", {} ] ], - "css/css-transitions/transition-property-009.html": [ + "css/css-transitions/transition-property-009-manual.html": [ [ - "css/css-transitions/transition-property-009.html", + "css/css-transitions/transition-property-009-manual.html", {} ] ], - "css/css-transitions/transition-property-010.html": [ + "css/css-transitions/transition-property-010-manual.html": [ [ - "css/css-transitions/transition-property-010.html", + "css/css-transitions/transition-property-010-manual.html", {} ] ], - "css/css-transitions/transition-property-011.html": [ + "css/css-transitions/transition-property-011-manual.html": [ [ - "css/css-transitions/transition-property-011.html", + "css/css-transitions/transition-property-011-manual.html", {} ] ], - "css/css-transitions/transition-property-012.html": [ + "css/css-transitions/transition-property-012-manual.html": [ [ - "css/css-transitions/transition-property-012.html", + "css/css-transitions/transition-property-012-manual.html", {} ] ], - "css/css-transitions/transition-property-013.html": [ + "css/css-transitions/transition-property-013-manual.html": [ [ - "css/css-transitions/transition-property-013.html", + "css/css-transitions/transition-property-013-manual.html", {} ] ], - "css/css-transitions/transition-property-014.html": [ + "css/css-transitions/transition-property-014-manual.html": [ [ - "css/css-transitions/transition-property-014.html", + "css/css-transitions/transition-property-014-manual.html", {} ] ], - "css/css-transitions/transition-property-015.html": [ + "css/css-transitions/transition-property-015-manual.html": [ [ - "css/css-transitions/transition-property-015.html", + "css/css-transitions/transition-property-015-manual.html", {} ] ], - "css/css-transitions/transition-property-016.html": [ + "css/css-transitions/transition-property-016-manual.html": [ [ - "css/css-transitions/transition-property-016.html", + "css/css-transitions/transition-property-016-manual.html", {} ] ], - "css/css-transitions/transition-property-017.html": [ + "css/css-transitions/transition-property-017-manual.html": [ [ - "css/css-transitions/transition-property-017.html", + "css/css-transitions/transition-property-017-manual.html", {} ] ], - "css/css-transitions/transition-property-018.html": [ + "css/css-transitions/transition-property-018-manual.html": [ [ - "css/css-transitions/transition-property-018.html", + "css/css-transitions/transition-property-018-manual.html", {} ] ], - "css/css-transitions/transition-property-019.html": [ + "css/css-transitions/transition-property-019-manual.html": [ [ - "css/css-transitions/transition-property-019.html", + "css/css-transitions/transition-property-019-manual.html", {} ] ], - "css/css-transitions/transition-property-020.html": [ + "css/css-transitions/transition-property-020-manual.html": [ [ - "css/css-transitions/transition-property-020.html", + "css/css-transitions/transition-property-020-manual.html", {} ] ], - "css/css-transitions/transition-property-021.html": [ + "css/css-transitions/transition-property-021-manual.html": [ [ - "css/css-transitions/transition-property-021.html", + "css/css-transitions/transition-property-021-manual.html", {} ] ], - "css/css-transitions/transition-property-022.html": [ + "css/css-transitions/transition-property-022-manual.html": [ [ - "css/css-transitions/transition-property-022.html", + "css/css-transitions/transition-property-022-manual.html", {} ] ], - "css/css-transitions/transition-property-023.html": [ + "css/css-transitions/transition-property-023-manual.html": [ [ - "css/css-transitions/transition-property-023.html", + "css/css-transitions/transition-property-023-manual.html", {} ] ], - "css/css-transitions/transition-property-024.html": [ + "css/css-transitions/transition-property-024-manual.html": [ [ - "css/css-transitions/transition-property-024.html", + "css/css-transitions/transition-property-024-manual.html", {} ] ], - "css/css-transitions/transition-property-025.html": [ + "css/css-transitions/transition-property-025-manual.html": [ [ - "css/css-transitions/transition-property-025.html", + "css/css-transitions/transition-property-025-manual.html", {} ] ], - "css/css-transitions/transition-property-026.html": [ + "css/css-transitions/transition-property-026-manual.html": [ [ - "css/css-transitions/transition-property-026.html", + "css/css-transitions/transition-property-026-manual.html", {} ] ], - "css/css-transitions/transition-property-027.html": [ + "css/css-transitions/transition-property-027-manual.html": [ [ - "css/css-transitions/transition-property-027.html", + "css/css-transitions/transition-property-027-manual.html", {} ] ], - "css/css-transitions/transition-property-028.html": [ + "css/css-transitions/transition-property-028-manual.html": [ [ - "css/css-transitions/transition-property-028.html", + "css/css-transitions/transition-property-028-manual.html", {} ] ], - "css/css-transitions/transition-property-029.html": [ + "css/css-transitions/transition-property-029-manual.html": [ [ - "css/css-transitions/transition-property-029.html", + "css/css-transitions/transition-property-029-manual.html", {} ] ], - "css/css-transitions/transition-property-030.html": [ + "css/css-transitions/transition-property-030-manual.html": [ [ - "css/css-transitions/transition-property-030.html", + "css/css-transitions/transition-property-030-manual.html", {} ] ], - "css/css-transitions/transition-property-031.html": [ + "css/css-transitions/transition-property-031-manual.html": [ [ - "css/css-transitions/transition-property-031.html", + "css/css-transitions/transition-property-031-manual.html", {} ] ], - "css/css-transitions/transition-property-032.html": [ + "css/css-transitions/transition-property-032-manual.html": [ [ - "css/css-transitions/transition-property-032.html", + "css/css-transitions/transition-property-032-manual.html", {} ] ], - "css/css-transitions/transition-property-033.html": [ + "css/css-transitions/transition-property-033-manual.html": [ [ - "css/css-transitions/transition-property-033.html", + "css/css-transitions/transition-property-033-manual.html", {} ] ], - "css/css-transitions/transition-property-034.html": [ + "css/css-transitions/transition-property-034-manual.html": [ [ - "css/css-transitions/transition-property-034.html", + "css/css-transitions/transition-property-034-manual.html", {} ] ], - "css/css-transitions/transition-property-035.html": [ + "css/css-transitions/transition-property-035-manual.html": [ [ - "css/css-transitions/transition-property-035.html", + "css/css-transitions/transition-property-035-manual.html", {} ] ], - "css/css-transitions/transition-property-036.html": [ + "css/css-transitions/transition-property-036-manual.html": [ [ - "css/css-transitions/transition-property-036.html", + "css/css-transitions/transition-property-036-manual.html", {} ] ], - "css/css-transitions/transition-property-037.html": [ + "css/css-transitions/transition-property-037-manual.html": [ [ - "css/css-transitions/transition-property-037.html", + "css/css-transitions/transition-property-037-manual.html", {} ] ], - "css/css-transitions/transition-property-038.html": [ + "css/css-transitions/transition-property-038-manual.html": [ [ - "css/css-transitions/transition-property-038.html", + "css/css-transitions/transition-property-038-manual.html", {} ] ], - "css/css-transitions/transition-property-039.html": [ + "css/css-transitions/transition-property-039-manual.html": [ [ - "css/css-transitions/transition-property-039.html", + "css/css-transitions/transition-property-039-manual.html", {} ] ], - "css/css-transitions/transition-property-040.html": [ + "css/css-transitions/transition-property-040-manual.html": [ [ - "css/css-transitions/transition-property-040.html", + "css/css-transitions/transition-property-040-manual.html", {} ] ], - "css/css-transitions/transition-property-041.html": [ + "css/css-transitions/transition-property-041-manual.html": [ [ - "css/css-transitions/transition-property-041.html", + "css/css-transitions/transition-property-041-manual.html", {} ] ], - "css/css-transitions/transition-property-042.html": [ + "css/css-transitions/transition-property-042-manual.html": [ [ - "css/css-transitions/transition-property-042.html", + "css/css-transitions/transition-property-042-manual.html", {} ] ], - "css/css-transitions/transition-property-043.html": [ + "css/css-transitions/transition-property-043-manual.html": [ [ - "css/css-transitions/transition-property-043.html", + "css/css-transitions/transition-property-043-manual.html", {} ] ], - "css/css-transitions/transition-property-044.html": [ + "css/css-transitions/transition-property-044-manual.html": [ [ - "css/css-transitions/transition-property-044.html", + "css/css-transitions/transition-property-044-manual.html", {} ] ], - "css/css-transitions/transition-property-045.html": [ + "css/css-transitions/transition-property-045-manual.html": [ [ - "css/css-transitions/transition-property-045.html", + "css/css-transitions/transition-property-045-manual.html", {} ] ], - "css/css-transitions/transition-timing-function-002.html": [ + "css/css-transitions/transition-timing-function-002-manual.html": [ [ - "css/css-transitions/transition-timing-function-002.html", + "css/css-transitions/transition-timing-function-002-manual.html", {} ] ], - "css/css-transitions/transition-timing-function-003.html": [ + "css/css-transitions/transition-timing-function-003-manual.html": [ [ - "css/css-transitions/transition-timing-function-003.html", + "css/css-transitions/transition-timing-function-003-manual.html", {} ] ], - "css/css-transitions/transition-timing-function-004.html": [ + "css/css-transitions/transition-timing-function-004-manual.html": [ [ - "css/css-transitions/transition-timing-function-004.html", + "css/css-transitions/transition-timing-function-004-manual.html", {} ] ], - "css/css-transitions/transition-timing-function-005.html": [ + "css/css-transitions/transition-timing-function-005-manual.html": [ [ - "css/css-transitions/transition-timing-function-005.html", + "css/css-transitions/transition-timing-function-005-manual.html", {} ] ], - "css/css-transitions/transition-timing-function-006.html": [ + "css/css-transitions/transition-timing-function-006-manual.html": [ [ - "css/css-transitions/transition-timing-function-006.html", + "css/css-transitions/transition-timing-function-006-manual.html", {} ] ], - "css/css-transitions/transition-timing-function-007.html": [ + "css/css-transitions/transition-timing-function-010-manual.html": [ [ - "css/css-transitions/transition-timing-function-007.html", - {} - ] - ], - "css/css-transitions/transition-timing-function-008.html": [ - [ - "css/css-transitions/transition-timing-function-008.html", - {} - ] - ], - "css/css-transitions/transition-timing-function-009.html": [ - [ - "css/css-transitions/transition-timing-function-009.html", - {} - ] - ], - "css/css-transitions/transition-timing-function-010.html": [ - [ - "css/css-transitions/transition-timing-function-010.html", - {} - ] - ], - "css/css-transitions/transition-timing-function-011.html": [ - [ - "css/css-transitions/transition-timing-function-011.html", - {} - ] - ], - "css/css-transitions/transition-timing-function-012.html": [ - [ - "css/css-transitions/transition-timing-function-012.html", - {} - ] - ], - "css/css-transitions/transition-timing-function-013.html": [ - [ - "css/css-transitions/transition-timing-function-013.html", + "css/css-transitions/transition-timing-function-010-manual.html", {} ] ], @@ -49533,6 +49497,18 @@ {} ] ], + "css/CSS2/floats/negative-margin-float-positioning.html": [ + [ + "css/CSS2/floats/negative-margin-float-positioning.html", + [ + [ + "/css/reference/ref-filled-green-100px-square-only.html", + "==" + ] + ], + {} + ] + ], "css/CSS2/floats/new-fc-beside-adjoining-float-2.html": [ [ "css/CSS2/floats/new-fc-beside-adjoining-float-2.html", @@ -49557,6 +49533,30 @@ {} ] ], + "css/CSS2/floats/new-fc-beside-float-with-margin-rtl.html": [ + [ + "css/CSS2/floats/new-fc-beside-float-with-margin-rtl.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/CSS2/floats/new-fc-beside-float-with-margin.html": [ + [ + "css/CSS2/floats/new-fc-beside-float-with-margin.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], "css/CSS2/floats/new-fc-relayout.html": [ [ "css/CSS2/floats/new-fc-relayout.html", @@ -49641,9 +49641,9 @@ {} ] ], - "css/CSS2/floats/zero-width-floats-positioning.html": [ + "css/CSS2/floats/zero-width-floats-positioning.tentative.html": [ [ - "css/CSS2/floats/zero-width-floats-positioning.html", + "css/CSS2/floats/zero-width-floats-positioning.tentative.html", [ [ "/css/reference/ref-filled-green-100px-square-only.html", @@ -110169,6 +110169,18 @@ {} ] ], + "css/css-cascade/all-prop-initial-visited.html": [ + [ + "css/css-cascade/all-prop-initial-visited.html", + [ + [ + "/css/css-cascade/all-prop-initial-visited-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-cascade/important-prop.html": [ [ "css/css-cascade/important-prop.html", @@ -118821,6 +118833,18 @@ {} ] ], + "css/css-flexbox/flex-minimum-height-flex-items-019.html": [ + [ + "css/css-flexbox/flex-minimum-height-flex-items-019.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], "css/css-flexbox/flex-minimum-width-flex-items-001.xht": [ [ "css/css-flexbox/flex-minimum-width-flex-items-001.xht", @@ -126043,6 +126067,294 @@ {} ] ], + "css/css-grid/grid-items/grid-items-percentage-margins-003.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-margins-003.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-margins-004.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-margins-004.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-margins-005.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-margins-005.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-margins-006.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-margins-006.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-margins-007.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-margins-007.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-margins-008.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-margins-008.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-margins-009.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-margins-009.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-margins-010.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-margins-010.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-margins-011.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-margins-011.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-margins-012.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-margins-012.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-margins-013.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-margins-013.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-margins-014.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-margins-014.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-003.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-paddings-003.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-004.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-paddings-004.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-005.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-paddings-005.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-006.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-paddings-006.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-007.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-paddings-007.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-008.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-paddings-008.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-009.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-paddings-009.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-010.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-paddings-010.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-011.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-paddings-011.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-012.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-paddings-012.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-013.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-paddings-013.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-014.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-paddings-014.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], "css/css-grid/grid-items/grid-items-sizing-alignment-001.html": [ [ "css/css-grid/grid-items/grid-items-sizing-alignment-001.html", @@ -164779,6 +165091,18 @@ {} ] ], + "css/css-values/min-max-percentage-length-interpolation.html": [ + [ + "css/css-values/min-max-percentage-length-interpolation.html", + [ + [ + "/css/reference/ref-filled-green-100px-square-only.html", + "==" + ] + ], + {} + ] + ], "css/css-values/q-unit-case-insensitivity-001.html": [ [ "css/css-values/q-unit-case-insensitivity-001.html", @@ -199601,6 +199925,18 @@ {} ] ], + "html/rendering/non-replaced-elements/tables/table-column-width.html": [ + [ + "html/rendering/non-replaced-elements/tables/table-column-width.html", + [ + [ + "/html/rendering/non-replaced-elements/tables/table-column-width-ref.html", + "==" + ] + ], + {} + ] + ], "html/rendering/non-replaced-elements/tables/table-direction.html": [ [ "html/rendering/non-replaced-elements/tables/table-direction.html", @@ -242631,6 +242967,9 @@ "css/css-cascade/all-prop-001-ref.html": [ [] ], + "css/css-cascade/all-prop-initial-visited-ref.html": [ + [] + ], "css/css-cascade/important-prop-ref.html": [ [] ], @@ -270114,6 +270453,9 @@ "html/rendering/non-replaced-elements/tables/table-cell-width-ref.html": [ [] ], + "html/rendering/non-replaced-elements/tables/table-column-width-ref.html": [ + [] + ], "html/rendering/non-replaced-elements/tables/table-direction-ref.html": [ [] ], @@ -272736,6 +273078,9 @@ "infrastructure/metadata/infrastructure/expected-fail/uncaught-exception.html.ini": [ [] ], + "infrastructure/metadata/infrastructure/expected-fail/unhandled-rejection.html.ini": [ + [] + ], "infrastructure/metadata/infrastructure/reftest/reftest_and_fail.html.ini": [ [] ], @@ -273285,6 +273630,12 @@ "interfaces/webvtt.idl": [ [] ], + "interfaces/webxr-ar-module.idl": [ + [] + ], + "interfaces/webxr-gamepads-module.idl": [ + [] + ], "interfaces/webxr.idl": [ [] ], @@ -273303,6 +273654,9 @@ "intersection-observer/observer-in-iframe.html": [ [] ], + "intersection-observer/resources/cross-origin-child-iframe.sub.html": [ + [] + ], "intersection-observer/resources/cross-origin-subframe.html": [ [] ], @@ -273315,6 +273669,9 @@ "intersection-observer/resources/observer-in-iframe-subframe.html": [ [] ], + "intersection-observer/resources/same-origin-grand-child-iframe.html": [ + [] + ], "intersection-observer/resources/scaled-target-subframe.html": [ [] ], @@ -274785,9 +275142,27 @@ "native-file-system/README.md": [ [] ], + "native-file-system/resources/native-fs-test-helpers.js": [ + [] + ], + "native-file-system/resources/sandboxed-fs-test-helpers.js": [ + [] + ], "native-file-system/resources/test-helpers.js": [ [] ], + "native-file-system/script-tests/FileSystemDirectoryHandle-getDirectory.js": [ + [] + ], + "native-file-system/script-tests/FileSystemDirectoryHandle-getFile.js": [ + [] + ], + "native-file-system/script-tests/FileSystemDirectoryHandle-removeEntry.js": [ + [] + ], + "native-file-system/script-tests/FileSystemWriter.js": [ + [] + ], "navigation-timing/META.yml": [ [] ], @@ -275118,6 +275493,9 @@ "permissions/META.yml": [ [] ], + "permissions/feature-policy-permissions-query.html": [ + [] + ], "picture-in-picture/META.yml": [ [] ], @@ -275238,6 +275616,9 @@ "portals/resources/portal-post-message-portal.html": [ [] ], + "portals/resources/portal-repeated-activate-window.html": [ + [] + ], "portals/resources/portals-adopt-predecessor-portal.html": [ [] ], @@ -275253,6 +275634,9 @@ "portals/resources/postmessage-referrer.sub.html": [ [] ], + "portals/resources/simple-portal-adopts-and-activates-predecessor.html": [ + [] + ], "portals/resources/simple-portal-adopts-predecessor.html": [ [] ], @@ -278052,6 +278436,9 @@ "resources/test/tests/unit/test-return-restrictions.html": [ [] ], + "resources/test/tests/unit/throwing-assertions.html": [ + [] + ], "resources/test/tests/unit/unpaired-surrogates.html": [ [] ], @@ -288510,12 +288897,6 @@ "workers/semantics/encodings/004.js": [ [] ], - "workers/semantics/interface-objects/003.js": [ - [] - ], - "workers/semantics/interface-objects/004.js": [ - [] - ], "workers/semantics/multiple-workers/001.js": [ [] ], @@ -312557,6 +312938,12 @@ {} ] ], + "css/css-animations/parsing/animation-invalid.html": [ + [ + "css/css-animations/parsing/animation-invalid.html", + {} + ] + ], "css/css-animations/parsing/animation-iteration-count-computed.html": [ [ "css/css-animations/parsing/animation-iteration-count-computed.html", @@ -312611,6 +312998,12 @@ {} ] ], + "css/css-animations/parsing/animation-shorthand.html": [ + [ + "css/css-animations/parsing/animation-shorthand.html", + {} + ] + ], "css/css-animations/parsing/animation-timing-function-computed.html": [ [ "css/css-animations/parsing/animation-timing-function-computed.html", @@ -312629,6 +313022,12 @@ {} ] ], + "css/css-animations/parsing/animation-valid.html": [ + [ + "css/css-animations/parsing/animation-valid.html", + {} + ] + ], "css/css-animations/pending-style-changes-001.html": [ [ "css/css-animations/pending-style-changes-001.html", @@ -312995,6 +313394,12 @@ {} ] ], + "css/css-backgrounds/parsing/border-color-shorthand.html": [ + [ + "css/css-backgrounds/parsing/border-color-shorthand.html", + {} + ] + ], "css/css-backgrounds/parsing/border-color-valid.html": [ [ "css/css-backgrounds/parsing/border-color-valid.html", @@ -313043,6 +313448,12 @@ {} ] ], + "css/css-backgrounds/parsing/border-image-shorthand.sub.html": [ + [ + "css/css-backgrounds/parsing/border-image-shorthand.sub.html", + {} + ] + ], "css/css-backgrounds/parsing/border-image-slice-computed.html": [ [ "css/css-backgrounds/parsing/border-image-slice-computed.html", @@ -313127,6 +313538,12 @@ {} ] ], + "css/css-backgrounds/parsing/border-shorthand.html": [ + [ + "css/css-backgrounds/parsing/border-shorthand.html", + {} + ] + ], "css/css-backgrounds/parsing/border-style-computed.html": [ [ "css/css-backgrounds/parsing/border-style-computed.html", @@ -313139,6 +313556,12 @@ {} ] ], + "css/css-backgrounds/parsing/border-style-shorthand.html": [ + [ + "css/css-backgrounds/parsing/border-style-shorthand.html", + {} + ] + ], "css/css-backgrounds/parsing/border-style-valid.html": [ [ "css/css-backgrounds/parsing/border-style-valid.html", @@ -313163,6 +313586,12 @@ {} ] ], + "css/css-backgrounds/parsing/border-width-shorthand.html": [ + [ + "css/css-backgrounds/parsing/border-width-shorthand.html", + {} + ] + ], "css/css-backgrounds/parsing/border-width-valid.html": [ [ "css/css-backgrounds/parsing/border-width-valid.html", @@ -313265,6 +313694,12 @@ {} ] ], + "css/css-box/parsing/margin-shorthand.html": [ + [ + "css/css-box/parsing/margin-shorthand.html", + {} + ] + ], "css/css-box/parsing/margin-valid.html": [ [ "css/css-box/parsing/margin-valid.html", @@ -313343,6 +313778,12 @@ {} ] ], + "css/css-box/parsing/padding-shorthand.html": [ + [ + "css/css-box/parsing/padding-shorthand.html", + {} + ] + ], "css/css-box/parsing/padding-valid.html": [ [ "css/css-box/parsing/padding-valid.html", @@ -313723,6 +314164,12 @@ {} ] ], + "css/css-content/inheritance.html": [ + [ + "css/css-content/inheritance.html", + {} + ] + ], "css/css-counter-styles/idlharness.html": [ [ "css/css-counter-styles/idlharness.html", @@ -314521,6 +314968,12 @@ {} ] ], + "css/css-flexbox/parsing/flex-flow-shorthand.html": [ + [ + "css/css-flexbox/parsing/flex-flow-shorthand.html", + {} + ] + ], "css/css-flexbox/parsing/flex-flow-valid.html": [ [ "css/css-flexbox/parsing/flex-flow-valid.html", @@ -314551,6 +315004,12 @@ {} ] ], + "css/css-flexbox/parsing/flex-shorthand.html": [ + [ + "css/css-flexbox/parsing/flex-shorthand.html", + {} + ] + ], "css/css-flexbox/parsing/flex-shrink-computed.html": [ [ "css/css-flexbox/parsing/flex-shrink-computed.html", @@ -316859,6 +317318,12 @@ {} ] ], + "css/css-grid/grid-items/grid-item-dynamic-min-contribution-001.html": [ + [ + "css/css-grid/grid-items/grid-item-dynamic-min-contribution-001.html", + {} + ] + ], "css/css-grid/grid-items/grid-item-min-auto-size-001.html": [ [ "css/css-grid/grid-items/grid-item-min-auto-size-001.html", @@ -317171,6 +317636,12 @@ {} ] ], + "css/css-grid/parsing/grid-area-shorthand.html": [ + [ + "css/css-grid/parsing/grid-area-shorthand.html", + {} + ] + ], "css/css-grid/parsing/grid-area-valid.html": [ [ "css/css-grid/parsing/grid-area-valid.html", @@ -317273,6 +317744,12 @@ {} ] ], + "css/css-grid/parsing/grid-template-shorthand.html": [ + [ + "css/css-grid/parsing/grid-template-shorthand.html", + {} + ] + ], "css/css-grid/placement/grid-auto-placement-implicit-tracks-001.html": [ [ "css/css-grid/placement/grid-auto-placement-implicit-tracks-001.html", @@ -317675,6 +318152,12 @@ {} ] ], + "css/css-lists/parsing/list-style-shorthand.sub.html": [ + [ + "css/css-lists/parsing/list-style-shorthand.sub.html", + {} + ] + ], "css/css-lists/parsing/list-style-type-computed.html": [ [ "css/css-lists/parsing/list-style-type-computed.html", @@ -318011,6 +318494,12 @@ {} ] ], + "css/css-logical/parsing/inset-shorthand.html": [ + [ + "css/css-logical/parsing/inset-shorthand.html", + {} + ] + ], "css/css-logical/parsing/inset-valid.html": [ [ "css/css-logical/parsing/inset-valid.html", @@ -321851,6 +322340,12 @@ {} ] ], + "css/css-text-decor/parsing/text-decoration-shorthand.html": [ + [ + "css/css-text-decor/parsing/text-decoration-shorthand.html", + {} + ] + ], "css/css-text-decor/parsing/text-decoration-skip-ink-computed.html": [ [ "css/css-text-decor/parsing/text-decoration-skip-ink-computed.html", @@ -324245,6 +324740,12 @@ {} ] ], + "css/css-transitions/parsing/transition-invalid.html": [ + [ + "css/css-transitions/parsing/transition-invalid.html", + {} + ] + ], "css/css-transitions/parsing/transition-property-computed.html": [ [ "css/css-transitions/parsing/transition-property-computed.html", @@ -324263,6 +324764,12 @@ {} ] ], + "css/css-transitions/parsing/transition-shorthand.html": [ + [ + "css/css-transitions/parsing/transition-shorthand.html", + {} + ] + ], "css/css-transitions/parsing/transition-timing-function-computed.html": [ [ "css/css-transitions/parsing/transition-timing-function-computed.html", @@ -324281,6 +324788,12 @@ {} ] ], + "css/css-transitions/parsing/transition-valid.html": [ + [ + "css/css-transitions/parsing/transition-valid.html", + {} + ] + ], "css/css-transitions/properties-value-001.html": [ [ "css/css-transitions/properties-value-001.html", @@ -324399,12 +324912,6 @@ {} ] ], - "css/css-transitions/transition-timing-function-001.html": [ - [ - "css/css-transitions/transition-timing-function-001.html", - {} - ] - ], "css/css-transitions/transitioncancel-001.html": [ [ "css/css-transitions/transitioncancel-001.html", @@ -326639,6 +327146,12 @@ {} ] ], + "css/css-ui/parsing/outline-shorthand.html": [ + [ + "css/css-ui/parsing/outline-shorthand.html", + {} + ] + ], "css/css-ui/parsing/outline-style-computed.html": [ [ "css/css-ui/parsing/outline-style-computed.html", @@ -326885,6 +327398,24 @@ {} ] ], + "css/css-values/clamp-length-computed.html": [ + [ + "css/css-values/clamp-length-computed.html", + {} + ] + ], + "css/css-values/clamp-length-invalid.html": [ + [ + "css/css-values/clamp-length-invalid.html", + {} + ] + ], + "css/css-values/clamp-length-serialize.html": [ + [ + "css/css-values/clamp-length-serialize.html", + {} + ] + ], "css/css-values/getComputedStyle-border-radius-001.html": [ [ "css/css-values/getComputedStyle-border-radius-001.html", @@ -329337,12 +329868,24 @@ {} ] ], + "css/mediaqueries/aspect-ratio-serialization.html": [ + [ + "css/mediaqueries/aspect-ratio-serialization.html", + {} + ] + ], "css/mediaqueries/forced-colors.html": [ [ "css/mediaqueries/forced-colors.html", {} ] ], + "css/mediaqueries/navigation-controls.tentative.html": [ + [ + "css/mediaqueries/navigation-controls.tentative.html", + {} + ] + ], "css/mediaqueries/prefers-color-scheme.html": [ [ "css/mediaqueries/prefers-color-scheme.html", @@ -331994,6 +332537,12 @@ {} ] ], + "dom/nodes/MutationObserver-sanity.html": [ + [ + "dom/nodes/MutationObserver-sanity.html", + {} + ] + ], "dom/nodes/MutationObserver-takeRecords.html": [ [ "dom/nodes/MutationObserver-takeRecords.html", @@ -347579,6 +348128,14 @@ {} ] ], + "fetch/sec-metadata/portal.tentative.https.sub.html": [ + [ + "fetch/sec-metadata/portal.tentative.https.sub.html", + { + "testdriver": true + } + ] + ], "fetch/sec-metadata/prefetch.tentative.https.sub.html": [ [ "fetch/sec-metadata/prefetch.tentative.https.sub.html", @@ -352169,6 +352726,12 @@ {} ] ], + "html/rendering/replaced-elements/attributes-for-embedded-content-and-images/canvas-aspect-ratio.html": [ + [ + "html/rendering/replaced-elements/attributes-for-embedded-content-and-images/canvas-aspect-ratio.html", + {} + ] + ], "html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-aspect-ratio.tentative.html": [ [ "html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-aspect-ratio.tentative.html", @@ -352187,6 +352750,12 @@ {} ] ], + "html/rendering/replaced-elements/attributes-for-embedded-content-and-images/video-aspect-ratio.html": [ + [ + "html/rendering/replaced-elements/attributes-for-embedded-content-and-images/video-aspect-ratio.html", + {} + ] + ], "html/rendering/replaced-elements/svg-embedded-sizing/svg-in-iframe-auto.html": [ [ "html/rendering/replaced-elements/svg-embedded-sizing/svg-in-iframe-auto.html", @@ -353475,6 +354044,12 @@ {} ] ], + "html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document-different-load.html": [ + [ + "html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document-different-load.html", + {} + ] + ], "html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document-networkState.html": [ [ "html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document-networkState.html", @@ -363384,6 +363959,12 @@ {} ] ], + "infrastructure/expected-fail/unhandled-rejection.html": [ + [ + "infrastructure/expected-fail/unhandled-rejection.html", + {} + ] + ], "infrastructure/server/context.any.js": [ [ "infrastructure/server/context.any.html", @@ -363972,6 +364553,12 @@ {} ] ], + "intersection-observer/same-origin-grand-child-iframe.sub.html": [ + [ + "intersection-observer/same-origin-grand-child-iframe.sub.html", + {} + ] + ], "intersection-observer/shadow-content.html": [ [ "intersection-observer/shadow-content.html", @@ -369099,53 +369686,261 @@ } ] ], - "native-file-system/FileSystemBaseHandle-remove.tentative.https.window.js": [ + "native-file-system/native_FileSystemDirectoryHandle-getDirectory.tentative.https.manual.window.js": [ + [ + "native-file-system/native_FileSystemDirectoryHandle-getDirectory.tentative.https.manual.window.html", + { + "script_metadata": [ + [ + "script", + "/resources/testdriver.js" + ], + [ + "script", + "resources/test-helpers.js" + ], + [ + "script", + "resources/native-fs-test-helpers.js" + ], + [ + "script", + "script-tests/FileSystemDirectoryHandle-getDirectory.js" + ] + ] + } + ] + ], + "native-file-system/native_FileSystemDirectoryHandle-getFile.tentative.https.manual.window.js": [ + [ + "native-file-system/native_FileSystemDirectoryHandle-getFile.tentative.https.manual.window.html", + { + "script_metadata": [ + [ + "script", + "/resources/testdriver.js" + ], + [ + "script", + "resources/test-helpers.js" + ], + [ + "script", + "resources/native-fs-test-helpers.js" + ], + [ + "script", + "script-tests/FileSystemDirectoryHandle-getFile.js" + ] + ] + } + ] + ], + "native-file-system/native_FileSystemDirectoryHandle-removeEntry.tentative.https.manual.window.js": [ + [ + "native-file-system/native_FileSystemDirectoryHandle-removeEntry.tentative.https.manual.window.html", + { + "script_metadata": [ + [ + "script", + "/resources/testdriver.js" + ], + [ + "script", + "resources/test-helpers.js" + ], + [ + "script", + "resources/native-fs-test-helpers.js" + ], + [ + "script", + "script-tests/FileSystemDirectoryHandle-removeEntry.js" + ] + ] + } + ] + ], + "native-file-system/native_FileSystemWriter.tentative.https.manual.window.js": [ [ - "native-file-system/FileSystemBaseHandle-remove.tentative.https.window.html", + "native-file-system/native_FileSystemWriter.tentative.https.manual.window.html", { "script_metadata": [ + [ + "script", + "/resources/testdriver.js" + ], [ "script", "resources/test-helpers.js" + ], + [ + "script", + "resources/native-fs-test-helpers.js" + ], + [ + "script", + "script-tests/FileSystemWriter.js" ] ] } ] ], - "native-file-system/FileSystemDirectoryHandle-getDirectory.tentative.https.window.js": [ + "native-file-system/sandboxed_FileSystemDirectoryHandle-getDirectory.tentative.https.any.js": [ + [ + "native-file-system/sandboxed_FileSystemDirectoryHandle-getDirectory.tentative.https.any.html", + { + "script_metadata": [ + [ + "script", + "resources/test-helpers.js" + ], + [ + "script", + "resources/sandboxed-fs-test-helpers.js" + ], + [ + "script", + "script-tests/FileSystemDirectoryHandle-getDirectory.js" + ] + ] + } + ], + [ + "native-file-system/sandboxed_FileSystemDirectoryHandle-getDirectory.tentative.https.any.worker.html", + { + "script_metadata": [ + [ + "script", + "resources/test-helpers.js" + ], + [ + "script", + "resources/sandboxed-fs-test-helpers.js" + ], + [ + "script", + "script-tests/FileSystemDirectoryHandle-getDirectory.js" + ] + ] + } + ] + ], + "native-file-system/sandboxed_FileSystemDirectoryHandle-getFile.tentative.https.any.js": [ + [ + "native-file-system/sandboxed_FileSystemDirectoryHandle-getFile.tentative.https.any.html", + { + "script_metadata": [ + [ + "script", + "resources/test-helpers.js" + ], + [ + "script", + "resources/sandboxed-fs-test-helpers.js" + ], + [ + "script", + "script-tests/FileSystemDirectoryHandle-getFile.js" + ] + ] + } + ], [ - "native-file-system/FileSystemDirectoryHandle-getDirectory.tentative.https.window.html", + "native-file-system/sandboxed_FileSystemDirectoryHandle-getFile.tentative.https.any.worker.html", { "script_metadata": [ [ "script", "resources/test-helpers.js" + ], + [ + "script", + "resources/sandboxed-fs-test-helpers.js" + ], + [ + "script", + "script-tests/FileSystemDirectoryHandle-getFile.js" ] ] } ] ], - "native-file-system/FileSystemDirectoryHandle-getFile.tentative.https.window.js": [ + "native-file-system/sandboxed_FileSystemDirectoryHandle-removeEntry.tentative.https.any.js": [ [ - "native-file-system/FileSystemDirectoryHandle-getFile.tentative.https.window.html", + "native-file-system/sandboxed_FileSystemDirectoryHandle-removeEntry.tentative.https.any.html", { "script_metadata": [ [ "script", "resources/test-helpers.js" + ], + [ + "script", + "resources/sandboxed-fs-test-helpers.js" + ], + [ + "script", + "script-tests/FileSystemDirectoryHandle-removeEntry.js" + ] + ] + } + ], + [ + "native-file-system/sandboxed_FileSystemDirectoryHandle-removeEntry.tentative.https.any.worker.html", + { + "script_metadata": [ + [ + "script", + "resources/test-helpers.js" + ], + [ + "script", + "resources/sandboxed-fs-test-helpers.js" + ], + [ + "script", + "script-tests/FileSystemDirectoryHandle-removeEntry.js" ] ] } ] ], - "native-file-system/FileSystemWriter.tentative.https.window.js": [ + "native-file-system/sandboxed_FileSystemWriter.tentative.https.any.js": [ [ - "native-file-system/FileSystemWriter.tentative.https.window.html", + "native-file-system/sandboxed_FileSystemWriter.tentative.https.any.html", { "script_metadata": [ [ "script", "resources/test-helpers.js" + ], + [ + "script", + "resources/sandboxed-fs-test-helpers.js" + ], + [ + "script", + "script-tests/FileSystemWriter.js" + ] + ] + } + ], + [ + "native-file-system/sandboxed_FileSystemWriter.tentative.https.any.worker.html", + { + "script_metadata": [ + [ + "script", + "resources/test-helpers.js" + ], + [ + "script", + "resources/sandboxed-fs-test-helpers.js" + ], + [ + "script", + "script-tests/FileSystemWriter.js" ] ] } @@ -380469,6 +381264,12 @@ } ] ], + "permissions/permissions-query-feature-policy-attribute.https.sub.html": [ + [ + "permissions/permissions-query-feature-policy-attribute.https.sub.html", + {} + ] + ], "permissions/test-background-fetch-permission.html": [ [ "permissions/test-background-fetch-permission.html", @@ -381472,6 +382273,12 @@ {} ] ], + "portals/portals-repeated-activate.html": [ + [ + "portals/portals-repeated-activate.html", + {} + ] + ], "portals/portals-set-src-after-activate.html": [ [ "portals/portals-set-src-after-activate.html", @@ -396572,6 +397379,14 @@ } ] ], + "shadow-dom/focus/focus-selector-delegatesFocus.html": [ + [ + "shadow-dom/focus/focus-selector-delegatesFocus.html", + { + "testdriver": true + } + ] + ], "shadow-dom/focus/focus-tabindex-order-shadow-negative.html": [ [ "shadow-dom/focus/focus-tabindex-order-shadow-negative.html", @@ -403611,6 +404426,12 @@ {} ] ], + "svg/animations/keysplines-x-limits.html": [ + [ + "svg/animations/keysplines-x-limits.html", + {} + ] + ], "svg/animations/multiple-animations-ending.html": [ [ "svg/animations/multiple-animations-ending.html", @@ -418710,6 +419531,23 @@ {} ] ], + "webxr/ar-module/idlharness.https.window.js": [ + [ + "webxr/ar-module/idlharness.https.window.html", + { + "script_metadata": [ + [ + "script", + "/resources/WebIDLParser.js" + ], + [ + "script", + "/resources/idlharness.js" + ] + ] + } + ] + ], "webxr/events_input_source_recreation.https.html": [ [ "webxr/events_input_source_recreation.https.html", @@ -418746,6 +419584,23 @@ {} ] ], + "webxr/gamepads-module/idlharness.https.window.js": [ + [ + "webxr/gamepads-module/idlharness.https.window.html", + { + "script_metadata": [ + [ + "script", + "/resources/WebIDLParser.js" + ], + [ + "script", + "/resources/idlharness.js" + ] + ] + } + ] + ], "webxr/getInputPose_handedness.https.html": [ [ "webxr/getInputPose_handedness.https.html", @@ -420819,16 +421674,30 @@ {} ] ], - "workers/semantics/interface-objects/003.html": [ + "workers/semantics/interface-objects/003.any.js": [ [ - "workers/semantics/interface-objects/003.html", - {} + "workers/semantics/interface-objects/003.any.sharedworker.html", + { + "script_metadata": [ + [ + "global", + "!default,sharedworker" + ] + ] + } ] ], - "workers/semantics/interface-objects/004.html": [ + "workers/semantics/interface-objects/004.any.js": [ [ - "workers/semantics/interface-objects/004.html", - {} + "workers/semantics/interface-objects/004.any.sharedworker.html", + { + "script_metadata": [ + [ + "global", + "!default,sharedworker" + ] + ] + } ] ], "workers/semantics/multiple-workers/001.html": [ @@ -444724,15 +445593,15 @@ "support" ], ".github/workflows/pull_request.yml": [ - "9d288c0c9209904091a9b66b9334929aee02c3c7", + "81a53c67f4b11ca3c7ddde916dcebb35cf83a021", "support" ], ".github/workflows/push-build-publish-documentation-website.yml": [ - "167e0d930f4da142ffab22b8c685119495c52702", + "f6a1401a3dd161168d3869dd143527969e8300c1", "support" ], ".github/workflows/push-build-release-manifest.yml": [ - "af677454fdd2cf692929c68ef80bcfe8fb52b69f", + "baa06cc14fd4e6859f76f63b2c3962897d1b9837", "support" ], ".gitignore": [ @@ -444748,7 +445617,7 @@ "support" ], ".taskcluster.yml": [ - "dfe3b36e3a52192ed23b5a6788fddf728e20ff35", + "61cc38c9bd1d051b5ad18d59de0f9febd1b3f2a2", "support" ], ".well-known/README.md": [ @@ -447244,7 +448113,7 @@ "testharness" ], "2dcontext/imagebitmap/createImageBitmap-invalid-args.html": [ - "004b3ca6bf39eb7613d2621c8a431df5ab52278b", + "c64371eaa8c7940a78ff064b5cffac575607d230", "testharness" ], "2dcontext/imagebitmap/createImageBitmap-origin.sub.html": [ @@ -449524,15 +450393,15 @@ "testharness" ], "IndexedDB/fire-error-event-exception.html": [ - "fe0dc182567af2a48b4be82d809b97baf469fb3e", + "0a3f12265894f03adfb2b6577e5d35dbf0c89c5d", "testharness" ], "IndexedDB/fire-success-event-exception.html": [ - "c4e55066bbab9069e744c089f81df0714ad4db19", + "ab0ac44eb7c33ba5f62caa6dca49935c8296cf26", "testharness" ], "IndexedDB/fire-upgradeneeded-event-exception.html": [ - "5db452ebafe68a095f083b65a713ba3e0ad40cf5", + "1a8163a58b15606e2f00bc6439238c03267ce83b", "testharness" ], "IndexedDB/get-databases.any.js": [ @@ -450928,7 +451797,7 @@ "testharness" ], "IndexedDB/transaction-relaxed-durability.tentative.any.js": [ - "c6a6f37ba9e0b29dc17fe66e487920acf2c4ecc6", + "2ba96ec08edd3e35c85bef4712a94a9a75174624", "testharness" ], "IndexedDB/transaction-requestqueue.htm": [ @@ -499267,6 +500136,10 @@ "ae8783ce31303024152d3dc91dde3058b3beef0c", "testharness" ], + "css/CSS2/floats/negative-margin-float-positioning.html": [ + "8b4aef22f71f8695ebbc5b6dc83ad5639945618d", + "reftest" + ], "css/CSS2/floats/new-fc-beside-adjoining-float-2.html": [ "2d27a28a0533eece2ec6b1ee933028da8fb99c4f", "reftest" @@ -499275,6 +500148,14 @@ "91adbfce2d32ec1f46853b4af60b14c74468a842", "reftest" ], + "css/CSS2/floats/new-fc-beside-float-with-margin-rtl.html": [ + "5a564f7831c9c19ff7c464c676981c62a53c9a88", + "reftest" + ], + "css/CSS2/floats/new-fc-beside-float-with-margin.html": [ + "ead8e548be95df87220881a8e66e5f3a47c93f9b", + "reftest" + ], "css/CSS2/floats/new-fc-relayout.html": [ "97d8b9a2ff1f3be8aeab2c26817e7542511c59cb", "reftest" @@ -499323,8 +500204,8 @@ "4ac426fe6bee576a9a54c2ed2143c7829e901f23", "testharness" ], - "css/CSS2/floats/zero-width-floats-positioning.html": [ - "7f8e34daaef68356aa7b9fc4216cf918d93cc6cf", + "css/CSS2/floats/zero-width-floats-positioning.tentative.html": [ + "18f8f6e2046693faf5b46e107a2dd3fa3aca8558", "reftest" ], "css/CSS2/floats/zero-width-floats.html": [ @@ -540700,7 +541581,7 @@ "testharness" ], "css/css-animations/parsing/animation-delay-invalid.html": [ - "a58d2cd11bc572d3a7899fb70b8b04adbd76a713", + "52e42a2e2b67a0593f264b57d99b6e9034a835a3", "testharness" ], "css/css-animations/parsing/animation-delay-valid.html": [ @@ -540712,7 +541593,7 @@ "testharness" ], "css/css-animations/parsing/animation-direction-invalid.html": [ - "0b48d97f0a1bb670daec7335049aa486810a2cde", + "5c96216d045c665f2005feb2cae642aad5d7f6f6", "testharness" ], "css/css-animations/parsing/animation-direction-valid.html": [ @@ -540724,7 +541605,7 @@ "testharness" ], "css/css-animations/parsing/animation-duration-invalid.html": [ - "5edacd3735e4f3ac0c0724415b3ca0052f10d33b", + "bd8cf2adfe98954d43f3e4d3b7f839d6f59b0e96", "testharness" ], "css/css-animations/parsing/animation-duration-valid.html": [ @@ -540736,19 +541617,23 @@ "testharness" ], "css/css-animations/parsing/animation-fill-mode-invalid.html": [ - "dda2221f4746a64778ea4c5a82fa42c35243a342", + "2a82f2354639feb9abbba32b7159a0de1f1a18c4", "testharness" ], "css/css-animations/parsing/animation-fill-mode-valid.html": [ "1f73a821d15119d6a8fc2720d53f6cefdd29fb5d", "testharness" ], + "css/css-animations/parsing/animation-invalid.html": [ + "c5790a3fafa4cbdb73126c98596506e3ed796310", + "testharness" + ], "css/css-animations/parsing/animation-iteration-count-computed.html": [ "0ac53aa65184020b65669807c699ef6c55362af2", "testharness" ], "css/css-animations/parsing/animation-iteration-count-invalid.html": [ - "ff1e8e23a08cf58c08922eb40145e916852c0562", + "621340f7c3d87b7edb19a3db94e9dc759014d7c8", "testharness" ], "css/css-animations/parsing/animation-iteration-count-valid.html": [ @@ -540772,25 +541657,33 @@ "testharness" ], "css/css-animations/parsing/animation-play-state-invalid.html": [ - "f47a2f75ddfc35a279037ada8df34077bd1308ab", + "91a6f017370a7cf6089d610e2666f64c61a8c98f", "testharness" ], "css/css-animations/parsing/animation-play-state-valid.html": [ "ce6d053ec2736ec8d5e8420b3d1a1e4f07fd04ed", "testharness" ], + "css/css-animations/parsing/animation-shorthand.html": [ + "2e3053e7afcc6eaa7cd2b3912b37b80295ea426d", + "testharness" + ], "css/css-animations/parsing/animation-timing-function-computed.html": [ "99bc12ccaa8f24ae5db06cfd0d78d3bd0c015bef", "testharness" ], "css/css-animations/parsing/animation-timing-function-invalid.html": [ - "adc1cc10e39d09df78c4398ffca008739d751076", + "621145b0e004c583d4a0131eb10d4875fe17da3b", "testharness" ], "css/css-animations/parsing/animation-timing-function-valid.html": [ "7ab823ea1da1535606ac4aad30fb21f423ba6703", "testharness" ], + "css/css-animations/parsing/animation-valid.html": [ + "65de3c6fcfed3f69fa798fa19425bdc054e0700b", + "testharness" + ], "css/css-animations/pending-style-changes-001.html": [ "fb74d7fa7d062d60153d47913df9eb2b0c7267c8", "testharness" @@ -540836,7 +541729,7 @@ "testharness" ], "css/css-backgrounds/animations/border-image-outset-interpolation.html": [ - "d4726e87d119462a703cc7ac504e8025f3874680", + "aebadbbafb236a090aa543ecf82e5661bee7de74", "testharness" ], "css/css-backgrounds/animations/border-image-slice-interpolation.html": [ @@ -543779,6 +544672,10 @@ "6e4d28e7983d62979f4dad843c007b964db00706", "testharness" ], + "css/css-backgrounds/parsing/border-color-shorthand.html": [ + "012567830eaea7eaf65b33539c0f207639b94c24", + "testharness" + ], "css/css-backgrounds/parsing/border-color-valid.html": [ "a4cd7748ac207427812235e9868012b1a193641c", "testharness" @@ -543811,6 +544708,10 @@ "f90ef71191e48ee399eac37cea9c356faaa486f5", "testharness" ], + "css/css-backgrounds/parsing/border-image-shorthand.sub.html": [ + "37fb998d6c2a5ee15fb8d8dd99cfd8942c7372eb", + "testharness" + ], "css/css-backgrounds/parsing/border-image-slice-computed.html": [ "bfc8714d9838b5966cb90119391631538a632e2f", "testharness" @@ -543840,7 +544741,7 @@ "testharness" ], "css/css-backgrounds/parsing/border-image-width-computed.html": [ - "98e5616a22847c0536b25d8a96393aafa9c0a913", + "2c36eda8c785337eae8f3f3eefb2bf92e29b82a0", "testharness" ], "css/css-backgrounds/parsing/border-image-width-invalid.html": [ @@ -543852,7 +544753,7 @@ "testharness" ], "css/css-backgrounds/parsing/border-invalid.html": [ - "71404f2ce3e18fe336f076ce72ad028c4f665861", + "870e741f445e17d7408475aad41a7dc06c5a02cf", "testharness" ], "css/css-backgrounds/parsing/border-radius-computed.html": [ @@ -543867,6 +544768,10 @@ "738362f96933c34fae38e6adfa9a82a556fc1f3b", "testharness" ], + "css/css-backgrounds/parsing/border-shorthand.html": [ + "30491a534ec65abd673a80a278c3f6aa47f82220", + "testharness" + ], "css/css-backgrounds/parsing/border-style-computed.html": [ "e890be11289fa057b1d543f16e8b215f389a6a71", "testharness" @@ -543875,12 +544780,16 @@ "27fa45116fd150d69a77850f837ee43f7032c601", "testharness" ], + "css/css-backgrounds/parsing/border-style-shorthand.html": [ + "b85804e287e669fc69a27249270cbb9704216561", + "testharness" + ], "css/css-backgrounds/parsing/border-style-valid.html": [ "0b592180280ce6c8eb87567e1c39f197353365c3", "testharness" ], "css/css-backgrounds/parsing/border-valid.html": [ - "37b876ce4e97b2aa2ae08cb3447d42a658fcf56d", + "8c52b428ba93bb81817336f3eddba61a6fff6cce", "testharness" ], "css/css-backgrounds/parsing/border-width-computed.html": [ @@ -543891,6 +544800,10 @@ "ec7eb72a9ac404a59390b9c89f7ae710f6620412", "testharness" ], + "css/css-backgrounds/parsing/border-width-shorthand.html": [ + "07461bc94d96aa39f82d58f3fbc9237072070226", + "testharness" + ], "css/css-backgrounds/parsing/border-width-valid.html": [ "552416df3d2fe1a08aeb8145c5d263770543aa5e", "testharness" @@ -544603,6 +545516,10 @@ "77009170938d9634497f73bc21501ced502c7008", "testharness" ], + "css/css-box/parsing/margin-shorthand.html": [ + "293927983e504a3227335944ab05f966d51cccd6", + "testharness" + ], "css/css-box/parsing/margin-valid.html": [ "154aa2de7cb16ca0845f8368e731ec5c941108cb", "testharness" @@ -544655,6 +545572,10 @@ "3e3a560c2f71877494577f9dbc5c2eecfbab8a62", "testharness" ], + "css/css-box/parsing/padding-shorthand.html": [ + "dc0139dc47a70688cd8667e6069b4ba5654b7b1c", + "testharness" + ], "css/css-box/parsing/padding-valid.html": [ "0d3d51e86bb015dd5720041cdae671a29a74c77b", "testharness" @@ -544859,6 +545780,14 @@ "f68b7c046d9d22994dbc78c722b5004f1253027f", "reftest" ], + "css/css-cascade/all-prop-initial-visited-ref.html": [ + "f596b559b0e26b9c03d47b7dcab966a4d091308b", + "support" + ], + "css/css-cascade/all-prop-initial-visited.html": [ + "6fb7936652a77dade7d5e72032064b67d2886637", + "reftest" + ], "css/css-cascade/all-prop-initial-xml.html": [ "a04956a52d1f120583c26a462356ba8e47ac1277", "testharness" @@ -547007,6 +547936,10 @@ "a78e9f713b2428763ed4244aae1b6269a15d6637", "reftest" ], + "css/css-content/inheritance.html": [ + "a3242556fdcb4d5fea0d4d28fba6067ed02b340c", + "testharness" + ], "css/css-content/pseudo-element-inline-box-ref.html": [ "8294ae672d15643b1d8eeb8c9914fa93fe4e879a", "support" @@ -550215,6 +551148,10 @@ "983cac476e83ae97355cc6ad3fc55c6f732a6bf2", "reftest" ], + "css/css-flexbox/flex-minimum-height-flex-items-019.html": [ + "3572a6cc88e50ade3a8f7faff5a343bc84d9f581", + "reftest" + ], "css/css-flexbox/flex-minimum-width-flex-items-001.xht": [ "cd18483ba414160c46e30bc282dec0c2fcd2f418", "reftest" @@ -552347,6 +553284,10 @@ "e82c284632dd5b3babbd3979958874013bf3b9aa", "testharness" ], + "css/css-flexbox/parsing/flex-flow-shorthand.html": [ + "6ae19bdc044dd31b11448e407204accfb0340632", + "testharness" + ], "css/css-flexbox/parsing/flex-flow-valid.html": [ "01acd435096db60d214a0b07cb24fccdfded9c93", "testharness" @@ -552367,6 +553308,10 @@ "ae010d7b4b4540f6591c1ad42f1c89753a71afc6", "testharness" ], + "css/css-flexbox/parsing/flex-shorthand.html": [ + "51e01794154edbe475e57d2ca6fb93de65dea8bd", + "testharness" + ], "css/css-flexbox/parsing/flex-shrink-computed.html": [ "69a6d8c52b61f162f9c7333f53ed44145e51913f", "testharness" @@ -552424,7 +553369,7 @@ "reftest" ], "css/css-flexbox/percentage-heights-003.html": [ - "9d434cf7cb8ba2023c126391032985d3d3b7c5d9", + "c27af532169a349be42379ab9949afec15b47ae2", "testharness" ], "css/css-flexbox/percentage-heights-004-ref.html": [ @@ -562919,6 +563864,10 @@ "b36fbb2bbc8ce403632769e1a098f9560e910221", "reftest" ], + "css/css-grid/grid-items/grid-item-dynamic-min-contribution-001.html": [ + "c4ced6b2a12e0f080d6df2fccc8f74270f45683c", + "testharness" + ], "css/css-grid/grid-items/grid-item-min-auto-size-001.html": [ "f50e9ef312418f4d3b737bd55b4a7e5c75f09230", "testharness" @@ -563027,6 +563976,54 @@ "e45530b2fd4a380ba62c3b42ba52157cec098a00", "testharness" ], + "css/css-grid/grid-items/grid-items-percentage-margins-003.html": [ + "03d5d7f2c499b00cda96b8235a11852998900259", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-margins-004.html": [ + "52e6f3bf1a688af98bd28d68f8d7e0ddde3ebee5", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-margins-005.html": [ + "9cff92d1aa0ccdf2aa2dd0c89b4bd626778d1214", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-margins-006.html": [ + "04d30e3edfc9920fb22f645549b00497ba0241fb", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-margins-007.html": [ + "2906fe0608704a1b8413fa7a24db140667254283", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-margins-008.html": [ + "7bd2e0fc5f4f24b35ff37c61c0b20c1b2ab61571", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-margins-009.html": [ + "70a6c231dc91b1b2f866e9cd4463860ce9f58c4f", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-margins-010.html": [ + "34352f60020ec44e4d5f27344818bdb476de694e", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-margins-011.html": [ + "36bd208df007332656acbb4b3ffb5aac86675c82", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-margins-012.html": [ + "9cdc15337a936724b8ce157638544f4f9e35b65c", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-margins-013.html": [ + "581415b828e6d54056fe94e5145e276e7e428352", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-margins-014.html": [ + "5766e60339a0d83568c93a7f750976dbb9955e6a", + "reftest" + ], "css/css-grid/grid-items/grid-items-percentage-margins-vertical-lr-001.html": [ "aa0ff96985878c5f21d7e7a8175b1351e9841656", "testharness" @@ -563051,6 +564048,54 @@ "3175469fb08361398658ebcfabb553909aa9c080", "testharness" ], + "css/css-grid/grid-items/grid-items-percentage-paddings-003.html": [ + "d85a6c1abcfac6c2ecf6bfc1251ba41b58fbab89", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-004.html": [ + "26302daf2d606637930ea41971f3d6066f782a2b", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-005.html": [ + "151b604f9bb7c7defdb5edf558ed207777cc0903", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-006.html": [ + "bcbc7ced73a77ebfb1e2aa027383f868bf38fe87", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-007.html": [ + "d4cf80c18df05bf06406eccf8aefe7050ed4025f", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-008.html": [ + "38f766b5cfffcca21906203c8c3472dd1230b197", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-009.html": [ + "eb1d1f47f28c3daefd78e9e98881459f91c2046d", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-010.html": [ + "ecd430c68d41698b328341eb9d9e2daba2a7848c", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-011.html": [ + "e394ced4e6e52f3379428d3ad854bcab0b3cb38d", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-012.html": [ + "07b2d27b58173a84851c4836c85281efa818c2e4", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-013.html": [ + "9b6c2bfe0ad261358ff7657752bd3bc3dff0896d", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-014.html": [ + "9e67960913a25f0fe1cfe137ceca5d11ebf0b43f", + "reftest" + ], "css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-001.html": [ "6ad624a0a262067eb6e3b0724989ab01ca04f6a1", "testharness" @@ -563667,6 +564712,10 @@ "b989322775eb7dbf273a3dc3fbb3d1af31f524ba", "testharness" ], + "css/css-grid/parsing/grid-area-shorthand.html": [ + "9a265502d5c0dfd1b2ebb7ed54b81514216af826", + "testharness" + ], "css/css-grid/parsing/grid-area-valid.html": [ "8e7d0d43d1cfac44935593892b67fdb40b179791", "testharness" @@ -563676,7 +564725,7 @@ "testharness" ], "css/css-grid/parsing/grid-auto-columns-invalid.html": [ - "40b6059a7e8b564a4aef5393a7be77cbaa1ff4a2", + "04e0fadf0df2824a499bede7f2fe80e410a29e1a", "testharness" ], "css/css-grid/parsing/grid-auto-columns-valid.html": [ @@ -563700,7 +564749,7 @@ "testharness" ], "css/css-grid/parsing/grid-auto-rows-invalid.html": [ - "4111e2563365579b3810c701a782df54dce3c61e", + "1b61479f3c2f51c23a3be59a7d90b179de1407ca", "testharness" ], "css/css-grid/parsing/grid-auto-rows-valid.html": [ @@ -563724,7 +564773,7 @@ "testharness" ], "css/css-grid/parsing/grid-template-columns-valid.html": [ - "85ac76a999aab5adf628a8e38f626fcae299d12f", + "6bf2e7bce63c88d028f5dea1bf3e7be8cab7775c", "testharness" ], "css/css-grid/parsing/grid-template-rows-invalid.html": [ @@ -563732,7 +564781,11 @@ "testharness" ], "css/css-grid/parsing/grid-template-rows-valid.html": [ - "ec8d64f79bacc1d7831e415768c2a76bf05607e0", + "2d3a1ed8045c3eef9982cffc3f95415518f560cb", + "testharness" + ], + "css/css-grid/parsing/grid-template-shorthand.html": [ + "b9165359a7250afab60463878b9beb8592424f58", "testharness" ], "css/css-grid/placement/grid-auto-placement-implicit-tracks-001.html": [ @@ -565559,6 +566612,10 @@ "ff0c8366bb988fafe72746837a330801ae2fe34b", "testharness" ], + "css/css-lists/parsing/list-style-shorthand.sub.html": [ + "140df208aab9e8c7811de14bd96b99bad7d89752", + "testharness" + ], "css/css-lists/parsing/list-style-type-computed.html": [ "21230f31b05058e23f004cfe1a53fa09835372af", "testharness" @@ -565803,6 +566860,10 @@ "604b801c76040a5058612fd19c75ee66107081ed", "testharness" ], + "css/css-logical/parsing/inset-shorthand.html": [ + "4557879129e006980d2775658aadece56458ba35", + "testharness" + ], "css/css-logical/parsing/inset-valid.html": [ "2d8f937f075b0d0fbde677e15266f47af5fec3f8", "testharness" @@ -574176,7 +575237,7 @@ "testharness" ], "css/css-scroll-snap/scroll-margin.html": [ - "c85232edf23876a1ab37d858c4d59940b183e01e", + "e6ce4ac49c01ff65823fd83ee6866a6019701f6e", "testharness" ], "css/css-scroll-snap/scroll-padding.html": [ @@ -577367,6 +578428,10 @@ "3dd2d0c834ec8c7340b093a4c7a1272fb35a8a26", "testharness" ], + "css/css-text-decor/parsing/text-decoration-shorthand.html": [ + "904313f0528de50541d88b3db89902bdbf721cfe", + "testharness" + ], "css/css-text-decor/parsing/text-decoration-skip-ink-computed.html": [ "0b4807cec08a818c07a3d3bcaefc2092ecca9c14", "testharness" @@ -589332,7 +590397,7 @@ "reftest" ], "css/css-transitions/AnimationEffect-getComputedTiming.tentative.html": [ - "4b6a28b5694f52103bcb6b383dbcd1ad6553cf3a", + "32c15f07a96a2a1cf99068e303f17296aa71e96e", "testharness" ], "css/css-transitions/CSSPseudoElement-getAnimations.tentative.html": [ @@ -589376,7 +590441,7 @@ "testharness" ], "css/css-transitions/KeyframeEffect-getKeyframes.tentative.html": [ - "08a90734392c2e14c0b2593144796e713ff0a20d", + "47b769b13a92971ccb02acd6ea61c1bda53f847f", "testharness" ], "css/css-transitions/KeyframeEffect-target.tentative.html": [ @@ -589484,7 +590549,7 @@ "testharness" ], "css/css-transitions/parsing/transition-delay-invalid.html": [ - "b34d50551ce433ebe672c7fddb4a549582c754db", + "4b7a14328601ebf6f38e016d5844744bac1a3839", "testharness" ], "css/css-transitions/parsing/transition-delay-valid.html": [ @@ -589496,35 +590561,47 @@ "testharness" ], "css/css-transitions/parsing/transition-duration-invalid.html": [ - "fd0f341f4071b53561cf8b072bb105d3bd1a4563", + "4474089bbb0f89fdfc83a8436c7d5926e046256f", "testharness" ], "css/css-transitions/parsing/transition-duration-valid.html": [ "311ca086695151747559a0995b61c7fe4c755592", "testharness" ], + "css/css-transitions/parsing/transition-invalid.html": [ + "64310b13a15e982402e1d8c3b3d6daad5be67676", + "testharness" + ], "css/css-transitions/parsing/transition-property-computed.html": [ "1e8cfeb22ddfbba2225494e16fdb0b27732a3ed0", "testharness" ], "css/css-transitions/parsing/transition-property-invalid.html": [ - "903a206eac13688a51ff2ba88552de67efa2e9cb", + "715e13d7a249d8762350070c7c47aa8043297b54", "testharness" ], "css/css-transitions/parsing/transition-property-valid.html": [ "4e3894f5aa94e00aa59406ee1aab92b9226483af", "testharness" ], + "css/css-transitions/parsing/transition-shorthand.html": [ + "caffb3978cf0162cb8616c6723c6cb93e33750b4", + "testharness" + ], "css/css-transitions/parsing/transition-timing-function-computed.html": [ - "9834dfdbf0dde78d0d2c1b468c5badddc2460ac9", + "fa03b2295b9c2f92ab4e520cc75153d9eaa6e672", "testharness" ], "css/css-transitions/parsing/transition-timing-function-invalid.html": [ - "00bd2131e0927ba38e633ad7be404b8ec26e51a9", + "c69b7e75d3d3ef31df4f6ec927b8fbf2032484d6", "testharness" ], "css/css-transitions/parsing/transition-timing-function-valid.html": [ - "2e2c1827bfbef9d4cc58e32ec88da3c7fd614225", + "5402fdac195b2dc2d68553d593e1924f5c3be695", + "testharness" + ], + "css/css-transitions/parsing/transition-valid.html": [ + "c4651f5f125f40c0ec75f6d58b2641fa78b47cf0", "testharness" ], "css/css-transitions/properties-value-001.html": [ @@ -589791,36 +590868,36 @@ "9a74bebfb7a45765cac3693b1461953ea75cef92", "testharness" ], - "css/css-transitions/transition-delay-000.html": [ - "2b4cedbb52405903e367ea6ca7a39dcca3b167b6", + "css/css-transitions/transition-delay-000-manual.html": [ + "b205085997ced154dd81e5085dbc6a0cfce19045", "manual" ], "css/css-transitions/transition-delay-001.html": [ "921525ea72d2e1e28d2321c1594085deaf2330f0", "testharness" ], - "css/css-transitions/transition-delay-002.html": [ - "70e952b308c35affc5f7bdfbc66326df49ba6397", + "css/css-transitions/transition-delay-002-manual.html": [ + "168f94b9c054b481df7ccea0c5e07b8643715c8c", "manual" ], - "css/css-transitions/transition-delay-003.html": [ - "3062e9a4842dcb5ecfd3b59c26260b412cd3b573", + "css/css-transitions/transition-delay-003-manual.html": [ + "e3680ca2615ab3d490467101c047a42153a46d61", "manual" ], "css/css-transitions/transition-duration-001.html": [ "b5c095f001efb373934850db67527ace118e10cd", "testharness" ], - "css/css-transitions/transition-duration-002.html": [ - "e9ba5760c605e28e698411f73f3280cc453b9637", + "css/css-transitions/transition-duration-002-manual.html": [ + "03f514d365d165d777e43f83142e801f4f9833d9", "manual" ], - "css/css-transitions/transition-duration-003.html": [ - "bb68b5f51c1a5c6dc84de7499599472bc286ad39", + "css/css-transitions/transition-duration-003-manual.html": [ + "cb561008836236752f0ed37ad68159481e71596f", "manual" ], - "css/css-transitions/transition-duration-004.html": [ - "01c42473319d90130f9aec5df39a28a287aff7ed", + "css/css-transitions/transition-duration-004-manual.html": [ + "b93904bb7667b7c5afa7f9fdcd3dad524e2f9f41", "manual" ], "css/css-transitions/transition-property-001.html": [ @@ -589831,176 +590908,176 @@ "99196b6d1d4ec86be77930d578602110b6a7deb6", "testharness" ], - "css/css-transitions/transition-property-003.html": [ - "17668b053e83e102565e341dd337ffc2b4544cf4", + "css/css-transitions/transition-property-003-manual.html": [ + "291204d5752e5fcb9c7b8fb8ef32a95d7d4b1813", "manual" ], - "css/css-transitions/transition-property-004.html": [ - "6393c6e3d54f59e8ae9cde42eda248d0c891f68d", + "css/css-transitions/transition-property-004-manual.html": [ + "d2e84c99d69003d46c439ce6c623594390701a2a", "manual" ], - "css/css-transitions/transition-property-005.html": [ - "a10ff4a3c1acd4cf31d18bc510f228ed416085ae", + "css/css-transitions/transition-property-005-manual.html": [ + "e69941001bca8c441cdb66aaf4582d7e3c336afc", "manual" ], - "css/css-transitions/transition-property-006.html": [ - "e7d8c5e39462d526b4ee60f97046fe14f5e904a1", + "css/css-transitions/transition-property-006-manual.html": [ + "6032a401d0cfea4a717a3c07ebaca841857aef72", "manual" ], - "css/css-transitions/transition-property-007.html": [ - "0d006fe9b0b1101a03528aa085ceda850deb621c", + "css/css-transitions/transition-property-007-manual.html": [ + "898aea5b2079caa0d66a94b673feb8e42ee69dfc", "manual" ], - "css/css-transitions/transition-property-008.html": [ - "47ca1eee1053ca272eb72f3b6e5eaaa1a9343807", + "css/css-transitions/transition-property-008-manual.html": [ + "53caa1028a47fafec6b2d07a3aa58e7c709cd2d8", "manual" ], - "css/css-transitions/transition-property-009.html": [ - "b45948b9dd6040af8dd3f2e7dfdcec1c6002cd58", + "css/css-transitions/transition-property-009-manual.html": [ + "5f272854eb2e3f3ebf1dcd8f5130ef100218ec28", "manual" ], - "css/css-transitions/transition-property-010.html": [ - "f05f6aa133e2852aa75b7fa43dc3637964ad1741", + "css/css-transitions/transition-property-010-manual.html": [ + "a7e06ef78072f6ea6944e35495e1be70b232c499", "manual" ], - "css/css-transitions/transition-property-011.html": [ - "7b3716dde8adfc3cab36d38115a83702388808d8", + "css/css-transitions/transition-property-011-manual.html": [ + "3799ad212aebddb60c3f1818129e7a4d71e5bfb7", "manual" ], - "css/css-transitions/transition-property-012.html": [ - "0e19e52d62abcfd5d4f3852000ce99634a860b3d", + "css/css-transitions/transition-property-012-manual.html": [ + "8587e264119c455f1d7bb8d882c3a290e3248124", "manual" ], - "css/css-transitions/transition-property-013.html": [ - "9fb075b09d2b0f04556916cbb4afcbf29e0a021b", + "css/css-transitions/transition-property-013-manual.html": [ + "3b13c038161e1a2037f838c8133330425a42e700", "manual" ], - "css/css-transitions/transition-property-014.html": [ - "91075ff638f32d1b6f958019c7862fdf171f0475", + "css/css-transitions/transition-property-014-manual.html": [ + "d4aca3805b3b983bc1e3363abd8ba5b33ea71ef7", "manual" ], - "css/css-transitions/transition-property-015.html": [ - "b37d4fc9a7beae894eb63fb98aa3fe9d6dcc039f", + "css/css-transitions/transition-property-015-manual.html": [ + "e5805bc4ba6882394c1b45932ce97eaab71afc43", "manual" ], - "css/css-transitions/transition-property-016.html": [ - "2670cd7385222e0959553c376193ea94e76ade39", + "css/css-transitions/transition-property-016-manual.html": [ + "d2cc57cd9796d819aa914dcad7ff0525266cb64e", "manual" ], - "css/css-transitions/transition-property-017.html": [ - "3b94ecde0c51b82d4650834181c25718576fd327", + "css/css-transitions/transition-property-017-manual.html": [ + "f24c51a7383b76c2dd56db5e1d69eb6c3808cc0c", "manual" ], - "css/css-transitions/transition-property-018.html": [ - "593e3ff71944fde48c84ae99191242a9078ea5ee", + "css/css-transitions/transition-property-018-manual.html": [ + "e0b6bd955b5e2b65b131d21f5ea5a646c00afed0", "manual" ], - "css/css-transitions/transition-property-019.html": [ - "83f900005469647bd05cf7080e41fd59c1b641ef", + "css/css-transitions/transition-property-019-manual.html": [ + "24751292c2886a761e90ed009543768747ffff29", "manual" ], - "css/css-transitions/transition-property-020.html": [ - "af0aea41bcd4615825a961778ab499f61a718f8a", + "css/css-transitions/transition-property-020-manual.html": [ + "e4f7b577920f321453e5a25aadc1d814c4e3ac91", "manual" ], - "css/css-transitions/transition-property-021.html": [ - "f499c9aee43f50bb0a74acfba1fa412976a994ad", + "css/css-transitions/transition-property-021-manual.html": [ + "c0492223bbf6043cd5b93f9290640bceaf53f338", "manual" ], - "css/css-transitions/transition-property-022.html": [ - "f36954902e3667eb305340075d5952344cc62bbd", + "css/css-transitions/transition-property-022-manual.html": [ + "ece1a32eb09ee3baf7f38ca39da5530774af81c8", "manual" ], - "css/css-transitions/transition-property-023.html": [ - "81c8cadac422bcbb48b88a053ae0df564a0a0242", + "css/css-transitions/transition-property-023-manual.html": [ + "267be61aa1560646ffcb12693f4783942242a51c", "manual" ], - "css/css-transitions/transition-property-024.html": [ - "b0e9d41dbc0dd0628adf9894fb6811f559efa45a", + "css/css-transitions/transition-property-024-manual.html": [ + "fad3d7ac239ceb28f26d6ae40a2eff88af7690aa", "manual" ], - "css/css-transitions/transition-property-025.html": [ - "bfa6f698930d13412d6c19a424aefb2c566c27a7", + "css/css-transitions/transition-property-025-manual.html": [ + "c0f276184894a29f1abd5eb46322f6b0a4a5ffe5", "manual" ], - "css/css-transitions/transition-property-026.html": [ - "d6f0481bea7ad1b54ba2d44efd62513ec834b221", + "css/css-transitions/transition-property-026-manual.html": [ + "35846e3fb5334cf049f1031e6c542e46105ba5f8", "manual" ], - "css/css-transitions/transition-property-027.html": [ - "01f50dc475ab5fd3ad0f7094d7efa1db0ad362b9", + "css/css-transitions/transition-property-027-manual.html": [ + "5ad5f5d5bd5187593a421b261758227e464f5204", "manual" ], - "css/css-transitions/transition-property-028.html": [ - "83d8751109b1e29e76aaa98fedce03f205b68a63", + "css/css-transitions/transition-property-028-manual.html": [ + "be319d2c21204d6ba6bbdb1e6be454782a49203a", "manual" ], - "css/css-transitions/transition-property-029.html": [ - "fb435c91249d691862b24a63f5f5b9c35166afb8", + "css/css-transitions/transition-property-029-manual.html": [ + "84c55326fe8ab2c5f3b20d07939a15de60ba42d0", "manual" ], - "css/css-transitions/transition-property-030.html": [ - "286af42e12cc2c8249d1bc1e2ca14f3aedba0293", + "css/css-transitions/transition-property-030-manual.html": [ + "ba75f7ce725f320cf4d478273adfa22e47f5ff6a", "manual" ], - "css/css-transitions/transition-property-031.html": [ - "d5bf23276f7e594f77f86f9b292fe134a57aabed", + "css/css-transitions/transition-property-031-manual.html": [ + "14cf23c6bdc649f09862f2a573008171177a882f", "manual" ], - "css/css-transitions/transition-property-032.html": [ - "020a8573c8729efeb49e1bde33d7942c8f89f70f", + "css/css-transitions/transition-property-032-manual.html": [ + "c6596608ed13fd93ce60c1ca5d05f5dabd8e6157", "manual" ], - "css/css-transitions/transition-property-033.html": [ - "fcb999fa079be9df7569e57af8019d93b8b9905b", + "css/css-transitions/transition-property-033-manual.html": [ + "fd7646c66bc47827794ebd0792b7586216dbe2af", "manual" ], - "css/css-transitions/transition-property-034.html": [ - "b4da3a9bca07ba24040e1723baa4662c1d83af95", + "css/css-transitions/transition-property-034-manual.html": [ + "07804121c9c862b4bcc2e1babf9c65c17d71e206", "manual" ], - "css/css-transitions/transition-property-035.html": [ - "27c9ea9e1d8e8721224bd3bbe46405dffbcab90f", + "css/css-transitions/transition-property-035-manual.html": [ + "4a9e9b128fd5402c97bb64fdbaaa1706814c18c5", "manual" ], - "css/css-transitions/transition-property-036.html": [ - "326e615398c5905e92bdacec50b22effa23b3572", + "css/css-transitions/transition-property-036-manual.html": [ + "746bc409ee0e92d6e0588079dff63e4a0e89a68d", "manual" ], - "css/css-transitions/transition-property-037.html": [ - "79ce16fb961c9f3bfceda7bf996afb7aef05381f", + "css/css-transitions/transition-property-037-manual.html": [ + "d031caaaa405fcf57b44890ee97159f28d88fc42", "manual" ], - "css/css-transitions/transition-property-038.html": [ - "5b16e41f578b70217b2ca1b406fb1a9d1f571248", + "css/css-transitions/transition-property-038-manual.html": [ + "2f9302bad7593a24a6617a91d388202afed979ef", "manual" ], - "css/css-transitions/transition-property-039.html": [ - "0ef6da528cb81c746c799ec2fb84c0c6f0f1d872", + "css/css-transitions/transition-property-039-manual.html": [ + "bf0b209bdad43712bb42fdf41d14328b4d4ac5f8", "manual" ], - "css/css-transitions/transition-property-040.html": [ - "b333f371f3f974467c745d4cbfa4165077c1aa61", + "css/css-transitions/transition-property-040-manual.html": [ + "83a3cf802b3e00fc717d01de51f8824a15af71ed", "manual" ], - "css/css-transitions/transition-property-041.html": [ - "b3386a0534f190d15e5251c31e59c05a779dc4af", + "css/css-transitions/transition-property-041-manual.html": [ + "04f8351a0309f5b4e10c610a6c07325944492220", "manual" ], - "css/css-transitions/transition-property-042.html": [ - "fbb3e2d8b1ad7208b40d669e70b5f41e75601c6a", + "css/css-transitions/transition-property-042-manual.html": [ + "15977497fbb81be0a86f24ce52a7e6359e18bf98", "manual" ], - "css/css-transitions/transition-property-043.html": [ - "b87dc84a85636d4c1cc32a4a2716b33ecf28b370", + "css/css-transitions/transition-property-043-manual.html": [ + "3b939bcf0ab8d5800ac2e0088da0774f56e28028", "manual" ], - "css/css-transitions/transition-property-044.html": [ - "f1d584fcf25396db414078066302ce2f7bb979f2", + "css/css-transitions/transition-property-044-manual.html": [ + "d7c2f467492d9e234467956e3409b9665cee9e9d", "manual" ], - "css/css-transitions/transition-property-045.html": [ - "3fa82c16d1f9e7f01760003c07bdfbc38afa060d", + "css/css-transitions/transition-property-045-manual.html": [ + "912ed4df50ccc545c0a7c77f4cc43c0b75104c4a", "manual" ], "css/css-transitions/transition-reparented.html": [ @@ -590011,56 +591088,28 @@ "10700abf9bc48d0938fd3f5b77b031ecc0c05e4a", "reftest" ], - "css/css-transitions/transition-timing-function-001.html": [ - "4c9598f3919b84dc79d7c92c76b74b7f950423aa", - "testharness" - ], - "css/css-transitions/transition-timing-function-002.html": [ - "527eb9e85ad4dc4944b39e83c1a0d79b8f515ddb", - "manual" - ], - "css/css-transitions/transition-timing-function-003.html": [ - "353b94e7eca1e3f837d5c0e0ec02c1c0167b19a3", - "manual" - ], - "css/css-transitions/transition-timing-function-004.html": [ - "0601b4bd148a113ef0f5e0b5f6b3c33cf40c38b5", + "css/css-transitions/transition-timing-function-002-manual.html": [ + "abd729bdedeff531c08279f1b4c4a7399b69d0c2", "manual" ], - "css/css-transitions/transition-timing-function-005.html": [ - "eb46ece6044fe5d204b8dde056e655179732ef90", + "css/css-transitions/transition-timing-function-003-manual.html": [ + "9fee35a972ed2f1790dd6c58140e92248044bfa7", "manual" ], - "css/css-transitions/transition-timing-function-006.html": [ - "d8640d9304778f2ad41f56a90ba23486e8d59f34", + "css/css-transitions/transition-timing-function-004-manual.html": [ + "f57d49aeabb305bfea5281d159382c334f37ac8c", "manual" ], - "css/css-transitions/transition-timing-function-007.html": [ - "72ffbf6a1302c1858bf7880bfa033793c72b40d1", + "css/css-transitions/transition-timing-function-005-manual.html": [ + "27726cd6d5b3bd4bc9532d64e2062318dd019574", "manual" ], - "css/css-transitions/transition-timing-function-008.html": [ - "2e20f7ee5f2a9ff9602222635a7723850fbd9e51", + "css/css-transitions/transition-timing-function-006-manual.html": [ + "d97e6bb07694d5b19dffba48a3890f0c07f15d03", "manual" ], - "css/css-transitions/transition-timing-function-009.html": [ - "a3e2f1a6bd2226a24484899c2a1f3126967989dc", - "manual" - ], - "css/css-transitions/transition-timing-function-010.html": [ - "16af80655189fe64a1be1612910eca3f2aa449d4", - "manual" - ], - "css/css-transitions/transition-timing-function-011.html": [ - "5d0f5a25b25aae82fc73e8a52a419f92350b5e3c", - "manual" - ], - "css/css-transitions/transition-timing-function-012.html": [ - "f3bc812217e4a31153187ab33478f461571e089e", - "manual" - ], - "css/css-transitions/transition-timing-function-013.html": [ - "5d89c45e0245ba4fedcd84905a59e3e8580319a8", + "css/css-transitions/transition-timing-function-010-manual.html": [ + "953d7210b6d725cc668887ff592cc630ced88aec", "manual" ], "css/css-transitions/transitioncancel-001.html": [ @@ -592691,6 +593740,10 @@ "75fc7e60bd9dc3f249b8340cf342b68fa45b7d68", "testharness" ], + "css/css-ui/parsing/outline-shorthand.html": [ + "01239e199e651ff53237c19c4a76a500338e8514", + "testharness" + ], "css/css-ui/parsing/outline-style-computed.html": [ "3824b8d59815b20206a90e428644942ac220c68c", "testharness" @@ -594427,6 +595480,18 @@ "fee5e92a9312f80b6d36966b721d01269f1ad30b", "reftest" ], + "css/css-values/clamp-length-computed.html": [ + "67dc19a99f4d687745f27b7548d44e2795981d42", + "testharness" + ], + "css/css-values/clamp-length-invalid.html": [ + "68c298b7ffc431d58025c0c9c5c2163db3742334", + "testharness" + ], + "css/css-values/clamp-length-serialize.html": [ + "4719e4c0254902bb1c2234c4cfc1c4003a8df0d4", + "testharness" + ], "css/css-values/ex-calc-expression-001-ref.html": [ "888a51ea9b6ac04fb065ee5d84a18be8fe765aca", "support" @@ -594523,6 +595588,10 @@ "73069ecfe1e6d5b198f6e01df48facbe117d6828", "reftest" ], + "css/css-values/min-max-percentage-length-interpolation.html": [ + "14af1352d1740d32cd52ab069ab1799f87803f5d", + "reftest" + ], "css/css-values/minmax-angle-computed.html": [ "84e598a8147e123285d54876f942a0df0a5bf57f", "testharness" @@ -604859,6 +605928,10 @@ "188a65b715291b33d93d8a6af88c2a7f6e25858c", "reftest" ], + "css/mediaqueries/aspect-ratio-serialization.html": [ + "cce35592885f29eafd2c5c1b94a0da173217fc2a", + "testharness" + ], "css/mediaqueries/device-aspect-ratio-001.html": [ "60f49b9b3cfedaf8136dcb568570ef71124cba8b", "reftest" @@ -604951,6 +606024,10 @@ "d039281c0254e2bb794e229baecbe4d39c547baa", "reftest" ], + "css/mediaqueries/navigation-controls.tentative.html": [ + "ac1087bb65b9a8fd85d924ad1ae0de797762dac5", + "testharness" + ], "css/mediaqueries/prefers-color-scheme.html": [ "c6ca45ab17201466e01006cab78331a0765cc6c8", "testharness" @@ -605020,7 +606097,7 @@ "testharness" ], "css/motion/animation/offset-interpolation.html": [ - "04f4d4b3bd78f95939c34aa098b85a7947d4fcbd", + "2ee011bd77a975e9b566d24658995693c574f620", "testharness" ], "css/motion/animation/offset-path-interpolation-001.html": [ @@ -605304,7 +606381,7 @@ "testharness" ], "css/motion/parsing/offset-parsing-valid.html": [ - "3fe8a5b20d805ae3d330b8c653593b6b0c0e0d9e", + "7f8a0fd34c329178e42908edd27858d577cdbad1", "testharness" ], "css/motion/parsing/offset-path-computed.html": [ @@ -607416,7 +608493,7 @@ "support" ], "css/support/interpolation-testcommon.js": [ - "e7ee011cdb470ee228a8a32442d6a717ef6ffd0a", + "24c47e136c8d98603238a09dbb64bd79cd6751d2", "support" ], "css/support/parsing-testcommon.js": [ @@ -607464,7 +608541,7 @@ "support" ], "css/support/shorthand-testcommon.js": [ - "1fd603c290c14d4672fc8f63f2d964da9867be78", + "3298113513fb1e34311a6e7f34dd2d20cfe0c870", "support" ], "css/support/square-purple.png": [ @@ -614160,7 +615237,7 @@ "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-margin-box-border-radius-008-ref.html": [ - "f5edbedfb74e763fdcdc1451d538caeda5c023c0", + "7cf8fafc933623c8a7912e8912a96d2fb178f8b5", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-margin-box-border-radius-008.html": [ @@ -618731,6 +619808,10 @@ "9f6d871417dcb006380f6e59bd0c0a031fd7e78e", "testharness" ], + "dom/nodes/MutationObserver-sanity.html": [ + "a4f6382b944db4b2734ea54c9990dd4135c52557", + "testharness" + ], "dom/nodes/MutationObserver-takeRecords.html": [ "6a27ef77ecacf55a7eaaae18cdd007e017e42cd9", "testharness" @@ -622064,7 +623145,7 @@ "support" ], "encrypted-media/scripts/clearkey-update-non-ascii-input.js": [ - "b34c493fd113a91780bf365800b71b98b6a3bfd6", + "7a5c073bfab150be54d8bce4b890bf36d731f7ef", "support" ], "encrypted-media/scripts/events-session-closed-event.js": [ @@ -622080,11 +623161,11 @@ "support" ], "encrypted-media/scripts/generate-request-disallowed-input.js": [ - "8b883ccacff17468f98df5d9d704c494abbac51d", + "9fd42ee85fa7d9390cbadba60dc4236891e99a54", "support" ], "encrypted-media/scripts/invalid-license.js": [ - "992eef5dcf78961ad8f1c45f939e67330de78c57", + "89d43769e5346c6dc4046d0227af490e029473a2", "support" ], "encrypted-media/scripts/keystatuses-multiple-sessions.js": [ @@ -622180,7 +623261,7 @@ "support" ], "encrypted-media/scripts/requestmediakeysystemaccess.js": [ - "edfcbfc613310ef8db33e9d6ae2d97032ea73783", + "a60d4a1e768618ae0952063e7cdd9192ccfd7ecf", "support" ], "encrypted-media/scripts/reset-src-after-setmediakeys.js": [ @@ -622212,7 +623293,7 @@ "support" ], "encrypted-media/scripts/setmediakeys.js": [ - "f161e6712fd09c43b6659021c33554ba6680a775", + "a85adeaeafc63cf3f8224eee52d89aebab9b6450", "support" ], "encrypted-media/scripts/syntax-mediakeys.js": [ @@ -622220,7 +623301,7 @@ "support" ], "encrypted-media/scripts/syntax-mediakeysession.js": [ - "3663a7b930db8c8d66cc9345a394ee59aa85ae50", + "fac31cbb3e57e9890d83f4c4fb671eaa7de11c3a", "support" ], "encrypted-media/scripts/syntax-mediakeysystemaccess.js": [ @@ -622228,7 +623309,7 @@ "support" ], "encrypted-media/scripts/temporary-license-type.js": [ - "cb0b0e67fefc1558a0e1caeb477d3ef4227165ab", + "44c9f158085fcffd42a8573e080d17939a7a866c", "support" ], "encrypted-media/scripts/unique-origin.js": [ @@ -622236,7 +623317,7 @@ "support" ], "encrypted-media/scripts/update-disallowed-input.js": [ - "b5adaf7f125c10c57d1bde2a19f9536270425f55", + "2a30ad38d4310db6da0f84752b23d46f0a9c81e8", "support" ], "encrypted-media/scripts/waiting-for-a-key.js": [ @@ -622264,7 +623345,7 @@ "support" ], "encrypted-media/util/utils.js": [ - "41bd71f9b880711e088daed2bd223404018b9d8e", + "79f8c7ea6d1b5c5c38131205c20499019ba7371c", "support" ], "entries-api/META.yml": [ @@ -625023,6 +626104,10 @@ "b60ae206c78b3dd8e934dde7a7408fe4a7465932", "testharness" ], + "fetch/sec-metadata/portal.tentative.https.sub.html": [ + "2a9df1f01174c7297f7d207ba1f52de2dd588b0c", + "testharness" + ], "fetch/sec-metadata/prefetch.tentative.https.sub.html": [ "2c230b8949688940067d9bbc151b12f59e20b517", "testharness" @@ -625108,7 +626193,7 @@ "support" ], "fetch/sec-metadata/resources/post-to-owner.py": [ - "c5ded49d71bbc4c8f6d0cc3cc1bd43f9029dcf1b", + "096f33b04a22f34eccbcf9981010ff6e43c8ea79", "support" ], "fetch/sec-metadata/resources/record-header.py": [ @@ -628684,7 +629769,7 @@ "testharness" ], "html/browsers/origin/cross-origin-objects/cross-origin-objects.html": [ - "f664819d3404498dc1ef9ede50c7b1b28fad1933", + "50fe71a2c6fba3c1ec6e42c94dd05899eb24245c", "testharness" ], "html/browsers/origin/cross-origin-objects/frame-with-then.html": [ @@ -635831,6 +636916,14 @@ "f66244ab10ffbfeb5ef64ca7564fdd37794288af", "reftest" ], + "html/rendering/non-replaced-elements/tables/table-column-width-ref.html": [ + "1eb7c00d21413292ffb47e956cf341338d6e26ff", + "support" + ], + "html/rendering/non-replaced-elements/tables/table-column-width.html": [ + "6358e14a3926b4f6b97d32832c45c0ef9237f24d", + "reftest" + ], "html/rendering/non-replaced-elements/tables/table-direction-ref.html": [ "2bbd6c04772fd538426d516d2a2d1b301d05ff3f", "support" @@ -636355,8 +637448,12 @@ "b5f3ec1aa62d8238628409fcda14b189e7ed2a65", "testharness" ], + "html/rendering/replaced-elements/attributes-for-embedded-content-and-images/canvas-aspect-ratio.html": [ + "1d231d52cde8b4758cf834db42231720c374b060", + "testharness" + ], "html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-aspect-ratio.tentative.html": [ - "ae266882b1957080b28f1204a0183c6ca015cadc", + "c9ce86869e10e367a4aadf99d86d1c407ebd1ccf", "testharness" ], "html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-dim-ref.html": [ @@ -636415,6 +637512,10 @@ "55f7f0a3bfeca2c8262ab85f8b1b90f7a705c803", "reftest" ], + "html/rendering/replaced-elements/attributes-for-embedded-content-and-images/video-aspect-ratio.html": [ + "2b4937046d2f20e0dafddf07b1470adec5e7b050", + "testharness" + ], "html/rendering/replaced-elements/embedded-content-rendering-rules/canvas-fallback-ref.html": [ "9077591f46641b6bb7670c62deb1c77e27beb27f", "support" @@ -637579,6 +638680,10 @@ "911aa7b5c96333f78da5ea315e1ca1b8381dcd74", "testharness" ], + "html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document-different-load.html": [ + "4802665cdda09d7d8763b133aed301d43cdce08d", + "testharness" + ], "html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document-networkState.html": [ "df0985d6fb435c25dce510f924b1470878c5602f", "testharness" @@ -647207,6 +648312,10 @@ "4442d513753112fac2e35855268d0b246f01fa09", "testharness" ], + "infrastructure/expected-fail/unhandled-rejection.html": [ + "f25f6e088fa06fbcd38b62929309e761b0060988", + "testharness" + ], "infrastructure/metadata/infrastructure/assumptions/allowed-to-play.html.ini": [ "c9fbabede6d695cd3795e4390b35da0454ffcc34", "support" @@ -647239,6 +648348,10 @@ "0bcdd374f2521b6534208ab750a1c0d36e7dd7ca", "support" ], + "infrastructure/metadata/infrastructure/expected-fail/unhandled-rejection.html.ini": [ + "39773dfe714a6b5754bfe73c64294bcb38f2afa3", + "support" + ], "infrastructure/metadata/infrastructure/reftest/reftest_and_fail.html.ini": [ "81aef049cd122f7332c66f5a087947e512a59d0e", "support" @@ -647636,7 +648749,7 @@ "support" ], "interfaces/IndexedDB.idl": [ - "9373f4e43bf8ab0fe51371839dd614b83c54cb9c", + "2af9eb2a3245d2229dc5b7505713795405ff0ba9", "support" ], "interfaces/InputDeviceCapabilities.idl": [ @@ -647664,7 +648777,7 @@ "support" ], "interfaces/WebIDL.idl": [ - "78d85c13fb9b461e24bc2e6667b7431241f5dfcb", + "a118dfd1a20e439129ab5f73b15ced9523c8d7b8", "support" ], "interfaces/accelerometer.idl": [ @@ -647712,7 +648825,7 @@ "support" ], "interfaces/cookie-store.idl": [ - "533884fdb5865fc5fe87bd73d68983dd4b485676", + "c3204b2515a2000ca9be0cf6b4f6732e0ddc63a1", "support" ], "interfaces/cors-rfc1918.idl": [ @@ -647760,7 +648873,7 @@ "support" ], "interfaces/css-masking.idl": [ - "80f908d42f3e4e4d0eadb1825dc6a4dbf20b1f2d", + "6db59eddbe087310010be1e60b826b72924c7849", "support" ], "interfaces/css-paint-api.idl": [ @@ -647820,11 +648933,11 @@ "support" ], "interfaces/feature-policy.idl": [ - "3ded1e9b0c64ec84d4f4d07b6b870effcb9cd893", + "85601321a17f3d0a46d2246642d59ef44d916398", "support" ], "interfaces/fetch.idl": [ - "f529c4501bf484f57858ab2eb616a9d42aea766f", + "eacc69d8b9d1d8f7f9bdbf6f2a879d95d9d847bd", "support" ], "interfaces/filter-effects.idl": [ @@ -647840,11 +648953,11 @@ "support" ], "interfaces/gamepad.idl": [ - "b7497c276f1610139ef14c1cc4d0c34c1f2c406b", + "27541bf2553520dcf7f2ce52386014c9a4363377", "support" ], "interfaces/generic-sensor.idl": [ - "2921c50a65e8d4467a56c5d337ef4d476e3ee0a2", + "f3eeb9bf968f7a1a0ba6a772ad935b855b1e9e8a", "support" ], "interfaces/geolocation-API.idl": [ @@ -647908,7 +649021,7 @@ "support" ], "interfaces/magnetometer.idl": [ - "be6cbc9d47a8da6a16613c8d88bbc824e7372de3", + "da1f22bb6685a38164c1eb16d3a6c07290e7833a", "support" ], "interfaces/media-capabilities.idl": [ @@ -647956,15 +649069,15 @@ "support" ], "interfaces/notifications.idl": [ - "1a55c31bb04c0ab11946a90f374fdf07e268ad05", + "d79e9076c81c9f1016f1ca98c16356f6b9454365", "support" ], "interfaces/orientation-event.idl": [ - "a8eef516f29b40c1b1604ad8d853e232f89eeabe", + "af5bc546ac1726ab610285bfa007df3b4e39bf11", "support" ], "interfaces/orientation-sensor.idl": [ - "9ee099881b0a59ca69da02e9aa3d1886e4bc05bc", + "2ea3d38240e527f10af7ef392e0c0935a3750572", "support" ], "interfaces/page-visibility.idl": [ @@ -647976,7 +649089,7 @@ "support" ], "interfaces/payment-handler.idl": [ - "b5d79decb06530001cd9d63e6fcba43995d27ba1", + "c87c855d439609adee24d2f49fc77879f9c8352b", "support" ], "interfaces/payment-method-basic-card.idl": [ @@ -648016,7 +649129,7 @@ "support" ], "interfaces/proximity.idl": [ - "570a29fd37b09304871409dd811498fef8b3cf19", + "d4c8fae3a5438058262108f4848414763138080a", "support" ], "interfaces/push-api.idl": [ @@ -648088,7 +649201,7 @@ "support" ], "interfaces/touch-events.idl": [ - "1a8c9d7d24ece0ea221b6863ce8ea3595bcbb697", + "84c48284a1b9bdcd79954008decdaeac9d2bf2eb", "support" ], "interfaces/trusted-types.tentative.idl": [ @@ -648100,7 +649213,7 @@ "support" ], "interfaces/url.idl": [ - "998052da6ef1b3aada6b81a4ff5868ee11e3b477", + "b0b237e8524a8621f0ddcd8367ebad6fd5f2fb5b", "support" ], "interfaces/user-timing.idl": [ @@ -648187,6 +649300,14 @@ "81a23a35be6f857e49253d47cb9c64d24677b56d", "support" ], + "interfaces/webxr-ar-module.idl": [ + "61fcd6a730f7c3846a8639075a0b2c2a3b755e0c", + "support" + ], + "interfaces/webxr-gamepads-module.idl": [ + "3aa17a7fe0c8020f6101c0fee29107ce7b24cb37", + "support" + ], "interfaces/webxr.idl": [ "b03aa556bb815127203e79c7b4bbc864d539314b", "support" @@ -648299,6 +649420,10 @@ "a093b22028c11c3e54db4a6f8fcccaad6a309bfb", "testharness" ], + "intersection-observer/resources/cross-origin-child-iframe.sub.html": [ + "8e2c36ed56072ad9fd2e82d43b609f5719d78a55", + "support" + ], "intersection-observer/resources/cross-origin-subframe.html": [ "4305ed1719b68f227192e005c9696fec5fe58f83", "support" @@ -648315,6 +649440,10 @@ "9d0769ae44a1bb4a6195c006999b0959f706330c", "support" ], + "intersection-observer/resources/same-origin-grand-child-iframe.html": [ + "25db5a29d8a917916d0b2012f8f790ea9178e681", + "support" + ], "intersection-observer/resources/scaled-target-subframe.html": [ "8f6f930e00915417fcba592df5520999c427ed91", "support" @@ -648355,6 +649484,10 @@ "20bd11d4beb1e8bdd623eaad96f11788747f0d15", "testharness" ], + "intersection-observer/same-origin-grand-child-iframe.sub.html": [ + "57c0347ddc8ec748e3ff025a0ef7f11342f32a1d", + "testharness" + ], "intersection-observer/shadow-content.html": [ "ce9473cb79258fca90321ee26240612c387ac9b9", "testharness" @@ -648396,7 +649529,7 @@ "testharness" ], "intersection-observer/v2/delay-test.html": [ - "231df32c31df0458a4d5de09da55f0244854e0a6", + "e3906ea2c2975cbe678f55e34ead09527bc2bbfc", "testharness" ], "intersection-observer/v2/drop-shadow-filter-vertical-rl.html": [ @@ -648860,7 +649993,7 @@ "testharness" ], "lint.whitelist": [ - "be87d27864059b94b79f74a7f671f119cc40c0f9", + "d9ea5c17c7cf66a47199faba54d4793e8236f6cb", "support" ], "loading/lazyload/common.js": [ @@ -650012,7 +651145,7 @@ "testharness" ], "mathml/relations/html5-tree/clipboard-event-handlers.tentative.html": [ - "82fda880887839b72ac8c683d076ea07a8525d80", + "9816f5126a030de083ce4a6ca020976d9bb3beeb", "testharness" ], "mathml/relations/html5-tree/color-attributes-1-ref.html": [ @@ -650108,7 +651241,7 @@ "testharness" ], "mathml/relations/html5-tree/math-global-event-handlers.tentative.html": [ - "e96feeaf0960641e4413b7b43b93e46490460ee7", + "be9bee9c6c68fc2ec8caf5043242c45711ed0ed1", "testharness" ], "mathml/relations/html5-tree/required-extensions-2-ref.html": [ @@ -650280,7 +651413,7 @@ "support" ], "media-capabilities/decodingInfo.any.js": [ - "737ded18c9f3a24f7ef65af2b770dbb9b5865fef", + "edd58ac3409bcbab14277f38560c7045178a2dcb", "testharness" ], "media-capabilities/decodingInfoEncryptedMedia.http.html": [ @@ -653967,28 +655100,68 @@ "0d9137dc6fb91b1499d922e01d6ad96049f5757b", "testharness" ], - "native-file-system/FileSystemBaseHandle-remove.tentative.https.window.js": [ - "fd2ff888e371f383aa1ee87288dd983add46f662", + "native-file-system/README.md": [ + "6905a68e7901ce26bc1a363062304e1536604400", + "support" + ], + "native-file-system/native_FileSystemDirectoryHandle-getDirectory.tentative.https.manual.window.js": [ + "cfe729cd1f1dd4b53f00b3b13cd53f64f84ca409", "testharness" ], - "native-file-system/FileSystemDirectoryHandle-getDirectory.tentative.https.window.js": [ - "79154b058ff0864032c80b09aef9b8b8c760a105", + "native-file-system/native_FileSystemDirectoryHandle-getFile.tentative.https.manual.window.js": [ + "0455cb800919ee353b7f2e87bf47b76ba075519b", "testharness" ], - "native-file-system/FileSystemDirectoryHandle-getFile.tentative.https.window.js": [ - "fa38abbc5447625cd8396a76c420259840b264f3", + "native-file-system/native_FileSystemDirectoryHandle-removeEntry.tentative.https.manual.window.js": [ + "8905a7afdea57c974a9a06790df6b9e692d32139", "testharness" ], - "native-file-system/FileSystemWriter.tentative.https.window.js": [ - "acc0be1c52184a8b67fdb57953cdc2b4ed793499", + "native-file-system/native_FileSystemWriter.tentative.https.manual.window.js": [ + "25d8ee995857fa67be2c41f048e882ec473f739d", "testharness" ], - "native-file-system/README.md": [ - "6905a68e7901ce26bc1a363062304e1536604400", + "native-file-system/resources/native-fs-test-helpers.js": [ + "5ad8c04724b7a2e7743b43a84efaa05b7e6b703d", + "support" + ], + "native-file-system/resources/sandboxed-fs-test-helpers.js": [ + "5f4f269d2242c2bac59136ff2cf99cbb18f639eb", "support" ], "native-file-system/resources/test-helpers.js": [ - "b794cee0c5f111fa9c9a2b05b8a94c2a2260839f", + "d0360921f1d8ce7257bd7d6586d333b8534c620d", + "support" + ], + "native-file-system/sandboxed_FileSystemDirectoryHandle-getDirectory.tentative.https.any.js": [ + "6fcf566e31fbf061e7545280198562d9e41cad11", + "testharness" + ], + "native-file-system/sandboxed_FileSystemDirectoryHandle-getFile.tentative.https.any.js": [ + "65ae891cd44418554800e12801617097f6a72c91", + "testharness" + ], + "native-file-system/sandboxed_FileSystemDirectoryHandle-removeEntry.tentative.https.any.js": [ + "a4be8bd267e743ee617c29c1cce1188e6b9d377a", + "testharness" + ], + "native-file-system/sandboxed_FileSystemWriter.tentative.https.any.js": [ + "8352e2487fe0823a2d353372757d833d85e98c4b", + "testharness" + ], + "native-file-system/script-tests/FileSystemDirectoryHandle-getDirectory.js": [ + "c2c128f5eded06f440e634051fac021e20061e0d", + "support" + ], + "native-file-system/script-tests/FileSystemDirectoryHandle-getFile.js": [ + "4d8ee96c3d033130f5940306d6f09737db7b0e9c", + "support" + ], + "native-file-system/script-tests/FileSystemDirectoryHandle-removeEntry.js": [ + "8e89e0958db96ee64927d28a5239b0740ac0f632", + "support" + ], + "native-file-system/script-tests/FileSystemWriter.js": [ + "1c51d0b4eb771eec5a606263e72719be589aa317", "support" ], "navigation-timing/META.yml": [ @@ -661871,10 +663044,18 @@ "b055f50f636848ceb7b1750484cc12328a121398", "support" ], + "permissions/feature-policy-permissions-query.html": [ + "bd152e973e8fd520460a325d47beab8c25f45d31", + "support" + ], "permissions/idlharness.any.js": [ "ff0a969badace39c3c4466c4528e30c21355e132", "testharness" ], + "permissions/permissions-query-feature-policy-attribute.https.sub.html": [ + "1d7333d9b5f67a405dc6979d5ddcfda444a04c39", + "testharness" + ], "permissions/test-background-fetch-permission.html": [ "c824ecf1d2b47630f8ebcef3ed42c8c908c8e9eb", "testharness" @@ -662547,6 +663728,10 @@ "0eae0ddfd6ef1e9de2251f50914a855f4142b9d5", "reftest" ], + "portals/portals-repeated-activate.html": [ + "a3843dddb47b55d920b249b01f47199b1202bda6", + "testharness" + ], "portals/portals-set-src-after-activate.html": [ "8da6b341840162dc7348b95cfed060c075a75135", "testharness" @@ -662635,6 +663820,10 @@ "26f62839af5ed8ea7a50535f411780bdf7fd6e03", "support" ], + "portals/resources/portal-repeated-activate-window.html": [ + "e716034eff860fe567bc373f4676d55f97a5a786", + "support" + ], "portals/resources/portals-adopt-predecessor-portal.html": [ "b7eb3b96779a561cacf11d6c7e9362ca1049be6c", "support" @@ -662655,6 +663844,10 @@ "92aef00380ae4a6180039ad0b10169c81a190441", "support" ], + "portals/resources/simple-portal-adopts-and-activates-predecessor.html": [ + "56bfd10f647fb63597dbc5ec902a8c2b90257b18", + "support" + ], "portals/resources/simple-portal-adopts-predecessor.html": [ "b199bdd93b3a03437ebde7abaef9b14ac61b1f76", "support" @@ -674236,7 +675429,7 @@ "testharness" ], "resource-timing/status-codes-create-entry.html": [ - "fb4236e6bbe856be21e5af577a3fea03d774b8e1", + "22e22c445b0812461ef06eb35ad6b611a3b6faa5", "testharness" ], "resource-timing/supported_resource_type.any.js": [ @@ -674288,7 +675481,7 @@ "support" ], "resources/chromium/contacts_manager_mock.js": [ - "618968ec18da930ad1d3180adb68f05064bb1807", + "ae4c33b073dfd2b156030b2cb6d045e133b57c23", "support" ], "resources/chromium/device.mojom.js": [ @@ -674348,7 +675541,7 @@ "support" ], "resources/chromium/mock-imagecapture.js": [ - "eec414bd032a2dd01f27e18de64df0bde4e4a459", + "9d46b57020f36277b8bece93588699cae2a82471", "support" ], "resources/chromium/mojo_bindings.js": [ @@ -674759,6 +675952,10 @@ "b846d4dc4300a990edf7a905f301dcaf75bee18c", "support" ], + "resources/test/tests/unit/throwing-assertions.html": [ + "a36a56043cc7cbb66c8138a68b13b02609ca65aa", + "support" + ], "resources/test/tests/unit/unpaired-surrogates.html": [ "1b162fe71d283d63dbdaac5b3be887f5cd80d53f", "support" @@ -674800,7 +675997,7 @@ "support" ], "resources/testharness.js": [ - "15591042aa4cb0fdd75fe3bf56b9bdfb63fd161d", + "55de1ce252bd0349aa5bee2e69120ae44520ed02", "support" ], "resources/testharness.js.headers": [ @@ -676616,7 +677813,7 @@ "manual" ], "service-workers/service-worker/fetch-event-within-sw.https.html": [ - "8a567fd7a93f8552412cfff657789c5375eba971", + "f5a60c3060961a2b1674c8959c5d4a0af7b5452a", "testharness" ], "service-workers/service-worker/fetch-event.https.html": [ @@ -678615,6 +679812,10 @@ "20456b057e1e724cdac9bc656f3b3d6c7ac2f658", "testharness" ], + "shadow-dom/focus/focus-selector-delegatesFocus.html": [ + "386045258e043f7b0849aaa366d34bb645f2f73f", + "testharness" + ], "shadow-dom/focus/focus-tabindex-order-shadow-negative.html": [ "ab25ea829bd10952ad6e96898fc95a1a1ae25d8f", "testharness" @@ -678644,7 +679845,7 @@ "testharness" ], "shadow-dom/focus/resources/shadow-utils.js": [ - "6ea372afdf180a95d9fda632ebccd00a13df85bf", + "8033ce0169f4aa83b54c3567c68c4cc4f5b7a490", "support" ], "shadow-dom/form-control-form-attribute.html": [ @@ -679092,7 +680293,7 @@ "support" ], "signed-exchange/README.md": [ - "f1dbfe6d1adbe7ef7663c5298692872897ce3e0c", + "4032edf22f34f596d74da5ee0e4019c5dcf1c69c", "support" ], "signed-exchange/appcache/appcache.manifest": [ @@ -679760,7 +680961,7 @@ "testharness" ], "storage-access-api/hasStorageAccess.sub.window.js": [ - "1352d7589f051b31ec577eb7d0c85daf4a58d8f2", + "c4d6e3a8b9a856007a299b7f2b1112188547ebd1", "testharness" ], "storage-access-api/helpers.js": [ @@ -679824,7 +681025,7 @@ "testharness" ], "storage/opaque-origin.https.window.js": [ - "3e101dde6759b2b8c379d6adc95190742328630f", + "cc1d31fdf2c68322f72a40b1e84ec05ab1930779", "testharness" ], "storage/permission-query.https.any.js": [ @@ -680571,6 +681772,10 @@ "7a60e0280baa67ef8731b7bdc737788d326c3c24", "testharness" ], + "svg/animations/keysplines-x-limits.html": [ + "3c9ba65059f99dfbad262a4df65cf1eba0a4f0d8", + "testharness" + ], "svg/animations/multiple-animations-ending.html": [ "a9b7853bb0ed49a11af24d020766248ebd7d4bbe", "testharness" @@ -680604,7 +681809,7 @@ "testharness" ], "svg/animations/scripted/onhover-syncbases.html": [ - "86a0a40fa2de116c5b2076641180b24688d56f9b", + "de757f369af36db7a072ffa4b4216faa56063ecd", "testharness" ], "svg/animations/scripted/paced-value-animation-overwrites-keyTimes.html": [ @@ -685224,7 +686429,7 @@ "support" ], "tools/ci/tcdownload.py": [ - "91c763a7acdd3416d7eff55407bf8f73b840d96a", + "46e9005740d39d3a9fcd136f5aeb7effcc3087e6", "support" ], "tools/ci/tests/test_jobs.py": [ @@ -685316,7 +686521,7 @@ "support" ], "tools/lint/lint.py": [ - "48a275bcf29df6264258da3885e0e5f83a7ec85a", + "7689c359928d6be0f58384dfdc22d8eaa9f0d932", "support" ], "tools/lint/rules.py": [ @@ -690136,7 +691341,7 @@ "support" ], "tools/wptrunner/requirements.txt": [ - "d6c7a4ff3983663d088c64f6608e3fcf7de3bbfe", + "3584c93a199716d0b9809dc4180195647887d1a0", "support" ], "tools/wptrunner/requirements_android_webview.txt": [ @@ -691396,7 +692601,7 @@ "support" ], "trusted-types/trusted-types-eval-reporting.tentative.https.html": [ - "309873cb1f8028ecb071ec5db3dfda62337e6b43", + "4ec5db1adce7478cc3e97f942a9de68f1263d31d", "testharness" ], "trusted-types/trusted-types-eval-reporting.tentative.https.html.headers": [ @@ -693872,7 +695077,7 @@ "testharness" ], "web-animations/interfaces/KeyframeEffect/processing-a-keyframes-argument-001.html": [ - "5c9ec84e8db79f73ac1423258a84bf0d18d70a5f", + "5bd0ae2b1edbb508d45ac64258332fcaddf5434c", "testharness" ], "web-animations/interfaces/KeyframeEffect/processing-a-keyframes-argument-002.html": [ @@ -694348,7 +695553,7 @@ "support" ], "webaudio/resources/audit.js": [ - "1876c0fc77174d861d3847f874dbad26c737d430", + "2aac1fffb492ea46e737257df08a09e65f6d3415", "support" ], "webaudio/resources/biquad-filters.js": [ @@ -694756,7 +695961,7 @@ "support" ], "webaudio/the-audio-api/the-audioworklet-interface/audioworklet-addmodule-resolution.https.html": [ - "e94621296a3114ddbc53f26d74c330d3496dac63", + "dc324b22d6539d5383ed53f68ab911f6e96fd0dd", "testharness" ], "webaudio/the-audio-api/the-audioworklet-interface/audioworklet-audioparam-size.https.html": [ @@ -695168,7 +696373,7 @@ "testharness" ], "webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest.html": [ - "3e364eb7b359948402ef8ecdb287a5f55bb80fc3", + "b1f18d397d4fbcf3150e76aa478ce1a00a64e217", "testharness" ], "webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/no-cors.https.html": [ @@ -695192,7 +696397,7 @@ "testharness" ], "webaudio/the-audio-api/the-mediastreamaudiosourcenode-interface/mediastreamaudiosourcenode-routing.html": [ - "2e04ab6a3f248e69846cadbdc41c5369c406f519", + "816eba0b29ae616e09099544e839b85bb0a8bea5", "testharness" ], "webaudio/the-audio-api/the-offlineaudiocontext-interface/.gitkeep": [ @@ -695228,7 +696433,7 @@ "testharness" ], "webaudio/the-audio-api/the-pannernode-interface/ctor-panner.html": [ - "d330c9c3de4482ee70c036e0ab7ff8feb1fd5a36", + "c434aa8c6a50bc2763f7a9233db06466c501c7ac", "testharness" ], "webaudio/the-audio-api/the-pannernode-interface/distance-exponential.html": [ @@ -695320,7 +696525,7 @@ "testharness" ], "webaudio/the-audio-api/the-waveshapernode-interface/curve-tests.html": [ - "a2e40777d4285732622fe0776f5e862276bf41c9", + "81e64dc12e9c757b613ddd377c39ed313b3cea47", "testharness" ], "webaudio/the-audio-api/the-waveshapernode-interface/silent-inputs.html": [ @@ -702195,6 +703400,10 @@ "520afec2000721d04aae9ed89bca49297fa31d4b", "support" ], + "webxr/ar-module/idlharness.https.window.js": [ + "1268f4ea2a5eb228fb49a6f06d8905f8d9480ae7", + "testharness" + ], "webxr/events_input_source_recreation.https.html": [ "ecb4b022bf09410cae44b4f5a3c71bc5c054181e", "testharness" @@ -702219,6 +703428,10 @@ "f76847a8769073bb4753702f32dd5c2ccc9d3532", "testharness" ], + "webxr/gamepads-module/idlharness.https.window.js": [ + "4509c67a847109f2fdaed5be49c87777e1927a12", + "testharness" + ], "webxr/getInputPose_handedness.https.html": [ "5a310c6dd77274631d0ef9e751c6f195def9c3d3", "testharness" @@ -702412,7 +703625,7 @@ "testharness" ], "webxr/xrSession_input_events_end.https.html": [ - "37e020605a7e88320c42e054f867f611955c5713", + "a932aad2fad78ceb2449928773da3ecfe237b8e7", "testharness" ], "webxr/xrSession_prevent_multiple_exclusive.https.html": [ @@ -702488,7 +703701,7 @@ "testharness" ], "webxr/xrWebGLLayer_constructor.https.html": [ - "7e57f4286c66ea9f8380791840dada3d82b611fe", + "0584da79c12def757f951ec53c4c048f18c39b8c", "testharness" ], "webxr/xrWebGLLayer_framebuffer_draw.https.html": [ @@ -703955,22 +705168,14 @@ "bbaf66d3383e0957c5ab12ca03688c507081d86d", "testharness" ], - "workers/semantics/interface-objects/003.html": [ - "99e8b3a0f3dd426eb4b1a5f22a2fd0fcab01d98d", + "workers/semantics/interface-objects/003.any.js": [ + "1942a4658dfb8e2ecab52c914af9aff8cf79cc2a", "testharness" ], - "workers/semantics/interface-objects/003.js": [ - "a91e7c38759f23e9ca50602a853d67a26830adad", - "support" - ], - "workers/semantics/interface-objects/004.html": [ - "b4a09c50e4e50983f814fb08fc0d797a661b2ff5", + "workers/semantics/interface-objects/004.any.js": [ + "358af74ca2c2bda6a0805ec8bded53a92674eb17", "testharness" ], - "workers/semantics/interface-objects/004.js": [ - "00e50d19cae409d6b69688e22ed926ac9893e2d9", - "support" - ], "workers/semantics/multiple-workers/001.html": [ "f9e2bbeabab16766d162a030f2318894c5537b1f", "testharness" @@ -706168,7 +707373,7 @@ "testharness" ], "xhr/xmlhttprequest-sync-default-feature-policy.sub.html": [ - "5ad5557700d79cb0104a5a5db52afdfa0906533b", + "ab5b78b77c66ee5bdca8e7acb5fb61f18d9574c1", "testharness" ], "xhr/xmlhttprequest-sync-not-hang-scriptloader-subframe.html": [ diff --git a/tests/wpt/metadata/css/CSS2/floats/new-fc-beside-float-with-margin-rtl.html.ini b/tests/wpt/metadata/css/CSS2/floats/new-fc-beside-float-with-margin-rtl.html.ini new file mode 100644 index 000000000000..ad46fa14832e --- /dev/null +++ b/tests/wpt/metadata/css/CSS2/floats/new-fc-beside-float-with-margin-rtl.html.ini @@ -0,0 +1,2 @@ +[new-fc-beside-float-with-margin-rtl.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/CSS2/floats/zero-width-floats-positioning.tentative.html.ini b/tests/wpt/metadata/css/CSS2/floats/zero-width-floats-positioning.tentative.html.ini new file mode 100644 index 000000000000..a0b8fea8d2d6 --- /dev/null +++ b/tests/wpt/metadata/css/CSS2/floats/zero-width-floats-positioning.tentative.html.ini @@ -0,0 +1,2 @@ +[zero-width-floats-positioning.tentative.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-align/parsing/gap-shorthand.html.ini b/tests/wpt/metadata/css/css-align/parsing/gap-shorthand.html.ini index 68b32a1fd27f..f92e47126c83 100644 --- a/tests/wpt/metadata/css/css-align/parsing/gap-shorthand.html.ini +++ b/tests/wpt/metadata/css/css-align/parsing/gap-shorthand.html.ini @@ -11,3 +11,27 @@ [e.style['gap'\] = "10px normal" should set the longhand values] expected: FAIL + [e.style['gap'\] = "10px normal" should set column-gap] + expected: FAIL + + [e.style['gap'\] = "normal calc(20% + 10px)" should set row-gap] + expected: FAIL + + [e.style['gap'\] = "10px 20%" should set row-gap] + expected: FAIL + + [e.style['gap'\] = "10px normal" should set row-gap] + expected: FAIL + + [e.style['gap'\] = "normal" should set row-gap] + expected: FAIL + + [e.style['gap'\] = "normal" should set column-gap] + expected: FAIL + + [e.style['gap'\] = "normal calc(20% + 10px)" should set column-gap] + expected: FAIL + + [e.style['gap'\] = "10px 20%" should set column-gap] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-align/parsing/place-content-shorthand.html.ini b/tests/wpt/metadata/css/css-align/parsing/place-content-shorthand.html.ini index 23e6b5e5544b..7bda4a5b0698 100644 --- a/tests/wpt/metadata/css/css-align/parsing/place-content-shorthand.html.ini +++ b/tests/wpt/metadata/css/css-align/parsing/place-content-shorthand.html.ini @@ -14,3 +14,33 @@ [e.style['place-content'\] = "last baseline flex-start" should set the longhand values] expected: FAIL + [e.style['place-content'\] = "first baseline" should set justify-content] + expected: FAIL + + [e.style['place-content'\] = "normal" should set justify-content] + expected: FAIL + + [e.style['place-content'\] = "space-evenly unsafe end" should set align-content] + expected: FAIL + + [e.style['place-content'\] = "last baseline flex-start" should set justify-content] + expected: FAIL + + [e.style['place-content'\] = "last baseline flex-start" should set align-content] + expected: FAIL + + [e.style['place-content'\] = "space-around" should set align-content] + expected: FAIL + + [e.style['place-content'\] = "first baseline" should set align-content] + expected: FAIL + + [e.style['place-content'\] = "normal" should set align-content] + expected: FAIL + + [e.style['place-content'\] = "space-around" should set justify-content] + expected: FAIL + + [e.style['place-content'\] = "space-evenly unsafe end" should set justify-content] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-align/parsing/place-items-shorthand.html.ini b/tests/wpt/metadata/css/css-align/parsing/place-items-shorthand.html.ini index e4af2f3992f7..fbc705c3a508 100644 --- a/tests/wpt/metadata/css/css-align/parsing/place-items-shorthand.html.ini +++ b/tests/wpt/metadata/css/css-align/parsing/place-items-shorthand.html.ini @@ -11,3 +11,27 @@ [e.style['place-items'\] = "first baseline" should set the longhand values] expected: FAIL + [e.style['place-items'\] = "stretch right legacy" should set align-items] + expected: FAIL + + [e.style['place-items'\] = "normal" should set align-items] + expected: FAIL + + [e.style['place-items'\] = "last baseline flex-start" should set align-items] + expected: FAIL + + [e.style['place-items'\] = "normal" should set justify-items] + expected: FAIL + + [e.style['place-items'\] = "last baseline flex-start" should set justify-items] + expected: FAIL + + [e.style['place-items'\] = "first baseline" should set align-items] + expected: FAIL + + [e.style['place-items'\] = "stretch right legacy" should set justify-items] + expected: FAIL + + [e.style['place-items'\] = "first baseline" should set justify-items] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-align/parsing/place-self-shorthand.html.ini b/tests/wpt/metadata/css/css-align/parsing/place-self-shorthand.html.ini index 0597a5b8c682..11c062e766c4 100644 --- a/tests/wpt/metadata/css/css-align/parsing/place-self-shorthand.html.ini +++ b/tests/wpt/metadata/css/css-align/parsing/place-self-shorthand.html.ini @@ -11,3 +11,27 @@ [e.style['place-self'\] = "first baseline" should set the longhand values] expected: FAIL + [e.style['place-self'\] = "normal" should set align-self] + expected: FAIL + + [e.style['place-self'\] = "unsafe self-start stretch" should set align-self] + expected: FAIL + + [e.style['place-self'\] = "first baseline" should set justify-self] + expected: FAIL + + [e.style['place-self'\] = "unsafe self-start stretch" should set justify-self] + expected: FAIL + + [e.style['place-self'\] = "last baseline flex-start" should set align-self] + expected: FAIL + + [e.style['place-self'\] = "normal" should set justify-self] + expected: FAIL + + [e.style['place-self'\] = "first baseline" should set align-self] + expected: FAIL + + [e.style['place-self'\] = "last baseline flex-start" should set justify-self] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-backgrounds/parsing/border-image-width-computed.html.ini b/tests/wpt/metadata/css/css-backgrounds/parsing/border-image-width-computed.html.ini new file mode 100644 index 000000000000..bbf93406cadb --- /dev/null +++ b/tests/wpt/metadata/css/css-backgrounds/parsing/border-image-width-computed.html.ini @@ -0,0 +1,4 @@ +[border-image-width-computed.html] + [Property border-image-width value '0' computes to '0'] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-flexbox/percentage-heights-003.html.ini b/tests/wpt/metadata/css/css-flexbox/percentage-heights-003.html.ini index 1291e66cabd9..254cec90415a 100644 --- a/tests/wpt/metadata/css/css-flexbox/percentage-heights-003.html.ini +++ b/tests/wpt/metadata/css/css-flexbox/percentage-heights-003.html.ini @@ -5,9 +5,9 @@ [.flexbox 2] expected: FAIL - [.flexbox 5] + [.flexbox 6] expected: FAIL - [.flexbox 6] + [.flexbox 7] expected: FAIL diff --git a/tests/wpt/metadata/css/css-text-decor/parsing/text-decoration-shorthand.html.ini b/tests/wpt/metadata/css/css-text-decor/parsing/text-decoration-shorthand.html.ini new file mode 100644 index 000000000000..a416cf449313 --- /dev/null +++ b/tests/wpt/metadata/css/css-text-decor/parsing/text-decoration-shorthand.html.ini @@ -0,0 +1,10 @@ +[text-decoration-shorthand.html] + [e.style['text-decoration'\] = "overline dotted green" should set text-decoration-line] + expected: FAIL + + [e.style['text-decoration'\] = "overline dotted green" should set text-decoration-style] + expected: FAIL + + [e.style['text-decoration'\] = "overline dotted green" should set text-decoration-color] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-transforms/animation/perspective-interpolation.html.ini b/tests/wpt/metadata/css/css-transforms/animation/perspective-interpolation.html.ini index c511d92d6744..03f2f3fe9d12 100644 --- a/tests/wpt/metadata/css/css-transforms/animation/perspective-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-transforms/animation/perspective-interpolation.html.ini @@ -1,4 +1,5 @@ [perspective-interpolation.html] + expected: CRASH [ perspective interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-transitions/AnimationEffect-getComputedTiming.tentative.html.ini b/tests/wpt/metadata/css/css-transitions/AnimationEffect-getComputedTiming.tentative.html.ini index 7f5bbb7f31b4..89a2a619d61a 100644 --- a/tests/wpt/metadata/css/css-transitions/AnimationEffect-getComputedTiming.tentative.html.ini +++ b/tests/wpt/metadata/css/css-transitions/AnimationEffect-getComputedTiming.tentative.html.ini @@ -62,3 +62,6 @@ [delay of a new tranisition] expected: FAIL + [non-default easing of a new transition] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-transitions/KeyframeEffect-getKeyframes.tentative.html.ini b/tests/wpt/metadata/css/css-transitions/KeyframeEffect-getKeyframes.tentative.html.ini index c03a2664e976..44c9aacc065e 100644 --- a/tests/wpt/metadata/css/css-transitions/KeyframeEffect-getKeyframes.tentative.html.ini +++ b/tests/wpt/metadata/css/css-transitions/KeyframeEffect-getKeyframes.tentative.html.ini @@ -8,3 +8,6 @@ [KeyframeEffect.getKeyframes() returns expected frames for a simple transition with a non-default easing function] expected: FAIL + [KeyframeEffect.getKeyframes() returns frames unaffected by a non-default easing function] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-values/clamp-length-computed.html.ini b/tests/wpt/metadata/css/css-values/clamp-length-computed.html.ini new file mode 100644 index 000000000000..1e17130fab55 --- /dev/null +++ b/tests/wpt/metadata/css/css-values/clamp-length-computed.html.ini @@ -0,0 +1,13 @@ +[clamp-length-computed.html] + [Property letter-spacing value 'clamp(10px, 5px, 30px)' computes to '10px'] + expected: FAIL + + [Property letter-spacing value 'clamp(10px, 35px, 30px)' computes to '30px'] + expected: FAIL + + [Property letter-spacing value 'clamp(30px, 100px, 20px)' computes to '30px'] + expected: FAIL + + [Property letter-spacing value 'clamp(10px, 20px, 30px)' computes to '20px'] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-values/clamp-length-serialize.html.ini b/tests/wpt/metadata/css/css-values/clamp-length-serialize.html.ini new file mode 100644 index 000000000000..f39169db7b6f --- /dev/null +++ b/tests/wpt/metadata/css/css-values/clamp-length-serialize.html.ini @@ -0,0 +1,7 @@ +[clamp-length-serialize.html] + [e.style['letter-spacing'\] = "clamp(1px, 2px, clamp(2px, 3px, 4px))" should set the property value] + expected: FAIL + + [e.style['letter-spacing'\] = "clamp(1px, 2px, 3px)" should set the property value] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-values/min-max-percentage-length-interpolation.html.ini b/tests/wpt/metadata/css/css-values/min-max-percentage-length-interpolation.html.ini new file mode 100644 index 000000000000..d59c7b302119 --- /dev/null +++ b/tests/wpt/metadata/css/css-values/min-max-percentage-length-interpolation.html.ini @@ -0,0 +1,2 @@ +[min-max-percentage-length-interpolation.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini b/tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini new file mode 100644 index 000000000000..e6e1f29e2743 --- /dev/null +++ b/tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini @@ -0,0 +1,2 @@ +[matchMedia-display-none-iframe.html] + expected: ERROR diff --git a/tests/wpt/metadata/css/mediaqueries/aspect-ratio-serialization.html.ini b/tests/wpt/metadata/css/mediaqueries/aspect-ratio-serialization.html.ini new file mode 100644 index 000000000000..e87166456e6f --- /dev/null +++ b/tests/wpt/metadata/css/mediaqueries/aspect-ratio-serialization.html.ini @@ -0,0 +1,4 @@ +[aspect-ratio-serialization.html] + [ serializes with spaces around the integer.] + expected: FAIL + diff --git a/tests/wpt/metadata/css/mediaqueries/navigation-controls.tentative.html.ini b/tests/wpt/metadata/css/mediaqueries/navigation-controls.tentative.html.ini new file mode 100644 index 000000000000..f34e5d89c79e --- /dev/null +++ b/tests/wpt/metadata/css/mediaqueries/navigation-controls.tentative.html.ini @@ -0,0 +1,22 @@ +[navigation-controls.tentative.html] + [Should be parseable in JS: '(navigation-controls)'] + expected: FAIL + + [Should be parseable in a CSS stylesheet: '(navigation-controls: back-button)'] + expected: FAIL + + [Check that none evaluates to false in the boolean context] + expected: FAIL + + [Should be parseable in a CSS stylesheet: '(navigation-controls: none)'] + expected: FAIL + + [Should be parseable in JS: '(navigation-controls: none)'] + expected: FAIL + + [Should be parseable in a CSS stylesheet: '(navigation-controls)'] + expected: FAIL + + [Should be parseable in JS: '(navigation-controls: back-button)'] + expected: FAIL + 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 7e9e768846c2..bb3703d3f926 100644 --- a/tests/wpt/metadata/fetch/content-type/response.window.js.ini +++ b/tests/wpt/metadata/fetch/content-type/response.window.js.ini @@ -315,9 +315,6 @@ [ + diff --git a/tests/wpt/web-platform-tests/intersection-observer/resources/same-origin-grand-child-iframe.html b/tests/wpt/web-platform-tests/intersection-observer/resources/same-origin-grand-child-iframe.html new file mode 100644 index 000000000000..25db5a29d8a9 --- /dev/null +++ b/tests/wpt/web-platform-tests/intersection-observer/resources/same-origin-grand-child-iframe.html @@ -0,0 +1,8 @@ + +
+ diff --git a/tests/wpt/web-platform-tests/intersection-observer/same-origin-grand-child-iframe.sub.html b/tests/wpt/web-platform-tests/intersection-observer/same-origin-grand-child-iframe.sub.html new file mode 100644 index 000000000000..57c0347ddc8e --- /dev/null +++ b/tests/wpt/web-platform-tests/intersection-observer/same-origin-grand-child-iframe.sub.html @@ -0,0 +1,24 @@ + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/intersection-observer/v2/delay-test.html b/tests/wpt/web-platform-tests/intersection-observer/v2/delay-test.html index 231df32c31df..e3906ea2c297 100644 --- a/tests/wpt/web-platform-tests/intersection-observer/v2/delay-test.html +++ b/tests/wpt/web-platform-tests/intersection-observer/v2/delay-test.html @@ -46,7 +46,7 @@ // The first notification should be sent without delay. waitForNotification(t, t.step_func(step0)); - function waitForDelay(timerExpiredBeforeLastFrame) { + function waitForDelay(timerExpiredBeforeLastFrame, nextStep) { requestAnimationFrame(t.step_func(() => { if (timerExpiredBeforeLastFrame) { // New notifications should have been generated during the previous @@ -54,11 +54,11 @@ assert_equals(entries.length, 2); assert_greater_than(entries[1].time - entries[0].time, delay); assert_false(entries[1].isVisible); - t.done(); + nextStep(); } else { // Observer may not have updated yet. Wait for next frame. let timerExpired = performance.now() - entries[0].time >= delay; - waitForDelay(timerExpired); + waitForDelay(timerExpired, nextStep); } })); } @@ -69,7 +69,20 @@ // This should trigger a notification on the next run. occluder.style.marginTop = "-10px"; // Enter a rAF loop until the delay timer expires. - waitForDelay(false); + waitForDelay(false, step1); + } + + function step1() { + occluder.style.marginTop = "10px"; + // This style invalidation should cause a frame to run before the observer + // can generate a notification (due to delay parameter). Make sure the + // notification will still be generated even if we don't force more frames + // with a rAF loop. + t.step_timeout(() => { + assert_equals(entries.length, 3); + assert_true(entries[0].isVisible); + t.done(); + }, 2 * delay); } }, "'delay' parameter throttles frequency of notifications."); diff --git a/tests/wpt/web-platform-tests/lint.whitelist b/tests/wpt/web-platform-tests/lint.whitelist index be87d2786405..d9ea5c17c7cf 100644 --- a/tests/wpt/web-platform-tests/lint.whitelist +++ b/tests/wpt/web-platform-tests/lint.whitelist @@ -836,11 +836,6 @@ AHEM SYSTEM FONT: acid/acid3/test.html AHEM SYSTEM FONT: resource-timing/resources/all_resource_types.htm AHEM SYSTEM FONT: resource-timing/resources/iframe-reload-TAO.sub.html -# These tests are imported from mozilla-central and can't be modified in WPT. -# They do load Ahem as a web font, but they use their own copy which trips the -# lint rule. Basically false positives. -AHEM SYSTEM FONT: css/vendor-imports/mozilla/mozilla-central-reftests/* - # TODO: The following should be deleted along with the Ahem web font cleanup # PR (https://github.com/web-platform-tests/wpt/pull/18702) AHEM SYSTEM FONT: infrastructure/assumptions/ahem-ref.html diff --git a/tests/wpt/web-platform-tests/mathml/relations/html5-tree/clipboard-event-handlers.tentative.html b/tests/wpt/web-platform-tests/mathml/relations/html5-tree/clipboard-event-handlers.tentative.html index 82fda8808878..9816f5126a03 100644 --- a/tests/wpt/web-platform-tests/mathml/relations/html5-tree/clipboard-event-handlers.tentative.html +++ b/tests/wpt/web-platform-tests/mathml/relations/html5-tree/clipboard-event-handlers.tentative.html @@ -30,6 +30,9 @@ "math" ); async_test(test => { + test.step(function() { + assert_true(MathMLElement.prototype.hasOwnProperty(`on${name}`)); + }); mathEl[`on${name}`] = test.step_func_done(e => { assert_equals(e.currentTarget, mathEl, "The event must be fired at the element"); diff --git a/tests/wpt/web-platform-tests/mathml/relations/html5-tree/math-global-event-handlers.tentative.html b/tests/wpt/web-platform-tests/mathml/relations/html5-tree/math-global-event-handlers.tentative.html index e96feeaf0960..be9bee9c6c68 100644 --- a/tests/wpt/web-platform-tests/mathml/relations/html5-tree/math-global-event-handlers.tentative.html +++ b/tests/wpt/web-platform-tests/mathml/relations/html5-tree/math-global-event-handlers.tentative.html @@ -125,6 +125,9 @@ }, `${name}: dynamic changes on the attribute`); async_test(t => { + t.step(function() { + assert_true(MathMLElement.prototype.hasOwnProperty(name)); + }); const element = document.createElementNS( "http://www.w3.org/1998/Math/MathML", "math" diff --git a/tests/wpt/web-platform-tests/media-capabilities/decodingInfo.any.js b/tests/wpt/web-platform-tests/media-capabilities/decodingInfo.any.js index 737ded18c9f3..edd58ac3409b 100644 --- a/tests/wpt/web-platform-tests/media-capabilities/decodingInfo.any.js +++ b/tests/wpt/web-platform-tests/media-capabilities/decodingInfo.any.js @@ -17,28 +17,28 @@ var minimalAudioConfiguration = { }; promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo()); + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo()); }, "Test that decodingInfo rejects if it doesn't get a configuration"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({})); + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({})); }, "Test that decodingInfo rejects if the MediaConfiguration isn't valid"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({ video: minimalVideoConfiguration, audio: minimalAudioConfiguration, })); }, "Test that decodingInfo rejects if the MediaConfiguration does not have a type"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({ type: 'file', })); }, "Test that decodingInfo rejects if the configuration doesn't have an audio or video field"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({ type: 'file', video: { contentType: 'video/webm; codecs="vp09.00.10.08"', @@ -51,7 +51,7 @@ promise_test(t => { }, "Test that decodingInfo rejects if the video configuration has a negative framerate"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({ type: 'file', video: { contentType: 'video/webm; codecs="vp09.00.10.08"', @@ -64,7 +64,7 @@ promise_test(t => { }, "Test that decodingInfo rejects if the video configuration has a framerate set to 0"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({ type: 'file', video: { contentType: 'video/webm; codecs="vp09.00.10.08"', @@ -77,7 +77,7 @@ promise_test(t => { }, "Test that decodingInfo rejects if the video configuration has a framerate set to Infinity"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({ type: 'file', video: { contentType: 'fgeoa', @@ -90,7 +90,7 @@ promise_test(t => { }, "Test that decodingInfo rejects if the video configuration contentType doesn't parse"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({ type: 'file', video: { contentType: 'audio/fgeoa', @@ -103,7 +103,7 @@ promise_test(t => { }, "Test that decodingInfo rejects if the video configuration contentType isn't of type video"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({ type: 'file', video: { contentType: 'video/webm; codecs="vp09.00.10.08"; foo="bar"', @@ -116,7 +116,7 @@ promise_test(t => { }, "Test that decodingInfo rejects if the video configuration contentType has more than one parameter"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({ type: 'file', video: { contentType: 'video/webm; foo="bar"', @@ -142,7 +142,7 @@ promise_test(t => { }, "Test that decodingInfo() accepts framerate in the form of x/y"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({ type: 'file', video: { contentType: 'video/webm; codecs="vp09.00.10.08"', @@ -155,7 +155,7 @@ promise_test(t => { }, "Test that decodingInfo() rejects framerate in the form of x/0"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({ type: 'file', video: { contentType: 'video/webm; codecs="vp09.00.10.08"', @@ -168,7 +168,7 @@ promise_test(t => { }, "Test that decodingInfo() rejects framerate in the form of 0/y"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({ type: 'file', video: { contentType: 'video/webm; codecs="vp09.00.10.08"', @@ -181,7 +181,7 @@ promise_test(t => { }, "Test that decodingInfo() rejects framerate in the form of -x/y"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({ type: 'file', video: { contentType: 'video/webm; codecs="vp09.00.10.08"', @@ -194,7 +194,7 @@ promise_test(t => { }, "Test that decodingInfo() rejects framerate in the form of x/-y"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({ type: 'file', video: { contentType: 'video/webm; codecs="vp09.00.10.08"', @@ -233,7 +233,7 @@ promise_test(t => { }, "Test that decodingInfo() accepts framerate as fraction with decimals"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({ type: 'file', video: { contentType: 'video/webm; codecs="vp09.00.10.08"', @@ -246,28 +246,28 @@ promise_test(t => { }, "Test that decodingInfo() rejects framerate with trailing unallowed characters"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({ type: 'file', audio: { contentType: 'fgeoa' }, })); }, "Test that decodingInfo rejects if the audio configuration contenType doesn't parse"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({ type: 'file', audio: { contentType: 'video/fgeoa' }, })); }, "Test that decodingInfo rejects if the audio configuration contentType isn't of type audio"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({ type: 'file', audio: { contentType: 'audio/webm; codecs="opus"; foo="bar"' }, })); }, "Test that decodingInfo rejects if the audio configuration contentType has more than one parameters"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({ type: 'file', audio: { contentType: 'audio/webm; foo="bar"' }, })); diff --git a/tests/wpt/web-platform-tests/native-file-system/FileSystemBaseHandle-remove.tentative.https.window.js b/tests/wpt/web-platform-tests/native-file-system/FileSystemBaseHandle-remove.tentative.https.window.js deleted file mode 100644 index fd2ff888e371..000000000000 --- a/tests/wpt/web-platform-tests/native-file-system/FileSystemBaseHandle-remove.tentative.https.window.js +++ /dev/null @@ -1,76 +0,0 @@ -// META: script=resources/test-helpers.js -promise_test(async t => cleanupSandboxedFileSystem(), - 'Cleanup to setup test environment'); - -promise_test(async t => { - const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - const handle = await createFileWithContents(t, 'file-to-remove', '12345', root); - await createFileWithContents(t, 'file-to-keep', 'abc', root); - await root.removeEntry('file-to-remove'); - - assert_array_equals(await getSortedDirectoryEntries(root), ['file-to-keep']); - await promise_rejects(t, 'NotFoundError', getFileContents(handle)); -}, 'removeEntry() to remove a file'); - -promise_test(async t => { - const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - const handle = await createFileWithContents(t, 'file-to-remove', '12345', root); - await root.removeEntry('file-to-remove'); - - await promise_rejects(t, 'NotFoundError', root.removeEntry('file-to-remove')); -}, 'removeEntry() on an already removed file should fail'); - -promise_test(async t => { - const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - const dir = await root.getDirectory('dir-to-remove', { create: true }); - await createFileWithContents(t, 'file-to-keep', 'abc', root); - await root.removeEntry('dir-to-remove'); - - assert_array_equals(await getSortedDirectoryEntries(root), ['file-to-keep']); - await promise_rejects(t, 'NotFoundError', getSortedDirectoryEntries(dir)); -}, 'removeEntry() to remove an empty directory'); - -promise_test(async t => { - const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - const dir = await root.getDirectory('dir-to-remove', { create: true }); - t.add_cleanup(() => root.removeEntry('dir-to-remove', { recursive: true })); - await createEmptyFile(t, 'file-in-dir', dir); - - await promise_rejects(t, 'InvalidModificationError', root.removeEntry('dir-to-remove')); - assert_array_equals(await getSortedDirectoryEntries(root), ['dir-to-remove/']); - assert_array_equals(await getSortedDirectoryEntries(dir), ['file-in-dir']); -}, 'removeEntry() on a non-empty directory should fail'); - -promise_test(async t => { - const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - const dir = await createDirectory(t, 'dir', root); - await promise_rejects(t, new TypeError(), dir.removeEntry("")); -}, 'removeEntry() with empty name should fail'); - -promise_test(async t => { - const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - const dir = await createDirectory(t, 'dir', root); - await promise_rejects(t, new TypeError(), dir.removeEntry(kCurrentDirectory)); -}, `removeEntry() with "${kCurrentDirectory}" name should fail`); - -promise_test(async t => { - const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - const dir = await createDirectory(t, 'dir', root); - await promise_rejects(t, new TypeError(), dir.removeEntry(kParentDirectory)); -}, `removeEntry() with "${kParentDirectory}" name should fail`); - -promise_test(async t => { - const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - - const dir_name = 'dir-name'; - const dir = await createDirectory(t, dir_name, root); - - const file_name = 'file-name'; - await createEmptyFile(t, file_name, dir); - - for (let i = 0; i < kPathSeparators.length; ++i) { - const path_with_separator = `${dir_name}${kPathSeparators[i]}${file_name}`; - await promise_rejects(t, new TypeError(), root.removeEntry(path_with_separator), - `removeEntry() must reject names containing "${kPathSeparators[i]}"`); - } -}, 'removeEntry() with a path separator should fail.'); diff --git a/tests/wpt/web-platform-tests/native-file-system/FileSystemDirectoryHandle-getDirectory.tentative.https.window.js b/tests/wpt/web-platform-tests/native-file-system/FileSystemDirectoryHandle-getDirectory.tentative.https.window.js deleted file mode 100644 index 79154b058ff0..000000000000 --- a/tests/wpt/web-platform-tests/native-file-system/FileSystemDirectoryHandle-getDirectory.tentative.https.window.js +++ /dev/null @@ -1,106 +0,0 @@ -// META: script=resources/test-helpers.js -promise_test(async t => cleanupSandboxedFileSystem(), - 'Cleanup to setup test environment'); - -promise_test(async t => { - const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - await promise_rejects(t, 'NotFoundError', root.getDirectory('non-existing-dir')); -}, 'getDirectory(create=false) rejects for non-existing directories'); - -promise_test(async t => { - const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - const handle = await root.getDirectory('non-existing-dir', { create: true }); - t.add_cleanup(() => root.removeEntry('non-existing-dir', { recursive: true })); - - assert_false(handle.isFile); - assert_true(handle.isDirectory); - assert_equals(handle.name, 'non-existing-dir'); - assert_equals(await getDirectoryEntryCount(handle), 0); - assert_array_equals(await getSortedDirectoryEntries(root), ['non-existing-dir/']); -}, 'getDirectory(create=true) creates an empty directory'); - -promise_test(async t => { - const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - const existing_handle = await root.getDirectory('dir-with-contents', { create: true }); - t.add_cleanup(() => root.removeEntry('dir-with-contents', { recursive: true })); - const file_handle = await createEmptyFile(t, 'test-file', existing_handle); - - const handle = await root.getDirectory('dir-with-contents', { create: false }); - - assert_false(handle.isFile); - assert_true(handle.isDirectory); - assert_equals(handle.name, 'dir-with-contents'); - assert_array_equals(await getSortedDirectoryEntries(handle), ['test-file']); -}, 'getDirectory(create=false) returns existing directories'); - -promise_test(async t => { - const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - const existing_handle = await root.getDirectory('dir-with-contents', { create: true }); - t.add_cleanup(() => root.removeEntry('dir-with-contents', { recursive: true })); - const file_handle = await existing_handle.getFile('test-file', { create: true }); - - const handle = await root.getDirectory('dir-with-contents', { create: true }); - - assert_false(handle.isFile); - assert_true(handle.isDirectory); - assert_equals(handle.name, 'dir-with-contents'); - assert_array_equals(await getSortedDirectoryEntries(handle), ['test-file']); -}, 'getDirectory(create=true) returns existing directories without erasing'); - -promise_test(async t => { - const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - await createEmptyFile(t, 'file-name'); - - await promise_rejects(t, 'TypeMismatchError', root.getDirectory('file-name')); - await promise_rejects(t, 'TypeMismatchError', root.getDirectory('file-name', { create: false })); - await promise_rejects(t, 'TypeMismatchError', root.getDirectory('file-name', { create: true })); -}, 'getDirectory() when a file already exists with the same name'); - -promise_test(async t => { - const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - await promise_rejects(t, new TypeError(), dir.getDirectory("", { create: true })); - await promise_rejects(t, new TypeError(), dir.getDirectory("", { create: false })); -}, 'getDirectory() with empty name'); - -promise_test(async t => { - const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - await promise_rejects(t, new TypeError(), dir.getDirectory(kCurrentDirectory)); - await promise_rejects(t, new TypeError(), dir.getDirectory(kCurrentDirectory, { create: true })); -}, `getDirectory() with "${kCurrentDirectory}" name`); - -promise_test(async t => { - const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - const subdir = await createDirectory(t, 'subdir-name', /*parent=*/dir); - - await promise_rejects(t, new TypeError(), subdir.getDirectory(kParentDirectory)); - await promise_rejects(t, new TypeError(), subdir.getDirectory(kParentDirectory, { create: true })); -}, `getDirectory() with "${kParentDirectory}" name`); - -promise_test(async t => { - const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - - const first_subdir_name = 'first-subdir-name'; - const first_subdir = await createDirectory(t, first_subdir_name, /*parent=*/dir); - - const second_subdir_name = 'second-subdir-name'; - const second_subdir = await createDirectory(t, second_subdir_name, /*parent=*/first_subdir); - - for (let i = 0; i < kPathSeparators.length; ++i) { - const path_with_separator = `${first_subdir_name}${kPathSeparators[i]}${second_subdir_name}`; - await promise_rejects(t, new TypeError(), dir.getDirectory(path_with_separator), - `getDirectory() must reject names containing "${kPathSeparators[i]}"`); - } -}, 'getDirectory(create=false) with a path separator when the directory exists'); - -promise_test(async t => { - const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - - const subdir_name = 'subdir-name'; - const subdir = await createDirectory(t, subdir_name, /*parent=*/dir); - - for (let i = 0; i < kPathSeparators.length; ++i) { - const path_with_separator = `${subdir_name}${kPathSeparators[i]}file_name`; - await promise_rejects(t, new TypeError(), dir.getDirectory(path_with_separator, { create: true }), - `getDirectory(true) must reject names containing "${kPathSeparators[i]}"`); - } -}, 'getDirectory(create=true) with a path separator'); diff --git a/tests/wpt/web-platform-tests/native-file-system/FileSystemDirectoryHandle-getFile.tentative.https.window.js b/tests/wpt/web-platform-tests/native-file-system/FileSystemDirectoryHandle-getFile.tentative.https.window.js deleted file mode 100644 index fa38abbc5447..000000000000 --- a/tests/wpt/web-platform-tests/native-file-system/FileSystemDirectoryHandle-getFile.tentative.https.window.js +++ /dev/null @@ -1,111 +0,0 @@ -// META: script=resources/test-helpers.js -promise_test(async t => cleanupSandboxedFileSystem(), - 'Cleanup to setup test environment'); - -promise_test(async t => { - const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - await promise_rejects(t, 'NotFoundError', dir.getFile('non-existing-file')); -}, 'getFile(create=false) rejects for non-existing files'); - -promise_test(async t => { - const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - const handle = await dir.getFile('non-existing-file', { create: true }); - t.add_cleanup(() => dir.removeEntry('non-existing-file')); - - assert_true(handle.isFile); - assert_false(handle.isDirectory); - assert_equals(handle.name, 'non-existing-file'); - assert_equals(await getFileSize(handle), 0); - assert_equals(await getFileContents(handle), ''); -}, 'getFile(create=true) creates an empty file for non-existing files'); - -promise_test(async t => { - const existing_handle = await createFileWithContents(t, 'existing-file', '1234567890'); - - const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - const handle = await dir.getFile('existing-file'); - - assert_true(handle.isFile); - assert_false(handle.isDirectory); - assert_equals(handle.name, 'existing-file'); - assert_equals(await getFileSize(handle), 10); - assert_equals(await getFileContents(handle), '1234567890'); -}, 'getFile(create=false) returns existing files'); - -promise_test(async t => { - const existing_handle = await createFileWithContents(t, 'file-with-contents', '1234567890'); - - const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - const handle = await dir.getFile('file-with-contents', { create: true }); - - assert_true(handle.isFile); - assert_false(handle.isDirectory); - assert_equals(handle.name, 'file-with-contents'); - assert_equals(await getFileSize(handle), 10); - assert_equals(await getFileContents(handle), '1234567890'); -}, 'getFile(create=true) returns existing files without erasing'); - -promise_test(async t => { - const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - const dir_handle = await dir.getDirectory('dir-name', { create: true }); - t.add_cleanup(() => dir.removeEntry('dir-name', { recursive: true })); - - await promise_rejects(t, 'TypeMismatchError', dir.getFile('dir-name')); -}, 'getFile(create=false) when a directory already exists with the same name'); - -promise_test(async t => { - const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - const dir_handle = await dir.getDirectory('dir-name', { create: true }); - t.add_cleanup(() => dir.removeEntry('dir-name', { recursive: true })); - - await promise_rejects(t, 'TypeMismatchError', dir.getFile('dir-name', { create: true })); -}, 'getFile(create=true) when a directory already exists with the same name'); - -promise_test(async t => { - const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - await promise_rejects(t, new TypeError(), dir.getFile("", { create: true })); - await promise_rejects(t, new TypeError(), dir.getFile("", { create: false })); -}, 'getFile() with empty name'); - -promise_test(async t => { - const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - await promise_rejects(t, new TypeError(), dir.getFile(kCurrentDirectory)); - await promise_rejects(t, new TypeError(), dir.getFile(kCurrentDirectory, { create: true })); -}, `getFile() with "${kCurrentDirectory}" name`); - -promise_test(async t => { - const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - const subdir = await createDirectory(t, 'subdir-name', /*parent=*/dir); - - await promise_rejects(t, new TypeError(), subdir.getFile(kParentDirectory)); - await promise_rejects(t, new TypeError(), subdir.getFile(kParentDirectory, { create: true })); -}, `getFile() with "${kParentDirectory}" name`); - -promise_test(async t => { - const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - - const subdir_name = 'subdir-name'; - const subdir = await createDirectory(t, subdir_name, /*parent=*/dir); - - const file_name = 'file-name'; - await createEmptyFile(t, file_name, /*parent=*/subdir); - - for (let i = 0; i < kPathSeparators.length; ++i) { - const path_with_separator = `${subdir_name}${kPathSeparators[i]}${file_name}`; - await promise_rejects(t, new TypeError(), dir.getFile(path_with_separator), - `getFile() must reject names containing "${kPathSeparators[i]}"`); - } -}, 'getFile(create=false) with a path separator when the file exists.'); - -promise_test(async t => { - const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - - const subdir_name = 'subdir-name'; - const subdir = await createDirectory(t, subdir_name, /*parent=*/dir); - - for (let i = 0; i < kPathSeparators.length; ++i) { - const path_with_separator = `${subdir_name}${kPathSeparators[i]}file_name`; - await promise_rejects(t, new TypeError(), dir.getFile(path_with_separator, { create: true }), - `getFile(true) must reject names containing "${kPathSeparators[i]}"`); - } -}, 'getFile(create=true) with a path separator'); diff --git a/tests/wpt/web-platform-tests/native-file-system/native_FileSystemDirectoryHandle-getDirectory.tentative.https.manual.window.js b/tests/wpt/web-platform-tests/native-file-system/native_FileSystemDirectoryHandle-getDirectory.tentative.https.manual.window.js new file mode 100644 index 000000000000..cfe729cd1f1d --- /dev/null +++ b/tests/wpt/web-platform-tests/native-file-system/native_FileSystemDirectoryHandle-getDirectory.tentative.https.manual.window.js @@ -0,0 +1,4 @@ +// META: script=/resources/testdriver.js +// META: script=resources/test-helpers.js +// META: script=resources/native-fs-test-helpers.js +// META: script=script-tests/FileSystemDirectoryHandle-getDirectory.js diff --git a/tests/wpt/web-platform-tests/native-file-system/native_FileSystemDirectoryHandle-getFile.tentative.https.manual.window.js b/tests/wpt/web-platform-tests/native-file-system/native_FileSystemDirectoryHandle-getFile.tentative.https.manual.window.js new file mode 100644 index 000000000000..0455cb800919 --- /dev/null +++ b/tests/wpt/web-platform-tests/native-file-system/native_FileSystemDirectoryHandle-getFile.tentative.https.manual.window.js @@ -0,0 +1,4 @@ +// META: script=/resources/testdriver.js +// META: script=resources/test-helpers.js +// META: script=resources/native-fs-test-helpers.js +// META: script=script-tests/FileSystemDirectoryHandle-getFile.js diff --git a/tests/wpt/web-platform-tests/native-file-system/native_FileSystemDirectoryHandle-removeEntry.tentative.https.manual.window.js b/tests/wpt/web-platform-tests/native-file-system/native_FileSystemDirectoryHandle-removeEntry.tentative.https.manual.window.js new file mode 100644 index 000000000000..8905a7afdea5 --- /dev/null +++ b/tests/wpt/web-platform-tests/native-file-system/native_FileSystemDirectoryHandle-removeEntry.tentative.https.manual.window.js @@ -0,0 +1,4 @@ +// META: script=/resources/testdriver.js +// META: script=resources/test-helpers.js +// META: script=resources/native-fs-test-helpers.js +// META: script=script-tests/FileSystemDirectoryHandle-removeEntry.js diff --git a/tests/wpt/web-platform-tests/native-file-system/native_FileSystemWriter.tentative.https.manual.window.js b/tests/wpt/web-platform-tests/native-file-system/native_FileSystemWriter.tentative.https.manual.window.js new file mode 100644 index 000000000000..25d8ee995857 --- /dev/null +++ b/tests/wpt/web-platform-tests/native-file-system/native_FileSystemWriter.tentative.https.manual.window.js @@ -0,0 +1,4 @@ +// META: script=/resources/testdriver.js +// META: script=resources/test-helpers.js +// META: script=resources/native-fs-test-helpers.js +// META: script=script-tests/FileSystemWriter.js diff --git a/tests/wpt/web-platform-tests/native-file-system/resources/native-fs-test-helpers.js b/tests/wpt/web-platform-tests/native-file-system/resources/native-fs-test-helpers.js new file mode 100644 index 000000000000..5ad8c04724b7 --- /dev/null +++ b/tests/wpt/web-platform-tests/native-file-system/resources/native-fs-test-helpers.js @@ -0,0 +1,49 @@ +// This file defines a directory_test() function that can be used to define +// tests that require a FileSystemDirectoryHandle. The implementation of that +// function in this file will ask the user to select an empty directory and +// uses that directory. +// +// Another implementation of this function exists in +// sandboxed-fs-test-helpers.js, where that version uses the sandboxed file +// system instead. + +const directory_promise = (async () => { + await new Promise(resolve => { + window.addEventListener('DOMContentLoaded', resolve); + }); + + await window.test_driver.bless( + 'show a file picker.
Please select an empty directory'); + const entries = await self.chooseFileSystemEntries({type: 'openDirectory'}); + assert_true(entries instanceof FileSystemHandle); + assert_true(entries instanceof FileSystemDirectoryHandle); + for await (const entry of entries.getEntries()) { + assert_unreached('Selected directory is not empty'); + } + return entries; +})(); + +function directory_test(func, description) { + promise_test(async t => { + const directory = await directory_promise; + // To be resilient against tests not cleaning up properly, cleanup before + // every test. + for await (let entry of directory.getEntries()) { + await directory.removeEntry(entry.name, {recursive: entry.isDirectory}); + } + await func(t, directory); + }, description); +} + +directory_test(async (t, dir) => { + assert_equals(await dir.queryPermission({writable: false}), 'granted'); +}, 'User succesfully selected an empty directory.'); + +directory_test(async (t, dir) => { + const status = await dir.queryPermission({writable: true}); + if (status == 'granted') + return; + + await window.test_driver.bless('ask for write permission'); + assert_equals(await dir.requestPermission({writable: true}), 'granted'); +}, 'User granted write access.'); diff --git a/tests/wpt/web-platform-tests/native-file-system/resources/sandboxed-fs-test-helpers.js b/tests/wpt/web-platform-tests/native-file-system/resources/sandboxed-fs-test-helpers.js new file mode 100644 index 000000000000..5f4f269d2242 --- /dev/null +++ b/tests/wpt/web-platform-tests/native-file-system/resources/sandboxed-fs-test-helpers.js @@ -0,0 +1,25 @@ +// This file defines a directory_test() function that can be used to define +// tests that require a FileSystemDirectoryHandle. The implementation of that +// function in this file will return an empty directory in the sandboxed file +// system. +// +// Another implementation of this function exists in native-fs-test-helpers.js, +// where that version uses the native file system instead. + +async function cleanupSandboxedFileSystem() { + const dir = + await FileSystemDirectoryHandle.getSystemDirectory({type: 'sandbox'}); + for await (let entry of dir.getEntries()) + await dir.removeEntry(entry.name, {recursive: entry.isDirectory}); +} + +function directory_test(func, description) { + promise_test(async t => { + // To be extra resilient against bad tests, cleanup before every test. + await cleanupSandboxedFileSystem(); + + const dir = + await FileSystemDirectoryHandle.getSystemDirectory({type: 'sandbox'}); + await func(t, dir); + }, description); +} diff --git a/tests/wpt/web-platform-tests/native-file-system/resources/test-helpers.js b/tests/wpt/web-platform-tests/native-file-system/resources/test-helpers.js index b794cee0c5f1..d0360921f1d8 100644 --- a/tests/wpt/web-platform-tests/native-file-system/resources/test-helpers.js +++ b/tests/wpt/web-platform-tests/native-file-system/resources/test-helpers.js @@ -1,95 +1,87 @@ // A special path component meaning "this directory." -const kCurrentDirectory = "."; +const kCurrentDirectory = '.'; // A special path component meaning "the parent directory." -const kParentDirectory = ".."; +const kParentDirectory = '..'; // Array of separators used to separate components in hierarchical paths. let kPathSeparators; -if (navigator.userAgent.includes("Windows NT")) { - // Windows uses both '/' and '\' as path separators. - kPathSeparators = ['/', '\\' ]; +if (navigator.userAgent.includes('Windows NT')) { + // Windows uses both '/' and '\' as path separators. + kPathSeparators = ['/', '\\']; } else { - kPathSeparators = [ '/' ]; -} - -async function cleanupSandboxedFileSystem() { - const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - for await (let entry of dir.getEntries()) - dir.removeEntry(entry.name, { recursive: entry.isDirectory }); + kPathSeparators = ['/']; } async function getFileSize(handle) { - const file = await handle.getFile(); - return file.size; + const file = await handle.getFile(); + return file.size; } async function getFileContents(handle) { - const file = await handle.getFile(); - return new Response(file).text(); + const file = await handle.getFile(); + return new Response(file).text(); } async function getDirectoryEntryCount(handle) { - let result = 0; - for await (let entry of handle.getEntries()) { - result++; - } - return result; + let result = 0; + for await (let entry of handle.getEntries()) { + result++; + } + return result; } async function getSortedDirectoryEntries(handle) { - let result = []; - for await (let entry of handle.getEntries()) { - if (entry.isDirectory) - result.push(entry.name + '/'); - else - result.push(entry.name); - } - result.sort(); - return result; + let result = []; + for await (let entry of handle.getEntries()) { + if (entry.isDirectory) + result.push(entry.name + '/'); + else + result.push(entry.name); + } + result.sort(); + return result; } async function createDirectory(test, name, parent) { - const parent_dir_handle = parent ? parent : - await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - - const new_dir_handle = await parent_dir_handle.getDirectory(name, { create: true }); + const new_dir_handle = await parent.getDirectory(name, {create: true}); test.add_cleanup(async () => { - try { - await parent_dir_handle.removeEntry(name, { recursive: true }); - } catch (e) { - // Ignore any errors when removing directories, as tests might - // have already removed the directory. - } + try { + await parent.removeEntry(name, {recursive: true}); + } catch (e) { + // Ignore any errors when removing directories, as tests might + // have already removed the directory. + } }); return new_dir_handle; } async function createEmptyFile(test, name, parent) { - const dir = parent ? parent : await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - const handle = await dir.getFile(name, { create: true }); - test.add_cleanup(async () => { - try { - await dir.removeEntry(name); - } catch (e) { - // Ignore any errors when removing files, as tests might already remove the file. - } - }); - // Make sure the file is empty. - assert_equals(await getFileSize(handle), 0); - return handle; + const handle = await parent.getFile(name, {create: true}); + test.add_cleanup(async () => { + try { + await parent.removeEntry(name); + } catch (e) { + // Ignore any errors when removing files, as tests might already remove + // the file. + } + }); + // Make sure the file is empty. + assert_equals(await getFileSize(handle), 0); + return handle; } async function createFileWithContents(test, name, contents, parent) { - const handle = await createEmptyFile(test, name, parent); - const writer = await handle.createWriter(); - await writer.write(0, new Blob([contents])); - await writer.close(); - return handle; + const handle = await createEmptyFile(test, name, parent); + const writer = await handle.createWriter(); + await writer.write(0, new Blob([contents])); + await writer.close(); + return handle; } function garbageCollect() { - // TODO(https://github.com/web-platform-tests/wpt/issues/7899): Change to - // some sort of cross-browser GC trigger. - if (self.gc) self.gc(); + // TODO(https://github.com/web-platform-tests/wpt/issues/7899): Change to + // some sort of cross-browser GC trigger. + if (self.gc) + self.gc(); }; diff --git a/tests/wpt/web-platform-tests/native-file-system/sandboxed_FileSystemDirectoryHandle-getDirectory.tentative.https.any.js b/tests/wpt/web-platform-tests/native-file-system/sandboxed_FileSystemDirectoryHandle-getDirectory.tentative.https.any.js new file mode 100644 index 000000000000..6fcf566e31fb --- /dev/null +++ b/tests/wpt/web-platform-tests/native-file-system/sandboxed_FileSystemDirectoryHandle-getDirectory.tentative.https.any.js @@ -0,0 +1,3 @@ +// META: script=resources/test-helpers.js +// META: script=resources/sandboxed-fs-test-helpers.js +// META: script=script-tests/FileSystemDirectoryHandle-getDirectory.js diff --git a/tests/wpt/web-platform-tests/native-file-system/sandboxed_FileSystemDirectoryHandle-getFile.tentative.https.any.js b/tests/wpt/web-platform-tests/native-file-system/sandboxed_FileSystemDirectoryHandle-getFile.tentative.https.any.js new file mode 100644 index 000000000000..65ae891cd444 --- /dev/null +++ b/tests/wpt/web-platform-tests/native-file-system/sandboxed_FileSystemDirectoryHandle-getFile.tentative.https.any.js @@ -0,0 +1,3 @@ +// META: script=resources/test-helpers.js +// META: script=resources/sandboxed-fs-test-helpers.js +// META: script=script-tests/FileSystemDirectoryHandle-getFile.js diff --git a/tests/wpt/web-platform-tests/native-file-system/sandboxed_FileSystemDirectoryHandle-removeEntry.tentative.https.any.js b/tests/wpt/web-platform-tests/native-file-system/sandboxed_FileSystemDirectoryHandle-removeEntry.tentative.https.any.js new file mode 100644 index 000000000000..a4be8bd267e7 --- /dev/null +++ b/tests/wpt/web-platform-tests/native-file-system/sandboxed_FileSystemDirectoryHandle-removeEntry.tentative.https.any.js @@ -0,0 +1,3 @@ +// META: script=resources/test-helpers.js +// META: script=resources/sandboxed-fs-test-helpers.js +// META: script=script-tests/FileSystemDirectoryHandle-removeEntry.js diff --git a/tests/wpt/web-platform-tests/native-file-system/sandboxed_FileSystemWriter.tentative.https.any.js b/tests/wpt/web-platform-tests/native-file-system/sandboxed_FileSystemWriter.tentative.https.any.js new file mode 100644 index 000000000000..8352e2487fe0 --- /dev/null +++ b/tests/wpt/web-platform-tests/native-file-system/sandboxed_FileSystemWriter.tentative.https.any.js @@ -0,0 +1,3 @@ +// META: script=resources/test-helpers.js +// META: script=resources/sandboxed-fs-test-helpers.js +// META: script=script-tests/FileSystemWriter.js diff --git a/tests/wpt/web-platform-tests/native-file-system/script-tests/FileSystemDirectoryHandle-getDirectory.js b/tests/wpt/web-platform-tests/native-file-system/script-tests/FileSystemDirectoryHandle-getDirectory.js new file mode 100644 index 000000000000..c2c128f5eded --- /dev/null +++ b/tests/wpt/web-platform-tests/native-file-system/script-tests/FileSystemDirectoryHandle-getDirectory.js @@ -0,0 +1,111 @@ +directory_test(async (t, root) => { + await promise_rejects( + t, 'NotFoundError', root.getDirectory('non-existing-dir')); +}, 'getDirectory(create=false) rejects for non-existing directories'); + +directory_test(async (t, root) => { + const handle = await root.getDirectory('non-existing-dir', {create: true}); + t.add_cleanup(() => root.removeEntry('non-existing-dir', {recursive: true})); + + assert_false(handle.isFile); + assert_true(handle.isDirectory); + assert_equals(handle.name, 'non-existing-dir'); + assert_equals(await getDirectoryEntryCount(handle), 0); + assert_array_equals( + await getSortedDirectoryEntries(root), ['non-existing-dir/']); +}, 'getDirectory(create=true) creates an empty directory'); + +directory_test(async (t, root) => { + const existing_handle = + await root.getDirectory('dir-with-contents', {create: true}); + t.add_cleanup(() => root.removeEntry('dir-with-contents', {recursive: true})); + const file_handle = await createEmptyFile(t, 'test-file', existing_handle); + + const handle = await root.getDirectory('dir-with-contents', {create: false}); + + assert_false(handle.isFile); + assert_true(handle.isDirectory); + assert_equals(handle.name, 'dir-with-contents'); + assert_array_equals(await getSortedDirectoryEntries(handle), ['test-file']); +}, 'getDirectory(create=false) returns existing directories'); + +directory_test(async (t, root) => { + const existing_handle = + await root.getDirectory('dir-with-contents', {create: true}); + t.add_cleanup(() => root.removeEntry('dir-with-contents', {recursive: true})); + const file_handle = + await existing_handle.getFile('test-file', {create: true}); + + const handle = await root.getDirectory('dir-with-contents', {create: true}); + + assert_false(handle.isFile); + assert_true(handle.isDirectory); + assert_equals(handle.name, 'dir-with-contents'); + assert_array_equals(await getSortedDirectoryEntries(handle), ['test-file']); +}, 'getDirectory(create=true) returns existing directories without erasing'); + +directory_test(async (t, root) => { + await createEmptyFile(t, 'file-name', root); + + await promise_rejects(t, 'TypeMismatchError', root.getDirectory('file-name')); + await promise_rejects( + t, 'TypeMismatchError', root.getDirectory('file-name', {create: false})); + await promise_rejects( + t, 'TypeMismatchError', root.getDirectory('file-name', {create: true})); +}, 'getDirectory() when a file already exists with the same name'); + +directory_test(async (t, dir) => { + await promise_rejects( + t, new TypeError(), dir.getDirectory('', {create: true})); + await promise_rejects( + t, new TypeError(), dir.getDirectory('', {create: false})); +}, 'getDirectory() with empty name'); + +directory_test(async (t, dir) => { + await promise_rejects( + t, new TypeError(), dir.getDirectory(kCurrentDirectory)); + await promise_rejects( + t, new TypeError(), dir.getDirectory(kCurrentDirectory, {create: true})); +}, `getDirectory() with "${kCurrentDirectory}" name`); + +directory_test(async (t, dir) => { + const subdir = await createDirectory(t, 'subdir-name', /*parent=*/ dir); + + await promise_rejects( + t, new TypeError(), subdir.getDirectory(kParentDirectory)); + await promise_rejects( + t, new TypeError(), + subdir.getDirectory(kParentDirectory, {create: true})); +}, `getDirectory() with "${kParentDirectory}" name`); + +directory_test(async (t, dir) => { + const first_subdir_name = 'first-subdir-name'; + const first_subdir = + await createDirectory(t, first_subdir_name, /*parent=*/ dir); + + const second_subdir_name = 'second-subdir-name'; + const second_subdir = + await createDirectory(t, second_subdir_name, /*parent=*/ first_subdir); + + for (let i = 0; i < kPathSeparators.length; ++i) { + const path_with_separator = + `${first_subdir_name}${kPathSeparators[i]}${second_subdir_name}`; + await promise_rejects( + t, new TypeError(), dir.getDirectory(path_with_separator), + `getDirectory() must reject names containing "${kPathSeparators[i]}"`); + } +}, 'getDirectory(create=false) with a path separator when the directory exists'); + +directory_test(async (t, dir) => { + const subdir_name = 'subdir-name'; + const subdir = await createDirectory(t, subdir_name, /*parent=*/ dir); + + for (let i = 0; i < kPathSeparators.length; ++i) { + const path_with_separator = `${subdir_name}${kPathSeparators[i]}file_name`; + await promise_rejects( + t, new TypeError(), + dir.getDirectory(path_with_separator, {create: true}), + `getDirectory(true) must reject names containing "${ + kPathSeparators[i]}"`); + } +}, 'getDirectory(create=true) with a path separator'); diff --git a/tests/wpt/web-platform-tests/native-file-system/script-tests/FileSystemDirectoryHandle-getFile.js b/tests/wpt/web-platform-tests/native-file-system/script-tests/FileSystemDirectoryHandle-getFile.js new file mode 100644 index 000000000000..4d8ee96c3d03 --- /dev/null +++ b/tests/wpt/web-platform-tests/native-file-system/script-tests/FileSystemDirectoryHandle-getFile.js @@ -0,0 +1,100 @@ +directory_test(async (t, dir) => { + await promise_rejects(t, 'NotFoundError', dir.getFile('non-existing-file')); +}, 'getFile(create=false) rejects for non-existing files'); + +directory_test(async (t, dir) => { + const handle = await dir.getFile('non-existing-file', {create: true}); + t.add_cleanup(() => dir.removeEntry('non-existing-file')); + + assert_true(handle.isFile); + assert_false(handle.isDirectory); + assert_equals(handle.name, 'non-existing-file'); + assert_equals(await getFileSize(handle), 0); + assert_equals(await getFileContents(handle), ''); +}, 'getFile(create=true) creates an empty file for non-existing files'); + +directory_test(async (t, dir) => { + const existing_handle = await createFileWithContents( + t, 'existing-file', '1234567890', /*parent=*/ dir); + const handle = await dir.getFile('existing-file'); + + assert_true(handle.isFile); + assert_false(handle.isDirectory); + assert_equals(handle.name, 'existing-file'); + assert_equals(await getFileSize(handle), 10); + assert_equals(await getFileContents(handle), '1234567890'); +}, 'getFile(create=false) returns existing files'); + +directory_test(async (t, dir) => { + const existing_handle = await createFileWithContents( + t, 'file-with-contents', '1234567890', /*parent=*/ dir); + const handle = await dir.getFile('file-with-contents', {create: true}); + + assert_true(handle.isFile); + assert_false(handle.isDirectory); + assert_equals(handle.name, 'file-with-contents'); + assert_equals(await getFileSize(handle), 10); + assert_equals(await getFileContents(handle), '1234567890'); +}, 'getFile(create=true) returns existing files without erasing'); + +directory_test(async (t, dir) => { + const dir_handle = await dir.getDirectory('dir-name', {create: true}); + t.add_cleanup(() => dir.removeEntry('dir-name', {recursive: true})); + + await promise_rejects(t, 'TypeMismatchError', dir.getFile('dir-name')); +}, 'getFile(create=false) when a directory already exists with the same name'); + +directory_test(async (t, dir) => { + const dir_handle = await dir.getDirectory('dir-name', {create: true}); + t.add_cleanup(() => dir.removeEntry('dir-name', {recursive: true})); + + await promise_rejects( + t, 'TypeMismatchError', dir.getFile('dir-name', {create: true})); +}, 'getFile(create=true) when a directory already exists with the same name'); + +directory_test(async (t, dir) => { + await promise_rejects(t, new TypeError(), dir.getFile('', {create: true})); + await promise_rejects(t, new TypeError(), dir.getFile('', {create: false})); +}, 'getFile() with empty name'); + +directory_test(async (t, dir) => { + await promise_rejects(t, new TypeError(), dir.getFile(kCurrentDirectory)); + await promise_rejects( + t, new TypeError(), dir.getFile(kCurrentDirectory, {create: true})); +}, `getFile() with "${kCurrentDirectory}" name`); + +directory_test(async (t, dir) => { + const subdir = await createDirectory(t, 'subdir-name', /*parent=*/ dir); + + await promise_rejects(t, new TypeError(), subdir.getFile(kParentDirectory)); + await promise_rejects( + t, new TypeError(), subdir.getFile(kParentDirectory, {create: true})); +}, `getFile() with "${kParentDirectory}" name`); + +directory_test(async (t, dir) => { + const subdir_name = 'subdir-name'; + const subdir = await createDirectory(t, subdir_name, /*parent=*/ dir); + + const file_name = 'file-name'; + await createEmptyFile(t, file_name, /*parent=*/ subdir); + + for (let i = 0; i < kPathSeparators.length; ++i) { + const path_with_separator = + `${subdir_name}${kPathSeparators[i]}${file_name}`; + await promise_rejects( + t, new TypeError(), dir.getFile(path_with_separator), + `getFile() must reject names containing "${kPathSeparators[i]}"`); + } +}, 'getFile(create=false) with a path separator when the file exists.'); + +directory_test(async (t, dir) => { + const subdir_name = 'subdir-name'; + const subdir = await createDirectory(t, subdir_name, /*parent=*/ dir); + + for (let i = 0; i < kPathSeparators.length; ++i) { + const path_with_separator = `${subdir_name}${kPathSeparators[i]}file_name`; + await promise_rejects( + t, new TypeError(), dir.getFile(path_with_separator, {create: true}), + `getFile(true) must reject names containing "${kPathSeparators[i]}"`); + } +}, 'getFile(create=true) with a path separator'); diff --git a/tests/wpt/web-platform-tests/native-file-system/script-tests/FileSystemDirectoryHandle-removeEntry.js b/tests/wpt/web-platform-tests/native-file-system/script-tests/FileSystemDirectoryHandle-removeEntry.js new file mode 100644 index 000000000000..8e89e0958db9 --- /dev/null +++ b/tests/wpt/web-platform-tests/native-file-system/script-tests/FileSystemDirectoryHandle-removeEntry.js @@ -0,0 +1,69 @@ + +directory_test(async (t, root) => { + const handle = + await createFileWithContents(t, 'file-to-remove', '12345', root); + await createFileWithContents(t, 'file-to-keep', 'abc', root); + await root.removeEntry('file-to-remove'); + + assert_array_equals(await getSortedDirectoryEntries(root), ['file-to-keep']); + await promise_rejects(t, 'NotFoundError', getFileContents(handle)); +}, 'removeEntry() to remove a file'); + +directory_test(async (t, root) => { + const handle = + await createFileWithContents(t, 'file-to-remove', '12345', root); + await root.removeEntry('file-to-remove'); + + await promise_rejects(t, 'NotFoundError', root.removeEntry('file-to-remove')); +}, 'removeEntry() on an already removed file should fail'); + +directory_test(async (t, root) => { + const dir = await root.getDirectory('dir-to-remove', {create: true}); + await createFileWithContents(t, 'file-to-keep', 'abc', root); + await root.removeEntry('dir-to-remove'); + + assert_array_equals(await getSortedDirectoryEntries(root), ['file-to-keep']); + await promise_rejects(t, 'NotFoundError', getSortedDirectoryEntries(dir)); +}, 'removeEntry() to remove an empty directory'); + +directory_test(async (t, root) => { + const dir = await root.getDirectory('dir-to-remove', {create: true}); + t.add_cleanup(() => root.removeEntry('dir-to-remove', {recursive: true})); + await createEmptyFile(t, 'file-in-dir', dir); + + await promise_rejects( + t, 'InvalidModificationError', root.removeEntry('dir-to-remove')); + assert_array_equals( + await getSortedDirectoryEntries(root), ['dir-to-remove/']); + assert_array_equals(await getSortedDirectoryEntries(dir), ['file-in-dir']); +}, 'removeEntry() on a non-empty directory should fail'); + +directory_test(async (t, root) => { + const dir = await createDirectory(t, 'dir', root); + await promise_rejects(t, new TypeError(), dir.removeEntry('')); +}, 'removeEntry() with empty name should fail'); + +directory_test(async (t, root) => { + const dir = await createDirectory(t, 'dir', root); + await promise_rejects(t, new TypeError(), dir.removeEntry(kCurrentDirectory)); +}, `removeEntry() with "${kCurrentDirectory}" name should fail`); + +directory_test(async (t, root) => { + const dir = await createDirectory(t, 'dir', root); + await promise_rejects(t, new TypeError(), dir.removeEntry(kParentDirectory)); +}, `removeEntry() with "${kParentDirectory}" name should fail`); + +directory_test(async (t, root) => { + const dir_name = 'dir-name'; + const dir = await createDirectory(t, dir_name, root); + + const file_name = 'file-name'; + await createEmptyFile(t, file_name, dir); + + for (let i = 0; i < kPathSeparators.length; ++i) { + const path_with_separator = `${dir_name}${kPathSeparators[i]}${file_name}`; + await promise_rejects( + t, new TypeError(), root.removeEntry(path_with_separator), + `removeEntry() must reject names containing "${kPathSeparators[i]}"`); + } +}, 'removeEntry() with a path separator should fail.'); diff --git a/tests/wpt/web-platform-tests/native-file-system/FileSystemWriter.tentative.https.window.js b/tests/wpt/web-platform-tests/native-file-system/script-tests/FileSystemWriter.js similarity index 62% rename from tests/wpt/web-platform-tests/native-file-system/FileSystemWriter.tentative.https.window.js rename to tests/wpt/web-platform-tests/native-file-system/script-tests/FileSystemWriter.js index acc0be1c5218..1c51d0b4eb77 100644 --- a/tests/wpt/web-platform-tests/native-file-system/FileSystemWriter.tentative.https.window.js +++ b/tests/wpt/web-platform-tests/native-file-system/script-tests/FileSystemWriter.js @@ -1,54 +1,51 @@ -// META: script=resources/test-helpers.js -promise_test(async t => cleanupSandboxedFileSystem(), - 'Cleanup to setup test environment'); - -promise_test(async t => { - const handle = await createEmptyFile(t, 'empty_blob'); - const writer = await handle.createWriter(); +directory_test(async (t, root) => { + const handle = await createEmptyFile(t, 'empty_blob', root); + const writer = await handle.createWriter(); - await writer.write(0, new Blob([])); - await writer.close(); + await writer.write(0, new Blob([])); + await writer.close(); - assert_equals(await getFileContents(handle), ''); - assert_equals(await getFileSize(handle), 0); + assert_equals(await getFileContents(handle), ''); + assert_equals(await getFileSize(handle), 0); }, 'write() with an empty blob to an empty file'); -promise_test(async t => { - const handle = await createEmptyFile(t, 'valid_blob'); - const writer = await handle.createWriter(); +directory_test(async (t, root) => { + const handle = await createEmptyFile(t, 'valid_blob', root); + const writer = await handle.createWriter(); - await writer.write(0, new Blob(['1234567890'])); - await writer.close(); + await writer.write(0, new Blob(['1234567890'])); + await writer.close(); - assert_equals(await getFileContents(handle), '1234567890'); - assert_equals(await getFileSize(handle), 10); + assert_equals(await getFileContents(handle), '1234567890'); + assert_equals(await getFileSize(handle), 10); }, 'write() a blob to an empty file'); -promise_test(async t => { - const handle = await createEmptyFile(t, 'blob_with_offset'); - const writer = await handle.createWriter(); +directory_test(async (t, root) => { + const handle = await createEmptyFile(t, 'blob_with_offset', root); + const writer = await handle.createWriter(); - await writer.write(0, new Blob(['1234567890'])); - await writer.write(4, new Blob(['abc'])); - await writer.close(); + await writer.write(0, new Blob(['1234567890'])); + await writer.write(4, new Blob(['abc'])); + await writer.close(); - assert_equals(await getFileContents(handle), '1234abc890'); - assert_equals(await getFileSize(handle), 10); + assert_equals(await getFileContents(handle), '1234abc890'); + assert_equals(await getFileSize(handle), 10); }, 'write() called with a blob and a valid offset'); -promise_test(async t => { - const handle = await createEmptyFile(t, 'bad_offset'); - const writer = await handle.createWriter(); +directory_test(async (t, root) => { + const handle = await createEmptyFile(t, 'bad_offset', root); + const writer = await handle.createWriter(); - await promise_rejects(t, 'InvalidStateError', writer.write(4, new Blob(['abc']))); - await writer.close(); + await promise_rejects( + t, 'InvalidStateError', writer.write(4, new Blob(['abc']))); + await writer.close(); - assert_equals(await getFileContents(handle), ''); - assert_equals(await getFileSize(handle), 0); + assert_equals(await getFileContents(handle), ''); + assert_equals(await getFileSize(handle), 0); }, 'write() called with an invalid offset'); -promise_test(async t => { - const handle = await createEmptyFile(t, 'empty_string'); +directory_test(async (t, root) => { + const handle = await createEmptyFile(t, 'empty_string', root); const writer = await handle.createWriter(); await writer.write(0, ''); @@ -57,8 +54,8 @@ promise_test(async t => { assert_equals(await getFileSize(handle), 0); }, 'write() with an empty string to an empty file'); -promise_test(async t => { - const handle = await createEmptyFile(t, 'valid_utf8_string'); +directory_test(async (t, root) => { + const handle = await createEmptyFile(t, 'valid_utf8_string', root); const writer = await handle.createWriter(); await writer.write(0, 'foo🤘'); @@ -67,8 +64,8 @@ promise_test(async t => { assert_equals(await getFileSize(handle), 7); }, 'write() with a valid utf-8 string'); -promise_test(async t => { - const handle = await createEmptyFile(t, 'string_with_unix_line_ending'); +directory_test(async (t, root) => { + const handle = await createEmptyFile(t, 'string_with_unix_line_ending', root); const writer = await handle.createWriter(); await writer.write(0, 'foo\n'); @@ -77,8 +74,9 @@ promise_test(async t => { assert_equals(await getFileSize(handle), 4); }, 'write() with a string with unix line ending preserved'); -promise_test(async t => { - const handle = await createEmptyFile(t, 'string_with_windows_line_ending'); +directory_test(async (t, root) => { + const handle = + await createEmptyFile(t, 'string_with_windows_line_ending', root); const writer = await handle.createWriter(); await writer.write(0, 'foo\r\n'); @@ -87,8 +85,8 @@ promise_test(async t => { assert_equals(await getFileSize(handle), 5); }, 'write() with a string with windows line ending preserved'); -promise_test(async t => { - const handle = await createEmptyFile(t, 'empty_array_buffer'); +directory_test(async (t, root) => { + const handle = await createEmptyFile(t, 'empty_array_buffer', root); const writer = await handle.createWriter(); let buf = new ArrayBuffer(0); @@ -98,8 +96,9 @@ promise_test(async t => { assert_equals(await getFileSize(handle), 0); }, 'write() with an empty array buffer to an empty file'); -promise_test(async t => { - const handle = await createEmptyFile(t, 'valid_string_typed_byte_array'); +directory_test(async (t, root) => { + const handle = + await createEmptyFile(t, 'valid_string_typed_byte_array', root); const writer = await handle.createWriter(); let buf = new ArrayBuffer(3); @@ -113,32 +112,31 @@ promise_test(async t => { assert_equals(await getFileSize(handle), 3); }, 'write() with a valid typed array buffer'); -promise_test(async t => { - const handle = await createEmptyFile(t, 'trunc_shrink'); - const writer = await handle.createWriter(); +directory_test(async (t, root) => { + const handle = await createEmptyFile(t, 'trunc_shrink', root); + const writer = await handle.createWriter(); - await writer.write(0, new Blob(['1234567890'])); - await writer.truncate(5); - await writer.close(); + await writer.write(0, new Blob(['1234567890'])); + await writer.truncate(5); + await writer.close(); - assert_equals(await getFileContents(handle), '12345'); - assert_equals(await getFileSize(handle), 5); + assert_equals(await getFileContents(handle), '12345'); + assert_equals(await getFileSize(handle), 5); }, 'truncate() to shrink a file'); -promise_test(async t => { - const handle = await createEmptyFile(t, 'trunc_grow'); - const writer = await handle.createWriter(); +directory_test(async (t, root) => { + const handle = await createEmptyFile(t, 'trunc_grow', root); + const writer = await handle.createWriter(); - await writer.write(0, new Blob(['abc'])); - await writer.truncate(5); - await writer.close(); + await writer.write(0, new Blob(['abc'])); + await writer.truncate(5); + await writer.close(); - assert_equals(await getFileContents(handle), 'abc\0\0'); - assert_equals(await getFileSize(handle), 5); + assert_equals(await getFileContents(handle), 'abc\0\0'); + assert_equals(await getFileSize(handle), 5); }, 'truncate() to grow a file'); -promise_test(async t => { - const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); +directory_test(async (t, root) => { const dir = await createDirectory(t, 'parent_dir', root); const file_name = 'create_writer_fails_when_dir_removed.txt'; const handle = await createEmptyFile(t, file_name, dir); @@ -147,8 +145,7 @@ promise_test(async t => { await promise_rejects(t, 'NotFoundError', handle.createWriter()); }, 'createWriter() fails when parent directory is removed'); -promise_test(async t => { - const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); +directory_test(async (t, root) => { const dir = await createDirectory(t, 'parent_dir', root); const file_name = 'write_fails_when_dir_removed.txt'; const handle = await createEmptyFile(t, file_name, dir); @@ -158,8 +155,7 @@ promise_test(async t => { await promise_rejects(t, 'NotFoundError', writer.write(0, new Blob(['foo']))); }, 'write() fails when parent directory is removed'); -promise_test(async t => { - const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); +directory_test(async (t, root) => { const dir = await createDirectory(t, 'parent_dir', root); const file_name = 'truncate_fails_when_dir_removed.txt'; const handle = await createEmptyFile(t, file_name, dir); @@ -169,8 +165,7 @@ promise_test(async t => { await promise_rejects(t, 'NotFoundError', writer.truncate(0)); }, 'truncate() fails when parent directory is removed'); -promise_test(async t => { - const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); +directory_test(async (t, root) => { const dir = await createDirectory(t, 'parent_dir', root); const file_name = 'close_fails_when_dir_removed.txt'; const handle = await createEmptyFile(t, file_name, dir); @@ -181,8 +176,8 @@ promise_test(async t => { await promise_rejects(t, 'NotFoundError', writer.close()); }, 'atomic writes: close() fails when parent directory is removed'); -promise_test(async t => { - const handle = await createEmptyFile(t, 'atomic_writes.txt'); +directory_test(async (t, root) => { + const handle = await createEmptyFile(t, 'atomic_writes.txt', root); const writer = await handle.createWriter(); await writer.write(0, new Blob(['foox'])); @@ -200,8 +195,8 @@ promise_test(async t => { assert_equals(await getFileSize(handle), 4); }, 'atomic writes: writers make atomic changes on close'); -promise_test(async t => { - const handle = await createEmptyFile(t, 'atomic_write_after_close.txt'); +directory_test(async (t, root) => { + const handle = await createEmptyFile(t, 'atomic_write_after_close.txt', root); const writer = await handle.createWriter(); await writer.write(0, new Blob(['foo'])); @@ -209,11 +204,13 @@ promise_test(async t => { assert_equals(await getFileContents(handle), 'foo'); assert_equals(await getFileSize(handle), 3); - await promise_rejects(t, 'InvalidStateError', writer.write(0, new Blob(['abc']))); + await promise_rejects( + t, 'InvalidStateError', writer.write(0, new Blob(['abc']))); }, 'atomic writes: write() after close() fails'); -promise_test(async t => { - const handle = await createEmptyFile(t, 'atomic_truncate_after_close.txt'); +directory_test(async (t, root) => { + const handle = + await createEmptyFile(t, 'atomic_truncate_after_close.txt', root); const writer = await handle.createWriter(); await writer.write(0, new Blob(['foo'])); @@ -224,8 +221,8 @@ promise_test(async t => { await promise_rejects(t, 'InvalidStateError', writer.truncate(0)); }, 'atomic writes: truncate() after close() fails'); -promise_test(async t => { - const handle = await createEmptyFile(t, 'atomic_close_after_close.txt'); +directory_test(async (t, root) => { + const handle = await createEmptyFile(t, 'atomic_close_after_close.txt', root); const writer = await handle.createWriter(); await writer.write(0, new Blob(['foo'])); @@ -236,24 +233,23 @@ promise_test(async t => { await promise_rejects(t, 'InvalidStateError', writer.close()); }, 'atomic writes: close() after close() fails'); -promise_test(async t => { - const handle = await createEmptyFile(t, 'there_can_be_only_one.txt'); +directory_test(async (t, root) => { + const handle = await createEmptyFile(t, 'there_can_be_only_one.txt', root); const writer = await handle.createWriter(); await writer.write(0, new Blob(['foo'])); // This test might be flaky if there is a race condition allowing // close() to be called multiple times. - let success_promises = [...Array(100)].map(() => writer - .close() - .then(() => 1) - .catch(() => 0)); + let success_promises = + [...Array(100)].map(() => writer.close().then(() => 1).catch(() => 0)); let close_attempts = await Promise.all(success_promises); - let success_count = close_attempts.reduce((x,y) => x + y); + let success_count = close_attempts.reduce((x, y) => x + y); assert_equals(success_count, 1); }, 'atomic writes: only one close() operation may succeed'); -promise_test(async t => { - const handle = await createFileWithContents(t, 'atomic_file_is_copied.txt', 'fooks'); +directory_test(async (t, root) => { + const handle = await createFileWithContents( + t, 'atomic_file_is_copied.txt', 'fooks', root); const writer = await handle.createWriter({keepExistingData: true}); await writer.write(0, new Blob(['bar'])); @@ -262,8 +258,9 @@ promise_test(async t => { assert_equals(await getFileSize(handle), 5); }, 'createWriter({keepExistingData: true}): atomic writer initialized with source contents'); -promise_test(async t => { - const handle = await createFileWithContents(t, 'atomic_file_is_not_copied.txt', 'very long string'); +directory_test(async (t, root) => { + const handle = await createFileWithContents( + t, 'atomic_file_is_not_copied.txt', 'very long string', root); const writer = await handle.createWriter({keepExistingData: false}); await writer.write(0, new Blob(['bar'])); @@ -273,8 +270,7 @@ promise_test(async t => { assert_equals(await getFileSize(handle), 3); }, 'createWriter({keepExistingData: false}): atomic writer initialized with empty file'); -promise_test(async t => { - const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); +directory_test(async (t, root) => { const dir = await createDirectory(t, 'parent_dir', root); const file_name = 'atomic_writer_persists_removed.txt'; const handle = await createFileWithContents(t, file_name, 'foo', dir); diff --git a/tests/wpt/web-platform-tests/permissions/feature-policy-permissions-query.html b/tests/wpt/web-platform-tests/permissions/feature-policy-permissions-query.html new file mode 100644 index 000000000000..bd152e973e8f --- /dev/null +++ b/tests/wpt/web-platform-tests/permissions/feature-policy-permissions-query.html @@ -0,0 +1,11 @@ + + diff --git a/tests/wpt/web-platform-tests/permissions/permissions-query-feature-policy-attribute.https.sub.html b/tests/wpt/web-platform-tests/permissions/permissions-query-feature-policy-attribute.https.sub.html new file mode 100644 index 000000000000..1d7333d9b5f6 --- /dev/null +++ b/tests/wpt/web-platform-tests/permissions/permissions-query-feature-policy-attribute.https.sub.html @@ -0,0 +1,75 @@ + + +Test permissions query againts feature policy allow attribute + + +
+ + diff --git a/tests/wpt/web-platform-tests/portals/portals-repeated-activate.html b/tests/wpt/web-platform-tests/portals/portals-repeated-activate.html new file mode 100644 index 000000000000..a3843dddb47b --- /dev/null +++ b/tests/wpt/web-platform-tests/portals/portals-repeated-activate.html @@ -0,0 +1,10 @@ + + + + diff --git a/tests/wpt/web-platform-tests/portals/resources/portal-repeated-activate-window.html b/tests/wpt/web-platform-tests/portals/resources/portal-repeated-activate-window.html new file mode 100644 index 000000000000..e716034eff86 --- /dev/null +++ b/tests/wpt/web-platform-tests/portals/resources/portal-repeated-activate-window.html @@ -0,0 +1,20 @@ + + + + + diff --git a/tests/wpt/web-platform-tests/portals/resources/simple-portal-adopts-and-activates-predecessor.html b/tests/wpt/web-platform-tests/portals/resources/simple-portal-adopts-and-activates-predecessor.html new file mode 100644 index 000000000000..56bfd10f647f --- /dev/null +++ b/tests/wpt/web-platform-tests/portals/resources/simple-portal-adopts-and-activates-predecessor.html @@ -0,0 +1,6 @@ + + + + diff --git a/tests/wpt/web-platform-tests/resource-timing/status-codes-create-entry.html b/tests/wpt/web-platform-tests/resource-timing/status-codes-create-entry.html index fb4236e6bbe8..22e22c445b08 100644 --- a/tests/wpt/web-platform-tests/resource-timing/status-codes-create-entry.html +++ b/tests/wpt/web-platform-tests/resource-timing/status-codes-create-entry.html @@ -14,7 +14,7 @@ window.addEventListener("load", t.step_func(() => { const images = document.getElementsByTagName("img"); for (let img of images) { - assert_equals(performance.getEntriesByName(img.src).length, 1, img.src); + assert_greater_than(performance.getEntriesByName(img.src).length, 0, img.src); } t.done(); })); diff --git a/tests/wpt/web-platform-tests/resources/chromium/contacts_manager_mock.js b/tests/wpt/web-platform-tests/resources/chromium/contacts_manager_mock.js index 618968ec18da..ae4c33b073df 100644 --- a/tests/wpt/web-platform-tests/resources/chromium/contacts_manager_mock.js +++ b/tests/wpt/web-platform-tests/resources/chromium/contacts_manager_mock.js @@ -10,7 +10,7 @@ const WebContactsTest = (() => { this.bindingSet_ = new mojo.BindingSet(blink.mojom.ContactsManager); this.interceptor_ = new MojoInterfaceInterceptor( - blink.mojom.ContactsManager.name); + blink.mojom.ContactsManager.name, "context", true); this.interceptor_.oninterfacerequest = e => this.bindingSet_.addBinding(this, e.handle); this.interceptor_.start(); diff --git a/tests/wpt/web-platform-tests/resources/chromium/mock-imagecapture.js b/tests/wpt/web-platform-tests/resources/chromium/mock-imagecapture.js index eec414bd032a..9d46b57020f3 100644 --- a/tests/wpt/web-platform-tests/resources/chromium/mock-imagecapture.js +++ b/tests/wpt/web-platform-tests/resources/chromium/mock-imagecapture.js @@ -6,7 +6,7 @@ var ImageCaptureTest = (() => { class MockImageCapture { constructor() { this.interceptor_ = new MojoInterfaceInterceptor( - media.mojom.ImageCapture.name); + media.mojom.ImageCapture.name, "context", true); this.interceptor_.oninterfacerequest = e => this.bindingSet_.addBinding(this, e.handle); this.interceptor_.start(); @@ -262,4 +262,4 @@ var ImageCaptureTest = (() => { } return ImageCaptureTestChromium; -})(); \ No newline at end of file +})(); diff --git a/tests/wpt/web-platform-tests/resources/test/tests/unit/throwing-assertions.html b/tests/wpt/web-platform-tests/resources/test/tests/unit/throwing-assertions.html new file mode 100644 index 000000000000..a36a56043cc7 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/test/tests/unit/throwing-assertions.html @@ -0,0 +1,268 @@ + + + + + + + Test the methods that make assertions about exceptions + + + + + diff --git a/tests/wpt/web-platform-tests/resources/testharness.js b/tests/wpt/web-platform-tests/resources/testharness.js index 15591042aa4c..55de1ce252bd 100644 --- a/tests/wpt/web-platform-tests/resources/testharness.js +++ b/tests/wpt/web-platform-tests/resources/testharness.js @@ -630,6 +630,27 @@ policies and contribution forms [3]. }); } + function promise_rejects_js(test, expected, promise, description) { + return promise.then(test.unreached_func("Should have rejected: " + description)).catch(function(e) { + assert_throws_js_impl(expected, function() { throw e }, + description, "promise_reject_js"); + }); + } + + function promise_rejects_dom(test, expected, promise, description) { + return promise.then(test.unreached_func("Should have rejected: " + description)).catch(function(e) { + assert_throws_dom_impl(expected, function() { throw e }, + description, "promise_rejects_dom"); + }); + } + + function promise_rejects_exactly(test, expected, promise, description) { + return promise.then(test.unreached_func("Should have rejected: " + description)).catch(function(e) { + assert_throws_exactly_impl(expected, function() { throw e }, + description, "promise_rejects_exactly"); + }); + } + /** * This constructor helper allows DOM events to be handled using Promises, * which can make it a lot easier to test a very specific series of events, @@ -811,6 +832,9 @@ policies and contribution forms [3]. expose(async_test, 'async_test'); expose(promise_test, 'promise_test'); expose(promise_rejects, 'promise_rejects'); + expose(promise_rejects_js, 'promise_rejects_js'); + expose(promise_rejects_dom, 'promise_rejects_dom'); + expose(promise_rejects_exactly, 'promise_rejects_exactly'); expose(generate_tests, 'generate_tests'); expose(setup, 'setup'); expose(done, 'done'); @@ -1270,8 +1294,11 @@ policies and contribution forms [3]. expose(assert_regexp_match, "assert_regexp_match"); function assert_class_string(object, class_string, description) { - assert_equals({}.toString.call(object), "[object " + class_string + "]", - description); + var actual = {}.toString.call(object); + var expected = "[object " + class_string + "]"; + assert(same_value(actual, expected), "assert_class_string", description, + "expected ${expected} but got ${actual}", + {expected:expected, actual:actual}); } expose(assert_class_string, "assert_class_string"); @@ -1482,6 +1509,276 @@ policies and contribution forms [3]. } expose(assert_throws, "assert_throws"); + /** + * Assert a JS Error with the expected constructor is thrown. + * + * @param {object} constructor The expected exception constructor. + * @param {Function} func Function which should throw. + * @param {string} description Error description for the case that the error is not thrown. + */ + function assert_throws_js(constructor, func, description) + { + assert_throws_js_impl(constructor, func, description, + "assert_throws_js"); + } + expose(assert_throws_js, "assert_throws_js"); + + /** + * Like assert_throws_js but allows specifying the assertion type + * (assert_throws_js or promise_rejects_js, in practice). + */ + function assert_throws_js_impl(constructor, func, description, + assertion_type) + { + try { + func.call(this); + assert(false, assertion_type, description, + "${func} did not throw", {func:func}); + } catch (e) { + if (e instanceof AssertionError) { + throw e; + } + + // Basic sanity-checks on the thrown exception. + assert(typeof e === "object", + assertion_type, description, + "${func} threw ${e} with type ${type}, not an object", + {func:func, e:e, type:typeof e}); + + assert(e !== null, + assertion_type, description, + "${func} threw null, not an object", + {func:func}); + + // Basic sanity-check on the passed-in constructor + assert(typeof constructor == "function", + assertion_type, description, + "${constructor} is not a constructor", + {constructor:constructor}); + var obj = constructor; + while (obj) { + if (typeof obj === "function" && + obj.name === "Error") { + break; + } + obj = Object.getPrototypeOf(obj); + } + assert(obj != null, + assertion_type, description, + "${constructor} is not an Error subtype", + {constructor:constructor}); + + // And checking that our exception is reasonable + assert(e.constructor === constructor && + e.name === constructor.name, + assertion_type, description, + "${func} threw ${actual} (${actual_name}) expected instance of ${expected} (${expected_name})", + {func:func, actual:e, actual_name:e.name, + expected:constructor, + expected_name:constructor.name}); + } + } + + /** + * Assert a DOMException with the expected type is thrown. + * + * @param {number|string} type The expected exception name or code. See the + * table of names and codes at + * https://heycam.github.io/webidl/#dfn-error-names-table + * If a number is passed it should be one of the numeric code values + * in that table (e.g. 3, 4, etc). If a string is passed it can + * either be an exception name (e.g. "HierarchyRequestError", + * "WrongDocumentError") or the name of the corresponding error code + * (e.g. "HIERARCHY_REQUEST_ERR", "WRONG_DOCUMENT_ERR"). + * @param {Function} func Function which should throw. + * @param {string} description Error description for the case that the error is not thrown. + */ + function assert_throws_dom(type, func, description) + { + assert_throws_dom_impl(type, func, description, "assert_throws_dom") + } + expose(assert_throws_dom, "assert_throws_dom"); + + /** + * Like assert_throws_dom but allows specifying the assertion type + * (assert_throws_dom or promise_rejects_dom, in practice). + */ + function assert_throws_dom_impl(type, func, description, assertion_type) + { + try { + func.call(this); + assert(false, assertion_type, description, + "${func} did not throw", {func:func}); + } catch (e) { + if (e instanceof AssertionError) { + throw e; + } + + assert(typeof e === "object", + assertion_type, description, + "${func} threw ${e} with type ${type}, not an object", + {func:func, e:e, type:typeof e}); + + assert(e !== null, + assertion_type, description, + "${func} threw null, not an object", + {func:func}); + + // Sanity-check our type + assert(typeof type == "number" || + typeof type == "string", + assertion_type, description, + "${type} is not a number or string", + {type:type}); + + var codename_name_map = { + INDEX_SIZE_ERR: 'IndexSizeError', + HIERARCHY_REQUEST_ERR: 'HierarchyRequestError', + WRONG_DOCUMENT_ERR: 'WrongDocumentError', + INVALID_CHARACTER_ERR: 'InvalidCharacterError', + NO_MODIFICATION_ALLOWED_ERR: 'NoModificationAllowedError', + NOT_FOUND_ERR: 'NotFoundError', + NOT_SUPPORTED_ERR: 'NotSupportedError', + INUSE_ATTRIBUTE_ERR: 'InUseAttributeError', + INVALID_STATE_ERR: 'InvalidStateError', + SYNTAX_ERR: 'SyntaxError', + INVALID_MODIFICATION_ERR: 'InvalidModificationError', + NAMESPACE_ERR: 'NamespaceError', + INVALID_ACCESS_ERR: 'InvalidAccessError', + TYPE_MISMATCH_ERR: 'TypeMismatchError', + SECURITY_ERR: 'SecurityError', + NETWORK_ERR: 'NetworkError', + ABORT_ERR: 'AbortError', + URL_MISMATCH_ERR: 'URLMismatchError', + QUOTA_EXCEEDED_ERR: 'QuotaExceededError', + TIMEOUT_ERR: 'TimeoutError', + INVALID_NODE_TYPE_ERR: 'InvalidNodeTypeError', + DATA_CLONE_ERR: 'DataCloneError' + }; + + var name_code_map = { + IndexSizeError: 1, + HierarchyRequestError: 3, + WrongDocumentError: 4, + InvalidCharacterError: 5, + NoModificationAllowedError: 7, + NotFoundError: 8, + NotSupportedError: 9, + InUseAttributeError: 10, + InvalidStateError: 11, + SyntaxError: 12, + InvalidModificationError: 13, + NamespaceError: 14, + InvalidAccessError: 15, + TypeMismatchError: 17, + SecurityError: 18, + NetworkError: 19, + AbortError: 20, + URLMismatchError: 21, + QuotaExceededError: 22, + TimeoutError: 23, + InvalidNodeTypeError: 24, + DataCloneError: 25, + + EncodingError: 0, + NotReadableError: 0, + UnknownError: 0, + ConstraintError: 0, + DataError: 0, + TransactionInactiveError: 0, + ReadOnlyError: 0, + VersionError: 0, + OperationError: 0, + NotAllowedError: 0 + }; + + var code_name_map = {}; + for (var key in name_code_map) { + if (name_code_map[key] > 0) { + code_name_map[name_code_map[key]] = key; + } + } + + var required_props = {}; + var name; + + if (typeof type === "number") { + if (type === 0) { + throw new AssertionError('Test bug: ambiguous DOMException code 0 passed to assert_throws_dom()'); + } else if (!(type in code_name_map)) { + throw new AssertionError('Test bug: unrecognized DOMException code "' + type + '" passed to assert_throws_dom()'); + } + name = code_name_map[type]; + required_props.code = type; + } else if (typeof type === "string") { + name = type in codename_name_map ? codename_name_map[type] : type; + if (!(name in name_code_map)) { + throw new AssertionError('Test bug: unrecognized DOMException code name or name "' + type + '" passed to assert_throws_dom()'); + } + + required_props.code = name_code_map[name]; + } + + if (required_props.code === 0 || + ("name" in e && + e.name !== e.name.toUpperCase() && + e.name !== "DOMException")) { + // New style exception: also test the name property. + required_props.name = name; + } + + //We'd like to test that e instanceof the appropriate interface, + //but we can't, because we don't know what window it was created + //in. It might be an instanceof the appropriate interface on some + //unknown other window. TODO: Work around this somehow? Maybe have + //the first arg just be a DOMException with the right name instead + //of the string-or-code thing we have now? + + for (var prop in required_props) { + assert(prop in e && e[prop] == required_props[prop], + assertion_type, description, + "${func} threw ${e} that is not a DOMException " + type + ": property ${prop} is equal to ${actual}, expected ${expected}", + {func:func, e:e, prop:prop, actual:e[prop], expected:required_props[prop]}); + } + } + } + + /** + * Assert the provided value is thrown. + * + * @param {value} exception The expected exception. + * @param {Function} func Function which should throw. + * @param {string} description Error description for the case that the error is not thrown. + */ + function assert_throws_exactly(exception, func, description) + { + assert_throws_exactly_impl(exception, func, description, + "assert_throws_exactly"); + } + expose(assert_throws_exactly, "assert_throws_exactly"); + + /** + * Like assert_throws_exactly but allows specifying the assertion type + * (assert_throws_exactly or promise_rejects_exactly, in practice). + */ + function assert_throws_exactly_impl(exception, func, description, + assertion_type) + { + try { + func.call(this); + assert(false, assertion_type, description, + "${func} did not throw", {func:func}); + } catch (e) { + if (e instanceof AssertionError) { + throw e; + } + + assert(same_value(e, exception), assertion_type, description, + "${func} threw ${e} but we expected it to throw ${exception}", + {func:func, e:e, exception:exception}); + } + } + function assert_unreached(description) { assert(false, "assert_unreached", description, "Reached unreachable code"); @@ -3365,38 +3662,42 @@ policies and contribution forms [3]. var tests = new Tests(); if (global_scope.addEventListener) { - var error_handler = function(e) { + var error_handler = function(message, stack) { if (tests.tests.length === 0 && !tests.allow_uncaught_exception) { tests.set_file_is_test(); } - var stack; - if (e.error && e.error.stack) { - stack = e.error.stack; - } else { - stack = e.filename + ":" + e.lineno + ":" + e.colno; - } - if (tests.file_is_test) { var test = tests.tests[0]; if (test.phase >= test.phases.HAS_RESULT) { return; } - test.set_status(test.FAIL, e.message, stack); + test.set_status(test.FAIL, message, stack); test.phase = test.phases.HAS_RESULT; - // The following function invocation is superfluous. - // TODO: Remove. - test.done(); } else if (!tests.allow_uncaught_exception) { tests.status.status = tests.status.ERROR; - tests.status.message = e.message; + tests.status.message = message; tests.status.stack = stack; } done(); }; - addEventListener("error", error_handler, false); - addEventListener("unhandledrejection", function(e){ error_handler(e.reason); }, false); + addEventListener("error", function(e) { + var message = e.message; + var stack; + if (e.error && e.error.stack) { + stack = e.error.stack; + } else { + stack = e.filename + ":" + e.lineno + ":" + e.colno; + } + error_handler(message, stack); + }, false); + + addEventListener("unhandledrejection", function(e) { + var message = "Unhandled rejection: " + e.reason.message; + // There's no stack for unhandled rejections. + error_handler(message); + }, false); } test_environment.on_tests_ready(); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event-within-sw.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event-within-sw.https.html index 8a567fd7a93f..f5a60c306096 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event-within-sw.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event-within-sw.https.html @@ -18,13 +18,13 @@ return frame; } -async function deleteCashes() { +async function deleteCaches() { const cacheKeys = await caches.keys(); await Promise.all(cacheKeys.map(c => caches.delete(c))); } promise_test(async t => { - t.add_cleanup(deleteCashes); + t.add_cleanup(deleteCaches); const iframe = await registerSwAndOpenFrame(t); const fetchText = diff --git a/tests/wpt/web-platform-tests/shadow-dom/focus/focus-selector-delegatesFocus.html b/tests/wpt/web-platform-tests/shadow-dom/focus/focus-selector-delegatesFocus.html new file mode 100644 index 000000000000..386045258e04 --- /dev/null +++ b/tests/wpt/web-platform-tests/shadow-dom/focus/focus-selector-delegatesFocus.html @@ -0,0 +1,72 @@ + + + + + CSS Test (Selectors): :focus behavior with shadow hosts & delegatesFocus + + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/shadow-dom/focus/resources/shadow-utils.js b/tests/wpt/web-platform-tests/shadow-dom/focus/resources/shadow-utils.js index 6ea372afdf18..8033ce0169f4 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/focus/resources/shadow-utils.js +++ b/tests/wpt/web-platform-tests/shadow-dom/focus/resources/shadow-utils.js @@ -60,8 +60,9 @@ function removeTabIndex(elements) { } } -function resetFocus() { - document.body.focus(); +function resetFocus(root = document) { + if (root.activeElement) + root.activeElement.blur(); } function navigateFocusForward() { diff --git a/tests/wpt/web-platform-tests/signed-exchange/README.md b/tests/wpt/web-platform-tests/signed-exchange/README.md index f1dbfe6d1adb..4032edf22f34 100644 --- a/tests/wpt/web-platform-tests/signed-exchange/README.md +++ b/tests/wpt/web-platform-tests/signed-exchange/README.md @@ -1,5 +1,5 @@ This directory contains tests for the -[b2 implementation snapshot](https://tools.ietf.org/html/draft-yasskin-httpbis-origin-signed-exchanges-impl-02) of the +[b3 implementation snapshot](https://tools.ietf.org/html/draft-yasskin-httpbis-origin-signed-exchanges-impl-03) of the [Signed HTTP Exchanges](https://wicg.github.io/webpackage/draft-yasskin-http-origin-signed-responses.html). `resources` directory contains pregenerated signed exchanges and diff --git a/tests/wpt/web-platform-tests/storage-access-api/hasStorageAccess.sub.window.js b/tests/wpt/web-platform-tests/storage-access-api/hasStorageAccess.sub.window.js index 1352d7589f05..c4d6e3a8b9a8 100644 --- a/tests/wpt/web-platform-tests/storage-access-api/hasStorageAccess.sub.window.js +++ b/tests/wpt/web-platform-tests/storage-access-api/hasStorageAccess.sub.window.js @@ -56,4 +56,13 @@ if (topLevelDocument) { // Validate the nested-iframe scenario where the cross-origin frame containing // the tests is not the first child. RunTestsInNestedIFrame("http://{{domains[www]}}:{{ports[http][0]}}/storage-access-api/hasStorageAccess.sub.window.html?testCase=nested-cross-origin-frame&allowed=false&rootdocument=false"); + + // Run tests specific to the top-level window only here. They won't get re-run inside of various iframes. + promise_test(() => { + let createdDocument = document.implementation.createDocument("", null); + + return createdDocument.hasStorageAccess().then(hasAccess => { + assert_false(hasAccess, "Access should be denied to a generated document not part of the DOM."); + }); + }, "[" + testPrefix + "] document.hasStorageAccess() should work on a document object."); } diff --git a/tests/wpt/web-platform-tests/storage/opaque-origin.https.window.js b/tests/wpt/web-platform-tests/storage/opaque-origin.https.window.js index 3e101dde6759..cc1d31fdf2c6 100644 --- a/tests/wpt/web-platform-tests/storage/opaque-origin.https.window.js +++ b/tests/wpt/web-platform-tests/storage/opaque-origin.https.window.js @@ -15,7 +15,7 @@ function load_iframe(src, sandbox) { function wait_for_message(iframe) { return new Promise(resolve => { self.addEventListener('message', function listener(e) { - if (e.source === iframe.contentWindow) { + if (e.source === iframe.contentWindow && "result" in e.data) { resolve(e.data); self.removeEventListener('message', listener); } @@ -24,7 +24,8 @@ function wait_for_message(iframe) { } function make_script(snippet) { - return '' + + ' + + + + + + + + + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/svg/animations/scripted/onhover-syncbases.html b/tests/wpt/web-platform-tests/svg/animations/scripted/onhover-syncbases.html index 86a0a40fa2de..de757f369af3 100644 --- a/tests/wpt/web-platform-tests/svg/animations/scripted/onhover-syncbases.html +++ b/tests/wpt/web-platform-tests/svg/animations/scripted/onhover-syncbases.html @@ -2,7 +2,7 @@ - Check if onhover events reset correctly when triggred multiple times + Check if onhover events reset correctly when triggered multiple times @@ -20,7 +20,7 @@ let rounds = 5; // How many times the cursor is moved in and out let circle = document.querySelector("#circle"); let delay = 20; - let f = t.step_func(function() { + function f() { assert_equals(window.getComputedStyle(circle, null).fill, "rgb(255, 0, 0)") if (rounds-- == 0) { @@ -29,15 +29,15 @@ } circle.dispatchEvent(new Event("mouseover")); - step_timeout(function() { + t.step_timeout(function() { assert_equals(window.getComputedStyle(circle, null).fill, "rgb(0, 255, 0)") circle.dispatchEvent(new Event("mouseout")) t.step_timeout(f, delay); - }, delay); - }); - step_timeout(function() { f(); }, 0); - }); + }, delay); + } + t.step_timeout(f, 0); +}); diff --git a/tests/wpt/web-platform-tests/tools/ci/tcdownload.py b/tests/wpt/web-platform-tests/tools/ci/tcdownload.py index 91c763a7acdd..46e9005740d3 100644 --- a/tests/wpt/web-platform-tests/tools/ci/tcdownload.py +++ b/tests/wpt/web-platform-tests/tools/ci/tcdownload.py @@ -71,7 +71,7 @@ def run(*args, **kwargs): if not taskgroups: logger.error("No complete TaskCluster runs found for ref %s" % kwargs["ref"]) - return + return 1 for taskgroup in taskgroups: taskgroup_url = "https://queue.taskcluster.net/v1/task-group/%s/list" diff --git a/tests/wpt/web-platform-tests/tools/lint/lint.py b/tests/wpt/web-platform-tests/tools/lint/lint.py index 48a275bcf29d..7689c359928d 100644 --- a/tests/wpt/web-platform-tests/tools/lint/lint.py +++ b/tests/wpt/web-platform-tests/tools/lint/lint.py @@ -681,7 +681,10 @@ def check_script_metadata(repo_root, path, f): ahem_font_re = re.compile(b"font.*:.*ahem", flags=re.IGNORECASE) -ahem_stylesheet_re = re.compile(b"\/fonts\/ahem\.css", flags=re.IGNORECASE) +# Ahem can appear either in the global location or in the support +# directory for legacy Mozilla imports +ahem_stylesheet_re = re.compile(b"\/fonts\/ahem\.css|support\/ahem.css", + flags=re.IGNORECASE) def check_ahem_system_font(repo_root, path, f): diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt index d6c7a4ff3983..3584c93a1997 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt +++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt @@ -3,6 +3,6 @@ mozinfo==1.1.0 mozlog==4.2.0 mozdebug==0.1.1 pillow==6.1.0 -urllib3[secure]==1.25.3 +urllib3[secure]==1.25.5 requests==2.22.0 six==1.12.0 diff --git a/tests/wpt/web-platform-tests/trusted-types/trusted-types-eval-reporting.tentative.https.html b/tests/wpt/web-platform-tests/trusted-types/trusted-types-eval-reporting.tentative.https.html index 309873cb1f80..4ec5db1adce7 100644 --- a/tests/wpt/web-platform-tests/trusted-types/trusted-types-eval-reporting.tentative.https.html +++ b/tests/wpt/web-platform-tests/trusted-types/trusted-types-eval-reporting.tentative.https.html @@ -1,8 +1,7 @@ - - + diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest.html index 3e364eb7b359..b1f18d397d4f 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest.html @@ -22,104 +22,106 @@
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-mediastreamaudiosourcenode-interface/mediastreamaudiosourcenode-routing.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-mediastreamaudiosourcenode-interface/mediastreamaudiosourcenode-routing.html index 2e04ab6a3f24..816eba0b29ae 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-mediastreamaudiosourcenode-interface/mediastreamaudiosourcenode-routing.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-mediastreamaudiosourcenode-interface/mediastreamaudiosourcenode-routing.html @@ -21,105 +21,107 @@ const t = async_test( "MediaStreamAudioSourceNode captures the right track." ); - const ac = new AudioContext(); - // Test that the right track is captured. Set up a MediaStream that has two - // tracks, one with a tone at 100Hz and one with a tone at 1000Hz. - const dest0 = ac.createMediaStreamDestination(); - const dest1 = ac.createMediaStreamDestination(); - const osc0 = ac.createOscillator(); - const osc1 = ac.createOscillator(); - osc0.frequency.value = 100; - osc1.frequency.value = 1000; - osc0.connect(dest0); - osc1.connect(dest1); - osc0.start(0); - osc1.start(0); - const track0 = dest0.stream.getAudioTracks()[0]; - const track0id = track0.id; - const track1 = dest1.stream.getAudioTracks()[0]; - const track1id = track1.id; + t.step(function() { + const ac = new AudioContext(); + // Test that the right track is captured. Set up a MediaStream that has two + // tracks, one with a tone at 100Hz and one with a tone at 1000Hz. + const dest0 = ac.createMediaStreamDestination(); + const dest1 = ac.createMediaStreamDestination(); + const osc0 = ac.createOscillator(); + const osc1 = ac.createOscillator(); + osc0.frequency.value = 100; + osc1.frequency.value = 1000; + osc0.connect(dest0); + osc1.connect(dest1); + osc0.start(0); + osc1.start(0); + const track0 = dest0.stream.getAudioTracks()[0]; + const track0id = track0.id; + const track1 = dest1.stream.getAudioTracks()[0]; + const track1id = track1.id; - let ids = [track0id, track1id]; - ids.sort(); - let targetFrequency; - let otherFrequency; - if (ids[0] == track0id) { - targetFrequency = 100; - otherFrequency = 1000; - } else { - targetFrequency = 1000; - otherFrequency = 100; - } + let ids = [track0id, track1id]; + ids.sort(); + let targetFrequency; + let otherFrequency; + if (ids[0] == track0id) { + targetFrequency = 100; + otherFrequency = 1000; + } else { + targetFrequency = 1000; + otherFrequency = 100; + } - let twoTrackMediaStream = new MediaStream(); - twoTrackMediaStream.addTrack(track0); - twoTrackMediaStream.addTrack(track1); + let twoTrackMediaStream = new MediaStream(); + twoTrackMediaStream.addTrack(track0); + twoTrackMediaStream.addTrack(track1); - const twoTrackSource = ac.createMediaStreamSource(twoTrackMediaStream); - const analyser = ac.createAnalyser(); - // Don't do smoothing so that the frequency data changes quickly - analyser.smoothingTimeConstant = 0; + const twoTrackSource = ac.createMediaStreamSource(twoTrackMediaStream); + const analyser = ac.createAnalyser(); + // Don't do smoothing so that the frequency data changes quickly + analyser.smoothingTimeConstant = 0; - twoTrackSource.connect(analyser); + twoTrackSource.connect(analyser); - const indexToCheckForHighEnergy = binIndexForFrequency( - targetFrequency, - analyser - ); - const indexToCheckForLowEnergy = binIndexForFrequency( - otherFrequency, - analyser - ); - let frequencyData = new Float32Array(1024); - let checkCount = 0; - let numberOfRemovals = 0; - let stopped = false; - function analyse() { - analyser.getFloatFrequencyData(frequencyData); - // there should be high energy in the right bin, higher than 40dbfs because - // it's supposed to be a sine wave at 0dbfs - if (frequencyData[indexToCheckForHighEnergy] > -40 && !stopped) { - assert_true(true, "Correct track routed to the AudioContext."); - checkCount++; - } - if (stopped && frequencyData[indexToCheckForHighEnergy] < -40) { - assert_true( - true, - `After stopping the track, low energy is found in the - same bin` + const indexToCheckForHighEnergy = binIndexForFrequency( + targetFrequency, + analyser ); - checkCount++; - } - if (checkCount > 5 && checkCount < 20) { - twoTrackMediaStream.getAudioTracks().forEach(track => { - if (track.id == ids[0]) { - numberOfRemovals++; - window.removedTrack = track; - twoTrackMediaStream.removeTrack(track); - } - }); - assert_true( - numberOfRemovals == 1, - `The mediastreamtrack can only be - removed once from the mediastream` + const indexToCheckForLowEnergy = binIndexForFrequency( + otherFrequency, + analyser ); - } else if (checkCount >= 20 && checkCount < 30) { - window.removedTrack.stop(); - stopped = true; - } else if (checkCount >= 30) { - assert_true( - numberOfRemovals == 1, - `After removing the track from the + let frequencyData = new Float32Array(1024); + let checkCount = 0; + let numberOfRemovals = 0; + let stopped = false; + function analyse() { + analyser.getFloatFrequencyData(frequencyData); + // there should be high energy in the right bin, higher than 40dbfs because + // it's supposed to be a sine wave at 0dbfs + if (frequencyData[indexToCheckForHighEnergy] > -40 && !stopped) { + assert_true(true, "Correct track routed to the AudioContext."); + checkCount++; + } + if (stopped && frequencyData[indexToCheckForHighEnergy] < -40) { + assert_true( + true, + `After stopping the track, low energy is found in the + same bin` + ); + checkCount++; + } + if (checkCount > 5 && checkCount < 20) { + twoTrackMediaStream.getAudioTracks().forEach(track => { + if (track.id == ids[0]) { + numberOfRemovals++; + window.removedTrack = track; + twoTrackMediaStream.removeTrack(track); + } + }); + assert_true( + numberOfRemovals == 1, + `The mediastreamtrack can only be + removed once from the mediastream` + ); + } else if (checkCount >= 20 && checkCount < 30) { + window.removedTrack.stop(); + stopped = true; + } else if (checkCount >= 30) { + assert_true( + numberOfRemovals == 1, + `After removing the track from the mediastream, it's still routed to the graph.` - ); - // After some time, consider that it worked. - t.done(); - return; - } + ); + // After some time, consider that it worked. + t.done(); + return; + } - t.step_timeout(analyse, 100); - } - t.step_timeout(analyse, 100); + t.step_timeout(analyse, 100); + } + t.step_timeout(analyse, 100); + }); diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/ctor-panner.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/ctor-panner.html index d330c9c3de44..c434aa8c6a50 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/ctor-panner.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/ctor-panner.html @@ -108,6 +108,16 @@ }, 'new PannerNode(c, ' + JSON.stringify(options) + ')') .throw(DOMException, 'NotSupportedError'); + should( + () => { + node = new PannerNode(context); + node.channelCount = options.channelCount; + }, + `node.channelCount = ${options.channelCount}`) + .throw(DOMException, "NotSupportedError"); + should(node.channelCount, + `node.channelCount after setting to ${options.channelCount}`) + .beEqualTo(2); options = {channelCount: 3}; should( @@ -116,6 +126,16 @@ }, 'new PannerNode(c, ' + JSON.stringify(options) + ')') .throw(DOMException, 'NotSupportedError'); + should( + () => { + node = new PannerNode(context); + node.channelCount = options.channelCount; + }, + `node.channelCount = ${options.channelCount}`) + .throw(DOMException, "NotSupportedError"); + should(node.channelCount, + `node.channelCount after setting to ${options.channelCount}`) + .beEqualTo(2); options = {channelCount: 99}; should( @@ -124,6 +144,16 @@ }, 'new PannerNode(c, ' + JSON.stringify(options) + ')') .throw(DOMException, 'NotSupportedError'); + should( + () => { + node = new PannerNode(context); + node.channelCount = options.channelCount; + }, + `node.channelCount = ${options.channelCount}`) + .throw(DOMException, "NotSupportedError"); + should(node.channelCount, + `node.channelCount after setting to ${options.channelCount}`) + .beEqualTo(2); // Test channelCountMode. A mode of "max" is illegal, but others are // ok. @@ -154,6 +184,16 @@ }, 'new PannerNode(c, ' + JSON.stringify(options) + ')') .throw(DOMException, 'NotSupportedError'); + should( + () => { + node = new PannerNode(context); + node.channelCountMode = options.channelCountMode; + }, + `node.channelCountMode = ${options.channelCountMode}`) + .throw(DOMException, "NotSupportedError"); + should(node.channelCountMode, + `node.channelCountMode after setting to ${options.channelCountMode}`) + .beEqualTo("clamped-max"); options = {channelCountMode: 'foobar'}; should( @@ -162,6 +202,16 @@ }, 'new PannerNode(c, " + JSON.stringify(options) + ")') .throw(TypeError); + should( + () => { + node = new PannerNode(context); + node.channelCountMode = options.channelCountMode; + }, + `node.channelCountMode = ${options.channelCountMode}`) + .notThrow(); // Invalid assignment to enum-valued attrs does not throw. + should(node.channelCountMode, + `node.channelCountMode after setting to ${options.channelCountMode}`) + .beEqualTo("clamped-max"); // Test channelInterpretation. options = {channelInterpretation: 'speakers'}; @@ -200,6 +250,17 @@ }, 'new PannerNode(c, ' + JSON.stringify(options) + ')') .throw(RangeError); + should( + () => { + node = new PannerNode(context); + node.maxDistance = options.maxDistance; + }, + `node.maxDistance = ${options.maxDistance}`) + .throw(RangeError); + should(node.maxDistance, + `node.maxDistance after setting to ${options.maxDistance}`) + .beEqualTo(10000); + options = {maxDistance: 100}; should( () => { @@ -218,6 +279,17 @@ }, 'new PannerNode(c, ' + JSON.stringify(options) + ')') .throw(RangeError); + should( + () => { + node = new PannerNode(context); + node.rolloffFactor = options.rolloffFactor; + }, + `node.rolloffFactor = ${options.rolloffFactor}`) + .throw(RangeError); + should(node.rolloffFactor, + `node.rolloffFactor after setting to ${options.rolloffFactor}`) + .beEqualTo(1); + options = {rolloffFactor: 0}; should( () => { @@ -256,6 +328,17 @@ }, 'new PannerNode(c, ' + JSON.stringify(options) + ')') .throw(DOMException, 'InvalidStateError'); + should( + () => { + node = new PannerNode(context); + node.coneOuterGain = options.coneOuterGain; + }, + `node.coneOuterGain = ${options.coneOuterGain}`) + .throw(DOMException, 'InvalidStateError'); + should(node.coneOuterGain, + `node.coneOuterGain after setting to ${options.coneOuterGain}`) + .beEqualTo(0); + options = {coneOuterGain: 1.1}; should( () => { @@ -263,6 +346,17 @@ }, 'new PannerNode(c, ' + JSON.stringify(options) + ')') .throw(DOMException, 'InvalidStateError'); + should( + () => { + node = new PannerNode(context); + node.coneOuterGain = options.coneOuterGain; + }, + `node.coneOuterGain = ${options.coneOuterGain}`) + .throw(DOMException, 'InvalidStateError'); + should(node.coneOuterGain, + `node.coneOuterGain after setting to ${options.coneOuterGain}`) + .beEqualTo(0); + options = {coneOuterGain: 0.0}; should( () => { diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-waveshapernode-interface/curve-tests.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-waveshapernode-interface/curve-tests.html index a2e40777d428..81e64dc12e9c 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-waveshapernode-interface/curve-tests.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-waveshapernode-interface/curve-tests.html @@ -134,35 +134,35 @@ */ function executeTest(curveData, inputData, expectedData, testName) { var stTest=async_test("WaveShaperNode - "+testName); + stTest.step(function() { + + // Create offline audio context. + var ac=new OfflineAudioContext(1, inputData.length, sampleRate); + + // Create the WaveShaper and its curve. + var waveShaper=ac.createWaveShaper(); + if(curveData!=null) { + var curve=new Float32Array(curveData.length); + for(var i=0;i diff --git a/tests/wpt/web-platform-tests/webxr/ar-module/idlharness.https.window.js b/tests/wpt/web-platform-tests/webxr/ar-module/idlharness.https.window.js new file mode 100644 index 000000000000..1268f4ea2a5e --- /dev/null +++ b/tests/wpt/web-platform-tests/webxr/ar-module/idlharness.https.window.js @@ -0,0 +1,16 @@ +// META: script=/resources/WebIDLParser.js +// META: script=/resources/idlharness.js + +'use strict'; + +// https://immersive-web.github.io/webxr-ar-module/ + +idl_test( + ['webxr-ar-module'], + ['webxr', 'dom'], + async idl_array => { + idl_array.add_objects({ + // TODO: XRSession + }); + } +); diff --git a/tests/wpt/web-platform-tests/webxr/gamepads-module/idlharness.https.window.js b/tests/wpt/web-platform-tests/webxr/gamepads-module/idlharness.https.window.js new file mode 100644 index 000000000000..4509c67a8471 --- /dev/null +++ b/tests/wpt/web-platform-tests/webxr/gamepads-module/idlharness.https.window.js @@ -0,0 +1,16 @@ +// META: script=/resources/WebIDLParser.js +// META: script=/resources/idlharness.js + +'use strict'; + +// https://immersive-web.github.io/webxr-gamepads-module/ + +idl_test( + ['webxr-gamepads-module'], + ['webxr', 'dom'], + async idl_array => { + idl_array.add_objects({ + // TODO: XRInputSource + }); + } +); diff --git a/tests/wpt/web-platform-tests/webxr/xrSession_input_events_end.https.html b/tests/wpt/web-platform-tests/webxr/xrSession_input_events_end.https.html index 37e020605a7e..a932aad2fad7 100644 --- a/tests/wpt/web-platform-tests/webxr/xrSession_input_events_end.https.html +++ b/tests/wpt/web-platform-tests/webxr/xrSession_input_events_end.https.html @@ -10,10 +10,16 @@ let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE; +let gl = null; + function requestImmersiveSession() { return new Promise((resolve, reject) => { navigator.xr.test.simulateUserActivation(() => { navigator.xr.requestSession('immersive-vr').then((session) => { + session.updateRenderState({ + baseLayer: new XRWebGLLayer(session, gl) + }); + resolve(session); }, (err) => { reject(err); @@ -22,8 +28,8 @@ }); } -let testFunction = function(session, fakeDeviceController, t) { - +let testFunction = function(session, fakeDeviceController, t, sessionObjects) { + gl = sessionObjects.gl; // helper method to send a click and then request a dummy animation frame to // ensure that the click propagates. We're doing everything in these tests // from event watchers, we just need to trigger the add/click to make the diff --git a/tests/wpt/web-platform-tests/webxr/xrWebGLLayer_constructor.https.html b/tests/wpt/web-platform-tests/webxr/xrWebGLLayer_constructor.https.html index 7e57f4286c66..0584da79c12d 100644 --- a/tests/wpt/web-platform-tests/webxr/xrWebGLLayer_constructor.https.html +++ b/tests/wpt/web-platform-tests/webxr/xrWebGLLayer_constructor.https.html @@ -17,11 +17,8 @@ let gl = webglCanvas.getContext('webgl', glAttributes); return navigator.xr.test.simulateDeviceConnection(TRACKED_IMMERSIVE_DEVICE) .then(() => { - let sessionPromise; - navigator.xr.test.simulateUserActivation(function() { - sessionPromise = navigator.xr.requestSession('inline'); - }); - return sessionPromise.then((session) => { + return navigator.xr.requestSession('inline') + .then((session) => { try { let webglLayerIncompatible = new XRWebGLLayer(session, gl); } catch (err) { diff --git a/tests/wpt/web-platform-tests/workers/semantics/interface-objects/003.any.js b/tests/wpt/web-platform-tests/workers/semantics/interface-objects/003.any.js new file mode 100644 index 000000000000..1942a4658dfb --- /dev/null +++ b/tests/wpt/web-platform-tests/workers/semantics/interface-objects/003.any.js @@ -0,0 +1,83 @@ +// META: global=!default,sharedworker + +var expected = [ + // https://html.spec.whatwg.org/ + "ApplicationCache", + "WorkerGlobalScope", + "SharedWorkerGlobalScope", + "Worker", + "SharedWorker", + "MessagePort", + "MessageEvent", + "WorkerNavigator", + "MessageChannel", + "WorkerLocation", + "ImageData", + "ImageBitmap", + "CanvasGradient", + "CanvasPattern", + "CanvasPath", + "Path2D", + "PromiseRejectionEvent", + "EventSource", + "WebSocket", + "CloseEvent", + "BroadcastChannel", + // https://tc39.github.io/ecma262/ + "ArrayBuffer", + "Int8Array", + "Uint8Array", + "Uint8ClampedArray", + "Int16Array", + "Uint16Array", + "Int32Array", + "Uint32Array", + "Float32Array", + "Float64Array", + "DataView", + // https://xhr.spec.whatwg.org/ + "XMLHttpRequestEventTarget", + "XMLHttpRequestUpload", + "XMLHttpRequest", + "ProgressEvent", + "FormData", + // https://url.spec.whatwg.org/ + "URL", + "URLSearchParams", + // https://w3c.github.io/FileAPI/ + "File", + "Blob", + "FileList", + "FileReader", + "FileReaderSync", + // https://dom.spec.whatwg.org/ + "EventTarget", + "ErrorEvent", + "Event", + "CustomEvent", + // http://heycam.github.io/webidl/ + "DOMException", + // https://streams.spec.whatwg.org/ + "ReadableStream", + "WritableStream", + "ByteLengthQueuingStrategy", + "CountQueuingStrategy", + // http://w3c.github.io/IndexedDB/ + "IDBRequest", + "IDBOpenDBRequest", + "IDBVersionChangeEvent", + "IDBFactory", + "IDBDatabase", + "IDBObjectStore", + "IDBIndex", + "IDBKeyRange", + "IDBCursor", + "IDBCursorWithValue", + "IDBTransaction", +]; + +for (var i = 0; i < unexpected.length; ++i) { + test(function() { + assert_true(unexpected[i] in self); + }, "The " + unexpected[i] + " interface object should not be exposed"); +} diff --git a/tests/wpt/web-platform-tests/workers/semantics/interface-objects/003.html b/tests/wpt/web-platform-tests/workers/semantics/interface-objects/003.html deleted file mode 100644 index 99e8b3a0f3dd..000000000000 --- a/tests/wpt/web-platform-tests/workers/semantics/interface-objects/003.html +++ /dev/null @@ -1,19 +0,0 @@ - -available interface objects in shared worker - - -
- \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/workers/semantics/interface-objects/003.js b/tests/wpt/web-platform-tests/workers/semantics/interface-objects/003.js deleted file mode 100644 index a91e7c38759f..000000000000 --- a/tests/wpt/web-platform-tests/workers/semantics/interface-objects/003.js +++ /dev/null @@ -1,82 +0,0 @@ -onconnect = function(e) { - var expected = [ - // https://html.spec.whatwg.org/ - "ApplicationCache", - "WorkerGlobalScope", - "SharedWorkerGlobalScope", - "Worker", - "SharedWorker", - "MessagePort", - "MessageEvent", - "WorkerNavigator", - "MessageChannel", - "WorkerLocation", - "ImageData", - "ImageBitmap", - "CanvasGradient", - "CanvasPattern", - "CanvasPath", - "Path2D", - "PromiseRejectionEvent", - "EventSource", - "WebSocket", - "CloseEvent", - "BroadcastChannel", - // https://tc39.github.io/ecma262/ - "ArrayBuffer", - "Int8Array", - "Uint8Array", - "Uint8ClampedArray", - "Int16Array", - "Uint16Array", - "Int32Array", - "Uint32Array", - "Float32Array", - "Float64Array", - "DataView", - // https://xhr.spec.whatwg.org/ - "XMLHttpRequestEventTarget", - "XMLHttpRequestUpload", - "XMLHttpRequest", - "ProgressEvent", - "FormData", - // https://url.spec.whatwg.org/ - "URL", - "URLSearchParams", - // https://w3c.github.io/FileAPI/ - "File", - "Blob", - "FileList", - "FileReader", - "FileReaderSync", - // https://dom.spec.whatwg.org/ - "EventTarget", - "ErrorEvent", - "Event", - "CustomEvent", - // http://heycam.github.io/webidl/ - "DOMException", - // https://streams.spec.whatwg.org/ - "ReadableStream", - "WritableStream", - "ByteLengthQueuingStrategy", - "CountQueuingStrategy", - // http://w3c.github.io/IndexedDB/ - "IDBRequest", - "IDBOpenDBRequest", - "IDBVersionChangeEvent", - "IDBFactory", - "IDBDatabase", - "IDBObjectStore", - "IDBIndex", - "IDBKeyRange", - "IDBCursor", - "IDBCursorWithValue", - "IDBTransaction", - ]; - var result = []; - for (var i = 0; i < expected.length; ++i) { - result.push([expected[i], expected[i] in self]); - } - e.ports[0].postMessage(result); -} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/workers/semantics/interface-objects/004.any.js b/tests/wpt/web-platform-tests/workers/semantics/interface-objects/004.any.js new file mode 100644 index 000000000000..358af74ca2c2 --- /dev/null +++ b/tests/wpt/web-platform-tests/workers/semantics/interface-objects/004.any.js @@ -0,0 +1,46 @@ +// META: global=!default,sharedworker + +var unexpected = [ + // https://html.spec.whatwg.org/ + "DedicatedWorkerGlobalScope", + "AbstractView", + "AbstractWorker", + "Location", + "Navigator", + "DOMImplementation", + "Audio", + "HTMLCanvasElement", + "Path", + "TextMetrics", + "CanvasProxy", + "CanvasRenderingContext2D", + "DrawingStyle", + "PopStateEvent", + "HashChangeEvent", + "PageTransitionEvent", + // https://streams.spec.whatwg.org/ + "ReadableStreamDefaultReader", + "ReadableStreamBYOBReader", + "ReadableStreamDefaultController", + "ReadableByteStreamController", + "WritableStreamDefaultWriter", + "WritableStreamDefaultController", + // http://w3c.github.io/IndexedDB/ + "IDBEnvironment", + // https://www.w3.org/TR/2010/NOTE-webdatabase-20101118/ + "Database", + // https://w3c.github.io/uievents/ + "UIEvent", + "FocusEvent", + "MouseEvent", + "WheelEvent", + "InputEvent", + "KeyboardEvent", + "CompositionEvent", +]; + +for (var i = 0; i < unexpected.length; ++i) { + test(function() { + assert_false(unexpected[i] in self); + }, "The " + unexpected[i] + " interface object should not be exposed"); +} diff --git a/tests/wpt/web-platform-tests/workers/semantics/interface-objects/004.html b/tests/wpt/web-platform-tests/workers/semantics/interface-objects/004.html deleted file mode 100644 index b4a09c50e4e5..000000000000 --- a/tests/wpt/web-platform-tests/workers/semantics/interface-objects/004.html +++ /dev/null @@ -1,19 +0,0 @@ - -unavailable interface objects in shared worker - - -
- \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/workers/semantics/interface-objects/004.js b/tests/wpt/web-platform-tests/workers/semantics/interface-objects/004.js deleted file mode 100644 index 00e50d19cae4..000000000000 --- a/tests/wpt/web-platform-tests/workers/semantics/interface-objects/004.js +++ /dev/null @@ -1,45 +0,0 @@ -onconnect = function(e) { - var unexpected = [ - // https://html.spec.whatwg.org/ - "DedicatedWorkerGlobalScope", - "AbstractView", - "AbstractWorker", - "Location", - "Navigator", - "DOMImplementation", - "Audio", - "HTMLCanvasElement", - "Path", - "TextMetrics", - "CanvasProxy", - "CanvasRenderingContext2D", - "DrawingStyle", - "PopStateEvent", - "HashChangeEvent", - "PageTransitionEvent", - // https://streams.spec.whatwg.org/ - "ReadableStreamDefaultReader", - "ReadableStreamBYOBReader", - "ReadableStreamDefaultController", - "ReadableByteStreamController", - "WritableStreamDefaultWriter", - "WritableStreamDefaultController", - // http://w3c.github.io/IndexedDB/ - "IDBEnvironment", - // https://www.w3.org/TR/2010/NOTE-webdatabase-20101118/ - "Database", - // https://w3c.github.io/uievents/ - "UIEvent", - "FocusEvent", - "MouseEvent", - "WheelEvent", - "InputEvent", - "KeyboardEvent", - "CompositionEvent", - ]; - var result = []; - for (var i = 0; i < unexpected.length; ++i) { - result.push([unexpected[i], unexpected[i] in self]); - } - e.ports[0].postMessage(result); -} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/xhr/xmlhttprequest-sync-default-feature-policy.sub.html b/tests/wpt/web-platform-tests/xhr/xmlhttprequest-sync-default-feature-policy.sub.html index 5ad5557700d7..ab5b78b77c66 100644 --- a/tests/wpt/web-platform-tests/xhr/xmlhttprequest-sync-default-feature-policy.sub.html +++ b/tests/wpt/web-platform-tests/xhr/xmlhttprequest-sync-default-feature-policy.sub.html @@ -9,7 +9,7 @@