diff options
844 files changed, 19759 insertions, 3050 deletions
diff --git a/tests/wpt/metadata/2dcontext/text-styles/2d.text.draw.baseline.alphabetic.html.ini b/tests/wpt/metadata/2dcontext/text-styles/2d.text.draw.baseline.alphabetic.html.ini new file mode 100644 index 00000000000..93b0cf0b169 --- /dev/null +++ b/tests/wpt/metadata/2dcontext/text-styles/2d.text.draw.baseline.alphabetic.html.ini @@ -0,0 +1,4 @@ +[2d.text.draw.baseline.alphabetic.html] + [Canvas test: 2d.text.draw.baseline.alphabetic] + expected: FAIL + diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index 13ba2717caf..a40f5d249ca 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -11617,6 +11617,12 @@ {} ] ], + "fullscreen/rendering/fullscreen-root-block-scroll-manual.html": [ + [ + "/fullscreen/rendering/fullscreen-root-block-scroll-manual.html", + {} + ] + ], "fullscreen/rendering/fullscreen-root-block-size-manual.html": [ [ "/fullscreen/rendering/fullscreen-root-block-size-manual.html", @@ -13333,6 +13339,12 @@ {} ] ], + "payment-request/MerchantValidationEvent/complete-method-manual.https.html": [ + [ + "/payment-request/MerchantValidationEvent/complete-method-manual.https.html", + {} + ] + ], "payment-request/PaymentAddress/attributes-and-toJSON-method-manual.https.html": [ [ "/payment-request/PaymentAddress/attributes-and-toJSON-method-manual.https.html", @@ -13519,6 +13531,12 @@ {} ] ], + "pointerevents/extension/pointerevent_pointerrawmove-manual.html": [ + [ + "/pointerevents/extension/pointerevent_pointerrawmove-manual.html", + {} + ] + ], "pointerevents/extension/pointerevent_touch-action-pan-down-css_touch-manual.html": [ [ "/pointerevents/extension/pointerevent_touch-action-pan-down-css_touch-manual.html", @@ -19767,6 +19785,18 @@ {} ] ], + "css/CSS2/abspos/static-inside-table-cell.html": [ + [ + "/css/CSS2/abspos/static-inside-table-cell.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], "css/CSS2/abspos/table-caption-is-containing-block-001.html": [ [ "/css/CSS2/abspos/table-caption-is-containing-block-001.html", @@ -53223,6 +53253,18 @@ {} ] ], + "css/CSS2/linebox/anonymous-inline-inherit-001.html": [ + [ + "/css/CSS2/linebox/anonymous-inline-inherit-001.html", + [ + [ + "/css/CSS2/linebox/anonymous-inline-inherit-001-ref.html", + "==" + ] + ], + {} + ] + ], "css/CSS2/linebox/border-padding-bleed-001.xht": [ [ "/css/CSS2/linebox/border-padding-bleed-001.xht", @@ -55347,6 +55389,18 @@ {} ] ], + "css/CSS2/linebox/vertical-align-nested-top-001.html": [ + [ + "/css/CSS2/linebox/vertical-align-nested-top-001.html", + [ + [ + "/css/CSS2/linebox/vertical-align-nested-top-001-ref.html", + "==" + ] + ], + {} + ] + ], "css/CSS2/linebox/vertical-align-sub-001.xht": [ [ "/css/CSS2/linebox/vertical-align-sub-001.xht", @@ -75387,6 +75441,18 @@ {} ] ], + "css/CSS2/positioning/abspos-inline-008.xht": [ + [ + "/css/CSS2/positioning/abspos-inline-008.xht", + [ + [ + "/css/reference/ref-filled-green-100px-square-only.html", + "==" + ] + ], + {} + ] + ], "css/CSS2/positioning/abspos-overflow-001.xht": [ [ "/css/CSS2/positioning/abspos-overflow-001.xht", @@ -107095,6 +107161,54 @@ {} ] ], + "css/css-break/widows-orphans-001.html": [ + [ + "/css/css-break/widows-orphans-001.html", + [ + [ + "/css/css-break/reference/widows-orphans-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-break/widows-orphans-002.html": [ + [ + "/css/css-break/widows-orphans-002.html", + [ + [ + "/css/css-break/reference/widows-orphans-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-break/widows-orphans-003.html": [ + [ + "/css/css-break/widows-orphans-003.html", + [ + [ + "/css/css-break/reference/widows-orphans-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-break/widows-orphans-004.html": [ + [ + "/css/css-break/widows-orphans-004.html", + [ + [ + "/css/css-break/reference/widows-orphans-001-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-cascade/all-prop-001.html": [ [ "/css/css-cascade/all-prop-001.html", @@ -113035,6 +113149,30 @@ {} ] ], + "css/css-filter/blur-clip-stacking-context-001.html": [ + [ + "/css/css-filter/blur-clip-stacking-context-001.html", + [ + [ + "/css/css-filter/blur-clip-stacking-context-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-filter/blur-clip-stacking-context-002.html": [ + [ + "/css/css-filter/blur-clip-stacking-context-002.html", + [ + [ + "/css/css-filter/blur-clip-stacking-context-ref.html", + "!=" + ] + ], + {} + ] + ], "css/css-filter/filtered-block-is-container.html": [ [ "/css/css-filter/filtered-block-is-container.html", @@ -125259,6 +125397,30 @@ {} ] ], + "css/css-multicol/inline-block-and-column-span-all.html": [ + [ + "/css/css-multicol/inline-block-and-column-span-all.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-multicol/intrinsic-size-001.html": [ + [ + "/css/css-multicol/intrinsic-size-001.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], "css/css-multicol/multicol-basic-001.html": [ [ "/css/css-multicol/multicol-basic-001.html", @@ -184903,84 +185065,132 @@ {} ] ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-gap.html": [ + [ + "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-gap.html", + [ + [ + "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-gap-ref.html", + "==" + ] + ], + {} + ] + ], + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-containing-block.html": [ + [ + "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-containing-block.html", + [ + [ + "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-containing-block-ref.html", + "==" + ] + ], + {} + ] + ], + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-list-item.html": [ + [ + "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-list-item.html", + [ + [ + "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-list-item-ref.html", + "==" + ] + ], + {} + ] + ], + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-overflow-hidden.html": [ [ - "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap.html", + "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-overflow-hidden.html", [ [ - "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap-ref.html", + "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-overflow-hidden-ref.html", "==" ] ], {} ] ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-painting-order.html": [ [ - "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block.html", + "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-painting-order.html", [ [ - "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block-ref.html", + "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-painting-order-ref.html", "==" ] ], {} ] ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-overflow-hidden.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-transform-translatez.html": [ [ - "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-overflow-hidden.html", + "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-transform-translatez.html", [ [ - "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-overflow-hidden-ref.html", + "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-transform-translatez-ref.html", "==" ] ], {} ] ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-painting-order.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-vertical.html": [ [ - "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-painting-order.html", + "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-vertical.html", [ [ - "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-painting-order-ref.html", + "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-vertical-ref.html", "==" ] ], {} ] ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-transform-translatez.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display-none-rendering.html": [ [ - "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-transform-translatez.html", + "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display-none-rendering.html", [ [ - "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-transform-translatez-ref.html", + "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display-none-rendering-ref.html", "==" ] ], {} ] ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float.html": [ [ - "/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float.html", + "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float.html", [ [ - "/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float-ref.html", + "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float-ref.html", "==" ] ], {} ] ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-position-relative.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item.html": [ [ - "/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-position-relative.html", + "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item.html", [ [ - "/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-position-relative-ref.html", + "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-list-item-ref.html", + "==" + ] + ], + {} + ] + ], + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-position-relative.html": [ + [ + "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-position-relative.html", + [ + [ + "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-position-relative-ref.html", "==" ] ], @@ -186631,6 +186841,18 @@ {} ] ], + "infrastructure/reftest/reftest_and_mismatch.html": [ + [ + "/infrastructure/reftest/reftest_and_mismatch.html", + [ + [ + "/infrastructure/reftest/reftest_and_mismatch_0.html", + "!=" + ] + ], + {} + ] + ], "infrastructure/reftest/reftest_match.html": [ [ "/infrastructure/reftest/reftest_match.html", @@ -192025,6 +192247,18 @@ {} ] ], + "infrastructure/reftest/reftest_and_mismatch_0.html": [ + [ + "/infrastructure/reftest/reftest_and_mismatch_0.html", + [ + [ + "/infrastructure/reftest/reftest_and_mismatch_1.html", + "!=" + ] + ], + {} + ] + ], "infrastructure/reftest/reftest_cycle.html": [ [ "/infrastructure/reftest/reftest_cycle.html", @@ -220674,6 +220908,11 @@ {} ] ], + "cookies/http-state/resources/all-tests.html.py-str": [ + [ + {} + ] + ], "cookies/http-state/resources/cookie-http-state-template.js": [ [ {} @@ -221239,6 +221478,1686 @@ {} ] ], + "cookies/http-state/resources/test-files/charset0001-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/charset0001-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/charset0002-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/charset0002-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/charset0003-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/charset0003-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/charset0004-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/charset0004-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0001-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0001-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0002-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0002-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0003-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0003-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0004-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0004-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0005-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0005-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0006-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0006-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0007-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0007-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0008-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0008-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0009-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0009-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0010-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0010-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0011-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0011-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0012-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0012-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0013-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0013-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0014-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0014-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0015-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0015-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0016-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0016-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0017-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0017-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0018-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0018-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0019-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0019-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0021-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/chromium0021-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/comma0001-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/comma0001-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/comma0002-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/comma0002-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/comma0003-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/comma0003-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/comma0004-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/comma0004-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/comma0005-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/comma0005-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/comma0006-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/comma0006-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/comma0007-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/comma0007-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/disabled-chromium0020-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/disabled-chromium0020-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/disabled-chromium0022-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/disabled-chromium0022-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/disabled-chromium0023-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/disabled-chromium0023-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/disabled-path0029-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/disabled-path0029-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0001-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0001-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0002-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0002-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0003-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0003-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0004-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0004-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0005-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0005-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0006-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0006-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0007-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0007-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0008-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0008-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0009-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0009-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0010-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0010-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0011-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0011-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0012-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0012-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0013-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0013-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0014-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0014-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0015-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0015-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0016-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0016-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0017-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0017-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0018-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0018-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0019-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0019-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0020-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0020-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0021-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0021-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0022-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0022-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0023-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0023-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0024-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0024-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0025-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0025-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0026-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0026-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0027-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0027-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0028-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0028-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0029-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0029-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0031-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0031-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0033-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0033-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0034-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0034-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0035-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0035-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0036-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0036-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0037-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0037-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0038-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0038-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0039-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0039-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0040-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0040-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0041-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0041-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0042-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/domain0042-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/mozilla0001-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/mozilla0001-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/mozilla0002-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/mozilla0002-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/mozilla0003-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/mozilla0003-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/mozilla0004-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/mozilla0004-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/mozilla0005-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/mozilla0005-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/mozilla0006-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/mozilla0006-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/mozilla0007-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/mozilla0007-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/mozilla0008-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/mozilla0008-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/mozilla0009-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/mozilla0009-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/mozilla0010-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/mozilla0010-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/mozilla0011-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/mozilla0011-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/mozilla0012-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/mozilla0012-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/mozilla0013-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/mozilla0013-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/mozilla0014-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/mozilla0014-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/mozilla0015-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/mozilla0015-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/mozilla0016-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/mozilla0016-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/mozilla0017-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/mozilla0017-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0001-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0001-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0002-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0002-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0003-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0003-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0004-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0004-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0005-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0005-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0006-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0006-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0007-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0007-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0008-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0008-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0009-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0009-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0010-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0010-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0011-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0011-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0012-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0012-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0013-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0013-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0014-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0014-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0015-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0015-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0016-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0016-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0017-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0017-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0018-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0018-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0019-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0019-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0020-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0020-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0021-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0021-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0022-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0022-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0023-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0023-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0024-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0024-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0025-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0025-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0026-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0026-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0027-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0027-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0028-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0028-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0029-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0029-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0030-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0030-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0031-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0031-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0032-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0032-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0033-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/name0033-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/optional-domain0030-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/optional-domain0030-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/optional-domain0041-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/optional-domain0041-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/optional-domain0042-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/optional-domain0042-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/optional-domain0043-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/optional-domain0043-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/ordering0001-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/ordering0001-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0001-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0001-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0002-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0002-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0003-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0003-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0004-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0004-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0005-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0005-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0006-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0006-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0007-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0007-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0008-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0008-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0009-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0009-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0010-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0010-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0011-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0011-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0012-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0012-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0013-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0013-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0014-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0014-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0015-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0015-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0016-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0016-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0017-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0017-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0018-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0018-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0019-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0019-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0020-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0020-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0021-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0021-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0022-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0022-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0023-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0023-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0024-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0024-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0025-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0025-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0026-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0026-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0027-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0027-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0028-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0028-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0029-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0029-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0030-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0030-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0031-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0031-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0032-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/path0032-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/value0001-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/value0001-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/value0002-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/value0002-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/value0003-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/value0003-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/value0004-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/value0004-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/value0005-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/value0005-test": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/value0006-expected": [ + [ + {} + ] + ], + "cookies/http-state/resources/test-files/value0006-test": [ + [ + {} + ] + ], "cookies/resources/cookie-helper.sub.js": [ [ {} @@ -230614,6 +232533,11 @@ {} ] ], + "css/CSS2/linebox/anonymous-inline-inherit-001-ref.html": [ + [ + {} + ] + ], "css/CSS2/linebox/border-padding-bleed-001-ref.xht": [ [ {} @@ -230929,6 +232853,11 @@ {} ] ], + "css/CSS2/linebox/vertical-align-nested-top-001-ref.html": [ + [ + {} + ] + ], "css/CSS2/linebox/vertical-align-sub-001-ref.xht": [ [ {} @@ -244644,6 +246573,11 @@ {} ] ], + "css/css-break/reference/widows-orphans-001-ref.html": [ + [ + {} + ] + ], "css/css-cascade/META.yml": [ [ {} @@ -245609,6 +247543,11 @@ {} ] ], + "css/css-filter/blur-clip-stacking-context-ref.html": [ + [ + {} + ] + ], "css/css-filter/filtered-block-is-container-ref.html": [ [ {} @@ -276479,6 +278418,16 @@ {} ] ], + "encoding/streams/resources/readable-stream-from-array.js": [ + [ + {} + ] + ], + "encoding/streams/resources/readable-stream-to-array.js": [ + [ + {} + ] + ], "encrypted-media/META.yml": [ [ {} @@ -277004,12 +278953,7 @@ {} ] ], - "feature-policy/autoplay-allowed-by-feature-policy.https.sub.html.headers": [ - [ - {} - ] - ], - "feature-policy/autoplay-disabled-by-feature-policy.https.sub.html.headers": [ + "feature-policy/experimental-features/intrinsicsize-without-unsized-media.tentative.https.sub.html.headers": [ [ {} ] @@ -277179,6 +279123,61 @@ {} ] ], + "feature-policy/reporting/camera-reporting.https.html.headers": [ + [ + {} + ] + ], + "feature-policy/reporting/document-write-reporting.html.headers": [ + [ + {} + ] + ], + "feature-policy/reporting/fullscreen-reporting.html.headers": [ + [ + {} + ] + ], + "feature-policy/reporting/geolocation-reporting.https.html.headers": [ + [ + {} + ] + ], + "feature-policy/reporting/image.jpg": [ + [ + {} + ] + ], + "feature-policy/reporting/microphone-reporting.https.html.headers": [ + [ + {} + ] + ], + "feature-policy/reporting/midi-reporting.html.headers": [ + [ + {} + ] + ], + "feature-policy/reporting/payment-reporting.https.html.headers": [ + [ + {} + ] + ], + "feature-policy/reporting/sync-xhr-reporting.html.headers": [ + [ + {} + ] + ], + "feature-policy/reporting/unsized-media-reporting.html.headers": [ + [ + {} + ] + ], + "feature-policy/reporting/usb-reporting.https.html.headers": [ + [ + {} + ] + ], "feature-policy/resources/autoplay.js": [ [ {} @@ -285579,57 +287578,87 @@ {} ] ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap-ref.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/META.yml": [ + [ + {} + ] + ], + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-gap-ref.html": [ [ {} ] ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block-ref.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-containing-block-ref.html": [ [ {} ] ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-div-display-contents.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-div-display-contents.html": [ [ {} ] ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-foo-ref.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-foo-ref.html": [ [ {} ] ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-overflow-hidden-ref.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-list-item-ref.html": [ [ {} ] ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-painting-order-ref.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-overflow-hidden-ref.html": [ [ {} ] ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-shadow-dom.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-painting-order-ref.html": [ [ {} ] ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-transform-translatez-ref.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-shadow-dom.html": [ [ {} ] ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-dynamic-update.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-transform-translatez-ref.html": [ [ {} ] ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float-ref.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-vertical-ref.html": [ [ {} ] ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-position-relative-ref.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display-none-rendering-ref.html": [ + [ + {} + ] + ], + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-dynamic-update.html": [ + [ + {} + ] + ], + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float-ref.html": [ + [ + {} + ] + ], + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item-ref.html": [ + [ + {} + ] + ], + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-position-relative-ref.html": [ + [ + {} + ] + ], + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/resources/fieldset-vertical.css": [ [ {} ] @@ -285969,6 +287998,16 @@ {} ] ], + "html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy.https.sub.html.headers": [ + [ + {} + ] + ], + "html/semantics/embedded-content/media-elements/autoplay-disabled-by-feature-policy.https.sub.html.headers": [ + [ + {} + ] + ], "html/semantics/embedded-content/media-elements/contains.json": [ [ {} @@ -288814,16 +290853,6 @@ {} ] ], - "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/010-1.html": [ - [ - {} - ] - ], - "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/010-2.html": [ - [ - {} - ] - ], "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/011-1.html": [ [ {} @@ -288914,11 +290943,21 @@ {} ] ], + "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/history-frame.html": [ + [ + {} + ] + ], "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/set-document-domain.html": [ [ {} ] ], + "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/url-frame.html": [ + [ + {} + ] + ], "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/type-argument-plaintext-subframe.txt": [ [ {} @@ -289429,6 +291468,11 @@ {} ] ], + "infrastructure/reftest/reftest_and_mismatch_1.html": [ + [ + {} + ] + ], "infrastructure/reftest/reftest_ref_timeout-ref.html": [ [ {} @@ -290994,6 +293038,11 @@ {} ] ], + "mediacapture-image/resources/imagecapture-helpers.js": [ + [ + {} + ] + ], "mediacapture-record/META.yml": [ [ {} @@ -295444,6 +297493,21 @@ {} ] ], + "resources/chromium/image_capture-mojom.js.headers": [ + [ + {} + ] + ], + "resources/chromium/image_capture.mojom.js": [ + [ + {} + ] + ], + "resources/chromium/mock-imagecapture.js": [ + [ + {} + ] + ], "resources/chromium/mojo_bindings.js": [ [ {} @@ -295514,6 +297578,16 @@ {} ] ], + "resources/chromium/webusb-child-test.js": [ + [ + {} + ] + ], + "resources/chromium/webusb-child-test.js.headers": [ + [ + {} + ] + ], "resources/chromium/webusb-test.js": [ [ {} @@ -299624,11 +301698,6 @@ {} ] ], - "service-workers/service-worker/resources/update-top-level-worker.py": [ - [ - {} - ] - ], "service-workers/service-worker/resources/update-worker.py": [ [ {} @@ -299829,26 +301898,6 @@ {} ] ], - "storage/resources/storagemanager-persist-worker.js": [ - [ - {} - ] - ], - "storage/resources/storagemanager-persisted-worker.js": [ - [ - {} - ] - ], - "storage/storage-estimate-indexeddb.js": [ - [ - {} - ] - ], - "storage/storage-persisted.js": [ - [ - {} - ] - ], "streams/META.yml": [ [ {} @@ -302039,6 +304088,11 @@ {} ] ], + "tools/serve/test_functional.py": [ + [ + {} + ] + ], "tools/serve/test_serve.py": [ [ {} @@ -307029,6 +309083,11 @@ {} ] ], + "tools/wpt/tests/test_run.py": [ + [ + {} + ] + ], "tools/wpt/tests/test_wpt.py": [ [ {} @@ -308844,6 +310903,11 @@ {} ] ], + "wasm/jsapi/table/assertions.js": [ + [ + {} + ] + ], "wasm/jsapi/wasm-constants.js": [ [ {} @@ -308854,37 +310918,112 @@ {} ] ], - "wasm/resources/blank.html": [ + "wasm/resources/load_wasm.js": [ [ {} ] ], - "wasm/resources/frame.html": [ + "wasm/serialization/incrementer.wasm": [ [ {} ] ], - "wasm/resources/incrementer.wasm": [ + "wasm/serialization/resources/blank.html": [ [ {} ] ], - "wasm/resources/load_wasm.js": [ + "wasm/serialization/resources/broadcastchannel-iframe.html": [ + [ + {} + ] + ], + "wasm/serialization/resources/broadcastchannel-sharedworker.js": [ + [ + {} + ] + ], + "wasm/serialization/resources/broadcastchannel-worker.js": [ + [ + {} + ] + ], + "wasm/serialization/resources/create-empty-wasm-module.js": [ + [ + {} + ] + ], + "wasm/serialization/resources/echo-iframe.html": [ + [ + {} + ] + ], + "wasm/serialization/resources/echo-worker.js": [ + [ + {} + ] + ], + "wasm/serialization/resources/incrementer-iframe-domain.sub.html": [ + [ + {} + ] + ], + "wasm/serialization/resources/incrementer-iframe.html": [ + [ + {} + ] + ], + "wasm/serialization/resources/incrementer-popup.html": [ + [ + {} + ] + ], + "wasm/serialization/resources/incrementer-worker-with-channel.js": [ [ {} ] ], - "wasm/resources/service-worker.js": [ + "wasm/serialization/resources/incrementer-worker.js": [ [ {} ] ], - "wasm/wasm_serialization_tests.js": [ + "wasm/serialization/resources/incrementer.wasm": [ [ {} ] ], - "wasm/wasm_serialization_worker.js": [ + "wasm/serialization/resources/nested-iframe-1.html": [ + [ + {} + ] + ], + "wasm/serialization/resources/nested-iframe-2.html": [ + [ + {} + ] + ], + "wasm/serialization/resources/nested-iframe-3.html": [ + [ + {} + ] + ], + "wasm/serialization/resources/nested-iframe-4-incrementer.html": [ + [ + {} + ] + ], + "wasm/serialization/resources/serviceworker-failure.js": [ + [ + {} + ] + ], + "wasm/serialization/resources/sharedworker-failure.js": [ + [ + {} + ] + ], + "wasm/serialization/resources/test-incrementer.js": [ [ {} ] @@ -309539,11 +311678,26 @@ {} ] ], + "webdriver/tests/get_element_attribute/__init__.py": [ + [ + {} + ] + ], + "webdriver/tests/get_element_css_value/__init__.py": [ + [ + {} + ] + ], "webdriver/tests/get_element_property/__init__.py": [ [ {} ] ], + "webdriver/tests/get_element_rect/__init__.py": [ + [ + {} + ] + ], "webdriver/tests/get_element_tag_name/__init__.py": [ [ {} @@ -309584,6 +311738,11 @@ {} ] ], + "webdriver/tests/is_element_enabled/__init__.py": [ + [ + {} + ] + ], "webdriver/tests/is_element_selected/__init__.py": [ [ {} @@ -309709,6 +311868,16 @@ {} ] ], + "webdriver/tests/take_element_screenshot/__init__.py": [ + [ + {} + ] + ], + "webdriver/tests/take_screenshot/__init__.py": [ + [ + {} + ] + ], "webgl/META.yml": [ [ {} @@ -309824,6 +311993,11 @@ {} ] ], + "webrtc/RTCQuicTransport-helper.js": [ + [ + {} + ] + ], "webrtc/RTCRtpCapabilities-helper.js": [ [ {} @@ -310199,6 +312373,11 @@ {} ] ], + "webusb/resources/open-in-worker.js": [ + [ + {} + ] + ], "webusb/resources/usb-allowed-by-feature-policy-worker.js": [ [ {} @@ -314726,12 +316905,6 @@ {} ] ], - "2dcontext/drawing-text-to-the-canvas/2d.text.draw.baseline.alphabetic.html": [ - [ - "/2dcontext/drawing-text-to-the-canvas/2d.text.draw.baseline.alphabetic.html", - {} - ] - ], "2dcontext/drawing-text-to-the-canvas/2d.text.draw.fill.maxWidth.NaN.html": [ [ "/2dcontext/drawing-text-to-the-canvas/2d.text.draw.fill.maxWidth.NaN.html", @@ -318050,6 +320223,12 @@ {} ] ], + "2dcontext/text-styles/2d.text.draw.baseline.alphabetic.html": [ + [ + "/2dcontext/text-styles/2d.text.draw.baseline.alphabetic.html", + {} + ] + ], "2dcontext/text-styles/2d.text.draw.baseline.bottom.html": [ [ "/2dcontext/text-styles/2d.text.draw.baseline.bottom.html", @@ -323750,9 +325929,9 @@ {} ] ], - "compat/webkit-pseudo-element.html": [ + "compat/webkit-appearance.html": [ [ - "/compat/webkit-pseudo-element.html", + "/compat/webkit-appearance.html", {} ] ], @@ -326490,12 +328669,66 @@ {} ] ], + "cookies/http-state/charset-tests.html": [ + [ + "/cookies/http-state/charset-tests.html", + {} + ] + ], + "cookies/http-state/chromium-tests.html": [ + [ + "/cookies/http-state/chromium-tests.html", + {} + ] + ], + "cookies/http-state/comma-tests.html": [ + [ + "/cookies/http-state/comma-tests.html", + {} + ] + ], + "cookies/http-state/domain-tests.html": [ + [ + "/cookies/http-state/domain-tests.html", + {} + ] + ], "cookies/http-state/general-tests.html": [ [ "/cookies/http-state/general-tests.html", {} ] ], + "cookies/http-state/mozilla-tests.html": [ + [ + "/cookies/http-state/mozilla-tests.html", + {} + ] + ], + "cookies/http-state/name-tests.html": [ + [ + "/cookies/http-state/name-tests.html", + {} + ] + ], + "cookies/http-state/ordering-tests.html": [ + [ + "/cookies/http-state/ordering-tests.html", + {} + ] + ], + "cookies/http-state/path-tests.html": [ + [ + "/cookies/http-state/path-tests.html", + {} + ] + ], + "cookies/http-state/value-tests.html": [ + [ + "/cookies/http-state/value-tests.html", + {} + ] + ], "cookies/meta-blocked.html": [ [ "/cookies/meta-blocked.html", @@ -326622,12 +328855,6 @@ {} ] ], - "cookies/secure/create-cookie-http.html": [ - [ - "/cookies/secure/create-cookie-http.html", - {} - ] - ], "cookies/secure/set-from-dom.https.sub.html": [ [ "/cookies/secure/set-from-dom.https.sub.html", @@ -338310,6 +340537,18 @@ {} ] ], + "css/selectors/webkit-pseudo-element.html": [ + [ + "/css/selectors/webkit-pseudo-element.html", + {} + ] + ], + "css/selectors/x-pseudo-element.html": [ + [ + "/css/selectors/x-pseudo-element.html", + {} + ] + ], "custom-elements/CustomElementRegistry.html": [ [ "/custom-elements/CustomElementRegistry.html", @@ -339042,12 +341281,6 @@ {} ] ], - "dom/inert/inert-does-not-match-disabled-selector.html": [ - [ - "/dom/inert/inert-does-not-match-disabled-selector.html", - {} - ] - ], "dom/interface-objects.html": [ [ "/dom/interface-objects.html", @@ -348714,6 +350947,192 @@ } ] ], + "encoding/streams/backpressure.any.js": [ + [ + "/encoding/streams/backpressure.any.html", + {} + ], + [ + "/encoding/streams/backpressure.any.serviceworker.html", + {} + ], + [ + "/encoding/streams/backpressure.any.sharedworker.html", + {} + ], + [ + "/encoding/streams/backpressure.any.worker.html", + {} + ] + ], + "encoding/streams/decode-bad-chunks.any.js": [ + [ + "/encoding/streams/decode-bad-chunks.any.html", + {} + ], + [ + "/encoding/streams/decode-bad-chunks.any.serviceworker.html", + {} + ], + [ + "/encoding/streams/decode-bad-chunks.any.sharedworker.html", + {} + ], + [ + "/encoding/streams/decode-bad-chunks.any.worker.html", + {} + ] + ], + "encoding/streams/decode-ignore-bom.any.js": [ + [ + "/encoding/streams/decode-ignore-bom.any.html", + {} + ], + [ + "/encoding/streams/decode-ignore-bom.any.serviceworker.html", + {} + ], + [ + "/encoding/streams/decode-ignore-bom.any.sharedworker.html", + {} + ], + [ + "/encoding/streams/decode-ignore-bom.any.worker.html", + {} + ] + ], + "encoding/streams/decode-incomplete-input.any.js": [ + [ + "/encoding/streams/decode-incomplete-input.any.html", + {} + ], + [ + "/encoding/streams/decode-incomplete-input.any.serviceworker.html", + {} + ], + [ + "/encoding/streams/decode-incomplete-input.any.sharedworker.html", + {} + ], + [ + "/encoding/streams/decode-incomplete-input.any.worker.html", + {} + ] + ], + "encoding/streams/decode-non-utf8.any.js": [ + [ + "/encoding/streams/decode-non-utf8.any.html", + {} + ], + [ + "/encoding/streams/decode-non-utf8.any.serviceworker.html", + {} + ], + [ + "/encoding/streams/decode-non-utf8.any.sharedworker.html", + {} + ], + [ + "/encoding/streams/decode-non-utf8.any.worker.html", + {} + ] + ], + "encoding/streams/decode-split-character.any.js": [ + [ + "/encoding/streams/decode-split-character.any.html", + {} + ], + [ + "/encoding/streams/decode-split-character.any.serviceworker.html", + {} + ], + [ + "/encoding/streams/decode-split-character.any.sharedworker.html", + {} + ], + [ + "/encoding/streams/decode-split-character.any.worker.html", + {} + ] + ], + "encoding/streams/decode-utf8.any.js": [ + [ + "/encoding/streams/decode-utf8.any.html", + {} + ], + [ + "/encoding/streams/decode-utf8.any.serviceworker.html", + {} + ], + [ + "/encoding/streams/decode-utf8.any.sharedworker.html", + {} + ], + [ + "/encoding/streams/decode-utf8.any.worker.html", + {} + ] + ], + "encoding/streams/encode-bad-chunks.any.js": [ + [ + "/encoding/streams/encode-bad-chunks.any.html", + {} + ], + [ + "/encoding/streams/encode-bad-chunks.any.serviceworker.html", + {} + ], + [ + "/encoding/streams/encode-bad-chunks.any.sharedworker.html", + {} + ], + [ + "/encoding/streams/encode-bad-chunks.any.worker.html", + {} + ] + ], + "encoding/streams/encode-utf8.any.js": [ + [ + "/encoding/streams/encode-utf8.any.html", + {} + ], + [ + "/encoding/streams/encode-utf8.any.serviceworker.html", + {} + ], + [ + "/encoding/streams/encode-utf8.any.sharedworker.html", + {} + ], + [ + "/encoding/streams/encode-utf8.any.worker.html", + {} + ] + ], + "encoding/streams/readable-writable-properties.any.js": [ + [ + "/encoding/streams/readable-writable-properties.any.html", + {} + ], + [ + "/encoding/streams/readable-writable-properties.any.serviceworker.html", + {} + ], + [ + "/encoding/streams/readable-writable-properties.any.sharedworker.html", + {} + ], + [ + "/encoding/streams/readable-writable-properties.any.worker.html", + {} + ] + ], + "encoding/streams/realms.window.js": [ + [ + "/encoding/streams/realms.window.html", + {} + ] + ], "encoding/textdecoder-byte-order-marks.any.js": [ [ "/encoding/textdecoder-byte-order-marks.any.html", @@ -349912,49 +352331,21 @@ {} ] ], - "feature-policy/autoplay-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html": [ - [ - "/feature-policy/autoplay-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html", - { - "testdriver": true - } - ] - ], - "feature-policy/autoplay-allowed-by-feature-policy-attribute.https.sub.html": [ - [ - "/feature-policy/autoplay-allowed-by-feature-policy-attribute.https.sub.html", - { - "testdriver": true - } - ] - ], - "feature-policy/autoplay-allowed-by-feature-policy.https.sub.html": [ - [ - "/feature-policy/autoplay-allowed-by-feature-policy.https.sub.html", - { - "testdriver": true - } - ] - ], - "feature-policy/autoplay-default-feature-policy.https.sub.html": [ + "feature-policy/experimental-features/document-write.tentative.html": [ [ - "/feature-policy/autoplay-default-feature-policy.https.sub.html", - { - "testdriver": true - } + "/feature-policy/experimental-features/document-write.tentative.html", + {} ] ], - "feature-policy/autoplay-disabled-by-feature-policy.https.sub.html": [ + "feature-policy/experimental-features/intrinsicSize-with-responsive-images.tentative.https.sub.html": [ [ - "/feature-policy/autoplay-disabled-by-feature-policy.https.sub.html", - { - "testdriver": true - } + "/feature-policy/experimental-features/intrinsicSize-with-responsive-images.tentative.https.sub.html", + {} ] ], - "feature-policy/experimental-features/document-write.tentative.html": [ + "feature-policy/experimental-features/intrinsicSize-without-unsized-media.tentative.https.sub.html": [ [ - "/feature-policy/experimental-features/document-write.tentative.html", + "/feature-policy/experimental-features/intrinsicSize-without-unsized-media.tentative.https.sub.html", {} ] ], @@ -350118,6 +352509,66 @@ } ] ], + "feature-policy/reporting/camera-reporting.https.html": [ + [ + "/feature-policy/reporting/camera-reporting.https.html", + {} + ] + ], + "feature-policy/reporting/document-write-reporting.html": [ + [ + "/feature-policy/reporting/document-write-reporting.html", + {} + ] + ], + "feature-policy/reporting/fullscreen-reporting.html": [ + [ + "/feature-policy/reporting/fullscreen-reporting.html", + {} + ] + ], + "feature-policy/reporting/geolocation-reporting.https.html": [ + [ + "/feature-policy/reporting/geolocation-reporting.https.html", + {} + ] + ], + "feature-policy/reporting/microphone-reporting.https.html": [ + [ + "/feature-policy/reporting/microphone-reporting.https.html", + {} + ] + ], + "feature-policy/reporting/midi-reporting.html": [ + [ + "/feature-policy/reporting/midi-reporting.html", + {} + ] + ], + "feature-policy/reporting/payment-reporting.https.html": [ + [ + "/feature-policy/reporting/payment-reporting.https.html", + {} + ] + ], + "feature-policy/reporting/sync-xhr-reporting.html": [ + [ + "/feature-policy/reporting/sync-xhr-reporting.html", + {} + ] + ], + "feature-policy/reporting/unsized-media-reporting.html": [ + [ + "/feature-policy/reporting/unsized-media-reporting.html", + {} + ] + ], + "feature-policy/reporting/usb-reporting.https.html": [ + [ + "/feature-policy/reporting/usb-reporting.https.html", + {} + ] + ], "fetch/api/abort/cache.https.html": [ [ "/fetch/api/abort/cache.https.html", @@ -350188,6 +352639,24 @@ {} ] ], + "fetch/api/basic/header-value-null-byte.any.js": [ + [ + "/fetch/api/basic/header-value-null-byte.any.html", + {} + ], + [ + "/fetch/api/basic/header-value-null-byte.any.serviceworker.html", + {} + ], + [ + "/fetch/api/basic/header-value-null-byte.any.sharedworker.html", + {} + ], + [ + "/fetch/api/basic/header-value-null-byte.any.worker.html", + {} + ] + ], "fetch/api/basic/integrity.sub.any.js": [ [ "/fetch/api/basic/integrity.sub.any.html", @@ -351546,57 +354015,33 @@ {} ] ], - "fetch/sec-metadata/redirect/cross-site/cross-site.tentative.https.sub.html": [ - [ - "/fetch/sec-metadata/redirect/cross-site/cross-site.tentative.https.sub.html", - {} - ] - ], - "fetch/sec-metadata/redirect/cross-site/same-origin.tentative.https.sub.html": [ - [ - "/fetch/sec-metadata/redirect/cross-site/same-origin.tentative.https.sub.html", - {} - ] - ], - "fetch/sec-metadata/redirect/cross-site/same-site.tentative.https.sub.html": [ - [ - "/fetch/sec-metadata/redirect/cross-site/same-site.tentative.https.sub.html", - {} - ] - ], - "fetch/sec-metadata/redirect/same-origin/cross-site.tentative.https.sub.html": [ - [ - "/fetch/sec-metadata/redirect/same-origin/cross-site.tentative.https.sub.html", - {} - ] - ], - "fetch/sec-metadata/redirect/same-origin/same-origin.tentative.https.sub.html": [ + "fetch/sec-metadata/redirect/cross-site-redirect.tentative.https.sub.html": [ [ - "/fetch/sec-metadata/redirect/same-origin/same-origin.tentative.https.sub.html", + "/fetch/sec-metadata/redirect/cross-site-redirect.tentative.https.sub.html", {} ] ], - "fetch/sec-metadata/redirect/same-origin/same-site.tentative.https.sub.html": [ + "fetch/sec-metadata/redirect/multiple-redirect-cross-site.tentative.https.sub.html": [ [ - "/fetch/sec-metadata/redirect/same-origin/same-site.tentative.https.sub.html", + "/fetch/sec-metadata/redirect/multiple-redirect-cross-site.tentative.https.sub.html", {} ] ], - "fetch/sec-metadata/redirect/same-site/cross-site.tentative.https.sub.html": [ + "fetch/sec-metadata/redirect/multiple-redirect-same-site.tentative.https.sub.html": [ [ - "/fetch/sec-metadata/redirect/same-site/cross-site.tentative.https.sub.html", + "/fetch/sec-metadata/redirect/multiple-redirect-same-site.tentative.https.sub.html", {} ] ], - "fetch/sec-metadata/redirect/same-site/same-origin.tentative.https.sub.html": [ + "fetch/sec-metadata/redirect/same-origin-redirect.tentative.https.sub.html": [ [ - "/fetch/sec-metadata/redirect/same-site/same-origin.tentative.https.sub.html", + "/fetch/sec-metadata/redirect/same-origin-redirect.tentative.https.sub.html", {} ] ], - "fetch/sec-metadata/redirect/same-site/same-site.tentative.https.sub.html": [ + "fetch/sec-metadata/redirect/same-site-redirect.tentative.https.sub.html": [ [ - "/fetch/sec-metadata/redirect/same-site/same-site.tentative.https.sub.html", + "/fetch/sec-metadata/redirect/same-site-redirect.tentative.https.sub.html", {} ] ], @@ -354688,52 +357133,6 @@ {} ] ], - "html/editing/focus/inert/inert-does-not-match-disabled-selector.html": [ - [ - "/html/editing/focus/inert/inert-does-not-match-disabled-selector.html", - {} - ] - ], - "html/editing/focus/inert/inert-in-shadow-dom.html": [ - [ - "/html/editing/focus/inert/inert-in-shadow-dom.html", - {} - ] - ], - "html/editing/focus/inert/inert-inlines.html": [ - [ - "/html/editing/focus/inert/inert-inlines.html", - { - "testdriver": true - } - ] - ], - "html/editing/focus/inert/inert-label-focus.html": [ - [ - "/html/editing/focus/inert/inert-label-focus.html", - { - "testdriver": true - } - ] - ], - "html/editing/focus/inert/inert-node-is-uneditable.html": [ - [ - "/html/editing/focus/inert/inert-node-is-uneditable.html", - {} - ] - ], - "html/editing/focus/inert/inert-node-is-unfocusable.html": [ - [ - "/html/editing/focus/inert/inert-node-is-unfocusable.html", - {} - ] - ], - "html/editing/focus/inert/inert-node-is-unselectable.html": [ - [ - "/html/editing/focus/inert/inert-node-is-unselectable.html", - {} - ] - ], "html/editing/focus/processing-model/focus-fixup-rule-one-no-dialogs.html": [ [ "/html/editing/focus/processing-model/focus-fixup-rule-one-no-dialogs.html", @@ -355208,87 +357607,99 @@ {} ] ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-block-formatting-context.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-block-formatting-context.html": [ + [ + "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-block-formatting-context.html", + {} + ] + ], + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-radius-hittest.html": [ + [ + "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-radius-hittest.html", + {} + ] + ], + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-default-style.html": [ [ - "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-block-formatting-context.html", + "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-default-style.html", {} ] ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-default-style.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-display.html": [ [ - "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-default-style.html", + "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-display.html", {} ] ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-display.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-flexbox.html": [ [ - "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-display.html", + "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-flexbox.html", {} ] ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-flexbox.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-grid.html": [ [ - "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-flexbox.html", + "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-grid.html", {} ] ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-grid.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-multicol.html": [ [ - "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-grid.html", + "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-multicol.html", {} ] ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-multicol.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-align.html": [ [ - "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-multicol.html", + "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-align.html", {} ] ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-align.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-block-formatting-context.html": [ [ - "/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-align.html", + "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-block-formatting-context.html", {} ] ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-block-formatting-context.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display-none.html": [ [ - "/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-block-formatting-context.html", + "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display-none.html", {} ] ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-display.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display.html": [ [ - "/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-display.html", + "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display.html", {} ] ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float-abspos.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float-abspos.html": [ [ - "/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float-abspos.html", + "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float-abspos.html", {} ] ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-grid-flex-multicol.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-grid-flex-multicol.html": [ [ - "/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-grid-flex-multicol.html", + "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-grid-flex-multicol.html", {} ] ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-sans-fieldset-display.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-sans-fieldset-display.html": [ [ - "/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-sans-fieldset-display.html", + "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-sans-fieldset-display.html", {} ] ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/legend.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend.html": [ [ - "/html/rendering/non-replaced-elements/the-fieldset-element-0/legend.html", + "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend.html", {} ] ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/min-inline-size.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/min-inline-size.html": [ [ - "/html/rendering/non-replaced-elements/the-fieldset-element-0/min-inline-size.html", + "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/min-inline-size.html", {} ] ], @@ -355716,6 +358127,46 @@ {} ] ], + "html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html": [ + [ + "/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html", + { + "testdriver": true + } + ] + ], + "html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy-attribute.https.sub.html": [ + [ + "/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy-attribute.https.sub.html", + { + "testdriver": true + } + ] + ], + "html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy.https.sub.html": [ + [ + "/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy.https.sub.html", + { + "testdriver": true + } + ] + ], + "html/semantics/embedded-content/media-elements/autoplay-default-feature-policy.https.sub.html": [ + [ + "/html/semantics/embedded-content/media-elements/autoplay-default-feature-policy.https.sub.html", + { + "testdriver": true + } + ] + ], + "html/semantics/embedded-content/media-elements/autoplay-disabled-by-feature-policy.https.sub.html": [ + [ + "/html/semantics/embedded-content/media-elements/autoplay-disabled-by-feature-policy.https.sub.html", + { + "testdriver": true + } + ] + ], "html/semantics/embedded-content/media-elements/autoplay-with-broken-track.html": [ [ "/html/semantics/embedded-content/media-elements/autoplay-with-broken-track.html", @@ -364266,12 +366717,6 @@ {} ] ], - "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/010.html": [ - [ - "/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/010.html", - {} - ] - ], "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/011.html": [ [ "/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/011.html", @@ -364398,6 +366843,12 @@ {} ] ], + "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/history.window.js": [ + [ + "/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/history.window.html", + {} + ] + ], "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/ignore-opens-during-unload.window.js": [ [ "/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/ignore-opens-during-unload.window.html", @@ -364428,6 +366879,18 @@ {} ] ], + "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/quirks.window.js": [ + [ + "/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/quirks.window.html", + {} + ] + ], + "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/readiness.window.js": [ + [ + "/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/readiness.window.html", + {} + ] + ], "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/reload.window.js": [ [ "/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/reload.window.html", @@ -364458,6 +366921,12 @@ {} ] ], + "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/url-fragment.window.js": [ + [ + "/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/url-fragment.window.html", + {} + ] + ], "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/url.window.js": [ [ "/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/url.window.html", @@ -365114,6 +367583,52 @@ {} ] ], + "inert/inert-does-not-match-disabled-selector.tentative.html": [ + [ + "/inert/inert-does-not-match-disabled-selector.tentative.html", + {} + ] + ], + "inert/inert-in-shadow-dom.tentative.html": [ + [ + "/inert/inert-in-shadow-dom.tentative.html", + {} + ] + ], + "inert/inert-inlines.tentative.html": [ + [ + "/inert/inert-inlines.tentative.html", + { + "testdriver": true + } + ] + ], + "inert/inert-label-focus.tentative.html": [ + [ + "/inert/inert-label-focus.tentative.html", + { + "testdriver": true + } + ] + ], + "inert/inert-node-is-uneditable.tentative.html": [ + [ + "/inert/inert-node-is-uneditable.tentative.html", + {} + ] + ], + "inert/inert-node-is-unfocusable.tentative.html": [ + [ + "/inert/inert-node-is-unfocusable.tentative.html", + {} + ] + ], + "inert/inert-node-is-unselectable.tentative.html": [ + [ + "/inert/inert-node-is-unselectable.tentative.html", + {} + ] + ], "infrastructure/assumptions/html-elements.html": [ [ "/infrastructure/assumptions/html-elements.html", @@ -365262,9 +367777,9 @@ } ] ], - "input-device-capabilities/interfaces.html": [ + "input-device-capabilities/idlharness.window.js": [ [ - "/input-device-capabilities/interfaces.html", + "/input-device-capabilities/idlharness.window.html", {} ] ], @@ -366314,12 +368829,120 @@ {} ] ], + "mediacapture-image/ImageCapture-MediaTrackSupportedConstraints.html": [ + [ + "/mediacapture-image/ImageCapture-MediaTrackSupportedConstraints.html", + {} + ] + ], + "mediacapture-image/ImageCapture-creation.https.html": [ + [ + "/mediacapture-image/ImageCapture-creation.https.html", + {} + ] + ], + "mediacapture-image/ImageCapture-grabFrame.html": [ + [ + "/mediacapture-image/ImageCapture-grabFrame.html", + {} + ] + ], + "mediacapture-image/MediaStreamTrack-applyConstraints-fast.html": [ + [ + "/mediacapture-image/MediaStreamTrack-applyConstraints-fast.html", + {} + ] + ], + "mediacapture-image/MediaStreamTrack-applyConstraints-getSettings.html": [ + [ + "/mediacapture-image/MediaStreamTrack-applyConstraints-getSettings.html", + {} + ] + ], + "mediacapture-image/MediaStreamTrack-applyConstraints-reject.html": [ + [ + "/mediacapture-image/MediaStreamTrack-applyConstraints-reject.html", + {} + ] + ], + "mediacapture-image/MediaStreamTrack-applyConstraints.html": [ + [ + "/mediacapture-image/MediaStreamTrack-applyConstraints.html", + {} + ] + ], + "mediacapture-image/MediaStreamTrack-getCapabilities-fast.html": [ + [ + "/mediacapture-image/MediaStreamTrack-getCapabilities-fast.html", + {} + ] + ], + "mediacapture-image/MediaStreamTrack-getCapabilities.html": [ + [ + "/mediacapture-image/MediaStreamTrack-getCapabilities.html", + {} + ] + ], + "mediacapture-image/MediaStreamTrack-getConstraints-fast.html": [ + [ + "/mediacapture-image/MediaStreamTrack-getConstraints-fast.html", + {} + ] + ], + "mediacapture-image/MediaStreamTrack-getSettings-fast.html": [ + [ + "/mediacapture-image/MediaStreamTrack-getSettings-fast.html", + {} + ] + ], + "mediacapture-image/MediaStreamTrack-getSettings.html": [ + [ + "/mediacapture-image/MediaStreamTrack-getSettings.html", + {} + ] + ], + "mediacapture-image/detached-HTMLCanvasElement.html": [ + [ + "/mediacapture-image/detached-HTMLCanvasElement.html", + {} + ] + ], + "mediacapture-image/getPhotoCapabilities.html": [ + [ + "/mediacapture-image/getPhotoCapabilities.html", + {} + ] + ], + "mediacapture-image/getPhotoSettings.html": [ + [ + "/mediacapture-image/getPhotoSettings.html", + {} + ] + ], "mediacapture-image/idlharness.window.js": [ [ "/mediacapture-image/idlharness.window.html", {} ] ], + "mediacapture-image/setOptions-reject.html": [ + [ + "/mediacapture-image/setOptions-reject.html", + {} + ] + ], + "mediacapture-image/takePhoto-with-PhotoSettings.html": [ + [ + "/mediacapture-image/takePhoto-with-PhotoSettings.html", + {} + ] + ], + "mediacapture-image/takePhoto.html": [ + [ + "/mediacapture-image/takePhoto.html", + {} + ] + ], "mediacapture-record/BlobEvent-constructor.html": [ [ "/mediacapture-record/BlobEvent-constructor.html", @@ -378200,6 +380823,18 @@ {} ] ], + "payment-request/MerchantValidationEvent/constructor.http.html": [ + [ + "/payment-request/MerchantValidationEvent/constructor.http.html", + {} + ] + ], + "payment-request/MerchantValidationEvent/constructor.https.html": [ + [ + "/payment-request/MerchantValidationEvent/constructor.https.html", + {} + ] + ], "payment-request/PaymentItem/type_member.https.html": [ [ "/payment-request/PaymentItem/type_member.https.html", @@ -378308,6 +380943,12 @@ {} ] ], + "payment-request/onmerchantvalidation-attribute.https.html": [ + [ + "/payment-request/onmerchantvalidation-attribute.https.html", + {} + ] + ], "payment-request/onpaymentmenthodchange-attribute.https.html": [ [ "/payment-request/onpaymentmenthodchange-attribute.https.html", @@ -379048,9 +381689,15 @@ {} ] ], - "quirks/unitless-length/excluded-properties.html": [ + "quirks/unitless-length/excluded-properties-001.html": [ [ - "/quirks/unitless-length/excluded-properties.html", + "/quirks/unitless-length/excluded-properties-001.html", + {} + ] + ], + "quirks/unitless-length/excluded-properties-002.html": [ + [ + "/quirks/unitless-length/excluded-properties-002.html", {} ] ], @@ -389978,12 +392625,6 @@ {} ] ], - "service-workers/service-worker/update-top-level.https.html": [ - [ - "/service-workers/service-worker/update-top-level.https.html", - {} - ] - ], "service-workers/service-worker/update.https.html": [ [ "/service-workers/service-worker/update.https.html", @@ -390648,21 +393289,23 @@ {} ] ], - "storage/estimate-indexeddb-worker.https.html": [ + "storage/estimate-indexeddb.https.any.js": [ [ - "/storage/estimate-indexeddb-worker.https.html", + "/storage/estimate-indexeddb.https.any.html", {} - ] - ], - "storage/estimate-indexeddb.https.html": [ + ], [ - "/storage/estimate-indexeddb.https.html", + "/storage/estimate-indexeddb.https.any.worker.html", {} ] ], - "storage/estimate-parallel.https.html": [ + "storage/estimate-parallel.https.any.js": [ + [ + "/storage/estimate-parallel.https.any.html", + {} + ], [ - "/storage/estimate-parallel.https.html", + "/storage/estimate-parallel.https.any.worker.html", {} ] ], @@ -390676,51 +393319,61 @@ {} ] ], - "storage/opaque-origin.https.html": [ + "storage/opaque-origin.https.window.js": [ [ - "/storage/opaque-origin.https.html", + "/storage/opaque-origin.https.window.html", {} ] ], - "storage/persisted-worker.https.html": [ + "storage/permission-query.https.any.js": [ [ - "/storage/persisted-worker.https.html", + "/storage/permission-query.https.any.html", {} - ] - ], - "storage/persisted.https.html": [ + ], [ - "/storage/persisted.https.html", + "/storage/permission-query.https.any.worker.html", {} ] ], - "storage/storagemanager-estimate.https.html": [ + "storage/persisted.https.any.js": [ + [ + "/storage/persisted.https.any.html", + {} + ], [ - "/storage/storagemanager-estimate.https.html", + "/storage/persisted.https.any.worker.html", {} ] ], - "storage/storagemanager-persist-worker.https.html": [ + "storage/storagemanager-estimate.https.any.js": [ [ - "/storage/storagemanager-persist-worker.https.html", + "/storage/storagemanager-estimate.https.any.html", + {} + ], + [ + "/storage/storagemanager-estimate.https.any.worker.html", {} ] ], - "storage/storagemanager-persist.https.html": [ + "storage/storagemanager-persist.https.window.js": [ [ - "/storage/storagemanager-persist.https.html", + "/storage/storagemanager-persist.https.window.html", {} ] ], - "storage/storagemanager-persisted-worker.https.html": [ + "storage/storagemanager-persist.https.worker.js": [ [ - "/storage/storagemanager-persisted-worker.https.html", + "/storage/storagemanager-persist.https.worker.html", {} ] ], - "storage/storagemanager-persisted.https.html": [ + "storage/storagemanager-persisted.https.any.js": [ + [ + "/storage/storagemanager-persisted.https.any.html", + {} + ], [ - "/storage/storagemanager-persisted.https.html", + "/storage/storagemanager-persisted.https.any.worker.html", {} ] ], @@ -392680,21 +395333,33 @@ {} ] ], - "trusted-types/TrustedTypePolicyFactory-createPolicy.tentative.html": [ + "trusted-types/TrustedTypePolicyFactory-createPolicy-createXYZTests.tentative.html": [ [ - "/trusted-types/TrustedTypePolicyFactory-createPolicy.tentative.html", + "/trusted-types/TrustedTypePolicyFactory-createPolicy-createXYZTests.tentative.html", {} ] ], - "trusted-types/Window-open.tentative.html": [ + "trusted-types/TrustedTypePolicyFactory-createPolicy-exposedTests.tentative.html": [ [ - "/trusted-types/Window-open.tentative.html", + "/trusted-types/TrustedTypePolicyFactory-createPolicy-exposedTests.tentative.html", {} ] ], - "trusted-types/Window-trustedTypes.tentative.html": [ + "trusted-types/TrustedTypePolicyFactory-createPolicy-nameTests.tentative.html": [ + [ + "/trusted-types/TrustedTypePolicyFactory-createPolicy-nameTests.tentative.html", + {} + ] + ], + "trusted-types/Window-TrustedTypes.tentative.html": [ + [ + "/trusted-types/Window-TrustedTypes.tentative.html", + {} + ] + ], + "trusted-types/Window-open.tentative.html": [ [ - "/trusted-types/Window-trustedTypes.tentative.html", + "/trusted-types/Window-open.tentative.html", {} ] ], @@ -393500,6 +396165,70 @@ {} ] ], + "wasm/jsapi/global/constructor.any.js": [ + [ + "/wasm/jsapi/global/constructor.any.html", + {} + ], + [ + "/wasm/jsapi/global/constructor.any.js", + { + "jsshell": true + } + ], + [ + "/wasm/jsapi/global/constructor.any.worker.html", + {} + ] + ], + "wasm/jsapi/global/toString.any.js": [ + [ + "/wasm/jsapi/global/toString.any.html", + {} + ], + [ + "/wasm/jsapi/global/toString.any.js", + { + "jsshell": true + } + ], + [ + "/wasm/jsapi/global/toString.any.worker.html", + {} + ] + ], + "wasm/jsapi/global/value-set.any.js": [ + [ + "/wasm/jsapi/global/value-set.any.html", + {} + ], + [ + "/wasm/jsapi/global/value-set.any.js", + { + "jsshell": true + } + ], + [ + "/wasm/jsapi/global/value-set.any.worker.html", + {} + ] + ], + "wasm/jsapi/global/valueOf.any.js": [ + [ + "/wasm/jsapi/global/valueOf.any.html", + {} + ], + [ + "/wasm/jsapi/global/valueOf.any.js", + { + "jsshell": true + } + ], + [ + "/wasm/jsapi/global/valueOf.any.worker.html", + {} + ] + ], "wasm/jsapi/instance/constructor-bad-imports.any.js": [ [ "/wasm/jsapi/instance/constructor-bad-imports.any.html", @@ -393532,6 +396261,38 @@ {} ] ], + "wasm/jsapi/instance/exports.any.js": [ + [ + "/wasm/jsapi/instance/exports.any.html", + {} + ], + [ + "/wasm/jsapi/instance/exports.any.js", + { + "jsshell": true + } + ], + [ + "/wasm/jsapi/instance/exports.any.worker.html", + {} + ] + ], + "wasm/jsapi/instance/toString.any.js": [ + [ + "/wasm/jsapi/instance/toString.any.html", + {} + ], + [ + "/wasm/jsapi/instance/toString.any.js", + { + "jsshell": true + } + ], + [ + "/wasm/jsapi/instance/toString.any.worker.html", + {} + ] + ], "wasm/jsapi/interface.any.js": [ [ "/wasm/jsapi/interface.any.html", @@ -393548,6 +396309,22 @@ {} ] ], + "wasm/jsapi/memory/buffer.any.js": [ + [ + "/wasm/jsapi/memory/buffer.any.html", + {} + ], + [ + "/wasm/jsapi/memory/buffer.any.js", + { + "jsshell": true + } + ], + [ + "/wasm/jsapi/memory/buffer.any.worker.html", + {} + ] + ], "wasm/jsapi/memory/constructor.any.js": [ [ "/wasm/jsapi/memory/constructor.any.html", @@ -393564,6 +396341,38 @@ {} ] ], + "wasm/jsapi/memory/grow.any.js": [ + [ + "/wasm/jsapi/memory/grow.any.html", + {} + ], + [ + "/wasm/jsapi/memory/grow.any.js", + { + "jsshell": true + } + ], + [ + "/wasm/jsapi/memory/grow.any.worker.html", + {} + ] + ], + "wasm/jsapi/memory/toString.any.js": [ + [ + "/wasm/jsapi/memory/toString.any.html", + {} + ], + [ + "/wasm/jsapi/memory/toString.any.js", + { + "jsshell": true + } + ], + [ + "/wasm/jsapi/memory/toString.any.worker.html", + {} + ] + ], "wasm/jsapi/module/constructor.any.js": [ [ "/wasm/jsapi/module/constructor.any.html", @@ -393628,6 +396437,22 @@ {} ] ], + "wasm/jsapi/module/toString.any.js": [ + [ + "/wasm/jsapi/module/toString.any.html", + {} + ], + [ + "/wasm/jsapi/module/toString.any.js", + { + "jsshell": true + } + ], + [ + "/wasm/jsapi/module/toString.any.worker.html", + {} + ] + ], "wasm/jsapi/table/constructor.any.js": [ [ "/wasm/jsapi/table/constructor.any.html", @@ -393644,21 +396469,163 @@ {} ] ], - "wasm/wasm_local_iframe_test.html": [ + "wasm/jsapi/table/get-set.any.js": [ + [ + "/wasm/jsapi/table/get-set.any.html", + {} + ], + [ + "/wasm/jsapi/table/get-set.any.js", + { + "jsshell": true + } + ], + [ + "/wasm/jsapi/table/get-set.any.worker.html", + {} + ] + ], + "wasm/jsapi/table/grow.any.js": [ + [ + "/wasm/jsapi/table/grow.any.html", + {} + ], + [ + "/wasm/jsapi/table/grow.any.js", + { + "jsshell": true + } + ], + [ + "/wasm/jsapi/table/grow.any.worker.html", + {} + ] + ], + "wasm/jsapi/table/length.any.js": [ + [ + "/wasm/jsapi/table/length.any.html", + {} + ], + [ + "/wasm/jsapi/table/length.any.js", + { + "jsshell": true + } + ], + [ + "/wasm/jsapi/table/length.any.worker.html", + {} + ] + ], + "wasm/jsapi/table/toString.any.js": [ + [ + "/wasm/jsapi/table/toString.any.html", + {} + ], + [ + "/wasm/jsapi/table/toString.any.js", + { + "jsshell": true + } + ], + [ + "/wasm/jsapi/table/toString.any.worker.html", + {} + ] + ], + "wasm/serialization/broadcastchannel-success-and-failure.html": [ + [ + "/wasm/serialization/broadcastchannel-success-and-failure.html", + {} + ] + ], + "wasm/serialization/broadcastchannel-success.html": [ + [ + "/wasm/serialization/broadcastchannel-success.html", + {} + ] + ], + "wasm/serialization/identity-not-preserved.html": [ + [ + "/wasm/serialization/identity-not-preserved.html", + {} + ] + ], + "wasm/serialization/nested-worker-success.any.js": [ + [ + "/wasm/serialization/nested-worker-success.any.sharedworker.html", + {} + ], + [ + "/wasm/serialization/nested-worker-success.any.worker.html", + {} + ] + ], + "wasm/serialization/no-transferring.html": [ + [ + "/wasm/serialization/no-transferring.html", + {} + ] + ], + "wasm/serialization/serialization-via-history.html": [ + [ + "/wasm/serialization/serialization-via-history.html", + {} + ] + ], + "wasm/serialization/serialization-via-idb.any.js": [ + [ + "/wasm/serialization/serialization-via-idb.any.html", + {} + ], + [ + "/wasm/serialization/serialization-via-idb.any.worker.html", + {} + ] + ], + "wasm/serialization/serialization-via-notifications-api.any.js": [ + [ + "/wasm/serialization/serialization-via-notifications-api.any.html", + {} + ], + [ + "/wasm/serialization/serialization-via-notifications-api.any.worker.html", + {} + ] + ], + "wasm/serialization/window-domain-success.sub.html": [ + [ + "/wasm/serialization/window-domain-success.sub.html", + {} + ] + ], + "wasm/serialization/window-messagechannel-success.html": [ + [ + "/wasm/serialization/window-messagechannel-success.html", + {} + ] + ], + "wasm/serialization/window-serviceworker-failure.https.html": [ [ - "/wasm/wasm_local_iframe_test.html", + "/wasm/serialization/window-serviceworker-failure.https.html", {} ] ], - "wasm/wasm_serialization_tests.html": [ + "wasm/serialization/window-sharedworker-failure.html": [ [ - "/wasm/wasm_serialization_tests.html", + "/wasm/serialization/window-sharedworker-failure.html", {} ] ], - "wasm/wasm_service_worker_test.https.html": [ + "wasm/serialization/window-similar-but-cross-origin-success.sub.html": [ [ - "/wasm/wasm_service_worker_test.https.html", + "/wasm/serialization/window-similar-but-cross-origin-success.sub.html", + {} + ] + ], + "wasm/serialization/window-simple-success.html": [ + [ + "/wasm/serialization/window-simple-success.html", {} ] ], @@ -396510,6 +399477,12 @@ {} ] ], + "webrtc/RTCQuicStream.https.html": [ + [ + "/webrtc/RTCQuicStream.https.html", + {} + ] + ], "webrtc/RTCQuicTransport.https.html": [ [ "/webrtc/RTCQuicTransport.https.html", @@ -399102,6 +402075,26 @@ {} ] ], + "webusb/usbAlternateInterface.https.any.js": [ + [ + "/webusb/usbAlternateInterface.https.any.html", + {} + ], + [ + "/webusb/usbAlternateInterface.https.any.worker.html", + {} + ] + ], + "webusb/usbConfiguration.https.any.js": [ + [ + "/webusb/usbConfiguration.https.any.html", + {} + ], + [ + "/webusb/usbConfiguration.https.any.worker.html", + {} + ] + ], "webusb/usbConnectionEvent.https.any.js": [ [ "/webusb/usbConnectionEvent.https.any.html", @@ -399118,6 +402111,12 @@ {} ] ], + "webusb/usbDevice-worker.https.html": [ + [ + "/webusb/usbDevice-worker.https.html", + {} + ] + ], "webusb/usbDevice.https.any.js": [ [ "/webusb/usbDevice.https.any.html", @@ -399128,6 +402127,16 @@ {} ] ], + "webusb/usbEndpoint.https.any.js": [ + [ + "/webusb/usbEndpoint.https.any.html", + {} + ], + [ + "/webusb/usbEndpoint.https.any.worker.html", + {} + ] + ], "webusb/usbInTransferResult.https.any.js": [ [ "/webusb/usbInTransferResult.https.any.html", @@ -399138,6 +402147,16 @@ {} ] ], + "webusb/usbInterface.https.any.js": [ + [ + "/webusb/usbInterface.https.any.html", + {} + ], + [ + "/webusb/usbInterface.https.any.worker.html", + {} + ] + ], "webusb/usbIsochronousInTransferPacket.https.any.js": [ [ "/webusb/usbIsochronousInTransferPacket.https.any.html", @@ -401060,6 +404079,36 @@ {} ] ], + "worklets/audio-worklet-credentials.https.html": [ + [ + "/worklets/audio-worklet-credentials.https.html", + {} + ] + ], + "worklets/audio-worklet-csp.https.html": [ + [ + "/worklets/audio-worklet-csp.https.html", + {} + ] + ], + "worklets/audio-worklet-import.https.html": [ + [ + "/worklets/audio-worklet-import.https.html", + {} + ] + ], + "worklets/audio-worklet-referrer.https.html": [ + [ + "/worklets/audio-worklet-referrer.https.html", + {} + ] + ], + "worklets/audio-worklet-service-worker-interception.https.html": [ + [ + "/worklets/audio-worklet-service-worker-interception.https.html", + {} + ] + ], "worklets/idlharness.worker.js": [ [ "/worklets/idlharness.worker.html", @@ -423588,6 +426637,20 @@ {} ] ], + "webdriver/tests/get_element_css_value/get.py": [ + [ + "/webdriver/tests/get_element_css_value/get.py", + {} + ] + ], + "webdriver/tests/get_element_css_value/user_prompts.py": [ + [ + "/webdriver/tests/get_element_css_value/user_prompts.py", + { + "timeout": "long" + } + ] + ], "webdriver/tests/get_element_property/get.py": [ [ "/webdriver/tests/get_element_property/get.py", @@ -423602,6 +426665,20 @@ } ] ], + "webdriver/tests/get_element_rect/get.py": [ + [ + "/webdriver/tests/get_element_rect/get.py", + {} + ] + ], + "webdriver/tests/get_element_rect/user_prompts.py": [ + [ + "/webdriver/tests/get_element_rect/user_prompts.py", + { + "timeout": "long" + } + ] + ], "webdriver/tests/get_element_tag_name/get.py": [ [ "/webdriver/tests/get_element_tag_name/get.py", @@ -423690,6 +426767,20 @@ } ] ], + "webdriver/tests/is_element_enabled/enabled.py": [ + [ + "/webdriver/tests/is_element_enabled/enabled.py", + {} + ] + ], + "webdriver/tests/is_element_enabled/user_prompts.py": [ + [ + "/webdriver/tests/is_element_enabled/user_prompts.py", + { + "timeout": "long" + } + ] + ], "webdriver/tests/is_element_selected/selected.py": [ [ "/webdriver/tests/is_element_selected/selected.py", @@ -423832,6 +426923,14 @@ {} ] ], + "webdriver/tests/set_timeouts/user_prompts.py": [ + [ + "/webdriver/tests/set_timeouts/user_prompts.py", + { + "timeout": "long" + } + ] + ], "webdriver/tests/set_window_rect/set.py": [ [ "/webdriver/tests/set_window_rect/set.py", @@ -423871,6 +426970,34 @@ "/webdriver/tests/switch_to_window/switch.py", {} ] + ], + "webdriver/tests/take_element_screenshot/screenshot.py": [ + [ + "/webdriver/tests/take_element_screenshot/screenshot.py", + {} + ] + ], + "webdriver/tests/take_element_screenshot/user_prompts.py": [ + [ + "/webdriver/tests/take_element_screenshot/user_prompts.py", + { + "timeout": "long" + } + ] + ], + "webdriver/tests/take_screenshot/screenshot.py": [ + [ + "/webdriver/tests/take_screenshot/screenshot.py", + {} + ] + ], + "webdriver/tests/take_screenshot/user_prompts.py": [ + [ + "/webdriver/tests/take_screenshot/user_prompts.py", + { + "timeout": "long" + } + ] ] } }, @@ -424971,10 +428098,6 @@ "b087a2f9b71f95a461bafc292a896fe5b50622eb", "testharness" ], - "2dcontext/drawing-text-to-the-canvas/2d.text.draw.baseline.alphabetic.html": [ - "f070d0d5b7f3255802df2932716b40de46ec63e7", - "testharness" - ], "2dcontext/drawing-text-to-the-canvas/2d.text.draw.fill.basic-manual.html": [ "5a4be6d371474e3113a6e927f2f950f31c12031c", "manual" @@ -425068,7 +428191,7 @@ "testharness" ], "2dcontext/drawing-text-to-the-canvas/2d.text.measure.advances.html": [ - "0af5a213cd345e099cde8bf981cb4b7cd42b7e8d", + "ed8c04d0ab791b2aba4b58fdc42935fb936f0bc5", "testharness" ], "2dcontext/drawing-text-to-the-canvas/2d.text.measure.baselines.html": [ @@ -425076,7 +428199,7 @@ "testharness" ], "2dcontext/drawing-text-to-the-canvas/2d.text.measure.emHeights.html": [ - "19b939e63b743c74c2505634ed6a6d2a11b30230", + "36087e7b035020c51504f9efddb130fda66f4ebd", "testharness" ], "2dcontext/drawing-text-to-the-canvas/2d.text.measure.fontBoundingBox.html": [ @@ -427651,6 +430774,10 @@ "e2a37b4ed09d1ef25118ffa05f78619642a66c95", "testharness" ], + "2dcontext/text-styles/2d.text.draw.baseline.alphabetic.html": [ + "f070d0d5b7f3255802df2932716b40de46ec63e7", + "testharness" + ], "2dcontext/text-styles/2d.text.draw.baseline.bottom.html": [ "3cff44d7a0c90c8ae01d367b66cbdc426cf86dde", "testharness" @@ -427856,7 +430983,7 @@ "support" ], "2dcontext/tools/name2dir.yaml": [ - "479c171810cf82be78cd25f653a1b25db21f1724", + "40a04057881fe4e2609e7a4f48c37ce52650272d", "support" ], "2dcontext/tools/spec.yaml": [ @@ -427880,7 +431007,7 @@ "support" ], "2dcontext/tools/tests2dtext.yaml": [ - "8490cd4f2b2c1f68d7fa400f8cfd5f651abaf790", + "f89d6d48a4f0e364086414d5869565b9358967c4", "support" ], "2dcontext/transformations/2d.transformation.order.html": [ @@ -434976,7 +438103,7 @@ "support" ], "compat/css-style-declaration-alias-enumeration.html": [ - "4608af9d5fc7d382c0bbb20e513f6f1e318fa11e", + "cdd9cc8eaefb94218118d9e6a74727bf5c716c17", "testharness" ], "compat/green-ref.html": [ @@ -434991,6 +438118,10 @@ "91793af71e741ef6546d1eca37e93338ab2779f7", "testharness" ], + "compat/webkit-appearance.html": [ + "210944522a9a7dd6797d8b01f33c76e19b0b320b", + "testharness" + ], "compat/webkit-background-origin-text-ref.html": [ "d1f183874c09d7984d461e577151008e5b363b2c", "support" @@ -435015,10 +438146,6 @@ "579d88220610e4f2ea7e884018b655cf1c5c8dca", "reftest" ], - "compat/webkit-pseudo-element.html": [ - "8f69477489a8eee76a6b379f07dcbcafda539c5a", - "testharness" - ], "compat/webkit-text-fill-color-currentColor.html": [ "f4912c93450edf03b43b220d205460cc82ef9ba2", "testharness" @@ -455340,23 +458467,59 @@ "support" ], "cookies/http-state/attribute-tests.html": [ - "6e7d5feabb2722d895590cdb66ee552d78a3add7", + "1d2141d38c48d13e0f9da0937920c49f6d88a915", + "testharness" + ], + "cookies/http-state/charset-tests.html": [ + "9d9ef1bb08790ea6fec389325bfcd4607064f98c", + "testharness" + ], + "cookies/http-state/chromium-tests.html": [ + "e5d745e03909d0595a69c9849d1bf39ba15f4e8e", + "testharness" + ], + "cookies/http-state/comma-tests.html": [ + "f71bb8d9610439b26339ea8dc7460ff0ceb7fb85", + "testharness" + ], + "cookies/http-state/domain-tests.html": [ + "85c8cd00a447cbd653869af9922caf858d4b058a", "testharness" ], "cookies/http-state/general-tests.html": [ - "169984de6ac54913a8f7a7598301b3b474e6e2c8", + "1e63043ae1111a7a4791d28d7d1d6675f7e9fefd", + "testharness" + ], + "cookies/http-state/mozilla-tests.html": [ + "01a5645b140282dec33c67e78aa2519037b5b45c", + "testharness" + ], + "cookies/http-state/name-tests.html": [ + "9dd2781f2357c53c59ebdee2c5973d068ecf40e3", + "testharness" + ], + "cookies/http-state/ordering-tests.html": [ + "53cfae452be37c3383501341f912946ce9e8774c", "testharness" ], + "cookies/http-state/path-tests.html": [ + "464f39becd9e6b00e7a90dc89064d160f1e8b789", + "testharness" + ], + "cookies/http-state/resources/all-tests.html.py-str": [ + "37d630fef4fadf1f20289ca64d3f93dd4f5f2404", + "support" + ], "cookies/http-state/resources/cookie-http-state-template.js": [ - "470d46ebc438376788b145a9fde5e41a1e5985d9", + "d737b38c520b83a8f9788b4c625021337fed2f12", "support" ], "cookies/http-state/resources/cookie-setter.py": [ - "0418f4b7630d7520c93850609249eada0e65c2b3", + "758b1429f7233dda535a30be5085a3c01591dabd", "support" ], "cookies/http-state/resources/debugging-single-test.html.py-str": [ - "d34ff872c1df48458118f5ab184ad5395bda4e90", + "40d9809a4bc1815b2603a117554221fa446a7782", "support" ], "cookies/http-state/resources/iframe-content-pushing.js": [ @@ -455799,6 +458962,1354 @@ "7f68322ee2e3710a12f3238ce2af834d1fe15164", "support" ], + "cookies/http-state/resources/test-files/charset0001-expected": [ + "8646afc636624f223fe79296a6d2b49747258d52", + "support" + ], + "cookies/http-state/resources/test-files/charset0001-test": [ + "e89a36dd89ec806738ef8615db4de0fae323cf7b", + "support" + ], + "cookies/http-state/resources/test-files/charset0002-expected": [ + "fc7d2561017e86fde51bc774ce0bc07d1184e0f6", + "support" + ], + "cookies/http-state/resources/test-files/charset0002-test": [ + "70ce472afa608b17e8830e6b76dd3e76f0af04d9", + "support" + ], + "cookies/http-state/resources/test-files/charset0003-expected": [ + "1969bc86b97615eaeaeaa05705f556fb730cd679", + "support" + ], + "cookies/http-state/resources/test-files/charset0003-test": [ + "446e2fd29f211471cd7b090fc9660b013f030d02", + "support" + ], + "cookies/http-state/resources/test-files/charset0004-expected": [ + "1d6d952989ef943a37f92b0403024bc2802e0842", + "support" + ], + "cookies/http-state/resources/test-files/charset0004-test": [ + "1564ba4fc921f2ec9f6686e90a91c2468f351ab0", + "support" + ], + "cookies/http-state/resources/test-files/chromium0001-expected": [ + "1022f64a2906dd854109026bbc6c3d286a5a5283", + "support" + ], + "cookies/http-state/resources/test-files/chromium0001-test": [ + "4635f0e7e378a507384407cbf93197933b1f7775", + "support" + ], + "cookies/http-state/resources/test-files/chromium0002-expected": [ + "64932dcffb4fe41532ab9d10ceedb4ce9ad26ad8", + "support" + ], + "cookies/http-state/resources/test-files/chromium0002-test": [ + "24ab0d2da56451e882799e04a629c29997e0d0d7", + "support" + ], + "cookies/http-state/resources/test-files/chromium0003-expected": [ + "64932dcffb4fe41532ab9d10ceedb4ce9ad26ad8", + "support" + ], + "cookies/http-state/resources/test-files/chromium0003-test": [ + "bac41f9928847c9d93bb08710572f5b4f0d967c8", + "support" + ], + "cookies/http-state/resources/test-files/chromium0004-expected": [ + "9be3e8f6435f85b7751dc6f49a3c68e18d234511", + "support" + ], + "cookies/http-state/resources/test-files/chromium0004-test": [ + "45cab2f409daada7d1a4b34b64741b98258284c8", + "support" + ], + "cookies/http-state/resources/test-files/chromium0005-expected": [ + "9be3e8f6435f85b7751dc6f49a3c68e18d234511", + "support" + ], + "cookies/http-state/resources/test-files/chromium0005-test": [ + "c2dfebd3c4431774f06cdaaf3292d7a5f6742471", + "support" + ], + "cookies/http-state/resources/test-files/chromium0006-expected": [ + "8121145c18bf7aafcb53af2a18e13f0176c871b7", + "support" + ], + "cookies/http-state/resources/test-files/chromium0006-test": [ + "a9da26811a4ed6a05f64b0625060076984e60670", + "support" + ], + "cookies/http-state/resources/test-files/chromium0007-expected": [ + "8121145c18bf7aafcb53af2a18e13f0176c871b7", + "support" + ], + "cookies/http-state/resources/test-files/chromium0007-test": [ + "dca20b8e7df62c2a5423c5860823a6714c6fa1ab", + "support" + ], + "cookies/http-state/resources/test-files/chromium0008-expected": [ + "602c0e017c4f477bc26f449f124c807d4461b7f0", + "support" + ], + "cookies/http-state/resources/test-files/chromium0008-test": [ + "ece6c66f0b1169a705a55556ff8c2799427cebb0", + "support" + ], + "cookies/http-state/resources/test-files/chromium0009-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/chromium0009-test": [ + "eecdae60cc4cea7dd7213bb23b81a9f022bbd6eb", + "support" + ], + "cookies/http-state/resources/test-files/chromium0010-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/chromium0010-test": [ + "17a18ea9272814a1f036d9f927e2380d5218f51b", + "support" + ], + "cookies/http-state/resources/test-files/chromium0011-expected": [ + "2062e2315564cd319d99f1b103555a9c6018ea0d", + "support" + ], + "cookies/http-state/resources/test-files/chromium0011-test": [ + "4000f269a495455b2f4f00925eb927759e3c9b6a", + "support" + ], + "cookies/http-state/resources/test-files/chromium0012-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/chromium0012-test": [ + "b33a4e7427b99a689c4d1bade576df7c7246c2ab", + "support" + ], + "cookies/http-state/resources/test-files/chromium0013-expected": [ + "5d2d06092c4fec724b7a1c257ca026b953066ea1", + "support" + ], + "cookies/http-state/resources/test-files/chromium0013-test": [ + "f61a087bb8fd7ef9c84329f86be8b21fb3972f04", + "support" + ], + "cookies/http-state/resources/test-files/chromium0014-expected": [ + "21bfd134e54a3b488793fe8e0c159c0f27f1a687", + "support" + ], + "cookies/http-state/resources/test-files/chromium0014-test": [ + "edbb7931a38048004ed83d9682c737a98d64c752", + "support" + ], + "cookies/http-state/resources/test-files/chromium0015-expected": [ + "b968e7427a0711ddd3c85dee8480487ade9cf038", + "support" + ], + "cookies/http-state/resources/test-files/chromium0015-test": [ + "80d32366b5d9ed794b812ed2bfafabeba75c5b25", + "support" + ], + "cookies/http-state/resources/test-files/chromium0016-expected": [ + "11d8efaea2aca277e07a2030cb646cdbe09b6851", + "support" + ], + "cookies/http-state/resources/test-files/chromium0016-test": [ + "8abf12026c7ec2932f0a967501a4063968554d88", + "support" + ], + "cookies/http-state/resources/test-files/chromium0017-expected": [ + "6bb84483a05f5697a7d4aed4cbb7a68161114207", + "support" + ], + "cookies/http-state/resources/test-files/chromium0017-test": [ + "94cce02078bec0a3b37809e7e04e0a99e03549cf", + "support" + ], + "cookies/http-state/resources/test-files/chromium0018-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/chromium0018-test": [ + "145ad2c5defddcd9a19f7f44b07e302bce643635", + "support" + ], + "cookies/http-state/resources/test-files/chromium0019-expected": [ + "b6df50eef282f6e6bf501259b913f35284f0f323", + "support" + ], + "cookies/http-state/resources/test-files/chromium0019-test": [ + "e3bcc4a18c3da79b304ab738f445de1e1ef11732", + "support" + ], + "cookies/http-state/resources/test-files/chromium0021-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/chromium0021-test": [ + "145ad2c5defddcd9a19f7f44b07e302bce643635", + "support" + ], + "cookies/http-state/resources/test-files/comma0001-expected": [ + "ab55cea018a3ced1b77c914e7a1c8e7872a9ab0f", + "support" + ], + "cookies/http-state/resources/test-files/comma0001-test": [ + "5b3678de3966c455497af5034c66a68e95d6f83e", + "support" + ], + "cookies/http-state/resources/test-files/comma0002-expected": [ + "33590a084863fe7216fe1ea0f1ce7e98672de339", + "support" + ], + "cookies/http-state/resources/test-files/comma0002-test": [ + "164c0a93bfcdba58d3a84ec7c816b7ba2edc1806", + "support" + ], + "cookies/http-state/resources/test-files/comma0003-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/comma0003-test": [ + "213d3a5f2675e83f1a5256cd9a66e56efc7da959", + "support" + ], + "cookies/http-state/resources/test-files/comma0004-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/comma0004-test": [ + "e93f6f4062c9cacd56b40abbe88783783943a478", + "support" + ], + "cookies/http-state/resources/test-files/comma0005-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/comma0005-test": [ + "eeb040d0a31acfe14ee7db331968ba3d1d8df75f", + "support" + ], + "cookies/http-state/resources/test-files/comma0006-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/comma0006-test": [ + "a3eaff03ba38303a243a964f2e3bfbeb53533a92", + "support" + ], + "cookies/http-state/resources/test-files/comma0007-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/comma0007-test": [ + "29fb0a2695d4fb71115ac1fc6a220216243f8dec", + "support" + ], + "cookies/http-state/resources/test-files/disabled-chromium0020-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/disabled-chromium0020-test": [ + "67cefa339efce135a669e4b69cd98e867ed5b47c", + "support" + ], + "cookies/http-state/resources/test-files/disabled-chromium0022-expected": [ + "8ac13216032b9cafd3efede3d47b9f9747047759", + "support" + ], + "cookies/http-state/resources/test-files/disabled-chromium0022-test": [ + "1a8f35ffbd849ebd836c4b41a97a9f6fa4113d4b", + "support" + ], + "cookies/http-state/resources/test-files/disabled-chromium0023-expected": [ + "8ac13216032b9cafd3efede3d47b9f9747047759", + "support" + ], + "cookies/http-state/resources/test-files/disabled-chromium0023-test": [ + "76a8ed4e9b8725200a3e282eeac1062ce3b9c570", + "support" + ], + "cookies/http-state/resources/test-files/disabled-path0029-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/disabled-path0029-test": [ + "d7219d590c6f13b8ef8aef2e5951cadab16ff17e", + "support" + ], + "cookies/http-state/resources/test-files/domain0001-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/domain0001-test": [ + "fd8926d7b4fc22c84aa0bb247e3e50632ef71ff3", + "support" + ], + "cookies/http-state/resources/test-files/domain0002-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/domain0002-test": [ + "a6ad2a80856c6eca623560ce640ee47ecc3777da", + "support" + ], + "cookies/http-state/resources/test-files/domain0003-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/domain0003-test": [ + "ff051f4806c94b1e45dd58dab8f819965b4bd74c", + "support" + ], + "cookies/http-state/resources/test-files/domain0004-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/domain0004-test": [ + "f05029bb5a74f2d2b982ff5abf88c3a38e1200b6", + "support" + ], + "cookies/http-state/resources/test-files/domain0005-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/domain0005-test": [ + "697ab186fcde49bf34cf169db27ae8d0ae4927f2", + "support" + ], + "cookies/http-state/resources/test-files/domain0006-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/domain0006-test": [ + "fe5f90df9dc00b989a4456700677573bbb6aebe4", + "support" + ], + "cookies/http-state/resources/test-files/domain0007-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/domain0007-test": [ + "1d2c6fcec6270b002960a719cdff5db8a549d675", + "support" + ], + "cookies/http-state/resources/test-files/domain0008-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/domain0008-test": [ + "491c52de9da50c6f668007c0e6a367d049b3c019", + "support" + ], + "cookies/http-state/resources/test-files/domain0009-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/domain0009-test": [ + "736e69fe8e5a8498c1f69fd504358c18913ab8e5", + "support" + ], + "cookies/http-state/resources/test-files/domain0010-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/domain0010-test": [ + "5bf212f27d8e6312cad86941177a4d5e53a5eff1", + "support" + ], + "cookies/http-state/resources/test-files/domain0011-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/domain0011-test": [ + "e1c54db25eda8ba96a7adfd40ea316e1bff4aa85", + "support" + ], + "cookies/http-state/resources/test-files/domain0012-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/domain0012-test": [ + "a189f38087a66eefba14ad25b86d6e9135f53ef6", + "support" + ], + "cookies/http-state/resources/test-files/domain0013-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/domain0013-test": [ + "8493146e767a9f57eb6ad29a8be2cbd19ca956d7", + "support" + ], + "cookies/http-state/resources/test-files/domain0014-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/domain0014-test": [ + "adccd0d3205c71ec3c6b4e8810f80595cff26033", + "support" + ], + "cookies/http-state/resources/test-files/domain0015-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/domain0015-test": [ + "c123ba940d31f5e01322579ddd7473b72d9844a6", + "support" + ], + "cookies/http-state/resources/test-files/domain0016-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/domain0016-test": [ + "9136ac4d86a80bef4ad4b461d36b9b5a8704911d", + "support" + ], + "cookies/http-state/resources/test-files/domain0017-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/domain0017-test": [ + "8e876b8d687072ffb127d6e89b725076b41c38c6", + "support" + ], + "cookies/http-state/resources/test-files/domain0018-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/domain0018-test": [ + "3763f9625ef867ad4218de70b5ea06ecae87d0e4", + "support" + ], + "cookies/http-state/resources/test-files/domain0019-expected": [ + "1f359c4850bae230784cda7633e3db91ff0f0ee0", + "support" + ], + "cookies/http-state/resources/test-files/domain0019-test": [ + "f5aebfd0e10e1b4d39740d1cec7d98a6a757fd7c", + "support" + ], + "cookies/http-state/resources/test-files/domain0020-expected": [ + "5eb3ac42d41ac5d9e78a50c6f9f6065651cddac6", + "support" + ], + "cookies/http-state/resources/test-files/domain0020-test": [ + "1c7a61c85f6ed7d652b42c3ed23980648bf081ea", + "support" + ], + "cookies/http-state/resources/test-files/domain0021-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/domain0021-test": [ + "895744eac5da0a574381b8be74ad96298cc47567", + "support" + ], + "cookies/http-state/resources/test-files/domain0022-expected": [ + "1f359c4850bae230784cda7633e3db91ff0f0ee0", + "support" + ], + "cookies/http-state/resources/test-files/domain0022-test": [ + "6eeae00159fa2c7350427da96ffbb7b7a46ae7a4", + "support" + ], + "cookies/http-state/resources/test-files/domain0023-expected": [ + "5eb3ac42d41ac5d9e78a50c6f9f6065651cddac6", + "support" + ], + "cookies/http-state/resources/test-files/domain0023-test": [ + "91a81ed003c55f597dbd15ad7cacc44e22215a67", + "support" + ], + "cookies/http-state/resources/test-files/domain0024-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/domain0024-test": [ + "63157b9b4575bc24f424c07ce3b721a8c16ab328", + "support" + ], + "cookies/http-state/resources/test-files/domain0025-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/domain0025-test": [ + "353c3bb63461a3599b1c630fada4b3b9173136f2", + "support" + ], + "cookies/http-state/resources/test-files/domain0026-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/domain0026-test": [ + "3b14e3075468947ccd7ac5af4aba7c49b8725f78", + "support" + ], + "cookies/http-state/resources/test-files/domain0027-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/domain0027-test": [ + "8b7adbd17a17717b7987be1bbc5756dd75050e0d", + "support" + ], + "cookies/http-state/resources/test-files/domain0028-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/domain0028-test": [ + "ab8f2c401ebefc02538ec906ec53ee9e29d4ce65", + "support" + ], + "cookies/http-state/resources/test-files/domain0029-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/domain0029-test": [ + "cfab57a6e497b65866525e7adbc58c27418288ba", + "support" + ], + "cookies/http-state/resources/test-files/domain0031-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/domain0031-test": [ + "6eccb78b8b83ff1d10c1c54ff3f64d87095d63e1", + "support" + ], + "cookies/http-state/resources/test-files/domain0033-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/domain0033-test": [ + "7fdcc8356a11456b095e7dcf230373c665b399e1", + "support" + ], + "cookies/http-state/resources/test-files/domain0034-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/domain0034-test": [ + "d3f4723fd08ee9502047190ece283fd5f173b78e", + "support" + ], + "cookies/http-state/resources/test-files/domain0035-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/domain0035-test": [ + "967d248c25663a97f3f824c5f6b792abee88b28c", + "support" + ], + "cookies/http-state/resources/test-files/domain0036-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/domain0036-test": [ + "a618ec4dd203bb73d32ccf357aadcd96d93271e9", + "support" + ], + "cookies/http-state/resources/test-files/domain0037-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/domain0037-test": [ + "c61fe8f27629bd8dbefa8c69252ebca22d6bca76", + "support" + ], + "cookies/http-state/resources/test-files/domain0038-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/domain0038-test": [ + "2d8fcca573141f8a08cc94f40d03fe1bef615467", + "support" + ], + "cookies/http-state/resources/test-files/domain0039-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/domain0039-test": [ + "3225b28baacb8ebce7bbdb1a437da7b3ea4c7fa5", + "support" + ], + "cookies/http-state/resources/test-files/domain0040-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/domain0040-test": [ + "3e32fa895c357326a566bbb2643069a09ec29f38", + "support" + ], + "cookies/http-state/resources/test-files/domain0041-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/domain0041-test": [ + "6fbc4ad1141721adacaaaafac1083f7d68552aff", + "support" + ], + "cookies/http-state/resources/test-files/domain0042-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/domain0042-test": [ + "9258624cc56f45f386609c7244e27847e15673ce", + "support" + ], + "cookies/http-state/resources/test-files/mozilla0001-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/mozilla0001-test": [ + "53f98e23b2a8f4f922dd379e9088851bf91d386c", + "support" + ], + "cookies/http-state/resources/test-files/mozilla0002-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/mozilla0002-test": [ + "a79c5be41f4097f08586ae1418dff94c1bab5530", + "support" + ], + "cookies/http-state/resources/test-files/mozilla0003-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/mozilla0003-test": [ + "785c326fae4353fe09ebebb52a13643ec9b887e7", + "support" + ], + "cookies/http-state/resources/test-files/mozilla0004-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/mozilla0004-test": [ + "567134f5d3ab9f9abe16203693a08bc6f7935c5d", + "support" + ], + "cookies/http-state/resources/test-files/mozilla0005-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/mozilla0005-test": [ + "0fa350adc36062b61daf8a4e07b7e0c76849bc13", + "support" + ], + "cookies/http-state/resources/test-files/mozilla0006-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/mozilla0006-test": [ + "567134f5d3ab9f9abe16203693a08bc6f7935c5d", + "support" + ], + "cookies/http-state/resources/test-files/mozilla0007-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/mozilla0007-test": [ + "785c326fae4353fe09ebebb52a13643ec9b887e7", + "support" + ], + "cookies/http-state/resources/test-files/mozilla0008-expected": [ + "0f62babd8b06933069cb30ae6f44d54b73c8c534", + "support" + ], + "cookies/http-state/resources/test-files/mozilla0008-test": [ + "d6350d6c7b52c5c716342593fb6b94b0907ee795", + "support" + ], + "cookies/http-state/resources/test-files/mozilla0009-expected": [ + "555fbaf54711a5d25d5a27fc2d5c776e1da09963", + "support" + ], + "cookies/http-state/resources/test-files/mozilla0009-test": [ + "84944d4d50b6e492ccd12bae964920159badeaca", + "support" + ], + "cookies/http-state/resources/test-files/mozilla0010-expected": [ + "555fbaf54711a5d25d5a27fc2d5c776e1da09963", + "support" + ], + "cookies/http-state/resources/test-files/mozilla0010-test": [ + "13477a47c26834f0689da05cb7db3fa14b07ae48", + "support" + ], + "cookies/http-state/resources/test-files/mozilla0011-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/mozilla0011-test": [ + "bba20536edd738acdc0d7fa8e5f0cf30050c961f", + "support" + ], + "cookies/http-state/resources/test-files/mozilla0012-expected": [ + "10e669a013455bde2ae2778d138b08904764c3d9", + "support" + ], + "cookies/http-state/resources/test-files/mozilla0012-test": [ + "9ba773f5c7457f790262d36674a8c2fd401edaf5", + "support" + ], + "cookies/http-state/resources/test-files/mozilla0013-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/mozilla0013-test": [ + "d491267e4aa7e0f6d96b8d22de326128d0861d2d", + "support" + ], + "cookies/http-state/resources/test-files/mozilla0014-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/mozilla0014-test": [ + "4cc1f45075607181db5c693b89ffe81dbc83de21", + "support" + ], + "cookies/http-state/resources/test-files/mozilla0015-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/mozilla0015-test": [ + "13254db6886be51c92ca8a3e2fd4149fb419d425", + "support" + ], + "cookies/http-state/resources/test-files/mozilla0016-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/mozilla0016-test": [ + "6aab3e80d6f85043e69a2f4aae633a7e56a92288", + "support" + ], + "cookies/http-state/resources/test-files/mozilla0017-expected": [ + "fc9a2496c60e5c1d132f3ea17dee95e92d1d010a", + "support" + ], + "cookies/http-state/resources/test-files/mozilla0017-test": [ + "b6c297cc77ddef6c4b0eae5c94a07d0827de89c7", + "support" + ], + "cookies/http-state/resources/test-files/name0001-expected": [ + "96527926e107477e66ab0386dea671d8973de695", + "support" + ], + "cookies/http-state/resources/test-files/name0001-test": [ + "3ce5f5f9824b95711aa93a82c45e39250aa225ed", + "support" + ], + "cookies/http-state/resources/test-files/name0002-expected": [ + "d4d3cda811bd744d741d883675d789e124c32449", + "support" + ], + "cookies/http-state/resources/test-files/name0002-test": [ + "d6eac8a757af54e177a04bf7d3b15e14080cdc5a", + "support" + ], + "cookies/http-state/resources/test-files/name0003-expected": [ + "0c00f45c4a479545f1272b6c7d3312f7b48d658a", + "support" + ], + "cookies/http-state/resources/test-files/name0003-test": [ + "7ea96155bd7752a8abffb7a85093fdd3fa19fc93", + "support" + ], + "cookies/http-state/resources/test-files/name0004-expected": [ + "b079529aa249748cdf1ada8ce4b99d12952745a7", + "support" + ], + "cookies/http-state/resources/test-files/name0004-test": [ + "99f0e61801a92ddc2034fec94fc61b02f1b2baf1", + "support" + ], + "cookies/http-state/resources/test-files/name0005-expected": [ + "a0f031bb34ed2284c99cab25c4864f7e55af6522", + "support" + ], + "cookies/http-state/resources/test-files/name0005-test": [ + "9e33e0c8e476c24b698b7c8061ea42a585b9ed73", + "support" + ], + "cookies/http-state/resources/test-files/name0006-expected": [ + "ee0e7d7c335d08c78793167fd581458b15e6a3ec", + "support" + ], + "cookies/http-state/resources/test-files/name0006-test": [ + "fbd03632c61b3df902d75dd8f11dcde5a7cf8634", + "support" + ], + "cookies/http-state/resources/test-files/name0007-expected": [ + "6d6e56ebe59b54fc030d7c88c72a142d1e5f7486", + "support" + ], + "cookies/http-state/resources/test-files/name0007-test": [ + "d41e64b87ec3d1e45cf0a9020c2a093063f8844f", + "support" + ], + "cookies/http-state/resources/test-files/name0008-expected": [ + "a4b8c2428258033c534e7ff05ac967dbe24ed9e9", + "support" + ], + "cookies/http-state/resources/test-files/name0008-test": [ + "7afcf700376b02f3a38c12752b0067cc66f3e190", + "support" + ], + "cookies/http-state/resources/test-files/name0009-expected": [ + "49506acc24893411e24dd9c63ed25f2b5945052d", + "support" + ], + "cookies/http-state/resources/test-files/name0009-test": [ + "f40d2c4d6b9e06be56505acb73594718724e5254", + "support" + ], + "cookies/http-state/resources/test-files/name0010-expected": [ + "1e72557892b01144f0cd3051a9a079fcc2253e46", + "support" + ], + "cookies/http-state/resources/test-files/name0010-test": [ + "fb4fd921be31471edd70aa0399c011aea48ee36d", + "support" + ], + "cookies/http-state/resources/test-files/name0011-expected": [ + "260d7028a0195e1c93da4cb10cac211016856e60", + "support" + ], + "cookies/http-state/resources/test-files/name0011-test": [ + "b36b72388f2b3dc6480dd798f57d8ed5624b5ae4", + "support" + ], + "cookies/http-state/resources/test-files/name0012-expected": [ + "0a2686a15257f03f02af93c39d410cc070e408fd", + "support" + ], + "cookies/http-state/resources/test-files/name0012-test": [ + "6927aac6fa061ad0e0be4f13f4d7c686602aef25", + "support" + ], + "cookies/http-state/resources/test-files/name0013-expected": [ + "87dec78b62265dd3dfd115e68ce526aef5213353", + "support" + ], + "cookies/http-state/resources/test-files/name0013-test": [ + "59ada98321c69945673b94c2504f81408224325b", + "support" + ], + "cookies/http-state/resources/test-files/name0014-expected": [ + "82bfe0e60acd0c9194bbbb5c33a0a4e95686d5fa", + "support" + ], + "cookies/http-state/resources/test-files/name0014-test": [ + "a113e99be5e27dd6186d247d5f1fe0f197f1349f", + "support" + ], + "cookies/http-state/resources/test-files/name0015-expected": [ + "390b77b30c40d33180bbe2026b052dadd44af527", + "support" + ], + "cookies/http-state/resources/test-files/name0015-test": [ + "60fc0746ba258f0b2ea7d20e32625d70f1ea481b", + "support" + ], + "cookies/http-state/resources/test-files/name0016-expected": [ + "7d4d9e330792bf536a304785940f865d9cd20aa3", + "support" + ], + "cookies/http-state/resources/test-files/name0016-test": [ + "371dbcde6cab2545f54b15d3f797936d39fae3d3", + "support" + ], + "cookies/http-state/resources/test-files/name0017-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/name0017-test": [ + "056143166bd1c31df501c74d13425656a744884c", + "support" + ], + "cookies/http-state/resources/test-files/name0018-expected": [ + "96527926e107477e66ab0386dea671d8973de695", + "support" + ], + "cookies/http-state/resources/test-files/name0018-test": [ + "e86a48360cf5735c3b0389d0f2d2507ec6c44b43", + "support" + ], + "cookies/http-state/resources/test-files/name0019-expected": [ + "8d0bc2d07d699558f0dc68690af76bd9b7f4e430", + "support" + ], + "cookies/http-state/resources/test-files/name0019-test": [ + "d48e3f6954a690c35628e3665fa329a67fb76452", + "support" + ], + "cookies/http-state/resources/test-files/name0020-expected": [ + "aa9cd6d435cfdb9bd2180bd163e1f1503e6deca0", + "support" + ], + "cookies/http-state/resources/test-files/name0020-test": [ + "b84f64d17981f59c5b1e557ba33362e38594e8b8", + "support" + ], + "cookies/http-state/resources/test-files/name0021-expected": [ + "206ff76e3e324b0c652024962dce34dd7e4dcf93", + "support" + ], + "cookies/http-state/resources/test-files/name0021-test": [ + "56b319e9d491dc99a1434b157803249fe7b4acbb", + "support" + ], + "cookies/http-state/resources/test-files/name0022-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/name0022-test": [ + "cc59ff17edabb8466b416dda9b4ed3c2f42a0b80", + "support" + ], + "cookies/http-state/resources/test-files/name0023-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/name0023-test": [ + "b7f9cc257d20fbc98b5c12125ee9dde8e4ae9436", + "support" + ], + "cookies/http-state/resources/test-files/name0024-expected": [ + "5ac4f2535c81810f380414f3e72ac8d35bfa76b7", + "support" + ], + "cookies/http-state/resources/test-files/name0024-test": [ + "da7b696da9129d5762468c0ba2b98d30974664ee", + "support" + ], + "cookies/http-state/resources/test-files/name0025-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/name0025-test": [ + "708f006b9c0777592199ec0e8b333f44894e90fb", + "support" + ], + "cookies/http-state/resources/test-files/name0026-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/name0026-test": [ + "bbeb77a029c18442c90d81cd96a3b1eb1aa72170", + "support" + ], + "cookies/http-state/resources/test-files/name0027-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/name0027-test": [ + "d222227e6de7ded31c0be0e212f4611035c7ba79", + "support" + ], + "cookies/http-state/resources/test-files/name0028-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/name0028-test": [ + "1c197e3324c87aa5364224ecaf029dbf5ae0a7a4", + "support" + ], + "cookies/http-state/resources/test-files/name0029-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/name0029-test": [ + "44212468d449cf18fac8987c1f0ba4127e1483ee", + "support" + ], + "cookies/http-state/resources/test-files/name0030-expected": [ + "a391380fb666180af1950103f50f584207c75138", + "support" + ], + "cookies/http-state/resources/test-files/name0030-test": [ + "cf3ff160f451ac4f53a847942df1b7a3f29861eb", + "support" + ], + "cookies/http-state/resources/test-files/name0031-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/name0031-test": [ + "9394184904027da428e718414c5ce19d0c17a6c1", + "support" + ], + "cookies/http-state/resources/test-files/name0032-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/name0032-test": [ + "93fc9752333920c9b70236d7e53dd82199404811", + "support" + ], + "cookies/http-state/resources/test-files/name0033-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/name0033-test": [ + "7bbdd89566a0a01d97df5d16b34a9822abeed6e9", + "support" + ], + "cookies/http-state/resources/test-files/optional-domain0030-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/optional-domain0030-test": [ + "3ab75aa3a07894934f9df01f448dee383a629acb", + "support" + ], + "cookies/http-state/resources/test-files/optional-domain0041-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/optional-domain0041-test": [ + "b85a6c9e43cbed1899cff10c6ca53916176d98db", + "support" + ], + "cookies/http-state/resources/test-files/optional-domain0042-expected": [ + "8b137891791fe96927ad78e64b0aad7bded08bdc", + "support" + ], + "cookies/http-state/resources/test-files/optional-domain0042-test": [ + "524d192b6e7e3a4ef89669267f0451ab0066d18c", + "support" + ], + "cookies/http-state/resources/test-files/optional-domain0043-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/optional-domain0043-test": [ + "506cdc46e521578b6c6ba491b499779bf05f55fc", + "support" + ], + "cookies/http-state/resources/test-files/ordering0001-expected": [ + "3d819593f5365165bfa02550e48084f37c81c33f", + "support" + ], + "cookies/http-state/resources/test-files/ordering0001-test": [ + "ba6e85c44cdea2aa269ef170fe2d3a4c3a14e1ce", + "support" + ], + "cookies/http-state/resources/test-files/path0001-expected": [ + "785d0a2f5f78a5bbf63c3b00c530cc60262598a5", + "support" + ], + "cookies/http-state/resources/test-files/path0001-test": [ + "ed81cb955f7950fd77566362f7f8af6814b66653", + "support" + ], + "cookies/http-state/resources/test-files/path0002-expected": [ + "2314ba0d4959934a91914ba987571706a5c9aacc", + "support" + ], + "cookies/http-state/resources/test-files/path0002-test": [ + "224932851853336d065676fc736076da634d9fd3", + "support" + ], + "cookies/http-state/resources/test-files/path0003-expected": [ + "2314ba0d4959934a91914ba987571706a5c9aacc", + "support" + ], + "cookies/http-state/resources/test-files/path0003-test": [ + "e4b5a4b256507b53e1c31a9a20f7e9f345dabee2", + "support" + ], + "cookies/http-state/resources/test-files/path0004-expected": [ + "785d0a2f5f78a5bbf63c3b00c530cc60262598a5", + "support" + ], + "cookies/http-state/resources/test-files/path0004-test": [ + "a80ea6ec01587765bfdb02381887052568091c65", + "support" + ], + "cookies/http-state/resources/test-files/path0005-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/path0005-test": [ + "6447c9164f9cfdb0a6fc8f65169a74221a779e94", + "support" + ], + "cookies/http-state/resources/test-files/path0006-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/path0006-test": [ + "07ecf27b82b009bdd73e37f68f48732cb106655b", + "support" + ], + "cookies/http-state/resources/test-files/path0007-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/path0007-test": [ + "66a54de7420a6e0dadb5bd8400b25b3455eb5be1", + "support" + ], + "cookies/http-state/resources/test-files/path0008-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/path0008-test": [ + "b10012d30960832f462b18b01221ffae2a1c5c69", + "support" + ], + "cookies/http-state/resources/test-files/path0009-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/path0009-test": [ + "874f21bad97d24903535b08c524fb2184982e6ea", + "support" + ], + "cookies/http-state/resources/test-files/path0010-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/path0010-test": [ + "0ea62fd5ec5384c3d97a4908eff138c0a5befe99", + "support" + ], + "cookies/http-state/resources/test-files/path0011-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/path0011-test": [ + "35ea0620495bb1f12f2df12c7eda5e545bbac41c", + "support" + ], + "cookies/http-state/resources/test-files/path0012-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/path0012-test": [ + "4c0577897bd90ba6b2c9c0bf37fa83e6265ae5c4", + "support" + ], + "cookies/http-state/resources/test-files/path0013-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/path0013-test": [ + "d17b99b6b4365aae60f4aba2904e371a08a57e70", + "support" + ], + "cookies/http-state/resources/test-files/path0014-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/path0014-test": [ + "a953e707b3b22b9b708b89f8e9ec36a2f807544c", + "support" + ], + "cookies/http-state/resources/test-files/path0015-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/path0015-test": [ + "253a9bb2fcdd16aabbe3e4fdedf49ae2e4371f7d", + "support" + ], + "cookies/http-state/resources/test-files/path0016-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/path0016-test": [ + "433faeb9120496a97b7b6e703b2c92280824a79d", + "support" + ], + "cookies/http-state/resources/test-files/path0017-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/path0017-test": [ + "a602d7ca6fe9199ce50b6fc380a76bda5d348ca9", + "support" + ], + "cookies/http-state/resources/test-files/path0018-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/path0018-test": [ + "37040dac5d32aef12ad7bd4b1facda7789f70b4e", + "support" + ], + "cookies/http-state/resources/test-files/path0019-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/path0019-test": [ + "6d498600a2f4ea0268cb4af4a238b315940c0768", + "support" + ], + "cookies/http-state/resources/test-files/path0020-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/path0020-test": [ + "603eded7ebd2198e5664d7c18e24540148c70526", + "support" + ], + "cookies/http-state/resources/test-files/path0021-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/path0021-test": [ + "4577c510a42d8d118ca53d9b67e4176dae960e44", + "support" + ], + "cookies/http-state/resources/test-files/path0022-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/path0022-test": [ + "4aade9e0145d5e71acea9ff937f65efbcfa4f970", + "support" + ], + "cookies/http-state/resources/test-files/path0023-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/path0023-test": [ + "f14d683df977e47efa74bd6941e9d9d7452e6bea", + "support" + ], + "cookies/http-state/resources/test-files/path0024-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/path0024-test": [ + "18a71c875b4adf92c91ad5bb538d6135fd1667a7", + "support" + ], + "cookies/http-state/resources/test-files/path0025-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/path0025-test": [ + "b6c497b97158481e5da1a5b08f4cd2aa393b7e16", + "support" + ], + "cookies/http-state/resources/test-files/path0026-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/path0026-test": [ + "ffc3b7a54fa34bdc163267fa86b3ebd3ca3cfc45", + "support" + ], + "cookies/http-state/resources/test-files/path0027-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/path0027-test": [ + "bd021f33e2c0819a8afd2c9eb9279e8e067ecf6e", + "support" + ], + "cookies/http-state/resources/test-files/path0028-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/path0028-test": [ + "3bcd6a5c657b3c39225d0d566717ac5aeddfa153", + "support" + ], + "cookies/http-state/resources/test-files/path0029-expected": [ + "1022f64a2906dd854109026bbc6c3d286a5a5283", + "support" + ], + "cookies/http-state/resources/test-files/path0029-test": [ + "17bd42f4212539fea41d5d402a23115bb26b1127", + "support" + ], + "cookies/http-state/resources/test-files/path0030-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/path0030-test": [ + "e17a2d490b7871eb1d46d69d4dcafa19248c8100", + "support" + ], + "cookies/http-state/resources/test-files/path0031-expected": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "cookies/http-state/resources/test-files/path0031-test": [ + "3b24090b33841dd5b0ef6a3ce9770a1bdbe3dc86", + "support" + ], + "cookies/http-state/resources/test-files/path0032-expected": [ + "e7403c4aadce372524b3ba71e480db4b6d28aa61", + "support" + ], + "cookies/http-state/resources/test-files/path0032-test": [ + "db6ceb2ea0678332b9d9a9854463680f89f86e6b", + "support" + ], + "cookies/http-state/resources/test-files/value0001-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/value0001-test": [ + "38b7dd296e613e2d659a7516f56ea6e00e80a507", + "support" + ], + "cookies/http-state/resources/test-files/value0002-expected": [ + "9e96a81e3b4f787a158cd20a10e9defee7446948", + "support" + ], + "cookies/http-state/resources/test-files/value0002-test": [ + "bed691f1809cf37eb44c8a1083e9544bf333c03a", + "support" + ], + "cookies/http-state/resources/test-files/value0003-expected": [ + "5cc2d467ef724279da03a2af49535aa58382ee40", + "support" + ], + "cookies/http-state/resources/test-files/value0003-test": [ + "ce1d455201dbef9b08ff18315d2cceef569d0346", + "support" + ], + "cookies/http-state/resources/test-files/value0004-expected": [ + "400030f6f1d38f1833f1d8c960941f842b12a9e8", + "support" + ], + "cookies/http-state/resources/test-files/value0004-test": [ + "c569216520ca270f46741ec3ad0acd20bdd77887", + "support" + ], + "cookies/http-state/resources/test-files/value0005-expected": [ + "cad285f70867f41fdb4e4439d389b1f8171ee6ce", + "support" + ], + "cookies/http-state/resources/test-files/value0005-test": [ + "514c0f125f1f4d9d116d5ccfef3a44998b340869", + "support" + ], + "cookies/http-state/resources/test-files/value0006-expected": [ + "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c", + "support" + ], + "cookies/http-state/resources/test-files/value0006-test": [ + "a939a8229149c1d2311379d1632b47dd184affd8", + "support" + ], + "cookies/http-state/value-tests.html": [ + "cb09034ae8500ecf54294a0f4e58ee3c26af68bb", + "testharness" + ], "cookies/meta-blocked.html": [ "1b86e65c87c65a78a31e0b8a1d6bfdbe333e08f6", "testharness" @@ -455947,10 +460458,6 @@ "1aa8e5e80bbf4319bb3903b228416a994723b4db", "testharness" ], - "cookies/secure/create-cookie-http.html": [ - "425f66fde5cbdc231c0c96b2e2b1d4fb3f9571ba", - "testharness" - ], "cookies/secure/set-from-dom.https.sub.html": [ "46997db18ac738b5c3041e0010c0562db3813616", "testharness" @@ -457223,6 +461730,10 @@ "977f063bcaf6a6f8c013dbd31de597dbacde5e9f", "reftest" ], + "css/CSS2/abspos/static-inside-table-cell.html": [ + "712bfbaf1e8f2d6a7a8fdd8dfa65792770f004e3", + "reftest" + ], "css/CSS2/abspos/table-caption-is-containing-block-001.html": [ "32ac681781c640bfc5bf498361520623197dc7ed", "reftest" @@ -480119,6 +484630,14 @@ "4a3318f1cdc7c7cf3edb8bcab8cfdaef655bf765", "reftest" ], + "css/CSS2/linebox/anonymous-inline-inherit-001-ref.html": [ + "e97da2169d55e5dec9a2888cb534bc7321a1c5e1", + "support" + ], + "css/CSS2/linebox/anonymous-inline-inherit-001.html": [ + "77904d80e459037e029467479db2c101f0d383b8", + "reftest" + ], "css/CSS2/linebox/border-padding-bleed-001-ref.xht": [ "10fe3e08b45a5722b27e2a16bf806b116958d9c2", "support" @@ -481283,6 +485802,14 @@ "6d1d7411b8efb9b04a73cf27fb1d3b0abcff733d", "visual" ], + "css/CSS2/linebox/vertical-align-nested-top-001-ref.html": [ + "1fd155e38013e555c140908310c36b1416ac2ded", + "support" + ], + "css/CSS2/linebox/vertical-align-nested-top-001.html": [ + "3667ced2ca39adfdb1d90fa843ebce6249eecb4e", + "reftest" + ], "css/CSS2/linebox/vertical-align-sub-001-ref.xht": [ "9167843266f8ba8954df276e537100fe0ac42a44", "support" @@ -491851,6 +496378,10 @@ "7e5880b10637e39055b428c3411d86b2c6dc0daa", "reftest" ], + "css/CSS2/positioning/abspos-inline-008.xht": [ + "9233b4373e5e4dc5beb6713a9af1de861c5cf4d9", + "reftest" + ], "css/CSS2/positioning/abspos-overflow-001-ref.xht": [ "ba7e87c6a7c18a9335b51e07052ab47631299c9b", "support" @@ -519967,6 +524498,26 @@ "4d0fc7eccc45e44480b4305632ceac2068c59919", "testharness" ], + "css/css-break/reference/widows-orphans-001-ref.html": [ + "06108ac800c19c68841f2a0e8867fb05e868c1ab", + "support" + ], + "css/css-break/widows-orphans-001.html": [ + "8da27f0b6594fc7ddd90bdb160be8f80a9479038", + "reftest" + ], + "css/css-break/widows-orphans-002.html": [ + "cf9afe7c033438162bcfc15f527f73ae370652b4", + "reftest" + ], + "css/css-break/widows-orphans-003.html": [ + "311148409267e02ccd9b8819883ac05c2e82d407", + "reftest" + ], + "css/css-break/widows-orphans-004.html": [ + "3e226d9e41e42fc79a9a3ac967fc935f68f7e061", + "reftest" + ], "css/css-cascade/META.yml": [ "96467729fe91cef54b0bf5cc82d83e9f2a5c01ed", "support" @@ -521656,7 +526207,7 @@ "support" ], "css/css-contain/reference/contain-style-counters-003-ref.html": [ - "8eb67b5943fa41db2320d51e92277dced3029f6e", + "12f9b989fd2402d5e8af279cd03f03931856270e", "support" ], "css/css-contain/reference/counter-scoping-001-ref.html": [ @@ -523883,6 +528434,18 @@ "8d0683319b0fbbd1262cbdd12cdbcb727b2aa9a0", "support" ], + "css/css-filter/blur-clip-stacking-context-001.html": [ + "a96994a8afe126e474f9ee015338749f0015dc1f", + "reftest" + ], + "css/css-filter/blur-clip-stacking-context-002.html": [ + "0473f12949446da04849386ffea69e7436703010", + "reftest" + ], + "css/css-filter/blur-clip-stacking-context-ref.html": [ + "82b907334fd71791cd2f6530e2e85169e29afa41", + "support" + ], "css/css-filter/filtered-block-is-container-ref.html": [ "fc9467f8717dfc722dcb6dbbbb31bfd8c2baee3b", "support" @@ -535916,11 +540479,11 @@ "testharness" ], "css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-001.html": [ - "b35b16d648da2868808213c2d16ef58c53c500a6", + "79dd1d4350678da4ea99cf9fdf9c965db659a897", "testharness" ], "css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-002.html": [ - "4d0f506c7b6514c1e610f630309c6bf201f59427", + "3232913cb1328c0367f09ca8996b8c22e09cc2e0", "testharness" ], "css/css-grid/alignment/self-baseline/grid-self-baseline-changes-grid-area-size-001.html": [ @@ -538751,6 +543314,14 @@ "2433864333967f26a2354b791cd7b153d26e44f4", "testharness" ], + "css/css-multicol/inline-block-and-column-span-all.html": [ + "c968a0875cd7cc41c3c1dd83abee425ba0e639bb", + "reftest" + ], + "css/css-multicol/intrinsic-size-001.html": [ + "ce8011b17f82407599ea28a2eaf543ec9d45a98b", + "reftest" + ], "css/css-multicol/multicol-basic-001.html": [ "fca3ef47b7e4cbef7dfad8772d1d01cf67e86801", "reftest" @@ -541020,7 +545591,7 @@ "testharness" ], "css/css-properties-values-api/property-cascade.html": [ - "97c1975cf134d45e2317f7400b15c20641d50448", + "5f0b7eb50c21397e0fe2995dd242fa454f78ca7c", "testharness" ], "css/css-properties-values-api/register-property-syntax-parsing.html": [ @@ -541068,15 +545639,15 @@ "support" ], "css/css-properties-values-api/typedom.tentative.html": [ - "69ebf7a13d8cf3d71413259db68336368e5032e7", + "eb2d8549ba61c8e3f5929d9f11e84a6c6ef80079", "testharness" ], "css/css-properties-values-api/unit-cycles.html": [ - "c242640f2b93e7820b9d016b53f5f2279ec18eca", + "b5c996a442984ee8f2b8fd9a61e41bf7d194799a", "testharness" ], "css/css-properties-values-api/url-resolution.html": [ - "6e7c008a58c311aeb18e89edd4dd29e8a3e6c1ed", + "d9327896496a1f170570b132dc7797aaea5e2b1f", "testharness" ], "css/css-properties-values-api/var-reference-registered-properties-cycles.html": [ @@ -568164,7 +572735,7 @@ "testharness" ], "css/cssom/computed-style-set-property.html": [ - "6567852681781fce5edcb078fcf86f9110c4ea1e", + "0a5e4cb0589799e19fe9fc91f134d03e42d73206", "testharness" ], "css/cssom/css-style-attr-decl-block.html": [ @@ -568384,7 +572955,7 @@ "testharness" ], "css/cssom/shorthand-serialization.html": [ - "2178ba37a959fc56537c7cc164d423d14563881f", + "44af6737e3ef3b3c71ccd259b1d75104c4a92061", "testharness" ], "css/cssom/shorthand-values.html": [ @@ -571415,6 +575986,14 @@ "f0c3d93cbea2430a98e1c524910ded94567a70d7", "testharness" ], + "css/selectors/webkit-pseudo-element.html": [ + "8b4adddba8f2797512791421910ded22c00c8be2", + "testharness" + ], + "css/selectors/x-pseudo-element.html": [ + "80ec44f9def9e15162e8cd06c96927d13efb0eaa", + "testharness" + ], "css/support/1x1-green.png": [ "b98ca0ba0a03c580ac339e4a3653539cfa8edc71", "support" @@ -581559,10 +586138,6 @@ "921fa07b3f6de0f9a579b75b14d6509039765205", "testharness" ], - "dom/inert/inert-does-not-match-disabled-selector.html": [ - "74b8ac3f7dd5c3447bf47fd732fade9220497c93", - "testharness" - ], "dom/interface-objects.html": [ "936d63517eada5521f814fabdbd785a57b9640b2", "testharness" @@ -584723,6 +589298,58 @@ "70d8fb73eadb81bdade8e4bdcefe46491cd05b96", "testharness" ], + "encoding/streams/backpressure.any.js": [ + "f17e149ed9e5b949d8b3d6a54b48093232e7da52", + "testharness" + ], + "encoding/streams/decode-bad-chunks.any.js": [ + "101fb3aeb614cf66d82fb33f2c27989de3850061", + "testharness" + ], + "encoding/streams/decode-ignore-bom.any.js": [ + "cbe26d71b13557285040a7e2934010e7195d27ec", + "testharness" + ], + "encoding/streams/decode-incomplete-input.any.js": [ + "80dd016d4918daaa49da5b24efbcead17be03e88", + "testharness" + ], + "encoding/streams/decode-non-utf8.any.js": [ + "7f39cdc04ca76b7071d3321ac068f9216b365002", + "testharness" + ], + "encoding/streams/decode-split-character.any.js": [ + "6c022697da65ea10ee72da38609e8edbf695edab", + "testharness" + ], + "encoding/streams/decode-utf8.any.js": [ + "34fa764bf0a682d1052550b406e8ad8dcec92825", + "testharness" + ], + "encoding/streams/encode-bad-chunks.any.js": [ + "868e34b7342969b20145af44fd1d606499ec9ad1", + "testharness" + ], + "encoding/streams/encode-utf8.any.js": [ + "74d1860e82b18535deb21238217c0e817bb9cc5d", + "testharness" + ], + "encoding/streams/readable-writable-properties.any.js": [ + "ad7cde32f6889200e44ab840d3814f985778026d", + "testharness" + ], + "encoding/streams/realms.window.js": [ + "b1cc13e0b80653161bf0e7c9a99325feab45d5c0", + "testharness" + ], + "encoding/streams/resources/readable-stream-from-array.js": [ + "5c12ba8c8bba60ef52a689abae17d1f1e0bfc458", + "support" + ], + "encoding/streams/resources/readable-stream-to-array.js": [ + "fda03e2264492296d9b26986d15211384a6a8b16", + "support" + ], "encoding/textdecoder-byte-order-marks.any.js": [ "9ef0d73141a0e0ceaafba61cc101986afa32477d", "testharness" @@ -585911,38 +590538,22 @@ "48cb95ebf749d67b4965f5e24f20e36ede749600", "support" ], - "feature-policy/autoplay-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html": [ - "6f11f8995b1e5c1cebd123219f9c8d34d4b108a5", - "testharness" - ], - "feature-policy/autoplay-allowed-by-feature-policy-attribute.https.sub.html": [ - "59b33d7c4d2bd2c712c73ad7ff4e7c1003c244a2", - "testharness" - ], - "feature-policy/autoplay-allowed-by-feature-policy.https.sub.html": [ - "63479c0cb6f8c6c8241cc5c4a33e167b13a3888b", + "feature-policy/experimental-features/document-write.tentative.html": [ + "f0148783f1246b6bd60dabd837c64fc6d903e542", "testharness" ], - "feature-policy/autoplay-allowed-by-feature-policy.https.sub.html.headers": [ - "08461fadc2888cbcdfcda533f2928f14a52ab44e", - "support" - ], - "feature-policy/autoplay-default-feature-policy.https.sub.html": [ - "763073e437d009b99a1d372c19bc1907f97e6776", + "feature-policy/experimental-features/intrinsicSize-with-responsive-images.tentative.https.sub.html": [ + "60bc00ddc3ece7f3bb1c0d6e07ffbe9be735188d", "testharness" ], - "feature-policy/autoplay-disabled-by-feature-policy.https.sub.html": [ - "3dd3afbf771d5384b02bad0701aaae9224fb6399", + "feature-policy/experimental-features/intrinsicSize-without-unsized-media.tentative.https.sub.html": [ + "4a3526425d7add2eb9b144ac3f8498bcbcf7890e", "testharness" ], - "feature-policy/autoplay-disabled-by-feature-policy.https.sub.html.headers": [ - "69ce436270a8715da3e7e4cea125824c2bbf57dc", + "feature-policy/experimental-features/intrinsicsize-without-unsized-media.tentative.https.sub.html.headers": [ + "4fbf3f5adddbcb8ec95fc0e2192f4da841e93b8c", "support" ], - "feature-policy/experimental-features/document-write.tentative.html": [ - "f0148783f1246b6bd60dabd837c64fc6d903e542", - "testharness" - ], "feature-policy/experimental-features/resources/async-script.js": [ "3c0ee6d02343891b0234f31c0fb229929ae1b24b", "support" @@ -586187,6 +590798,90 @@ "1759381fdc4141302f1b95868550ead76d9f5ca7", "support" ], + "feature-policy/reporting/camera-reporting.https.html": [ + "14b2ed1d37c6d79c9e011a35b9fece0cddc0ac76", + "testharness" + ], + "feature-policy/reporting/camera-reporting.https.html.headers": [ + "2adc5e237fcec874767ff8f5ab38e3456c02cbf0", + "support" + ], + "feature-policy/reporting/document-write-reporting.html": [ + "cb08b8d72d1851ca02c51abf5713519d52f1ecf4", + "testharness" + ], + "feature-policy/reporting/document-write-reporting.html.headers": [ + "57102d5ee7c072e433fa44c0c13521573b32f469", + "support" + ], + "feature-policy/reporting/fullscreen-reporting.html": [ + "83d97c91fab60e593cf3bf0cceff4db80552ef02", + "testharness" + ], + "feature-policy/reporting/fullscreen-reporting.html.headers": [ + "d35e48ba40dc65a3b043a3e41a11332c42bfdba9", + "support" + ], + "feature-policy/reporting/geolocation-reporting.https.html": [ + "22e258563b799c7d48db2452f15eb6124d1f2d0e", + "testharness" + ], + "feature-policy/reporting/geolocation-reporting.https.html.headers": [ + "7e75481ea6d71080aaef8b43e774f5da9c9741e5", + "support" + ], + "feature-policy/reporting/image.jpg": [ + "c059b96d97fc3701ce4325165b79948f69189135", + "support" + ], + "feature-policy/reporting/microphone-reporting.https.html": [ + "7347a2332bc8184b2437a965e95b54ff5fcac22f", + "testharness" + ], + "feature-policy/reporting/microphone-reporting.https.html.headers": [ + "a86e0a077851a84f704e2aa4df1d526ecd9a55b2", + "support" + ], + "feature-policy/reporting/midi-reporting.html": [ + "8303b7adce4de654e3a846bbbe1cba035ac9a284", + "testharness" + ], + "feature-policy/reporting/midi-reporting.html.headers": [ + "0e145978a014f08fb5faff42750e9338da0f9ede", + "support" + ], + "feature-policy/reporting/payment-reporting.https.html": [ + "03eaebea58fb603f5121f6836c85c2c6773c3a5d", + "testharness" + ], + "feature-policy/reporting/payment-reporting.https.html.headers": [ + "a2836778bc5389fdb65e9f6d5f83c7967200866f", + "support" + ], + "feature-policy/reporting/sync-xhr-reporting.html": [ + "2c76390847be29c5bb2f3ec8605d1cb746c33e00", + "testharness" + ], + "feature-policy/reporting/sync-xhr-reporting.html.headers": [ + "21a909e1fb6d84f066f42c09488f1bef032171c9", + "support" + ], + "feature-policy/reporting/unsized-media-reporting.html": [ + "8bd793189501a94564044a3c2fa3757a69f13085", + "testharness" + ], + "feature-policy/reporting/unsized-media-reporting.html.headers": [ + "db2dcbc1929b9e1264855e9b80f77dfbda5d4f38", + "support" + ], + "feature-policy/reporting/usb-reporting.https.html": [ + "f90c602e449bd00e1d773edbce01e4fab63341e2", + "testharness" + ], + "feature-policy/reporting/usb-reporting.https.html.headers": [ + "4fd1e269362c43d282ca8e3c5c35a5d648f0666b", + "support" + ], "feature-policy/resources/autoplay.js": [ "56780cf6dc05879731bff0bbb1486c51b0b4141b", "support" @@ -586291,6 +590986,10 @@ "5701d6d7866b575dc162b27f70a336967c70911f", "testharness" ], + "fetch/api/basic/header-value-null-byte.any.js": [ + "9c223740c7807b43a6595ba81ef4f5b3c74c60b4", + "testharness" + ], "fetch/api/basic/integrity.sub.any.js": [ "d487c3738ac498f4b936e269c093ca2bad581cb0", "testharness" @@ -587528,7 +592227,7 @@ "testharness" ], "fetch/sec-metadata/font.tentative.https.sub.html": [ - "65432b5bacf3bddf8d5cbaad74bdbaf5e63fb44e", + "0a75531c405fc6db3320caec5567bec1ac38c763", "testharness" ], "fetch/sec-metadata/iframe.tentative.https.sub.html": [ @@ -587543,40 +592242,24 @@ "e1ac53157e023a9c6bc4806feda2e782ef4eefa5", "testharness" ], - "fetch/sec-metadata/redirect/cross-site/cross-site.tentative.https.sub.html": [ - "e25fd3f61d5487de6026a0204f107201f491afad", + "fetch/sec-metadata/redirect/cross-site-redirect.tentative.https.sub.html": [ + "9f497a9b62b80da4eff2e35220c1d6317e0e2817", "testharness" ], - "fetch/sec-metadata/redirect/cross-site/same-origin.tentative.https.sub.html": [ - "ac5982d8956c96cd638c2464ec9f8cce3f7e3a34", + "fetch/sec-metadata/redirect/multiple-redirect-cross-site.tentative.https.sub.html": [ + "fdd8733ba6d682b1f6b55fb4e3738d03a1fbbb50", "testharness" ], - "fetch/sec-metadata/redirect/cross-site/same-site.tentative.https.sub.html": [ - "5b3b965f5e96d75f93796e55e77cfac94de18a52", + "fetch/sec-metadata/redirect/multiple-redirect-same-site.tentative.https.sub.html": [ + "8fdc943f4c96c0616778c3316587f3cc598606eb", "testharness" ], - "fetch/sec-metadata/redirect/same-origin/cross-site.tentative.https.sub.html": [ - "ea6b167673f5e64396db4690abde56253e8af914", + "fetch/sec-metadata/redirect/same-origin-redirect.tentative.https.sub.html": [ + "dea71c3f67dca694e05f3c00db1d2d7aea5f3744", "testharness" ], - "fetch/sec-metadata/redirect/same-origin/same-origin.tentative.https.sub.html": [ - "430990a57c48b858fdc509653c0b689abcedcc6d", - "testharness" - ], - "fetch/sec-metadata/redirect/same-origin/same-site.tentative.https.sub.html": [ - "591cf67d18111592a5e696e346371a88770bdb32", - "testharness" - ], - "fetch/sec-metadata/redirect/same-site/cross-site.tentative.https.sub.html": [ - "8592d02c269b6afc4193f4323238b68d8fc26979", - "testharness" - ], - "fetch/sec-metadata/redirect/same-site/same-origin.tentative.https.sub.html": [ - "191dbaa7f77a3ac569b37e95e2db9f2ac4985a3e", - "testharness" - ], - "fetch/sec-metadata/redirect/same-site/same-site.tentative.https.sub.html": [ - "11d60473981cf056ebc56b15905f27c070dad9c8", + "fetch/sec-metadata/redirect/same-site-redirect.tentative.https.sub.html": [ + "a71163a1bfcb09196083dd1a38f4a6863f46eca8", "testharness" ], "fetch/sec-metadata/report.tentative.https.sub.html": [ @@ -587600,15 +592283,15 @@ "support" ], "fetch/sec-metadata/resources/helper.js": [ - "cbd96d06863427f34d75d0621839bcfe76c7ad96", + "55e36d49fac39e814e10df1629e8b8fec0c8ebef", "support" ], "fetch/sec-metadata/resources/post-to-owner.py": [ - "fe08cd1cbcaa4585fb3be0ce0ee33e7d75759129", + "5472aa5b47e424bb6590d6c757df635eb4b6dd1f", "support" ], "fetch/sec-metadata/resources/record-header.py": [ - "06157e4cd8bd35e54b99c04f09a995185ba5686c", + "4c30d1e52ac8bfb24c890f790df154ea17947043", "support" ], "fetch/sec-metadata/resources/sharedWorker.js": [ @@ -587624,15 +592307,15 @@ "testharness" ], "fetch/sec-metadata/serviceworker.tentative.https.sub.html": [ - "9d1fe2a3449da49b3b4e167f74e63e815ef5cf6c", + "cefabb20aaa40c91f5d90d180f52d596086a55cd", "testharness" ], "fetch/sec-metadata/sharedworker.tentative.https.sub.html": [ - "aa118e04239691f5488c4d62f3f1cf0ae59e8f1d", + "09017ccbb3a2b1b878d15e4199d59cad29a2277a", "testharness" ], "fetch/sec-metadata/style.tentative.https.sub.html": [ - "78fac567b43f3c48c81897b44237d820a6209d8a", + "609d5764f08ca5b3242692f4bdd94f2b364481b3", "testharness" ], "fetch/sec-metadata/track.tentative.https.sub.html": [ @@ -588356,11 +593039,11 @@ "manual" ], "fullscreen/api/element-ready-check-containing-iframe-manual.html": [ - "66f99688f144779321ca511295c97b6883495ba8", + "8ba2ab71b158603e1af466d69b91412626ff8722", "manual" ], "fullscreen/api/element-ready-check-fullscreen-element-sibling-manual.html": [ - "dc0c28c78e18d7b5be3efe460802a7e1d1cf7d4e", + "f800093ec8ec8d6818a107dfc19a053c10583b36", "manual" ], "fullscreen/api/element-ready-check-fullscreen-iframe-child-manual.html": [ @@ -588416,7 +593099,7 @@ "manual" ], "fullscreen/api/element-request-fullscreen-non-top-manual.html": [ - "06c4c1b036713cbf0c9c12a4d595525930006bd4", + "0764e9c8423a2f528dbfa12d4e57614d7128b4a0", "manual" ], "fullscreen/api/element-request-fullscreen-not-allowed.html": [ @@ -588452,11 +593135,11 @@ "manual" ], "fullscreen/api/element-request-fullscreen-two-elements-manual.html": [ - "9611c8165663f8e633be20c2e34fb8b04378a44e", + "3291664c63ab4880dd844e5f75046d2f93c8f92f", "manual" ], "fullscreen/api/element-request-fullscreen-two-iframes-manual.html": [ - "99a7672e71c9617f1b73c87d6dcfe694f23563a4", + "94b38c0302a5fa32f72dd63c505cf0b73d7e6a73", "manual" ], "fullscreen/api/historical.html": [ @@ -588523,6 +593206,10 @@ "ccd3f0e22be91def3e2117a567c4245a7fea5720", "support" ], + "fullscreen/rendering/fullscreen-root-block-scroll-manual.html": [ + "ae57d8a9f238c0b1014a256de7f0ea814120b06b", + "manual" + ], "fullscreen/rendering/fullscreen-root-block-size-manual.html": [ "989a85d91c4e17c6f5fd307d2fcfc810c3246738", "manual" @@ -589032,7 +593719,7 @@ "support" ], "html/META.yml": [ - "d491c94e30c344f248a21da5c9605760921aa0c7", + "636b42b68c1046421f743b07a6764a715cabcb64", "support" ], "html/README.md": [ @@ -596607,34 +601294,6 @@ "d63362aaa1828f35de410b56c1ccc2d7869a111e", "testharness" ], - "html/editing/focus/inert/inert-does-not-match-disabled-selector.html": [ - "defc7cd6c49da58e49bff8e59a79f4a7dd4ff2c6", - "testharness" - ], - "html/editing/focus/inert/inert-in-shadow-dom.html": [ - "36c962b1fc7d50cb6cb46e7d79d9435323e64ad9", - "testharness" - ], - "html/editing/focus/inert/inert-inlines.html": [ - "b056c6495d2c54733bee6ab796332ba89f01b379", - "testharness" - ], - "html/editing/focus/inert/inert-label-focus.html": [ - "8bbe1eca15c7d8f2f9fd5ea48c33cd0a5d5098e0", - "testharness" - ], - "html/editing/focus/inert/inert-node-is-uneditable.html": [ - "b18d9912eb2d06cd072b79aa6f94002a3c209d1a", - "testharness" - ], - "html/editing/focus/inert/inert-node-is-unfocusable.html": [ - "8b5de37fdcadedb9d98ec44c9c3c20aea52a0400", - "testharness" - ], - "html/editing/focus/inert/inert-node-is-unselectable.html": [ - "7d5e90821bb0bd0d83711685853c78ff9fee6c4f", - "testharness" - ], "html/editing/focus/processing-model/focus-fixup-rule-one-no-dialogs.html": [ "d8171abc715990a9e752c2d974acdfd7ecd34fc2", "testharness" @@ -596892,7 +601551,7 @@ "support" ], "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/sharedworker-failure.js": [ - "a11ccbc1f3099a6be7b4d538bcbe40292eac3ea0", + "8472318abd53207ec56b3f5988fb0a49d0c006a4", "support" ], "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/test-incrementer.js": [ @@ -597511,134 +602170,182 @@ "59c5ca70d41cc969aed7ac6a531c1ca9a5f82f0f", "reftest" ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-block-formatting-context.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/META.yml": [ + "f5b533c377160c77541187a301647e174069bd6d", + "support" + ], + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-block-formatting-context.html": [ "c38944ae795807628ce1c5cd114e5832263b2ff2", "testharness" ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap-ref.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-gap-ref.html": [ "95e2347121e26ec7cc7d080caf9db6ff253231c6", "support" ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-gap.html": [ "4d2269632c0eeeaf057b2008351ae98d4ddbdbca", "reftest" ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block-ref.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-radius-hittest.html": [ + "9ab10159d8c0b3e23d73c5094961873dd837df7d", + "testharness" + ], + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-containing-block-ref.html": [ "ccb755b347cbf926163e7dfaaa37c590942ca6c9", "support" ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-containing-block.html": [ "e7529946a49c0da964dae79831047e4a0507f119", "reftest" ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-default-style.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-default-style.html": [ "f07c84f406cefc7054e8a13c2796d3d82673bdf7", "testharness" ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-display.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-display.html": [ "953328982032dae2d508619b90188534179a26a8", "testharness" ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-div-display-contents.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-div-display-contents.html": [ "5d17b91290f41db86147dcd80385aecbf19c14c7", "support" ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-flexbox.html": [ - "d2b1d30d8cc828496fa76cc887e01149f2a44809", + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-flexbox.html": [ + "07c73554e59ccb576e590192e923de6b7100e1ae", "testharness" ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-foo-ref.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-foo-ref.html": [ "cace814a8ce9f51ee4eaa1626b6e5377f528f22a", "support" ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-grid.html": [ - "7e9cf3643d00c59caa5bb37682a2fc8fa9ddee89", + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-grid.html": [ + "bbb71dfa7027aad90392ec39112eafe1dc9abf65", "testharness" ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-multicol.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-list-item-ref.html": [ + "05b8ca4770b18a91aaf2d9f3038d6fe4162f289f", + "support" + ], + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-list-item.html": [ + "7726947beca45ef3207a12fa63c63241f8183138", + "reftest" + ], + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-multicol.html": [ "bdb2c2fd94686b502ed5a663b1026180283af22f", "testharness" ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-overflow-hidden-ref.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-overflow-hidden-ref.html": [ "9fe632f7c209c42d9f24358ad6a2a56abddf97a3", "support" ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-overflow-hidden.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-overflow-hidden.html": [ "cacbdbae00d0f7d6067323c68fc460149c524f35", "reftest" ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-painting-order-ref.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-painting-order-ref.html": [ "13b262a804ab781905b3e4d3483554d9dd95b4d8", "support" ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-painting-order.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-painting-order.html": [ "7bd2cedb1b6771398c808d1b7c8f68840bfb9b6f", "reftest" ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-shadow-dom.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-shadow-dom.html": [ "3b46eb03c6c41bc616ebcc85bc6d635496e5eeed", "support" ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-transform-translatez-ref.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-transform-translatez-ref.html": [ "8200e671944bc74644b1d9d540f9ce7496f86a63", "support" ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-transform-translatez.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-transform-translatez.html": [ "df30468b0041323667946739369ec7d42bf47742", "reftest" ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-align.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-vertical-ref.html": [ + "29c28ea5f89f49cbf8d35961cd29580a0bd42256", + "support" + ], + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-vertical.html": [ + "c11b466669665a29fc4f33b4bbc14c6b5598d545", + "reftest" + ], + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-align.html": [ "f7511c9e4c91dbd2cb11db502789d8792f038a29", "testharness" ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-block-formatting-context.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-block-formatting-context.html": [ "4e9539179739a3690aab276f2ba98c25bd4dfe9b", "testharness" ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-display.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display-none-rendering-ref.html": [ + "e6eff47e53c7a40e973b7f9dc298af2343f59941", + "support" + ], + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display-none-rendering.html": [ + "abf3c45df71ee6617ddb8b6d402a103f54624820", + "reftest" + ], + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display-none.html": [ + "689454ac493a05b28658edf549d71c6aa1c7be0e", + "testharness" + ], + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display.html": [ "914547fc6cdde3e464b28eb7cc9737d17305f9af", "testharness" ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-dynamic-update.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-dynamic-update.html": [ "5dc68244fe0f896388ce7a0ff9d8f49397395078", "support" ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float-abspos.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float-abspos.html": [ "7979e1d03ece2575ef9ec7a2a8cba96df3705d78", "testharness" ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float-ref.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float-ref.html": [ "c51bca231e158db109774b6ca70cdedb9d099b3a", "support" ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float.html": [ "f70e952ed06c7bf07eaaaaccea251d3e54267ec3", "reftest" ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-grid-flex-multicol.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-grid-flex-multicol.html": [ "edd2600d4a0749d281e7ed1b4da4aefbd7c686ba", "testharness" ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-position-relative-ref.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item-ref.html": [ + "ee76e93b64e1da9ab5883c328d9fff1eb865acb1", + "support" + ], + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item.html": [ + "c26b50ce662cbea50a69e8e718b9b2b889568f64", + "reftest" + ], + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-position-relative-ref.html": [ "fd6c11a00566759fbf1e749d49ad396cf1a7ee08", "support" ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-position-relative.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-position-relative.html": [ "993836126143a8921e31bc8e61bef955eb302503", "reftest" ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-sans-fieldset-display.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-sans-fieldset-display.html": [ "5f27ca5c299de72c6e8aab9275fcf70b3c4246a3", "testharness" ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/legend.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend.html": [ "1cda91f32baf119b8dd827275a3ba8b10c484084", "testharness" ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/min-inline-size.html": [ + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/min-inline-size.html": [ "92c33029701b41678f4f514d28c6260338bd8e77", "testharness" ], + "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/resources/fieldset-vertical.css": [ + "b358d925a76fb571eda42292e2abbf7c1c75062f", + "support" + ], "html/rendering/non-replaced-elements/the-hr-element-0/align-ref.html": [ "9e4283e208e17e4f2cfed05882bb1aff276028ad", "support" @@ -598359,6 +603066,34 @@ "257bd46289d7b62869bd2b1f31206d81b98d97c2", "manual" ], + "html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html": [ + "6f11f8995b1e5c1cebd123219f9c8d34d4b108a5", + "testharness" + ], + "html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy-attribute.https.sub.html": [ + "59b33d7c4d2bd2c712c73ad7ff4e7c1003c244a2", + "testharness" + ], + "html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy.https.sub.html": [ + "63479c0cb6f8c6c8241cc5c4a33e167b13a3888b", + "testharness" + ], + "html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy.https.sub.html.headers": [ + "08461fadc2888cbcdfcda533f2928f14a52ab44e", + "support" + ], + "html/semantics/embedded-content/media-elements/autoplay-default-feature-policy.https.sub.html": [ + "763073e437d009b99a1d372c19bc1907f97e6776", + "testharness" + ], + "html/semantics/embedded-content/media-elements/autoplay-disabled-by-feature-policy.https.sub.html": [ + "3dd3afbf771d5384b02bad0701aaae9224fb6399", + "testharness" + ], + "html/semantics/embedded-content/media-elements/autoplay-disabled-by-feature-policy.https.sub.html.headers": [ + "69ce436270a8715da3e7e4cea125824c2bbf57dc", + "support" + ], "html/semantics/embedded-content/media-elements/autoplay-with-broken-track.html": [ "f687edf198dbb65064d90d4c3fc8baf4d684cde7", "testharness" @@ -606315,18 +611050,6 @@ "1dcb92615d085b28d3c9d2a22d744be849158d18", "testharness" ], - "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/010-1.html": [ - "317e13691d4a94e5861bbb85d7367591d7d1c624", - "support" - ], - "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/010-2.html": [ - "ea537fcd6018fab07cb58132a2523d82cb8783de", - "support" - ], - "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/010.html": [ - "d83d24f2414b7f08229662694a7fd475560e2858", - "testharness" - ], "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/011-1.html": [ "37973fd52ec8c3b8091683e4726058ad2513c053", "support" @@ -606439,6 +611162,10 @@ "7fb172a141cf93330d6ec718d200e5845cd32f39", "testharness" ], + "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/history.window.js": [ + "0134da24f07bb4d653703d2d3d0c3575a32e8f34", + "testharness" + ], "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/ignore-opens-during-unload.window.js": [ "43506a22a46da53885a2b5a0888095bc52b460ca", "testharness" @@ -606459,6 +611186,14 @@ "5e5ca80781809cc509a8eade7ea91e74de92f9a8", "testharness" ], + "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/quirks.window.js": [ + "0ff0bb99443677b8f8844c8ecedef22c408f2bac", + "testharness" + ], + "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/readiness.window.js": [ + "729a958700bb8d5e5f9d8717287ea114badbb662", + "testharness" + ], "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/reload.window.js": [ "d6ff9dc7a45425cb688ed4b6c9ea2ab5c1c3ae5c", "testharness" @@ -606507,10 +611242,18 @@ "0fe189914c3727f8071c4eaaa6cc740aeb7aab93", "support" ], + "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/history-frame.html": [ + "2404105b09a7724cf8cc5e2cf6d7bf7a8fb6f39b", + "support" + ], "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/set-document-domain.html": [ "a92a7ae39f8351f97cd865dca5ebe8d4260aa229", "support" ], + "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/url-frame.html": [ + "be483ff0aea456c3bc7f2e62d863e7f981453203", + "support" + ], "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/tasks.window.js": [ "1588f2f889227f68acba9fb1f02494ba0f80a4bd", "testharness" @@ -606531,6 +611274,10 @@ "e275a4987a0859b160a0f91de6c8896b90bdab31", "testharness" ], + "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/url-fragment.window.js": [ + "0c528935b52db9f2bc85cdd52659c300bfda5f5a", + "testharness" + ], "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/url.window.js": [ "4e7c649f4533958112e6bd1dd59537619d7cc62d", "testharness" @@ -607275,6 +612022,34 @@ "2bb82c9834790bfeb1a65cf2ef202dc63d2ebac4", "support" ], + "inert/inert-does-not-match-disabled-selector.tentative.html": [ + "74b8ac3f7dd5c3447bf47fd732fade9220497c93", + "testharness" + ], + "inert/inert-in-shadow-dom.tentative.html": [ + "36c962b1fc7d50cb6cb46e7d79d9435323e64ad9", + "testharness" + ], + "inert/inert-inlines.tentative.html": [ + "b056c6495d2c54733bee6ab796332ba89f01b379", + "testharness" + ], + "inert/inert-label-focus.tentative.html": [ + "8bbe1eca15c7d8f2f9fd5ea48c33cd0a5d5098e0", + "testharness" + ], + "inert/inert-node-is-uneditable.tentative.html": [ + "b18d9912eb2d06cd072b79aa6f94002a3c209d1a", + "testharness" + ], + "inert/inert-node-is-unfocusable.tentative.html": [ + "8b5de37fdcadedb9d98ec44c9c3c20aea52a0400", + "testharness" + ], + "inert/inert-node-is-unselectable.tentative.html": [ + "7d5e90821bb0bd0d83711685853c78ff9fee6c4f", + "testharness" + ], "infrastructure/META.yml": [ "59b44af3351e0610586709c033b15f15e1c46857", "support" @@ -607431,6 +612206,18 @@ "04fb9aa15176e6191ded5eccf442fcfd6cdcf566", "reftest_node" ], + "infrastructure/reftest/reftest_and_mismatch.html": [ + "b6b4847473dd548209de63e6f1f24a213411caf6", + "reftest" + ], + "infrastructure/reftest/reftest_and_mismatch_0.html": [ + "f84ce6a13aa3dc9909405bb01eaccd820523f0ab", + "reftest_node" + ], + "infrastructure/reftest/reftest_and_mismatch_1.html": [ + "05e905adafc06405b4f824ae720305735277790d", + "support" + ], "infrastructure/reftest/reftest_cycle.html": [ "4a84a3b6741ee41fe6187a9bdc766d749206c83a", "reftest_node" @@ -607551,8 +612338,8 @@ "f7b8c74fa40203b5778f23cfde71f74a435e308d", "support" ], - "input-device-capabilities/interfaces.html": [ - "178ce5aa892bcd466b849b5a4f99e844314c69b1", + "input-device-capabilities/idlharness.window.js": [ + "a57ae82993697695e4d05142c124ad36882becb1", "testharness" ], "input-events/META.yml": [ @@ -607656,7 +612443,7 @@ "support" ], "interfaces/background-fetch.idl": [ - "6957604e7df5bed1c6ec0351ebe838d28773e3fe", + "92b6026f8b6dbbc4a79c1b3cdfdf73a0253aeaa6", "support" ], "interfaces/battery-status.idl": [ @@ -607764,7 +612551,7 @@ "support" ], "interfaces/encoding.idl": [ - "7d55ce7e190a6944f0dbbf8194daee64224c8ec5", + "b805363c534feafcb606dd13701736f13497ef99", "support" ], "interfaces/encrypted-media.idl": [ @@ -607924,7 +612711,7 @@ "support" ], "interfaces/payment-request.idl": [ - "3717d79476dc406639a4b339c0ae75824b01560d", + "7bd2ae13efd1327865ab1a0b526dea1aa47eea17", "support" ], "interfaces/performance-timeline.idl": [ @@ -607944,7 +612731,7 @@ "support" ], "interfaces/pointerevents.idl": [ - "da822bba0e58e36ea0a892b008075120282d8a85", + "63d39a285232b0319c24ff907871fe92bd70d167", "support" ], "interfaces/pointerlock.idl": [ @@ -608108,7 +612895,7 @@ "support" ], "interfaces/webxr.idl": [ - "00839eed1a2ab59842acd8ce5c873b8a57a765cd", + "ffa9ed4e91abde01ef1b442d2e8c5daa8a40305d", "support" ], "interfaces/worklets.idl": [ @@ -608416,7 +613203,7 @@ "support" ], "lint.whitelist": [ - "8c6bb2d8fbd78a1acb41120f3cc7299b4cb4e248", + "7d579b6b343a23e6c039f309f362354c5aa5ba62", "support" ], "longtask-timing/META.yml": [ @@ -609627,14 +614414,90 @@ "c58e63ff12acefc73fc3cfa2f35836778696c827", "testharness" ], + "mediacapture-image/ImageCapture-MediaTrackSupportedConstraints.html": [ + "aae75b7e8c91b76d163404d6cc319382606e4e2e", + "testharness" + ], + "mediacapture-image/ImageCapture-creation.https.html": [ + "9e8b5feeeb5cdf5686c36e3972fc9a1a8961de95", + "testharness" + ], + "mediacapture-image/ImageCapture-grabFrame.html": [ + "bf5e9400a038f2432ce1bee3a3b345f3c82e5ea5", + "testharness" + ], "mediacapture-image/META.yml": [ "1b4fef5e5a19ed3d7e61320bfa752a19da1f595a", "support" ], + "mediacapture-image/MediaStreamTrack-applyConstraints-fast.html": [ + "75ed17a9e3302b0cb2b388846ad73d55c6d9c166", + "testharness" + ], + "mediacapture-image/MediaStreamTrack-applyConstraints-getSettings.html": [ + "6241d599dc325d9b567eb6900c3daafaded92af3", + "testharness" + ], + "mediacapture-image/MediaStreamTrack-applyConstraints-reject.html": [ + "8f08d250fd1a569d84ecd4ce36fe5ffa29f583f7", + "testharness" + ], + "mediacapture-image/MediaStreamTrack-applyConstraints.html": [ + "431646eb53f030dce81f15a0130ea660142ce2ce", + "testharness" + ], + "mediacapture-image/MediaStreamTrack-getCapabilities-fast.html": [ + "55272d1499517a6fda0b7e06068928b4e1127b27", + "testharness" + ], + "mediacapture-image/MediaStreamTrack-getCapabilities.html": [ + "452b223a1b0bf3bad06d956e16b0eff22c8b6507", + "testharness" + ], + "mediacapture-image/MediaStreamTrack-getConstraints-fast.html": [ + "8cae4331318cb32c30e1c89339fdb37fee97a5db", + "testharness" + ], + "mediacapture-image/MediaStreamTrack-getSettings-fast.html": [ + "a4ecbe61181640f7f993f7f5c9cd3fd4e992f72c", + "testharness" + ], + "mediacapture-image/MediaStreamTrack-getSettings.html": [ + "04fbfbfb6137cf61ee6491e2bef5786f202b43e3", + "testharness" + ], + "mediacapture-image/detached-HTMLCanvasElement.html": [ + "e27950fc5edfea8357344f91198f0105775fef2c", + "testharness" + ], + "mediacapture-image/getPhotoCapabilities.html": [ + "83329fcac4ad37bea6dd13930103c2fd689a77fd", + "testharness" + ], + "mediacapture-image/getPhotoSettings.html": [ + "6a6184f17cb2f92c01d7bf784047ae17b1e8be66", + "testharness" + ], "mediacapture-image/idlharness.window.js": [ "9d8f7eefb84dcc16534f1311c3b3c3d68e84572d", "testharness" ], + "mediacapture-image/resources/imagecapture-helpers.js": [ + "6d5ffa1695d807a05edeb75a21d472856bdda252", + "support" + ], + "mediacapture-image/setOptions-reject.html": [ + "4deee97d7bc77859602aa25d51e547bd0290409b", + "testharness" + ], + "mediacapture-image/takePhoto-with-PhotoSettings.html": [ + "58708612456fc669c5a445b76ad110fcbb0bb27d", + "testharness" + ], + "mediacapture-image/takePhoto.html": [ + "49926db1cde6ee6b3e703e920e0812232eac0835", + "testharness" + ], "mediacapture-record/BlobEvent-constructor.html": [ "3bcf4296e68aea1a7b167e570c0dcec148cc95e4", "testharness" @@ -609708,7 +614571,7 @@ "testharness" ], "mediacapture-streams/MediaStream-default-feature-policy.https.html": [ - "f0f07da21228e7f8d752257e08eb6e22f084c7a5", + "0b45ac6f594a695b28545ee3a99c0c6a7f8bbc12", "testharness" ], "mediacapture-streams/MediaStream-finished-add.https.html": [ @@ -611612,7 +616475,7 @@ "support" ], "network-error-logging/support/lock.py": [ - "8c88250bde00b4a62cc99131fdaa09e97f716369", + "d87b3aef0fb09a1063eb55b6f391f965833ac5a6", "support" ], "network-error-logging/support/nel.sub.js": [ @@ -618583,6 +623446,18 @@ "f8460d403ffa42d9dfc1bae6e0c3e500f7742fc9", "support" ], + "payment-request/MerchantValidationEvent/complete-method-manual.https.html": [ + "99a10e9dc79bd957a030f26c114f3ee51bb190d8", + "manual" + ], + "payment-request/MerchantValidationEvent/constructor.http.html": [ + "8368c79a3b1dea2df26bbc804208002ec97fbf09", + "testharness" + ], + "payment-request/MerchantValidationEvent/constructor.https.html": [ + "952c0f734a30f170964053bb00e55225d57cce0b", + "testharness" + ], "payment-request/PaymentAddress/attributes-and-toJSON-method-manual.https.html": [ "65d56e7490111f6fc9e91f4470379fc89ae42972", "manual" @@ -618668,11 +623543,11 @@ "testharness" ], "payment-request/allowpaymentrequest/common.sub.js": [ - "85a08461fcb0197ed2259d77035e696c1c69d6d8", + "a94bac064c9432980d437a98b72d4843f1b40bbe", "support" ], "payment-request/allowpaymentrequest/echo-PaymentRequest.html": [ - "f18b16ee31bf7e3eb868d073ab5e0fb0061bbd88", + "5211c7e5ce78c0621036578fef79aeb2c98f2a27", "support" ], "payment-request/allowpaymentrequest/no-attribute-cross-origin-bc-containers.https.html": [ @@ -618711,6 +623586,10 @@ "9a068c6d27f86a63d160b47b09a2116d5479ac72", "testharness" ], + "payment-request/onmerchantvalidation-attribute.https.html": [ + "c0ed23167ed9378ec32e769bd4f3e3afaef5040c", + "testharness" + ], "payment-request/onpaymentmenthodchange-attribute.https.html": [ "0484eb868f983e3cdb0efceab5fe2b3c6084b4ab", "testharness" @@ -619031,6 +623910,10 @@ "43d0aa5d38b2ac65b5100c9ba8fa2b794ffd03ee", "testharness" ], + "pointerevents/extension/pointerevent_pointerrawmove-manual.html": [ + "0c4ccf9ad48d49c62b3d138845dfa3ac631a8e4e", + "manual" + ], "pointerevents/extension/pointerevent_touch-action-pan-down-css_touch-manual.html": [ "592139f9f41abb2a3fe6bf1b99af87d1c5e651f3", "manual" @@ -619983,8 +624866,12 @@ "6b1c8a72751a6233eb0a07a8bb7df5e116fac724", "reftest" ], - "quirks/unitless-length/excluded-properties.html": [ - "a1de182770aafaab2ee4a8a335b34870388abacc", + "quirks/unitless-length/excluded-properties-001.html": [ + "2e33cec0b33644576fb81e6fd9dbaf42bb02cf92", + "testharness" + ], + "quirks/unitless-length/excluded-properties-002.html": [ + "5f98bc283ebc2b5d719815c59c3d1cd53acd2ed9", "testharness" ], "quirks/unitless-length/limited-quirks.html": [ @@ -628391,6 +633278,18 @@ "6805c323df5a975231648b830e33ce183c3cbbd3", "support" ], + "resources/chromium/image_capture-mojom.js.headers": [ + "6c61a34a4ec2e75096db0eb9f7748b142f0db7bb", + "support" + ], + "resources/chromium/image_capture.mojom.js": [ + "1d01581e023e4655ec9d5c634aa9c8bbdf79d40b", + "support" + ], + "resources/chromium/mock-imagecapture.js": [ + "a700bc97b3e055a66c80aca7cac33cfac3a2334f", + "support" + ], "resources/chromium/mojo_bindings.js": [ "67d6a8828551c1f703ef29831592f2e4d8a42485", "support" @@ -628447,8 +633346,16 @@ "6805c323df5a975231648b830e33ce183c3cbbd3", "support" ], + "resources/chromium/webusb-child-test.js": [ + "add04fa58250d58d56759d242663a6510d306090", + "support" + ], + "resources/chromium/webusb-child-test.js.headers": [ + "6805c323df5a975231648b830e33ce183c3cbbd3", + "support" + ], "resources/chromium/webusb-test.js": [ - "9037a109c91610957091f73752074faa031e497b", + "5f9262655f3fca5ac225e2788723cc4cd05ca916", "support" ], "resources/chromium/webusb-test.js.headers": [ @@ -629624,7 +634531,7 @@ "support" ], "screen-capture/getdisplaymedia.https.html": [ - "3a0444733b51bca1df22d67cd962ea350a8006ce", + "9b66419cb0a1eb149294419ddd3549e4ba032de5", "testharness" ], "screen-capture/idlharness.window.js": [ @@ -632767,10 +637674,6 @@ "8aaa5ca934457714ee0e529ad4b2b1740d9758dd", "support" ], - "service-workers/service-worker/resources/update-top-level-worker.py": [ - "f77ef284ac0745bd6d31e642742438766f14e32e", - "support" - ], "service-workers/service-worker/resources/update-worker.py": [ "bc9b32ad3e68870d9f540524e70cd7947346e5c8", "support" @@ -632951,10 +637854,6 @@ "d8ed94f776650c8a40ba82df9ca5e909b460bb79", "testharness" ], - "service-workers/service-worker/update-top-level.https.html": [ - "e382028b44a9d19b26b3c15a3bba17fa6a0d9bcb", - "testharness" - ], "service-workers/service-worker/update.https.html": [ "6717d4d7ac289c8a18b1500e21795fd16c5321e7", "testharness" @@ -632972,7 +637871,7 @@ "testharness" ], "service-workers/service-worker/webvtt-cross-origin.https.html": [ - "637f494e4c1e69dac48535a14128b9bc0d5615b6", + "9394ff75c4a5f395d287ce7c57a13522efce9aee", "testharness" ], "service-workers/service-worker/windowclient-navigate.https.html": [ @@ -633739,72 +638638,48 @@ "d95c3ce8cff5d5f5428ee14c555c556c68f7f2a4", "support" ], - "storage/estimate-indexeddb-worker.https.html": [ - "2366760bdbed833b382a1adad350771bf3da7bb7", + "storage/estimate-indexeddb.https.any.js": [ + "3e34ad19babf53da04974ceafe0fd4cb7be33621", "testharness" ], - "storage/estimate-indexeddb.https.html": [ - "3f5e1589d346e075e93fb08f5edf1b64d23643ec", - "testharness" - ], - "storage/estimate-parallel.https.html": [ - "571b08cd5e211424035ec4fd7632d07548e4261c", + "storage/estimate-parallel.https.any.js": [ + "090f004b8514bc9c99e8f85f9e8f9073dff2a263", "testharness" ], "storage/idlharness.https.any.js": [ "0ce4d5a0c8fccf07f6908a7a9ac9ac5ab5df6624", "testharness" ], - "storage/opaque-origin.https.html": [ - "563f2fea3c51627d919451cde1664703e4e87fe4", + "storage/opaque-origin.https.window.js": [ + "3e101dde6759b2b8c379d6adc95190742328630f", + "testharness" + ], + "storage/permission-query.https.any.js": [ + "9984bdab793219bf8b77748304f539f027a1e84f", "testharness" ], "storage/persist-permission-manual.https.html": [ "aa49900d69562284e35d8d1a4c4d5946586464ac", "manual" ], - "storage/persisted-worker.https.html": [ - "21f5c8bd92d849851994267c3d3459237f4bfa5c", - "testharness" - ], - "storage/persisted.https.html": [ - "a5a91ff0b2632d07d9b5ae681f1f9786afa686e6", - "testharness" - ], - "storage/resources/storagemanager-persist-worker.js": [ - "1152e4ec7349b5cfccb2cad5d267c910c85632d2", - "support" - ], - "storage/resources/storagemanager-persisted-worker.js": [ - "979c8be3cd39377df9ef4e4a42a8601612a471e3", - "support" - ], - "storage/storage-estimate-indexeddb.js": [ - "5f7895350ef5235099d9d0fd343578b30b47883e", - "support" - ], - "storage/storage-persisted.js": [ - "5bc86fea951973180570434b572604c0fcc2eb22", - "support" - ], - "storage/storagemanager-estimate.https.html": [ - "08a699adfb001a7cfded79f462d2f0261c2f5149", + "storage/persisted.https.any.js": [ + "57e15f0e811de3e94652b2f16c5482a94be63c24", "testharness" ], - "storage/storagemanager-persist-worker.https.html": [ - "9c89a2f6712575001da0a4758d25ca6716bae3ae", + "storage/storagemanager-estimate.https.any.js": [ + "d1d2e21924cd016165b02436dea994f44c193cd9", "testharness" ], - "storage/storagemanager-persist.https.html": [ - "61624fe272a610d3454ea2e245cdc6dbf6f59647", + "storage/storagemanager-persist.https.window.js": [ + "13e17a16e14198e21b0b5984ed46c93a50daed41", "testharness" ], - "storage/storagemanager-persisted-worker.https.html": [ - "75004946164d59032228861cb854ae3e470723a0", + "storage/storagemanager-persist.https.worker.js": [ + "fcf8175f706fe131c84ed2ac2a022e676d618c40", "testharness" ], - "storage/storagemanager-persisted.https.html": [ - "1d88c11bd8aace12223fb94845f1fb270a7b8877", + "storage/storagemanager-persisted.https.any.js": [ + "70999406690fb26b7bc154093d826d7c0b8cf72c", "testharness" ], "streams/META.yml": [ @@ -638700,7 +643575,7 @@ "support" ], "tools/manifest/item.py": [ - "61919fcc31e9c7afa8c1d5733a2723fc41bd326d", + "ddf046a68fa88da2f9e5ccad37dd26ec5fc7ac78", "support" ], "tools/manifest/log.py": [ @@ -638708,11 +643583,11 @@ "support" ], "tools/manifest/manifest.py": [ - "42a8e1ceb23693a3e139cf6129bc82327b765182", + "9b2f0a18a569d0aac248487a0aa4743ee5caeed1", "support" ], "tools/manifest/sourcefile.py": [ - "133f8b59828dafd016df95429fe5286562b4733c", + "9be0d8966ece1bf56fd93e3fd606ac08c4bb1a76", "support" ], "tools/manifest/tests/__init__.py": [ @@ -638728,7 +643603,7 @@ "support" ], "tools/manifest/tests/test_manifest.py": [ - "8bf7ef96c5f51248c76254af302ad6391bb2d903", + "f1241e044066d218f73fe806de4dcfa8a448c515", "support" ], "tools/manifest/tests/test_sourcefile.py": [ @@ -639220,7 +644095,11 @@ "support" ], "tools/serve/serve.py": [ - "97a5063c1b9a3e831f6c22ac53a81f3f449a699f", + "968b837979ed3d68bd96058a2950e2354575e7d1", + "support" + ], + "tools/serve/test_functional.py": [ + "87268ffc00d45f8bc57dc0fdd1e784eec745d288", "support" ], "tools/serve/test_serve.py": [ @@ -643164,7 +648043,7 @@ "support" ], "tools/webdriver/webdriver/error.py": [ - "b2337ff3b38f57828c72d76e49ef8893d30b578c", + "e148e8fe800700c0c0b96abb48444063c4af6572", "support" ], "tools/webdriver/webdriver/protocol.py": [ @@ -643204,7 +648083,7 @@ "support" ], "tools/wpt/run.py": [ - "6b098b41f702e0742df4a2f801eaaad3dc810ce9", + "aeeb22be9615e9d2d56b66a8957c997e53babedf", "support" ], "tools/wpt/testfiles.py": [ @@ -643215,12 +648094,16 @@ "7078a36b0c5bd5b4fe6f55f2ecf5fcbc2c535b4f", "support" ], + "tools/wpt/tests/test_run.py": [ + "097131d7ba5e9ac9c1995921c3f2702785f97096", + "support" + ], "tools/wpt/tests/test_wpt.py": [ "b39173e64f23ea4484f75cab219e72e8c2d279d7", "support" ], "tools/wpt/tox.ini": [ - "e486bb221d72900b103fa56fbf18175afc5560c8", + "cd45a76e179861bb18adb231e86e2a74b2de972c", "support" ], "tools/wpt/update.py": [ @@ -643720,7 +648603,7 @@ "support" ], "tools/wptrunner/wptrunner/tests/test_update.py": [ - "5c654c99a481c8709176ea9210508bc2388d2b2c", + "f8790815cf064e09926caca65c5ac1d15671be95", "support" ], "tools/wptrunner/wptrunner/tests/test_wpttest.py": [ @@ -644188,35 +649071,35 @@ "testharness" ], "trusted-types/DOMParser-parseFromString.tentative.html": [ - "2fe9b31b787e1fb458a3ed8996b2d79f7e14aa35", + "2dfc37686bca15431c216a50d29f9f9eed2782e0", "testharness" ], "trusted-types/Document-write.tentative.html": [ - "3a63e923543b999b05d1fab926ad33d7d2719dfa", + "79247fb4d68e6724b98c62d3b62a0e6b20784f4d", "testharness" ], "trusted-types/Element-insertAdjacentHTML.tentative.html": [ - "599ade44ec117ecb429659a9f969a2767bd95cbb", + "d5db7936b1f98012ee3750f6d3056f4a5b172615", "testharness" ], "trusted-types/Element-outerHTML.tentative.html": [ - "a0bb6c1a5e3fef47e4351353befbfc8eb105652f", + "c8daddfe9955196bf0b69410263cb7c01e473e5e", "testharness" ], "trusted-types/HTMLElement-generic.tentative.html": [ - "cea32a5a2df1d9b255f5aaf85ac5a694fdb3a618", + "08d165a75d4185a61374128be8046384cc701b4e", "testharness" ], "trusted-types/Location-assign.tentative.html": [ - "13cca5679488d0b3e12631d5f70408565ea1b065", + "62f98e96d7febe6c744b882f8d196d1686fe9166", "testharness" ], "trusted-types/Location-href.tentative.html": [ - "d759d28593e67f25d8bc28d36cf0ff4912460dc0", + "bacadf6a91b1c0bc5c76293aab38f9d503cfa2b7", "testharness" ], "trusted-types/Location-replace.tentative.html": [ - "7d84905d19878d57634a8497b81ef86d8114b72e", + "4fb53d0260973ed5d714540a448909488b6e2465", "testharness" ], "trusted-types/META.yml": [ @@ -644224,63 +649107,71 @@ "support" ], "trusted-types/Range-createContextualFragment.tentative.html": [ - "3d45b33486d3971c0c58180fa4034dbfae18f135", + "3a880a53778acb165fd5d957eeaca22685baf2b5", "testharness" ], - "trusted-types/TrustedTypePolicyFactory-createPolicy.tentative.html": [ - "76e6d130b05dfba00911ad42eb7a162cd29b222e", + "trusted-types/TrustedTypePolicyFactory-createPolicy-createXYZTests.tentative.html": [ + "b20fcf2436eac17f9f558cab0c80d1eced6bb1be", "testharness" ], - "trusted-types/Window-open.tentative.html": [ - "c005fbba143f66a9540deebba7988fdea9661558", + "trusted-types/TrustedTypePolicyFactory-createPolicy-exposedTests.tentative.html": [ + "af6e04941c3b6206602bc7f547a3b0c9ef555a11", + "testharness" + ], + "trusted-types/TrustedTypePolicyFactory-createPolicy-nameTests.tentative.html": [ + "6d43e0bafc61f34c17d7d7b751bf69f12d035adf", "testharness" ], - "trusted-types/Window-trustedTypes.tentative.html": [ - "ef4487749dd0c12a00bd3ab42c1353467a6eeb8f", + "trusted-types/Window-TrustedTypes.tentative.html": [ + "8e20e492e6a8484e386d1a08f854bd9b162bd6be", + "testharness" + ], + "trusted-types/Window-open.tentative.html": [ + "172d566e57fc635b551b5d355661db690869b220", "testharness" ], "trusted-types/block-string-assignment-to-DOMParser-parseFromString.tentative.html": [ - "cc575dc0085bce3aa1370fb528e28003ad3c1c2b", + "e5959a425a2feafc95deb4f6b8b1372ad5ad1497", "testharness" ], "trusted-types/block-string-assignment-to-Document-write.tentative.html": [ - "28813d72e0e1833e25658e2210abb9b0a30b2137", + "06532c3b47948c22c5debfae511c5fbd414c64de", "testharness" ], "trusted-types/block-string-assignment-to-Element-insertAdjacentHTML.tentative.html": [ - "ad94b44e8fb7621ba4693ad65377872281f3e9a6", + "1fb3bbd994a4a6904cfc4609430f9188692eda40", "testharness" ], "trusted-types/block-string-assignment-to-Element-outerHTML.tentative.html": [ - "47f1165b1a69366848dd5dd21a2ad2199b9c2e81", + "abb595222ba5e609cff02adc27a8a7239d44103e", "testharness" ], "trusted-types/block-string-assignment-to-HTMLElement-generic.tentative.html": [ - "eae52626190746ad0a8b436f74981009e400232b", + "7b1a5795d7c04448cd204391ba75030a87131150", "testharness" ], "trusted-types/block-string-assignment-to-Location-assign.tentative.html": [ - "8079335bc5861fa723691a0f884cf249e6f63e24", + "cd375b9d016365f01d8e6f95b50d928520c82afa", "testharness" ], "trusted-types/block-string-assignment-to-Location-href.tentative.html": [ - "4e393f92506e00276a4440e1023ac23e7a6138e8", + "14fbcb2fb3cdc6f51e957bbb047ba8900f0d0865", "testharness" ], "trusted-types/block-string-assignment-to-Location-replace.tentative.html": [ - "872f14e144830ed87b51e352f93c32ce85438bfe", + "9d00fcdeb35d36b05adeb7b67f3816169f3ad036", "testharness" ], "trusted-types/block-string-assignment-to-Range-createContextualFragment.tentative.html": [ - "2afa2572c350071b791ee280bce0a1e5135dc2aa", + "ff9be06251dc7965ad1d765d49e45b4ef9f8d728", "testharness" ], "trusted-types/block-string-assignment-to-Window-open.tentative.html": [ - "f5712295d30d7b1d680ad6753dd401d21c0409f9", + "ae4b038dc0c67ab828c3531b3ac01e819114f1ed", "testharness" ], "trusted-types/support/helper.sub.js": [ - "b5435917bec607c97eaa5d75ee7fa2752999cb0a", + "617e02aa6badddd36f01f88241ac8ce7d5670597", "support" ], "uievents/META.yml": [ @@ -646291,40 +651182,100 @@ "86700298dfae66de6f4d026baa29e6e3584320f7", "testharness" ], + "wasm/jsapi/global/constructor.any.js": [ + "7a45cc4191c55684cde187fc73fb9741d6f5c2c5", + "testharness" + ], + "wasm/jsapi/global/toString.any.js": [ + "ca025576c2b49604f053c83002f3a9cc8ef41a7b", + "testharness" + ], + "wasm/jsapi/global/value-set.any.js": [ + "b4e6770f10ed9e3ad55b9ae18ee96deda3ff171e", + "testharness" + ], + "wasm/jsapi/global/valueOf.any.js": [ + "176c5a784698399351eedeaac0ec305aa8ab7b81", + "testharness" + ], "wasm/jsapi/instance/constructor-bad-imports.any.js": [ "24c51c10dc5df9d52c06bfb0715e435b17f24f7a", "testharness" ], "wasm/jsapi/instance/constructor.any.js": [ - "93a3ffda033729d64562a583e823fab05f35f6fe", + "61a8f53a014c192f28a0c25252cf3702561e7191", + "testharness" + ], + "wasm/jsapi/instance/exports.any.js": [ + "31423918720543da2ba25e392267bf541b756242", + "testharness" + ], + "wasm/jsapi/instance/toString.any.js": [ + "08dcb14a50d04f6db196626ddb93f2b50da8f055", "testharness" ], "wasm/jsapi/interface.any.js": [ - "64c1f60da1c7888be994f222af69f401402ae5f4", + "5d76ac56ec5fafde8dde3924df863a2694bd6691", + "testharness" + ], + "wasm/jsapi/memory/buffer.any.js": [ + "b04460b6c5e56cf1fe990e3107aa9efcb4964ed5", "testharness" ], "wasm/jsapi/memory/constructor.any.js": [ - "33256f85e45749cc46842dccbd1ee7c40db41ae5", + "f9907ca6104d8ec76861e43b6b981042d86fb865", + "testharness" + ], + "wasm/jsapi/memory/grow.any.js": [ + "95300399f192b7eab70dd8f07c43f4db37eebe01", + "testharness" + ], + "wasm/jsapi/memory/toString.any.js": [ + "4e15d75ea20f1ebfeba5dc7c8a9a52c253dd01bf", "testharness" ], "wasm/jsapi/module/constructor.any.js": [ - "0f5eecf957e8ca6af851ce12f5c18266a2eb0460", + "32f183fac8738d30cc8a432768da315949320257", "testharness" ], "wasm/jsapi/module/customSections.any.js": [ - "146aa7fd332ca9b061fef51a7378d29f8c9c165e", + "58ac63b61c93a015bfa9d5daab39f8d5b48548da", "testharness" ], "wasm/jsapi/module/exports.any.js": [ - "c7ecdcf6b619b4ab93cf4e878addeb9bed736d4e", + "e63a885a4c34add0f6787d3642de83d9766568d1", "testharness" ], "wasm/jsapi/module/imports.any.js": [ - "522b262f549b9a07c0a426cd474151d3d3e02749", + "640da591d21d8924d261fdc58b8e7cc762187a11", + "testharness" + ], + "wasm/jsapi/module/toString.any.js": [ + "d9231a132ca8bf965f69c3cc81070a2ffe179efa", "testharness" ], + "wasm/jsapi/table/assertions.js": [ + "dde2fd770904207a1f9f287fa48d82954a418f2e", + "support" + ], "wasm/jsapi/table/constructor.any.js": [ - "4aeac10f7adc6e0ec0abc56fa66c0259102798e2", + "e924bdb2ba42c67bcc6d4a949c2eeb50eac63e31", + "testharness" + ], + "wasm/jsapi/table/get-set.any.js": [ + "2bb43a9308d732b5b6fa689c181ac411880c3733", + "testharness" + ], + "wasm/jsapi/table/grow.any.js": [ + "d3efb511e4b1db1efa089322c0a3079705dfbdbd", + "testharness" + ], + "wasm/jsapi/table/length.any.js": [ + "a6a9661dbaddc800cb99b7b8e2b804cb0c8e3c62", + "testharness" + ], + "wasm/jsapi/table/toString.any.js": [ + "e576477910ad3198b446b4addf89ba9a571d020b", "testharness" ], "wasm/jsapi/wasm-constants.js": [ @@ -646335,44 +651286,148 @@ "6e9284e773105db5751c5483ed9333a45272b180", "support" ], - "wasm/resources/blank.html": [ + "wasm/resources/load_wasm.js": [ + "512324639059da8a9d76e9d740d97fc56ebdebc4", + "support" + ], + "wasm/serialization/broadcastchannel-success-and-failure.html": [ + "0d11cc595be2d16ad795be8199ed2ae7abe79974", + "testharness" + ], + "wasm/serialization/broadcastchannel-success.html": [ + "cd5f8d0b56a19148dbd01b4218869f1f0c3526fd", + "testharness" + ], + "wasm/serialization/identity-not-preserved.html": [ + "24bb3b16d8c50600a634d62d4c48c49dfb3b120e", + "testharness" + ], + "wasm/serialization/incrementer.wasm": [ + "47afcdef2a2812acccecd0f203d30d3023593f3d", + "support" + ], + "wasm/serialization/nested-worker-success.any.js": [ + "5388ebcc39b22946957250004577a1966c264a5a", + "testharness" + ], + "wasm/serialization/no-transferring.html": [ + "a0bf11f01dd459b2e3abeb249f725e1e05d1532f", + "testharness" + ], + "wasm/serialization/resources/blank.html": [ "a3c3a4689a62b45b1e429f6b7a94690e556a1259", "support" ], - "wasm/resources/frame.html": [ - "d1c83e114a039a7aeefa8914340911eb2301b5e4", + "wasm/serialization/resources/broadcastchannel-iframe.html": [ + "83e347b5cb35c92aa3cd96263a68b56af366f0e3", + "support" + ], + "wasm/serialization/resources/broadcastchannel-sharedworker.js": [ + "310e0e9358446acaec0f13d8e2fb4437316953c2", + "support" + ], + "wasm/serialization/resources/broadcastchannel-worker.js": [ + "76a8177060498547ab1661319c20d5d5288cd96f", + "support" + ], + "wasm/serialization/resources/create-empty-wasm-module.js": [ + "7326710c9e47d756bbdab1ead2303b108b8f04db", + "support" + ], + "wasm/serialization/resources/echo-iframe.html": [ + "c4fd5824a1c617c21fe8b92483b388d586edf06e", + "support" + ], + "wasm/serialization/resources/echo-worker.js": [ + "cbbde8a73c8c2a63cc97cbe2b6cd7c6d81585b5c", + "support" + ], + "wasm/serialization/resources/incrementer-iframe-domain.sub.html": [ + "d2d18de49950c2508a69545ad95a937898b04532", + "support" + ], + "wasm/serialization/resources/incrementer-iframe.html": [ + "5c8bc0735e207a7c18f12d578276ae3c3b999da5", + "support" + ], + "wasm/serialization/resources/incrementer-popup.html": [ + "660e472b27c086068edeb7fd2bcade536c4bd5e9", + "support" + ], + "wasm/serialization/resources/incrementer-worker-with-channel.js": [ + "0323b3e52e75e894ae40ffc68e904ffc81ded024", + "support" + ], + "wasm/serialization/resources/incrementer-worker.js": [ + "1779ceea520ccfd07da6d595d8a34be62de89428", "support" ], - "wasm/resources/incrementer.wasm": [ + "wasm/serialization/resources/incrementer.wasm": [ "47afcdef2a2812acccecd0f203d30d3023593f3d", "support" ], - "wasm/resources/load_wasm.js": [ - "512324639059da8a9d76e9d740d97fc56ebdebc4", + "wasm/serialization/resources/nested-iframe-1.html": [ + "fe93cc0c4b0fe5b86bf1a12de84fb3fc48ea08a5", "support" ], - "wasm/resources/service-worker.js": [ - "684eaf64878c22afc9ac877b79db7d26f14a3670", + "wasm/serialization/resources/nested-iframe-2.html": [ + "fad52ce9de3977c077b5a22e72ee7b23837ea302", "support" ], - "wasm/wasm_local_iframe_test.html": [ - "0f4fbd0c7191ece3a901b0a065f147c03431a2d4", - "testharness" + "wasm/serialization/resources/nested-iframe-3.html": [ + "7971022b2cdc315d598761a3694838494c2884a8", + "support" ], - "wasm/wasm_serialization_tests.html": [ - "49766c770525bcef9d66ee0b735e410bc5a7ebb8", - "testharness" + "wasm/serialization/resources/nested-iframe-4-incrementer.html": [ + "f419f4bc36cdffafa665e333a7e7bced3d153585", + "support" + ], + "wasm/serialization/resources/serviceworker-failure.js": [ + "39796f9d94a39d2a13ed832544ce781373a20655", + "support" ], - "wasm/wasm_serialization_tests.js": [ - "3cc4166168b08f46ce54511b6364d01f7b8cbeb9", + "wasm/serialization/resources/sharedworker-failure.js": [ + "854c70b9e84e6e6fb1c59f64a06a79646a122576", "support" ], - "wasm/wasm_serialization_worker.js": [ - "3361ed73951770b2a6e881ef093a116d10676939", + "wasm/serialization/resources/test-incrementer.js": [ + "65cb33227a37376c1a0134275d5079d442b443a9", "support" ], - "wasm/wasm_service_worker_test.https.html": [ - "cced4b8f6ecdaa03c6d80793c2f3650b217452a5", + "wasm/serialization/serialization-via-history.html": [ + "35dc17b6701fadf920ce251ec6c63da1c26b6570", + "testharness" + ], + "wasm/serialization/serialization-via-idb.any.js": [ + "1d861c3d3aa1072b1c90332fec7ac993d3b59552", + "testharness" + ], + "wasm/serialization/serialization-via-notifications-api.any.js": [ + "84105651d3b53192f453b9f16bb85163165495cb", + "testharness" + ], + "wasm/serialization/window-domain-success.sub.html": [ + "51d4c5cb0ea0c0c5cf69530876c2f7c19bb3830a", + "testharness" + ], + "wasm/serialization/window-messagechannel-success.html": [ + "e686c8113561d94e860a774771aa69b974696716", + "testharness" + ], + "wasm/serialization/window-serviceworker-failure.https.html": [ + "97c5a1decdb85317930508ece8f306fb80880ca2", + "testharness" + ], + "wasm/serialization/window-sharedworker-failure.html": [ + "667e985a30b53c0ecadfd4c68f6217b87a7a5b98", + "testharness" + ], + "wasm/serialization/window-similar-but-cross-origin-success.sub.html": [ + "070cf0a49a8f0c0ede81b6751e727b44f36c0043", + "testharness" + ], + "wasm/serialization/window-simple-success.html": [ + "6f2ccf465e93a160c73df548fc58774a5040f0e6", "testharness" ], "web-animations/META.yml": [ @@ -646996,7 +652051,7 @@ "support" ], "webaudio/resources/audionodeoptions.js": [ - "0d90a9c630013b9b46ba49c106e0daa89da7032e", + "df0090c6d605fc0ea5fca224de83e0f472618f9a", "support" ], "webaudio/resources/audioparam-testing.js": [ @@ -647008,7 +652063,7 @@ "support" ], "webaudio/resources/audit.js": [ - "7ffa4392b05a15dfacafa7d89c902d977ed23266", + "b7ca020161071437087c349c0e8b59dbf132f764", "support" ], "webaudio/resources/biquad-filters.js": [ @@ -647060,7 +652115,7 @@ "support" ], "webaudio/resources/start-stop-exceptions.js": [ - "9a77e67ed8634ca53237edcdbf71ca26866b23f9", + "0d2ea12f6db8257878087646157242cce37ed507", "support" ], "webaudio/resources/stereopanner-testing.js": [ @@ -647072,7 +652127,7 @@ "support" ], "webaudio/the-audio-api/the-analysernode-interface/ctor-analyser.html": [ - "2112edeeffcf5688357d98b5161e6c3ab2d761ad", + "4e27f842ddeda3e2bdd78da7b8ee3f67062d1a9f", "testharness" ], "webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-basic.html": [ @@ -647084,7 +652139,7 @@ "testharness" ], "webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-sizing.html": [ - "b3de37f119f167469a4337d520345f820a6c4165", + "7ee6a2237edd209256ac2d46be6893a5305383a0", "testharness" ], "webaudio/the-audio-api/the-analysernode-interface/test-analyser-gain.html": [ @@ -647112,7 +652167,7 @@ "support" ], "webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-copy-channel.html": [ - "b71078d8f8094cdc43ba3adfc33d0f6f15931b33", + "e0359953d2e909f69066885515f4a3f3cc00ff02", "testharness" ], "webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-getChannelData.html": [ @@ -647120,11 +652175,11 @@ "testharness" ], "webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer.html": [ - "07a34f07c185f4bc9dcf1b325bb51067610b430a", + "a2c4581c4e80069f227fe29078bc3eb6409c8b4e", "testharness" ], "webaudio/the-audio-api/the-audiobuffer-interface/ctor-audiobuffer.html": [ - "c5aae1ad53235f7b0f10bc3535d9a3fe5150760f", + "9845d5eaba384cced3c63ddbf4df1400b31f4994", "testharness" ], "webaudio/the-audio-api/the-audiobuffersourcenode-interface/.gitkeep": [ @@ -647136,7 +652191,7 @@ "testharness" ], "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-channels.html": [ - "5527f44cc9c93e72214ca228fa53e830a8cfcead", + "f3f16c4c648166dfdb394a41881d4a515d097e86", "testharness" ], "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-ended.html": [ @@ -647224,7 +652279,7 @@ "testharness" ], "webaudio/the-audio-api/the-audionode-interface/audionode-connect-method-chaining.html": [ - "0a8c73160e543d6f9d382b536e5c41f7d29c6e9a", + "4163a8439cd08c1f8cdcb587c569653c2618e021", "testharness" ], "webaudio/the-audio-api/the-audionode-interface/audionode-connect-order.html": [ @@ -647236,15 +652291,15 @@ "testharness" ], "webaudio/the-audio-api/the-audionode-interface/audionode-disconnect-audioparam.html": [ - "c3d3fae2155602bbae7494e0e1439ea1a477b054", + "386614ff2e20e7abd4e511bf5e9d7d492cddfeb3", "testharness" ], "webaudio/the-audio-api/the-audionode-interface/audionode-disconnect.html": [ - "b29c09d395fc2815ee5441fdb06320ad02f2f3f5", + "65b93222d1002e227ab1ad2e29b6e140b65bd9e4", "testharness" ], "webaudio/the-audio-api/the-audionode-interface/audionode.html": [ - "14cfbff7e2754c4ee028c7ead599e87849a60922", + "0b57d27e8e1a7b7339d0e47641cbba27ab419612", "testharness" ], "webaudio/the-audio-api/the-audionode-interface/channel-mode-interp-basic.html": [ @@ -647260,7 +652315,7 @@ "testharness" ], "webaudio/the-audio-api/the-audioparam-interface/audioparam-exceptional-values.html": [ - "c928b3dc165a298dc5ddfd9b7b885c2e7b9c501d", + "982731d33843544d2f70af72a51e9bd878bbf486", "testharness" ], "webaudio/the-audio-api/the-audioparam-interface/audioparam-exponentialRampToValueAtTime.html": [ @@ -647288,7 +652343,7 @@ "testharness" ], "webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueCurve-exceptions.html": [ - "31405ebfcd2aa90bc8be13bd3fe856b1f6e60601", + "9609d5d102638251f686058683a83bbea7b5ad0a", "testharness" ], "webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueCurveAtTime.html": [ @@ -647304,11 +652359,11 @@ "support" ], "webaudio/the-audio-api/the-audioparam-interface/automation-rate.html": [ - "a3c789e2f2cbdb31e540bf5cc58850786b4ed73b", + "a3c11994bbe37f26aa1c2eafbb4f287d559fae34", "testharness" ], "webaudio/the-audio-api/the-audioparam-interface/event-insertion.html": [ - "eab77c494d1161083f1fe73376492b177355995f", + "688d0478235e202859c7939eef65ad383f7a4f36", "testharness" ], "webaudio/the-audio-api/the-audioparam-interface/k-rate-audioworklet.https.html": [ @@ -647412,11 +652467,11 @@ "testharness" ], "webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-construction.https.html": [ - "7cfd423c071b9a8283e291f200615b2e0a69c797", + "8b7704a781b712c0129b650da898ed79baad794c", "testharness" ], "webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-constructor-options.https.html": [ - "31e204cdc8d53bfaf0226c34a0e5daf42c813b61", + "cee9ec82c20f42a5941698fc394e6babb639ace9", "testharness" ], "webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-disconnected-input.https.html": [ @@ -647492,7 +652547,7 @@ "testharness" ], "webaudio/the-audio-api/the-biquadfilternode-interface/biquad-basic.html": [ - "83f53aafb1980bf991f4d12c3a3a472b82df61a6", + "441e98a251187c3cc600299681306d29df11e618", "testharness" ], "webaudio/the-audio-api/the-biquadfilternode-interface/biquad-getFrequencyResponse.html": [ @@ -647544,7 +652599,7 @@ "support" ], "webaudio/the-audio-api/the-channelmergernode-interface/audiochannelmerger-basic.html": [ - "f967f0699a321783fe832464b6e72a2a12021746", + "71a62f176f8eefd9b9168b2c222cc6d1c752d3a5", "testharness" ], "webaudio/the-audio-api/the-channelmergernode-interface/audiochannelmerger-disconnect.html": [ @@ -647560,7 +652615,7 @@ "testharness" ], "webaudio/the-audio-api/the-channelmergernode-interface/ctor-channelmerger.html": [ - "115bd9943490ab09efbff70239167911eb83d933", + "0d6b45c56df0f43a0eac3f364cadca2e4669c6ed", "testharness" ], "webaudio/the-audio-api/the-channelsplitternode-interface/.gitkeep": [ @@ -647568,11 +652623,11 @@ "support" ], "webaudio/the-audio-api/the-channelsplitternode-interface/audiochannelsplitter.html": [ - "e0449919ad5e744065bb0257dddfe9b488511812", + "954c71a96b288530e6c22878fed7a91f42091dc2", "testharness" ], "webaudio/the-audio-api/the-channelsplitternode-interface/ctor-channelsplitter.html": [ - "7fa9d6fa5466d2fbfeec8bbcf0718b80b52d2298", + "9cbb46b6d969a6440fc5b29ee1a20d607912fc83", "testharness" ], "webaudio/the-audio-api/the-constantsourcenode-interface/constant-source-basic.html": [ @@ -647608,7 +652663,7 @@ "testharness" ], "webaudio/the-audio-api/the-convolvernode-interface/convolver-channels.html": [ - "11d6f332a1bbc943bec1ad7391610ffe776b955c", + "ac4f198d7c1449f38ca14963f73b0d3d90b40b5b", "testharness" ], "webaudio/the-audio-api/the-convolvernode-interface/convolver-response-1-chan.html": [ @@ -647624,7 +652679,7 @@ "testharness" ], "webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-already-has-value.html": [ - "31f115da5321ef52be0ee1ba078b726473694b9c", + "c8dbeb941bc48f4f3a92907cb140a29f96567057", "testharness" ], "webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-null.html": [ @@ -647636,7 +652691,7 @@ "testharness" ], "webaudio/the-audio-api/the-convolvernode-interface/ctor-convolver.html": [ - "cf818330060143078cacbecf77724244eee55cf8", + "935ceeb715edd2ffdeb7979d6824736fa82b6d2f", "testharness" ], "webaudio/the-audio-api/the-delaynode-interface/.gitkeep": [ @@ -647664,7 +652719,7 @@ "testharness" ], "webaudio/the-audio-api/the-delaynode-interface/delaynode-maxdelaylimit.html": [ - "7bbff410650c3bd234c47f080697705b088bd6a4", + "caf2f85dfd459b2d48526b8f4c13b37b2bceaddb", "testharness" ], "webaudio/the-audio-api/the-delaynode-interface/delaynode-scheduling.html": [ @@ -647684,7 +652739,7 @@ "support" ], "webaudio/the-audio-api/the-dynamicscompressornode-interface/ctor-dynamicscompressor.html": [ - "98d5dbfded1e2f10e32b14444279760fa2cdeec1", + "c2460dfa1ddd26a5c2e199873c0b28189275ff83", "testharness" ], "webaudio/the-audio-api/the-dynamicscompressornode-interface/dynamicscompressor-basic.html": [ @@ -647724,7 +652779,7 @@ "testharness" ], "webaudio/the-audio-api/the-iirfilternode-interface/iirfilter-basic.html": [ - "79c40dc084753d48970212eafd97ef531c0ae402", + "7828f05226151ebf7d6c7ec984cae1f90ef848d2", "testharness" ], "webaudio/the-audio-api/the-iirfilternode-interface/iirfilter-getFrequencyResponse.html": [ @@ -647760,7 +652815,7 @@ "support" ], "webaudio/the-audio-api/the-offlineaudiocontext-interface/ctor-offlineaudiocontext.html": [ - "f480ec8ce51f929417b922adf60a2f9ede800fcd", + "4b6863103622c5fb248dee3e3eb20d955275d037", "testharness" ], "webaudio/the-audio-api/the-offlineaudiocontext-interface/current-time-block-size.html": [ @@ -647772,7 +652827,7 @@ "support" ], "webaudio/the-audio-api/the-oscillatornode-interface/ctor-oscillator.html": [ - "aaf77aec555b720b343a9e63adae924c730510dc", + "36bf604b296c63b213d99408ab38937c62a755dc", "testharness" ], "webaudio/the-audio-api/the-pannernode-interface/.gitkeep": [ @@ -647780,7 +652835,7 @@ "support" ], "webaudio/the-audio-api/the-pannernode-interface/ctor-panner.html": [ - "95e914a75f6784a76af79fcfce2e372ddb865814", + "98a171ad059eaf9b8e24f3f46db4658f76773f19", "testharness" ], "webaudio/the-audio-api/the-pannernode-interface/distance-exponential.html": [ @@ -647840,7 +652895,7 @@ "support" ], "webaudio/the-audio-api/the-stereopanner-interface/ctor-stereopanner.html": [ - "caa99aa4031a22f8c538e5622470560a50c4d5bc", + "9409f1ffce2110c177332388988d7ddb559d3ae2", "testharness" ], "webaudio/the-audio-api/the-stereopanner-interface/no-dezippering.html": [ @@ -648256,7 +653311,7 @@ "wdspec" ], "webdriver/tests/execute_script/execute.py": [ - "9e220d02687e885ebcd682606f7a673cf36b6db1", + "2af16c1e5e8a3bed01c5703db24a1d399a0e2270", "wdspec" ], "webdriver/tests/execute_script/json_serialize_windowproxy.py": [ @@ -648355,10 +653410,26 @@ "f0e95d12f14e2fb4337476a8ccf883a06c0e5c5d", "wdspec" ], + "webdriver/tests/get_element_attribute/__init__.py": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], "webdriver/tests/get_element_attribute/get.py": [ "02a155bcee6626037f424fbf387458ea46e6c206", "wdspec" ], + "webdriver/tests/get_element_css_value/__init__.py": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "webdriver/tests/get_element_css_value/get.py": [ + "88a56e1ad45f906f7e1b255350eada15bd549bfc", + "wdspec" + ], + "webdriver/tests/get_element_css_value/user_prompts.py": [ + "529b6ae9183d3c7a343521e739cfe0b788c4b290", + "wdspec" + ], "webdriver/tests/get_element_property/__init__.py": [ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", "support" @@ -648371,6 +653442,18 @@ "16a098536fde814b5ac8bcb35dac01ac38649d2e", "wdspec" ], + "webdriver/tests/get_element_rect/__init__.py": [ + "abf1a91367517107b3b690466a4b570c0a3b7cab", + "support" + ], + "webdriver/tests/get_element_rect/get.py": [ + "433e2f6bf8b428136a36b81138386e62eb257daf", + "wdspec" + ], + "webdriver/tests/get_element_rect/user_prompts.py": [ + "ec1047bd3893d51f4b2be9597d87ba4a63b6a353", + "wdspec" + ], "webdriver/tests/get_element_tag_name/__init__.py": [ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", "support" @@ -648459,6 +653542,18 @@ "d049d835f2fc60df7296da08a013793ae7e398ca", "testharness" ], + "webdriver/tests/is_element_enabled/__init__.py": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "webdriver/tests/is_element_enabled/enabled.py": [ + "dd56084d8d0eca15b7b6d46491bbd9f0a64cef40", + "wdspec" + ], + "webdriver/tests/is_element_enabled/user_prompts.py": [ + "bd8bc81bdfcce13e5cdbfec336749cd668bd68ef", + "wdspec" + ], "webdriver/tests/is_element_selected/__init__.py": [ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", "support" @@ -648524,7 +653619,7 @@ "wdspec" ], "webdriver/tests/new_session/invalid_capabilities.py": [ - "83f93ea22f7ed28fa28ab05d36387df828716026", + "f31ce3b8b6fd5f8e4a9ff4d0137debdb7dacdea4", "wdspec" ], "webdriver/tests/new_session/merge.py": [ @@ -648548,7 +653643,7 @@ "support" ], "webdriver/tests/new_session/support/create.py": [ - "85ae1cd4ea85e0a1e0d712b1a7803d6066ab8739", + "475fe5a424fe609f0a7e55164e56378e229e4885", "support" ], "webdriver/tests/new_session/timeouts.py": [ @@ -648580,7 +653675,7 @@ "support" ], "webdriver/tests/send_alert_text/send.py": [ - "edc37d6edb483c232401676f6c11ab7512774605", + "6dbc03f94019abf6fc467ae2baf8fb9d21823e64", "wdspec" ], "webdriver/tests/set_timeouts/__init__.py": [ @@ -648588,7 +653683,11 @@ "support" ], "webdriver/tests/set_timeouts/set.py": [ - "e603e217ec7d73bf7bc59f1d2e8687a89c818c47", + "a78ab2e68e82ba28c15748bb98239b3d232dc9f1", + "wdspec" + ], + "webdriver/tests/set_timeouts/user_prompts.py": [ + "a98d87e9b2e2ca252a3ed7cf215a20bd1c299818", "wdspec" ], "webdriver/tests/set_window_rect/__init__.py": [ @@ -648616,7 +653715,7 @@ "support" ], "webdriver/tests/support/asserts.py": [ - "44c76a96b0997100a0201a5ffafd20e9967758ec", + "2d305a0f3bec08d6b773541e556258416e737f7f", "support" ], "webdriver/tests/support/defaults.py": [ @@ -648632,7 +653731,7 @@ "support" ], "webdriver/tests/support/inline.py": [ - "1ef379093cbc653f1e457f456896d8ff33b497a3", + "3bf56c84bedb47e024a88983fa15c232ddba7899", "support" ], "webdriver/tests/support/merge_dictionaries.py": [ @@ -648667,6 +653766,30 @@ "907be66a149e8196c87760544140636d9625bbb9", "wdspec" ], + "webdriver/tests/take_element_screenshot/__init__.py": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "webdriver/tests/take_element_screenshot/screenshot.py": [ + "e4d2869af4f3a50aa4da87b499d84b75254967a7", + "wdspec" + ], + "webdriver/tests/take_element_screenshot/user_prompts.py": [ + "fa239999e4f3479526423498f5718a455ffde53f", + "wdspec" + ], + "webdriver/tests/take_screenshot/__init__.py": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "support" + ], + "webdriver/tests/take_screenshot/screenshot.py": [ + "d3153710f7b108f167a4ff82b9ef288bcfa9440c", + "wdspec" + ], + "webdriver/tests/take_screenshot/user_prompts.py": [ + "4d4840f08ba6f57f3e22bda72a0071128bea9be0", + "wdspec" + ], "webgl/META.yml": [ "8e6b680d91c9b81b85e3ce010c5fb9fe338f37bf", "support" @@ -649467,8 +654590,16 @@ "07e9736441285536e0549c55b110a562b49276cc", "testharness" ], + "webrtc/RTCQuicStream.https.html": [ + "1e08016d75af57307d922b9876605e8152f92768", + "testharness" + ], + "webrtc/RTCQuicTransport-helper.js": [ + "50d9e6666a2d3bf8b3128f94b3c902579fabc0f5", + "support" + ], "webrtc/RTCQuicTransport.https.html": [ - "8eaa4aa78fad878732a8fd290a7566e2bd3aa0f5", + "703f424a63851996b3708fe66caff63c7e0f5502", "testharness" ], "webrtc/RTCRtpCapabilities-helper.js": [ @@ -649604,7 +654735,7 @@ "testharness" ], "webrtc/no-media-call.html": [ - "c4979e8521478a0f8175a5f945cd217f8c60d548", + "8f4f5962d4af9de8fd25b9a64aedb49c7b0a0824", "testharness" ], "webrtc/promises-call.html": [ @@ -649620,7 +654751,7 @@ "testharness" ], "webrtc/simplecall.https.html": [ - "6adefe774923472f1fb1ddc4f952f44dd4247f1f", + "681c42d4cd855dcf53543a7add231d2665c381a9", "testharness" ], "webrtc/tools/.eslintrc.js": [ @@ -650888,7 +656019,11 @@ "support" ], "webusb/resources/open-in-iframe.html": [ - "0b04a3e03aaa5e18574a56ad4959e1601f1ef432", + "ec80bff3c234495112d780ac975288727965021e", + "support" + ], + "webusb/resources/open-in-worker.js": [ + "b715184e04dd575e1e1d5a9bb4731e58ed6eecb5", "support" ], "webusb/resources/usb-allowed-by-feature-policy-worker.js": [ @@ -650900,7 +656035,7 @@ "support" ], "webusb/resources/usb-helpers.js": [ - "93740920dee8f259fc266cd4927b5972985df77e", + "a3a4a31ba889f719c68cd2ca4f263bc56d67b7a6", "support" ], "webusb/usb-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html": [ @@ -650924,7 +656059,7 @@ "testharness" ], "webusb/usb-disabled-by-feature-policy.https.sub.html": [ - "3a8a9183591605a69081e0e29beb7a2358def75b", + "97e66b2a373f73de5fd705cdaabb60d5625127f5", "testharness" ], "webusb/usb-disabled-by-feature-policy.https.sub.html.headers": [ @@ -650936,7 +656071,7 @@ "testharness" ], "webusb/usb.https.window.js": [ - "ee26619cf2224a31e32a393b7edb0869a0598704", + "8c9e676cdfc3346ec8f057f99355fb75b708e3c1", "testharness" ], "webusb/usb.serviceworker.https.html": [ @@ -650947,22 +656082,42 @@ "c509adfef0d4c0cd3e68cc84467ac7db1140d643", "support" ], + "webusb/usbAlternateInterface.https.any.js": [ + "e5ef3844ae44008db5424275c760572a0147a518", + "testharness" + ], + "webusb/usbConfiguration.https.any.js": [ + "e7d1c7fb146dcd7b50dab6088f8a0e1f14259c99", + "testharness" + ], "webusb/usbConnectionEvent.https.any.js": [ "9d4f60abc48733da6bf06ed7673228fb4a31d628", "testharness" ], "webusb/usbDevice-iframe.https.html": [ - "02b2c5010fb566a485bf6887295a05cae3822e37", + "75bad9e0c9f5223fe9b6427db1ea7afdb23dd727", + "testharness" + ], + "webusb/usbDevice-worker.https.html": [ + "119f5d6688235e396db1d118cec8b61324e46d8a", "testharness" ], "webusb/usbDevice.https.any.js": [ - "da7df081b8b16c61eff714bd4302c21123d0ddc5", + "046de82b1bd8be1fc620535615fd7f1483653f78", + "testharness" + ], + "webusb/usbEndpoint.https.any.js": [ + "e57639c3d4b9e40606978fbb17bf9d604e65337b", "testharness" ], "webusb/usbInTransferResult.https.any.js": [ "4cdb58e467b5770f5a08329ac59c209bde56fa60", "testharness" ], + "webusb/usbInterface.https.any.js": [ + "7fbf660bbce014f3ba2595382749ebaafef284aa", + "testharness" + ], "webusb/usbIsochronousInTransferPacket.https.any.js": [ "ee992f998b6078d6d65dfcfd4b5e33a31dcae10f", "testharness" @@ -655287,6 +660442,26 @@ "33000ee860c358700a108ac98663c40a99229438", "testharness" ], + "worklets/audio-worklet-credentials.https.html": [ + "9d867db7ce0a672c3ee016937a610fb1cdbc011c", + "testharness" + ], + "worklets/audio-worklet-csp.https.html": [ + "ef148a4a098472b7a76bac9ad99fb52f964b2ace", + "testharness" + ], + "worklets/audio-worklet-import.https.html": [ + "cff063a4361bd0244ee7a7a352be849f1b7118a6", + "testharness" + ], + "worklets/audio-worklet-referrer.https.html": [ + "f258cd5a452d57002d041211cb44ee6f27f0b3aa", + "testharness" + ], + "worklets/audio-worklet-service-worker-interception.https.html": [ + "479ae176f9d4a2ff52d7a643a4943df2ef72453d", + "testharness" + ], "worklets/idlharness.worker.js": [ "827dd02c4c53292b534677454c11264f415678a5", "testharness" @@ -655448,7 +660623,7 @@ "support" ], "worklets/resources/worklet-test-utils.js": [ - "499999f22df3aad2053b7da6852f8e7aeea2bde8", + "797edc9e563a7e089379d6bb0947da06f205ddc7", "support" ], "wpt": [ @@ -655932,7 +661107,7 @@ "testharness" ], "xhr/headers-normalize-response.htm": [ - "466b0d977cc6cdba12190a27dfe42e6452ea98d8", + "84f2fc8582127b9a8e271887d420b3ea7a87696a", "testharness" ], "xhr/historical.html": [ @@ -656952,7 +662127,7 @@ "testharness" ], "xhr/timeout-multiple-fetches.html": [ - "30d6b736c56d5576483c12a7413dd809d27d89e8", + "4f4998c4285222bf4bdf41c3e0c1c27e913d2149", "testharness" ], "xhr/timeout-sync.htm": [ diff --git a/tests/wpt/metadata/css/CSS2/floats/floats-in-table-caption-001.html.ini b/tests/wpt/metadata/css/CSS2/floats/floats-in-table-caption-001.html.ini deleted file mode 100644 index 86715ffc9c2..00000000000 --- a/tests/wpt/metadata/css/CSS2/floats/floats-in-table-caption-001.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[floats-in-table-caption-001.html] - expected: FAIL diff --git a/tests/wpt/metadata/css/CSS2/linebox/anonymous-inline-inherit-001.html.ini b/tests/wpt/metadata/css/CSS2/linebox/anonymous-inline-inherit-001.html.ini new file mode 100644 index 00000000000..98fac618bce --- /dev/null +++ b/tests/wpt/metadata/css/CSS2/linebox/anonymous-inline-inherit-001.html.ini @@ -0,0 +1,2 @@ +[anonymous-inline-inherit-001.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/CSS2/visudet/line-height-204.html.ini b/tests/wpt/metadata/css/CSS2/visudet/line-height-204.html.ini new file mode 100644 index 00000000000..3d28990c283 --- /dev/null +++ b/tests/wpt/metadata/css/CSS2/visudet/line-height-204.html.ini @@ -0,0 +1,2 @@ +[line-height-204.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-fonts/variations/at-font-face-font-matching.html.ini b/tests/wpt/metadata/css/css-fonts/variations/at-font-face-font-matching.html.ini index 04cfbdc7eee..9b8f6a6602d 100644 --- a/tests/wpt/metadata/css/css-fonts/variations/at-font-face-font-matching.html.ini +++ b/tests/wpt/metadata/css/css-fonts/variations/at-font-face-font-matching.html.ini @@ -41,9 +41,6 @@ [Matching font-weight: '430' should prefer '340 398' over '501 550'] expected: FAIL - [Matching font-weight: '430' should prefer '501 550' over '502 560'] - expected: FAIL - [Matching font-weight: '500' should prefer '500' over '450 460'] expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/i18n/css3-text-line-break-opclns-050.html.ini b/tests/wpt/metadata/css/css-text/i18n/css3-text-line-break-opclns-050.html.ini deleted file mode 100644 index 3e0b732a20f..00000000000 --- a/tests/wpt/metadata/css/css-text/i18n/css3-text-line-break-opclns-050.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[css3-text-line-break-opclns-050.html] - expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/i18n/css3-text-line-break-opclns-054.html.ini b/tests/wpt/metadata/css/css-text/i18n/css3-text-line-break-opclns-054.html.ini deleted file mode 100644 index 247462a9f2f..00000000000 --- a/tests/wpt/metadata/css/css-text/i18n/css3-text-line-break-opclns-054.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[css3-text-line-break-opclns-054.html] - expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/i18n/css3-text-line-break-opclns-059.html.ini b/tests/wpt/metadata/css/css-text/i18n/css3-text-line-break-opclns-059.html.ini deleted file mode 100644 index 926f5631fe8..00000000000 --- a/tests/wpt/metadata/css/css-text/i18n/css3-text-line-break-opclns-059.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[css3-text-line-break-opclns-059.html] - expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/i18n/css3-text-line-break-opclns-164.html.ini b/tests/wpt/metadata/css/css-text/i18n/css3-text-line-break-opclns-164.html.ini deleted file mode 100644 index 2853708ba60..00000000000 --- a/tests/wpt/metadata/css/css-text/i18n/css3-text-line-break-opclns-164.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[css3-text-line-break-opclns-164.html] - expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/i18n/css3-text-line-break-opclns-165.html.ini b/tests/wpt/metadata/css/css-text/i18n/css3-text-line-break-opclns-165.html.ini deleted file mode 100644 index 8bcf1b74f6e..00000000000 --- a/tests/wpt/metadata/css/css-text/i18n/css3-text-line-break-opclns-165.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[css3-text-line-break-opclns-165.html] - expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/i18n/zh/css-text-line-break-zh-in-strict.html.ini b/tests/wpt/metadata/css/css-text/i18n/zh/css-text-line-break-zh-in-strict.html.ini index f32b05ecd88..102a231a234 100644 --- a/tests/wpt/metadata/css/css-text/i18n/zh/css-text-line-break-zh-in-strict.html.ini +++ b/tests/wpt/metadata/css/css-text/i18n/zh/css-text-line-break-zh-in-strict.html.ini @@ -11,3 +11,6 @@ [FE19 PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS may NOT appear at line start if zh and strict] expected: FAIL + [22EF MIDLINE HORIZONTAL ELLIPSIS may NOT appear at line start if zh and strict] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-transforms/css-transforms-3d-on-anonymous-block-001.html.ini b/tests/wpt/metadata/css/css-transforms/css-transforms-3d-on-anonymous-block-001.html.ini new file mode 100644 index 00000000000..bbb2e5f171e --- /dev/null +++ b/tests/wpt/metadata/css/css-transforms/css-transforms-3d-on-anonymous-block-001.html.ini @@ -0,0 +1,2 @@ +[css-transforms-3d-on-anonymous-block-001.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/selectors/webkit-pseudo-element.html.ini b/tests/wpt/metadata/css/selectors/webkit-pseudo-element.html.ini new file mode 100644 index 00000000000..8502ae0ce91 --- /dev/null +++ b/tests/wpt/metadata/css/selectors/webkit-pseudo-element.html.ini @@ -0,0 +1,13 @@ +[webkit-pseudo-element.html] + [webkit-prefixed pseudo-element selectors should be accessible from CSSOM] + expected: FAIL + + [qS and qSA shouldn't throw exception] + expected: FAIL + + [webkit-prefix without dash is invalid] + expected: FAIL + + [rules include webkit-prefixed pseudo-element should be cascaded] + expected: FAIL + diff --git a/tests/wpt/metadata/custom-elements/parser/parser-sets-attributes-and-children.html.ini b/tests/wpt/metadata/custom-elements/parser/parser-sets-attributes-and-children.html.ini index b49624917df..b6001e8bba9 100644 --- a/tests/wpt/metadata/custom-elements/parser/parser-sets-attributes-and-children.html.ini +++ b/tests/wpt/metadata/custom-elements/parser/parser-sets-attributes-and-children.html.ini @@ -1,2 +1,2 @@ [parser-sets-attributes-and-children.html] - expected: TIMEOUT + expected: CRASH diff --git a/tests/wpt/metadata/encoding/idlharness.any.js.ini b/tests/wpt/metadata/encoding/idlharness.any.js.ini index 1e892e5e427..7eed0794ca3 100644 --- a/tests/wpt/metadata/encoding/idlharness.any.js.ini +++ b/tests/wpt/metadata/encoding/idlharness.any.js.ini @@ -22,6 +22,66 @@ [idlharness] expected: FAIL + [TextDecoderStream interface: attribute readable] + expected: FAIL + + [TextEncoderStream interface object length] + expected: FAIL + + [TextDecoderStream interface object length] + expected: FAIL + + [TextEncoderStream interface: existence and properties of interface prototype object's "constructor" property] + expected: FAIL + + [TextEncoderStream interface: existence and properties of interface object] + expected: FAIL + + [TextDecoderStream interface: existence and properties of interface prototype object's @@unscopables property] + expected: FAIL + + [TextEncoderStream interface object name] + expected: FAIL + + [TextDecoderStream interface: attribute fatal] + expected: FAIL + + [TextEncoderStream interface: existence and properties of interface prototype object's @@unscopables property] + expected: FAIL + + [TextDecoderStream interface: existence and properties of interface prototype object's "constructor" property] + expected: FAIL + + [TextDecoderStream interface: attribute ignoreBOM] + expected: FAIL + + [TextEncoderStream interface: attribute writable] + expected: FAIL + + [TextDecoderStream interface: existence and properties of interface object] + expected: FAIL + + [TextDecoderStream interface: attribute encoding] + expected: FAIL + + [TextEncoderStream interface: attribute readable] + expected: FAIL + + [TextEncoderStream interface: attribute encoding] + expected: FAIL + + [TextDecoderStream interface: existence and properties of interface prototype object] + expected: FAIL + + [TextDecoderStream interface object name] + expected: FAIL + + [TextEncoderStream interface: existence and properties of interface prototype object] + expected: FAIL + + [TextDecoderStream interface: attribute writable] + expected: FAIL + [idlharness.any.worker.html] [Untitled] @@ -30,6 +90,66 @@ [idlharness] expected: FAIL + [TextDecoderStream interface: attribute readable] + expected: FAIL + + [TextEncoderStream interface object length] + expected: FAIL + + [TextDecoderStream interface object length] + expected: FAIL + + [TextEncoderStream interface: existence and properties of interface prototype object's "constructor" property] + expected: FAIL + + [TextEncoderStream interface: existence and properties of interface object] + expected: FAIL + + [TextDecoderStream interface: existence and properties of interface prototype object's @@unscopables property] + expected: FAIL + + [TextEncoderStream interface object name] + expected: FAIL + + [TextDecoderStream interface: attribute fatal] + expected: FAIL + + [TextEncoderStream interface: existence and properties of interface prototype object's @@unscopables property] + expected: FAIL + + [TextDecoderStream interface: existence and properties of interface prototype object's "constructor" property] + expected: FAIL + + [TextDecoderStream interface: attribute ignoreBOM] + expected: FAIL + + [TextEncoderStream interface: attribute writable] + expected: FAIL + + [TextDecoderStream interface: existence and properties of interface object] + expected: FAIL + + [TextDecoderStream interface: attribute encoding] + expected: FAIL + + [TextEncoderStream interface: attribute readable] + expected: FAIL + + [TextEncoderStream interface: attribute encoding] + expected: FAIL + + [TextDecoderStream interface: existence and properties of interface prototype object] + expected: FAIL + + [TextDecoderStream interface object name] + expected: FAIL + + [TextEncoderStream interface: existence and properties of interface prototype object] + expected: FAIL + + [TextDecoderStream interface: attribute writable] + expected: FAIL + [idlharness.any.serviceworker.html] expected: TIMEOUT diff --git a/tests/wpt/metadata/encoding/single-byte-decoder.html.ini b/tests/wpt/metadata/encoding/single-byte-decoder.html.ini index 28ee1901e6a..f72b3d38837 100644 --- a/tests/wpt/metadata/encoding/single-byte-decoder.html.ini +++ b/tests/wpt/metadata/encoding/single-byte-decoder.html.ini @@ -2,96 +2,538 @@ type: testharness [single-byte-decoder.html?document] - expected: CRASH + [windows-1254: iso_8859-9 (document.characterSet and document.inputEncoding)] + expected: FAIL -[single-byte-decoder.html?XMLHttpRequest] - expected: CRASH - [ISO-8859-2: iso_8859-2:1987 (XMLHttpRequest)] + [ISO-8859-8: iso-8859-8 (document.characterSet and document.inputEncoding)] expected: FAIL - [ISO-8859-3: iso_8859-3:1988 (XMLHttpRequest)] + [ISO-8859-4: iso_8859-4 (document.characterSet and document.inputEncoding)] expected: FAIL - [ISO-8859-4: iso_8859-4:1988 (XMLHttpRequest)] + [ISO-8859-6: arabic (document.characterSet and document.inputEncoding)] expected: FAIL - [ISO-8859-5: iso_8859-5:1988 (XMLHttpRequest)] + [KOI8-U: koi8-u (document.characterSet and document.inputEncoding)] expected: FAIL - [ISO-8859-6: iso_8859-6:1987 (XMLHttpRequest)] + [ISO-8859-2: iso8859-2 (document.characterSet and document.inputEncoding)] expected: FAIL - [ISO-8859-7: iso_8859-7:1987 (XMLHttpRequest)] + [ISO-8859-5: iso-8859-5 (document.characterSet and document.inputEncoding)] expected: FAIL - [ISO-8859-8: iso_8859-8:1988 (XMLHttpRequest)] + [windows-1252: csisolatin1 (document.characterSet and document.inputEncoding)] expected: FAIL - [windows-1252: iso_8859-1:1987 (XMLHttpRequest)] + [ISO-8859-2: latin2 (document.characterSet and document.inputEncoding)] expected: FAIL - [windows-1254: iso_8859-9:1989 (XMLHttpRequest)] - expected: TIMEOUT + [windows-874: dos-874 (document.characterSet and document.inputEncoding)] + expected: FAIL - [windows-1258: cp1258 (XMLHttpRequest)] - expected: TIMEOUT + [windows-874: iso885911 (document.characterSet and document.inputEncoding)] + expected: FAIL - [windows-1254: iso_8859-9 (XMLHttpRequest)] - expected: TIMEOUT + [ISO-8859-6: iso_8859-6 (document.characterSet and document.inputEncoding)] + expected: FAIL - [windows-1254: iso88599 (XMLHttpRequest)] - expected: TIMEOUT + [windows-1257: windows-1257 (document.characterSet and document.inputEncoding)] + expected: FAIL - [windows-1254: iso-8859-9 (XMLHttpRequest)] - expected: TIMEOUT + [windows-1252: latin1 (document.characterSet and document.inputEncoding)] + expected: FAIL - [windows-1258: x-cp1258 (XMLHttpRequest)] - expected: TIMEOUT + [KOI8-R: koi (document.characterSet and document.inputEncoding)] + expected: FAIL - [windows-1257: windows-1257 (XMLHttpRequest)] - expected: TIMEOUT + [windows-1252: windows-1252 (document.characterSet and document.inputEncoding)] + expected: FAIL - [windows-1254: windows-1254 (XMLHttpRequest)] - expected: TIMEOUT + [ISO-8859-5: csisolatincyrillic (document.characterSet and document.inputEncoding)] + expected: FAIL - [x-mac-cyrillic: x-mac-ukrainian (XMLHttpRequest)] - expected: TIMEOUT + [windows-1254: iso-ir-148 (document.characterSet and document.inputEncoding)] + expected: FAIL - [windows-1254: csisolatin5 (XMLHttpRequest)] - expected: TIMEOUT + [x-mac-cyrillic: x-mac-cyrillic (document.characterSet and document.inputEncoding)] + expected: FAIL - [windows-1257: cp1257 (XMLHttpRequest)] - expected: TIMEOUT + [ISO-8859-6: iso-8859-6-e (document.characterSet and document.inputEncoding)] + expected: FAIL - [windows-1255: x-cp1255 (XMLHttpRequest)] - expected: TIMEOUT + [windows-1255: cp1255 (document.characterSet and document.inputEncoding)] + expected: FAIL - [windows-1257: x-cp1257 (XMLHttpRequest)] - expected: TIMEOUT + [ISO-8859-3: iso-ir-109 (document.characterSet and document.inputEncoding)] + expected: FAIL - [windows-1254: cp1254 (XMLHttpRequest)] - expected: TIMEOUT + [windows-1254: cp1254 (document.characterSet and document.inputEncoding)] + expected: FAIL - [windows-1254: x-cp1254 (XMLHttpRequest)] - expected: TIMEOUT + [ISO-8859-13: iso8859-13 (document.characterSet and document.inputEncoding)] + expected: FAIL - [windows-1254: latin5 (XMLHttpRequest)] - expected: TIMEOUT + [windows-1252: cp1252 (document.characterSet and document.inputEncoding)] + expected: FAIL - [windows-1255: cp1255 (XMLHttpRequest)] - expected: TIMEOUT + [ISO-8859-4: l4 (document.characterSet and document.inputEncoding)] + expected: FAIL - [windows-1254: iso-ir-148 (XMLHttpRequest)] - expected: TIMEOUT + [ISO-8859-6: iso-ir-127 (document.characterSet and document.inputEncoding)] + expected: FAIL - [windows-1258: windows-1258 (XMLHttpRequest)] - expected: TIMEOUT + [windows-1254: latin5 (document.characterSet and document.inputEncoding)] + expected: FAIL - [windows-1255: windows-1255 (XMLHttpRequest)] - expected: TIMEOUT + [ISO-8859-14: iso885914 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [IBM866: cp866 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [KOI8-R: koi8 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-7: csisolatingreek (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-7: greek8 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-7: iso88597 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [macintosh: mac (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-4: csisolatin4 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-7: iso_8859-7 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-1250: windows-1250 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-7: elot_928 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-874: tis-620 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-3: iso8859-3 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-1250: cp1250 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-874: windows-874 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-4: iso_8859-4:1988 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-2: iso-8859-2 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [macintosh: csmacintosh (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-15: iso_8859-15 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-3: iso-8859-3 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-1253: windows-1253 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [KOI8-R: koi8-r (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-1251: windows-1251 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-1254: csisolatin5 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-1254: x-cp1254 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-3: csisolatin3 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-5: iso8859-5 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-3: l3 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-10: iso885910 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-1254: l5 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-1252: l1 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-5: iso88595 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-6: ecma-114 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-14: iso8859-14 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-6: iso-8859-6 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [KOI8-R: koi8_r (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-1258: windows-1258 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-1252: x-cp1252 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-13: iso885913 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-8: iso-ir-138 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-8: iso-8859-8-e (document.characterSet and document.inputEncoding)] + expected: FAIL + + [IBM866: ibm866 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-14: iso-8859-14 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-8: csisolatinhebrew (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-1252: cp819 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-10: latin6 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-1253: x-cp1253 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-1252: us-ascii (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-7: iso_8859-7:1987 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-1252: iso8859-1 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-3: latin3 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-10: l6 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-2: iso88592 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-10: iso-8859-10 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-1254: windows-1254 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [IBM866: 866 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-7: iso-8859-7 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-8: iso8859-8 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-874: iso-8859-11 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-1252: ascii (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-3: iso_8859-3 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-1252: ibm819 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-1252: iso88591 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-1258: cp1258 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-7: iso8859-7 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-1252: iso-ir-100 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-5: iso_8859-5 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [IBM866: csibm866 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-8: hebrew (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-5: iso-ir-144 (document.characterSet and document.inputEncoding)] + expected: FAIL - [x-mac-cyrillic: x-mac-cyrillic (XMLHttpRequest)] - expected: TIMEOUT + [windows-1254: iso8859-9 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-15: l9 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-6: iso_8859-6:1987 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-1255: x-cp1255 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-5: cyrillic (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-1256: cp1256 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-5: iso_8859-5:1988 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-6: csiso88596i (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-6: iso8859-6 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-6: csiso88596e (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-1251: x-cp1251 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-2: csisolatin2 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-4: iso8859-4 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-7: greek (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-7: sun_eu_greek (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-4: latin4 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-1255: windows-1255 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-1254: iso_8859-9:1989 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-6: iso88596 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [macintosh: macintosh (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-1252: iso_8859-1:1987 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-1254: iso-8859-9 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-7: ecma-118 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-15: iso8859-15 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-2: l2 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-3: iso88593 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-1256: x-cp1256 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-1251: cp1251 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-15: iso885915 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-4: iso88594 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-2: iso_8859-2 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-3: iso_8859-3:1988 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [x-mac-cyrillic: x-mac-ukrainian (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-13: iso-8859-13 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-2: iso_8859-2:1987 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-874: iso8859-11 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-1256: windows-1256 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-8: csiso88598e (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-6: asmo-708 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-4: iso-ir-110 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-1254: iso88599 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-1257: cp1257 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [macintosh: x-mac-roman (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-15: csisolatin9 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-6: iso-8859-6-i (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-10: csisolatin6 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-8-I: csiso88598i (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-10: iso8859-10 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-1250: x-cp1250 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-1258: x-cp1258 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-1252: iso_8859-1 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-8: visual (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-1253: cp1253 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-8: iso_8859-8:1988 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-1252: ansi_x3.4-1968 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-7: iso-ir-126 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [KOI8-R: cskoi8r (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-8-I: iso-8859-8-i (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-10: iso-ir-157 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [KOI8-U: koi8-ru (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-1257: x-cp1257 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-8: iso_8859-8 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-8-I: logical (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-8: iso88598 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-2: iso-ir-101 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-15: iso-8859-15 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [windows-1252: iso-8859-1 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-16: iso-8859-16 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-4: iso-8859-4 (document.characterSet and document.inputEncoding)] + expected: FAIL + + [ISO-8859-6: csisolatinarabic (document.characterSet and document.inputEncoding)] + expected: FAIL + + +[single-byte-decoder.html?XMLHttpRequest] + [ISO-8859-2: iso_8859-2:1987 (XMLHttpRequest)] + expected: FAIL + + [ISO-8859-3: iso_8859-3:1988 (XMLHttpRequest)] + expected: FAIL + + [ISO-8859-4: iso_8859-4:1988 (XMLHttpRequest)] + expected: FAIL + + [ISO-8859-5: iso_8859-5:1988 (XMLHttpRequest)] + expected: FAIL + + [ISO-8859-6: iso_8859-6:1987 (XMLHttpRequest)] + expected: FAIL + + [ISO-8859-7: iso_8859-7:1987 (XMLHttpRequest)] + expected: FAIL + + [ISO-8859-8: iso_8859-8:1988 (XMLHttpRequest)] + expected: FAIL + + [windows-1252: iso_8859-1:1987 (XMLHttpRequest)] + expected: FAIL + + [windows-1254: iso_8859-9:1989 (XMLHttpRequest)] + expected: FAIL [single-byte-decoder.html?TextDecoder] diff --git a/tests/wpt/metadata/encoding/streams/backpressure.any.js.ini b/tests/wpt/metadata/encoding/streams/backpressure.any.js.ini new file mode 100644 index 00000000000..ae376965575 --- /dev/null +++ b/tests/wpt/metadata/encoding/streams/backpressure.any.js.ini @@ -0,0 +1,17 @@ +[backpressure.any.sharedworker.html] + [backpressure] + expected: FAIL + + +[backpressure.any.html] + [backpressure] + expected: FAIL + + +[backpressure.any.serviceworker.html] + expected: TIMEOUT + +[backpressure.any.worker.html] + [backpressure] + expected: FAIL + diff --git a/tests/wpt/metadata/encoding/streams/decode-bad-chunks.any.js.ini b/tests/wpt/metadata/encoding/streams/decode-bad-chunks.any.js.ini new file mode 100644 index 00000000000..072b3593998 --- /dev/null +++ b/tests/wpt/metadata/encoding/streams/decode-bad-chunks.any.js.ini @@ -0,0 +1,17 @@ +[decode-bad-chunks.any.html] + [decode-bad-chunks] + expected: FAIL + + +[decode-bad-chunks.any.worker.html] + [decode-bad-chunks] + expected: FAIL + + +[decode-bad-chunks.any.serviceworker.html] + expected: TIMEOUT + +[decode-bad-chunks.any.sharedworker.html] + [decode-bad-chunks] + expected: FAIL + diff --git a/tests/wpt/metadata/encoding/streams/decode-ignore-bom.any.js.ini b/tests/wpt/metadata/encoding/streams/decode-ignore-bom.any.js.ini new file mode 100644 index 00000000000..259b7667bd8 --- /dev/null +++ b/tests/wpt/metadata/encoding/streams/decode-ignore-bom.any.js.ini @@ -0,0 +1,83 @@ +[decode-ignore-bom.any.html] + [ignoreBOM should work for encoding utf-16be, split at character 1] + expected: FAIL + + [ignoreBOM should work for encoding utf-16be, split at character 0] + expected: FAIL + + [ignoreBOM should work for encoding utf-16be, split at character 3] + expected: FAIL + + [ignoreBOM should work for encoding utf-16be, split at character 2] + expected: FAIL + + [ignoreBOM should work for encoding utf-8, split at character 0] + expected: FAIL + + [ignoreBOM should work for encoding utf-8, split at character 1] + expected: FAIL + + [ignoreBOM should work for encoding utf-8, split at character 2] + expected: FAIL + + [ignoreBOM should work for encoding utf-8, split at character 3] + expected: FAIL + + [ignoreBOM should work for encoding utf-16le, split at character 3] + expected: FAIL + + [ignoreBOM should work for encoding utf-16le, split at character 2] + expected: FAIL + + [ignoreBOM should work for encoding utf-16le, split at character 1] + expected: FAIL + + [ignoreBOM should work for encoding utf-16le, split at character 0] + expected: FAIL + + +[decode-ignore-bom.any.serviceworker.html] + expected: TIMEOUT + +[decode-ignore-bom.any.sharedworker.html] + [decode-ignore-bom] + expected: FAIL + + +[decode-ignore-bom.any.worker.html] + [ignoreBOM should work for encoding utf-16be, split at character 1] + expected: FAIL + + [ignoreBOM should work for encoding utf-16be, split at character 0] + expected: FAIL + + [ignoreBOM should work for encoding utf-16be, split at character 3] + expected: FAIL + + [ignoreBOM should work for encoding utf-16be, split at character 2] + expected: FAIL + + [ignoreBOM should work for encoding utf-8, split at character 0] + expected: FAIL + + [ignoreBOM should work for encoding utf-8, split at character 1] + expected: FAIL + + [ignoreBOM should work for encoding utf-8, split at character 2] + expected: FAIL + + [ignoreBOM should work for encoding utf-8, split at character 3] + expected: FAIL + + [ignoreBOM should work for encoding utf-16le, split at character 3] + expected: FAIL + + [ignoreBOM should work for encoding utf-16le, split at character 2] + expected: FAIL + + [ignoreBOM should work for encoding utf-16le, split at character 1] + expected: FAIL + + [ignoreBOM should work for encoding utf-16le, split at character 0] + expected: FAIL + diff --git a/tests/wpt/metadata/encoding/streams/decode-incomplete-input.any.js.ini b/tests/wpt/metadata/encoding/streams/decode-incomplete-input.any.js.ini new file mode 100644 index 00000000000..6972b401446 --- /dev/null +++ b/tests/wpt/metadata/encoding/streams/decode-incomplete-input.any.js.ini @@ -0,0 +1,23 @@ +[decode-incomplete-input.any.serviceworker.html] + expected: TIMEOUT + +[decode-incomplete-input.any.sharedworker.html] + [decode-incomplete-input] + expected: FAIL + + +[decode-incomplete-input.any.worker.html] + [incomplete input with error mode "fatal" should error the stream] + expected: FAIL + + [incomplete input with error mode "replacement" should end with a replacement character] + expected: FAIL + + +[decode-incomplete-input.any.html] + [incomplete input with error mode "fatal" should error the stream] + expected: FAIL + + [incomplete input with error mode "replacement" should end with a replacement character] + expected: FAIL + diff --git a/tests/wpt/metadata/encoding/streams/decode-non-utf8.any.js.ini b/tests/wpt/metadata/encoding/streams/decode-non-utf8.any.js.ini new file mode 100644 index 00000000000..6510f801f28 --- /dev/null +++ b/tests/wpt/metadata/encoding/streams/decode-non-utf8.any.js.ini @@ -0,0 +1,71 @@ +[decode-non-utf8.any.sharedworker.html] + [decode-non-utf8] + expected: FAIL + + +[decode-non-utf8.any.worker.html] + [TextDecoderStream should be able to reject invalid sequences in Shift_JIS] + expected: FAIL + + [TextDecoderStream should be able to decode invalid sequences in Shift_JIS] + expected: FAIL + + [TextDecoderStream should be able to reject invalid sequences in UTF-16LE] + expected: FAIL + + [TextDecoderStream should be able to reject invalid sequences in UTF-16BE] + expected: FAIL + + [TextDecoderStream should be able to decode Shift_JIS] + expected: FAIL + + [TextDecoderStream should be able to decode invalid sequences in UTF-16LE] + expected: FAIL + + [TextDecoderStream should be able to decode UTF-16BE] + expected: FAIL + + [TextDecoderStream should be able to decode invalid sequences in UTF-16BE] + expected: FAIL + + [TextDecoderStream should be able to decode UTF-16LE] + expected: FAIL + + [TextDecoderStream should be able to decode ISO-8859-14] + expected: FAIL + + +[decode-non-utf8.any.html] + [TextDecoderStream should be able to reject invalid sequences in Shift_JIS] + expected: FAIL + + [TextDecoderStream should be able to decode invalid sequences in Shift_JIS] + expected: FAIL + + [TextDecoderStream should be able to reject invalid sequences in UTF-16LE] + expected: FAIL + + [TextDecoderStream should be able to reject invalid sequences in UTF-16BE] + expected: FAIL + + [TextDecoderStream should be able to decode Shift_JIS] + expected: FAIL + + [TextDecoderStream should be able to decode invalid sequences in UTF-16LE] + expected: FAIL + + [TextDecoderStream should be able to decode UTF-16BE] + expected: FAIL + + [TextDecoderStream should be able to decode invalid sequences in UTF-16BE] + expected: FAIL + + [TextDecoderStream should be able to decode UTF-16LE] + expected: FAIL + + [TextDecoderStream should be able to decode ISO-8859-14] + expected: FAIL + + +[decode-non-utf8.any.serviceworker.html] + expected: TIMEOUT diff --git a/tests/wpt/metadata/encoding/streams/decode-split-character.any.js.ini b/tests/wpt/metadata/encoding/streams/decode-split-character.any.js.ini new file mode 100644 index 00000000000..affec6b9557 --- /dev/null +++ b/tests/wpt/metadata/encoding/streams/decode-split-character.any.js.ini @@ -0,0 +1,77 @@ +[decode-split-character.any.serviceworker.html] + expected: TIMEOUT + +[decode-split-character.any.sharedworker.html] + [decode-split-character] + expected: FAIL + + +[decode-split-character.any.worker.html] + [an empty chunk inside a code point split between chunks should not change the output; split point = 3] + expected: FAIL + + [an empty chunk inside a code point split between chunks should not change the output; split point = 1] + expected: FAIL + + [an empty chunk inside a code point split between chunks should not change the output; split point = 2] + expected: FAIL + + [a code point should be emitted as soon as all bytes are available] + expected: FAIL + + [an empty chunk inside a code point split between chunks should not change the output; split point = 4] + expected: FAIL + + [an empty chunk inside a code point split between chunks should not change the output; split point = 5] + expected: FAIL + + [an empty chunk inside a code point split between chunks should not change the output; split point = 6] + expected: FAIL + + [a code point split between chunks should not be emitted until all bytes are available; split point = 4] + expected: FAIL + + [a code point split between chunks should not be emitted until all bytes are available; split point = 5] + expected: FAIL + + [a code point split between chunks should not be emitted until all bytes are available; split point = 2] + expected: FAIL + + [a code point split between chunks should not be emitted until all bytes are available; split point = 3] + expected: FAIL + + +[decode-split-character.any.html] + [an empty chunk inside a code point split between chunks should not change the output; split point = 3] + expected: FAIL + + [an empty chunk inside a code point split between chunks should not change the output; split point = 1] + expected: FAIL + + [an empty chunk inside a code point split between chunks should not change the output; split point = 2] + expected: FAIL + + [a code point should be emitted as soon as all bytes are available] + expected: FAIL + + [an empty chunk inside a code point split between chunks should not change the output; split point = 4] + expected: FAIL + + [an empty chunk inside a code point split between chunks should not change the output; split point = 5] + expected: FAIL + + [an empty chunk inside a code point split between chunks should not change the output; split point = 6] + expected: FAIL + + [a code point split between chunks should not be emitted until all bytes are available; split point = 4] + expected: FAIL + + [a code point split between chunks should not be emitted until all bytes are available; split point = 5] + expected: FAIL + + [a code point split between chunks should not be emitted until all bytes are available; split point = 2] + expected: FAIL + + [a code point split between chunks should not be emitted until all bytes are available; split point = 3] + expected: FAIL + diff --git a/tests/wpt/metadata/encoding/streams/decode-utf8.any.js.ini b/tests/wpt/metadata/encoding/streams/decode-utf8.any.js.ini new file mode 100644 index 00000000000..e0dbbd4d512 --- /dev/null +++ b/tests/wpt/metadata/encoding/streams/decode-utf8.any.js.ini @@ -0,0 +1,35 @@ +[decode-utf8.any.serviceworker.html] + expected: TIMEOUT + +[decode-utf8.any.sharedworker.html] + [decode-utf8] + expected: FAIL + + +[decode-utf8.any.html] + [decoding one UTF-8 chunk should give one output string] + expected: FAIL + + [a trailing empty chunk should be ignored] + expected: FAIL + + [decoding an empty chunk should give no output chunks] + expected: FAIL + + [an initial empty chunk should be ignored] + expected: FAIL + + +[decode-utf8.any.worker.html] + [decoding one UTF-8 chunk should give one output string] + expected: FAIL + + [a trailing empty chunk should be ignored] + expected: FAIL + + [decoding an empty chunk should give no output chunks] + expected: FAIL + + [an initial empty chunk should be ignored] + expected: FAIL + diff --git a/tests/wpt/metadata/encoding/streams/encode-bad-chunks.any.js.ini b/tests/wpt/metadata/encoding/streams/encode-bad-chunks.any.js.ini new file mode 100644 index 00000000000..ddde7b046bc --- /dev/null +++ b/tests/wpt/metadata/encoding/streams/encode-bad-chunks.any.js.ini @@ -0,0 +1,47 @@ +[encode-bad-chunks.any.html] + [a chunk that cannot be converted to a string should error the streams] + expected: FAIL + + [input of type numeric should be converted correctly to string] + expected: FAIL + + [input of type undefined should be converted correctly to string] + expected: FAIL + + [input of type array should be converted correctly to string] + expected: FAIL + + [input of type object should be converted correctly to string] + expected: FAIL + + [input of type null should be converted correctly to string] + expected: FAIL + + +[encode-bad-chunks.any.worker.html] + [a chunk that cannot be converted to a string should error the streams] + expected: FAIL + + [input of type numeric should be converted correctly to string] + expected: FAIL + + [input of type undefined should be converted correctly to string] + expected: FAIL + + [input of type array should be converted correctly to string] + expected: FAIL + + [input of type object should be converted correctly to string] + expected: FAIL + + [input of type null should be converted correctly to string] + expected: FAIL + + +[encode-bad-chunks.any.sharedworker.html] + [encode-bad-chunks] + expected: FAIL + + +[encode-bad-chunks.any.serviceworker.html] + expected: TIMEOUT diff --git a/tests/wpt/metadata/encoding/streams/encode-utf8.any.js.ini b/tests/wpt/metadata/encoding/streams/encode-utf8.any.js.ini new file mode 100644 index 00000000000..1a887518165 --- /dev/null +++ b/tests/wpt/metadata/encoding/streams/encode-utf8.any.js.ini @@ -0,0 +1,125 @@ +[encode-utf8.any.html] + [two leading chunks should result in two replacement characters] + expected: FAIL + + [characters in the ISO-8859-1 range should be encoded correctly] + expected: FAIL + + [a terminal unpaired trailing surrogate should immediately be replaced] + expected: FAIL + + [a character split between chunks should be correctly encoded] + expected: FAIL + + [an empty string should result in no output chunk] + expected: FAIL + + [an unmatched surrogate at the end of a chunk followed by an ascii character in the next chunk should be replaced with the replacement character at the start of the next output chunk] + expected: FAIL + + [a leading empty chunk should be ignored] + expected: FAIL + + [encoding one string of UTF-8 should give one complete chunk] + expected: FAIL + + [a leading surrogate chunk should be carried past empty chunks] + expected: FAIL + + [a leading surrogate chunk should error when it is clear it didn't form a pair] + expected: FAIL + + [a trailing empty chunk should be ignored] + expected: FAIL + + [a plain ASCII chunk should be converted] + expected: FAIL + + [a character following one split between chunks should be correctly encoded] + expected: FAIL + + [an unmatched surrogate at the end of a chunk followed by a plane 1 character split into two chunks should result in the encoded plane 1 character appearing in the last output chunk] + expected: FAIL + + [an unmatched surrogate at the end of a chunk followed by an astral character in the next chunk should be replaced with the replacement character at the start of the next output chunk] + expected: FAIL + + [two consecutive astral characters each split down the middle should be correctly reassembled] + expected: FAIL + + [a non-terminal unpaired leading surrogate should immediately be replaced] + expected: FAIL + + [two consecutive astral characters each split down the middle with an invalid surrogate in the middle should be correctly encoded] + expected: FAIL + + [a stream ending in a leading surrogate should emit a replacement character as a final chunk] + expected: FAIL + + +[encode-utf8.any.worker.html] + [two leading chunks should result in two replacement characters] + expected: FAIL + + [characters in the ISO-8859-1 range should be encoded correctly] + expected: FAIL + + [a terminal unpaired trailing surrogate should immediately be replaced] + expected: FAIL + + [a character split between chunks should be correctly encoded] + expected: FAIL + + [an empty string should result in no output chunk] + expected: FAIL + + [an unmatched surrogate at the end of a chunk followed by an ascii character in the next chunk should be replaced with the replacement character at the start of the next output chunk] + expected: FAIL + + [a leading empty chunk should be ignored] + expected: FAIL + + [encoding one string of UTF-8 should give one complete chunk] + expected: FAIL + + [a leading surrogate chunk should be carried past empty chunks] + expected: FAIL + + [a leading surrogate chunk should error when it is clear it didn't form a pair] + expected: FAIL + + [a trailing empty chunk should be ignored] + expected: FAIL + + [a plain ASCII chunk should be converted] + expected: FAIL + + [a character following one split between chunks should be correctly encoded] + expected: FAIL + + [an unmatched surrogate at the end of a chunk followed by a plane 1 character split into two chunks should result in the encoded plane 1 character appearing in the last output chunk] + expected: FAIL + + [an unmatched surrogate at the end of a chunk followed by an astral character in the next chunk should be replaced with the replacement character at the start of the next output chunk] + expected: FAIL + + [two consecutive astral characters each split down the middle should be correctly reassembled] + expected: FAIL + + [a non-terminal unpaired leading surrogate should immediately be replaced] + expected: FAIL + + [two consecutive astral characters each split down the middle with an invalid surrogate in the middle should be correctly encoded] + expected: FAIL + + [a stream ending in a leading surrogate should emit a replacement character as a final chunk] + expected: FAIL + + +[encode-utf8.any.sharedworker.html] + [encode-utf8] + expected: FAIL + + +[encode-utf8.any.serviceworker.html] + expected: TIMEOUT diff --git a/tests/wpt/metadata/encoding/streams/readable-writable-properties.any.js.ini b/tests/wpt/metadata/encoding/streams/readable-writable-properties.any.js.ini new file mode 100644 index 00000000000..b4b8335f34f --- /dev/null +++ b/tests/wpt/metadata/encoding/streams/readable-writable-properties.any.js.ini @@ -0,0 +1,23 @@ +[readable-writable-properties.any.html] + [TextDecoderStream readable and writable properties must pass brand checks] + expected: FAIL + + [TextEncoderStream readable and writable properties must pass brand checks] + expected: FAIL + + +[readable-writable-properties.any.serviceworker.html] + expected: TIMEOUT + +[readable-writable-properties.any.worker.html] + [TextDecoderStream readable and writable properties must pass brand checks] + expected: FAIL + + [TextEncoderStream readable and writable properties must pass brand checks] + expected: FAIL + + +[readable-writable-properties.any.sharedworker.html] + [readable-writable-properties] + expected: FAIL + diff --git a/tests/wpt/metadata/encoding/streams/realms.window.js.ini b/tests/wpt/metadata/encoding/streams/realms.window.js.ini new file mode 100644 index 00000000000..059cf2b7b77 --- /dev/null +++ b/tests/wpt/metadata/encoding/streams/realms.window.js.ini @@ -0,0 +1,2 @@ +[realms.window.html] + expected: TIMEOUT diff --git a/tests/wpt/metadata/fetch/api/basic/header-value-null-byte.any.js.ini b/tests/wpt/metadata/fetch/api/basic/header-value-null-byte.any.js.ini new file mode 100644 index 00000000000..96389a8b64e --- /dev/null +++ b/tests/wpt/metadata/fetch/api/basic/header-value-null-byte.any.js.ini @@ -0,0 +1,11 @@ +[header-value-null-byte.any.html] + +[header-value-null-byte.any.sharedworker.html] + [header-value-null-byte] + expected: FAIL + + +[header-value-null-byte.any.worker.html] + +[header-value-null-byte.any.serviceworker.html] + expected: TIMEOUT diff --git a/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch-in-iframe.html.ini b/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch-in-iframe.html.ini index c6509e035dd..0d630fb814a 100644 --- a/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch-in-iframe.html.ini +++ b/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch-in-iframe.html.ini @@ -1,4 +1,5 @@ [fetch-in-iframe.html] + expected: CRASH [Untitled] expected: FAIL @@ -7,9 +8,13 @@ [Cross-origin fetch in a data: iframe load fails if the server blocks cross-origin loads with a 'Cross-Origin-Resource-Policy: same-origin' response header.] expected: FAIL + [Cross-origin fetch in a data: iframe load fails if the server blocks cross-origin loads with a 'Cross-Origin-Resource-Policy: same-site' response header.] expected: FAIL + [Cross-origin fetch in a cross origin iframe load fails if the server blocks cross-origin loads with a 'Cross-Origin-Resource-Policy: same-origin' response header.] expected: FAIL + [Cross-origin fetch in a cross origin iframe load fails if the server blocks cross-origin loads with a 'Cross-Origin-Resource-Policy: same-site' response header.] expected: FAIL + diff --git a/tests/wpt/metadata/fetch/sec-metadata/redirect/cross-site-redirect.tentative.https.sub.html.ini b/tests/wpt/metadata/fetch/sec-metadata/redirect/cross-site-redirect.tentative.https.sub.html.ini new file mode 100644 index 00000000000..ff5d3abc74b --- /dev/null +++ b/tests/wpt/metadata/fetch/sec-metadata/redirect/cross-site-redirect.tentative.https.sub.html.ini @@ -0,0 +1,10 @@ +[cross-site-redirect.tentative.https.sub.html] + [Cross-Site -> Cross-Site redirect] + expected: FAIL + + [Cross-Site -> Same-Site redirect] + expected: FAIL + + [Cross-Site -> Same-Origin redirect] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/sec-metadata/redirect/multiple-redirect-cross-site.tentative.https.sub.html.ini b/tests/wpt/metadata/fetch/sec-metadata/redirect/multiple-redirect-cross-site.tentative.https.sub.html.ini new file mode 100644 index 00000000000..ea5a2ec1a12 --- /dev/null +++ b/tests/wpt/metadata/fetch/sec-metadata/redirect/multiple-redirect-cross-site.tentative.https.sub.html.ini @@ -0,0 +1,4 @@ +[multiple-redirect-cross-site.tentative.https.sub.html] + [Same-Origin -> Cross-Site -> Same-Origin redirect] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/sec-metadata/redirect/multiple-redirect-same-site.tentative.https.sub.html.ini b/tests/wpt/metadata/fetch/sec-metadata/redirect/multiple-redirect-same-site.tentative.https.sub.html.ini new file mode 100644 index 00000000000..cb4a0801f78 --- /dev/null +++ b/tests/wpt/metadata/fetch/sec-metadata/redirect/multiple-redirect-same-site.tentative.https.sub.html.ini @@ -0,0 +1,4 @@ +[multiple-redirect-same-site.tentative.https.sub.html] + [Same-Origin -> Same-Site -> Same-Origin redirect] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/sec-metadata/redirect/same-origin-redirect.tentative.https.sub.html.ini b/tests/wpt/metadata/fetch/sec-metadata/redirect/same-origin-redirect.tentative.https.sub.html.ini new file mode 100644 index 00000000000..0ec11a20c11 --- /dev/null +++ b/tests/wpt/metadata/fetch/sec-metadata/redirect/same-origin-redirect.tentative.https.sub.html.ini @@ -0,0 +1,10 @@ +[same-origin-redirect.tentative.https.sub.html] + [Same-Origin -> Cross-Site redirect] + expected: FAIL + + [Same-Origin -> Same-Site redirect] + expected: FAIL + + [Same-Origin -> Same-Origin redirect] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/sec-metadata/redirect/same-site-redirect.tentative.https.sub.html.ini b/tests/wpt/metadata/fetch/sec-metadata/redirect/same-site-redirect.tentative.https.sub.html.ini new file mode 100644 index 00000000000..72a5cbe072e --- /dev/null +++ b/tests/wpt/metadata/fetch/sec-metadata/redirect/same-site-redirect.tentative.https.sub.html.ini @@ -0,0 +1,10 @@ +[same-site-redirect.tentative.https.sub.html] + [Same-Site -> Same-Origin redirect] + expected: FAIL + + [Same-Site -> Same-Site redirect] + expected: FAIL + + [Same-Site -> Cross-Site redirect] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini deleted file mode 100644 index 87b07c3e670..00000000000 --- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[traverse_the_history_1.html] - [Multiple history traversals from the same task] - expected: FAIL - diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini deleted file mode 100644 index 385376c7321..00000000000 --- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[traverse_the_history_4.html] - [Multiple history traversals, last would be aborted] - expected: FAIL - diff --git a/tests/wpt/metadata/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini b/tests/wpt/metadata/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini index 20865f493ec..9579b42287e 100644 --- a/tests/wpt/metadata/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini +++ b/tests/wpt/metadata/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini @@ -30,3 +30,6 @@ [Set HTTP URL frame location.protocol to data] expected: FAIL + [Set HTTP URL frame location.protocol to x] + expected: FAIL + diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-block-formatting-context.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-block-formatting-context.html.ini new file mode 100644 index 00000000000..176a6ca1f30 --- /dev/null +++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-block-formatting-context.html.ini @@ -0,0 +1,4 @@ +[fieldset-block-formatting-context.html] + [The fieldset element: block formatting context] + expected: FAIL + diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-gap.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-gap.html.ini new file mode 100644 index 00000000000..d1ea43f0322 --- /dev/null +++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-gap.html.ini @@ -0,0 +1,2 @@ +[fieldset-border-gap.html] + expected: FAIL diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-radius-hittest.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-radius-hittest.html.ini new file mode 100644 index 00000000000..685d73d1454 --- /dev/null +++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-radius-hittest.html.ini @@ -0,0 +1,4 @@ +[fieldset-border-radius-hittest.html] + [fieldset, border-radius and hit testing] + expected: FAIL + diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-containing-block.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-containing-block.html.ini new file mode 100644 index 00000000000..7fddee706f4 --- /dev/null +++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-containing-block.html.ini @@ -0,0 +1,2 @@ +[fieldset-containing-block.html] + expected: FAIL diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-default-style.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-default-style.html.ini new file mode 100644 index 00000000000..e76c8d1b88d --- /dev/null +++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-default-style.html.ini @@ -0,0 +1,4 @@ +[fieldset-default-style.html] + [fieldset default style] + expected: FAIL + diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-display.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-display.html.ini new file mode 100644 index 00000000000..d4af9337d23 --- /dev/null +++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-display.html.ini @@ -0,0 +1,58 @@ +[fieldset-display.html] + [fieldset with display: ruby-text] + expected: FAIL + + [fieldset with display: table-footer-group] + expected: FAIL + + [fieldset with display: table-column] + expected: FAIL + + [fieldset with display: table-row] + expected: FAIL + + [fieldset with display: table-cell] + expected: FAIL + + [fieldset with display: table] + expected: FAIL + + [fieldset with display: list-item] + expected: FAIL + + [fieldset with display: flow] + expected: FAIL + + [fieldset with display: table-header-group] + expected: FAIL + + [fieldset with display: inline-table] + expected: FAIL + + [fieldset with display: ruby] + expected: FAIL + + [fieldset with display: flow-root] + expected: FAIL + + [fieldset with display: ruby-base] + expected: FAIL + + [fieldset with display: table-caption] + expected: FAIL + + [fieldset with display: run-in] + expected: FAIL + + [fieldset with display: table-column-group] + expected: FAIL + + [fieldset with display: ruby-base-container] + expected: FAIL + + [fieldset with display: table-row-group] + expected: FAIL + + [fieldset with display: ruby-text-container] + expected: FAIL + diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-grid.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-grid.html.ini new file mode 100644 index 00000000000..209486495d3 --- /dev/null +++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-grid.html.ini @@ -0,0 +1,7 @@ +[fieldset-grid.html] + [Inline grid] + expected: FAIL + + [Grid] + expected: FAIL + diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-list-item.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-list-item.html.ini new file mode 100644 index 00000000000..c72edb18366 --- /dev/null +++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-list-item.html.ini @@ -0,0 +1,2 @@ +[fieldset-list-item.html] + expected: FAIL diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-overflow-hidden.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-overflow-hidden.html.ini new file mode 100644 index 00000000000..7e24c228ec0 --- /dev/null +++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-overflow-hidden.html.ini @@ -0,0 +1,2 @@ +[fieldset-overflow-hidden.html] + expected: FAIL diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-painting-order.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-painting-order.html.ini new file mode 100644 index 00000000000..4f698bdc824 --- /dev/null +++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-painting-order.html.ini @@ -0,0 +1,2 @@ +[fieldset-painting-order.html] + expected: FAIL diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-vertical.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-vertical.html.ini new file mode 100644 index 00000000000..69849101170 --- /dev/null +++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-vertical.html.ini @@ -0,0 +1,2 @@ +[fieldset-vertical.html] + expected: FAIL diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-block-formatting-context.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-block-formatting-context.html.ini new file mode 100644 index 00000000000..de5de2f7800 --- /dev/null +++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-block-formatting-context.html.ini @@ -0,0 +1,10 @@ +[legend-block-formatting-context.html] + [rendered-legend] + expected: FAIL + + [in-fieldset-second-child] + expected: FAIL + + [in-fieldset-descendant] + expected: FAIL + diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display.html.ini new file mode 100644 index 00000000000..e10f148a1ba --- /dev/null +++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display.html.ini @@ -0,0 +1,73 @@ +[legend-display.html] + [rendered legend with display: ruby-base-container] + expected: FAIL + + [rendered legend with display: ruby-text-container] + expected: FAIL + + [rendered legend with display: flow] + expected: FAIL + + [rendered legend with display: flow-root] + expected: FAIL + + [rendered legend with display: table-column-group] + expected: FAIL + + [rendered legend with display: table-row] + expected: FAIL + + [rendered legend with display: table-caption] + expected: FAIL + + [rendered legend with display: inline-grid] + expected: FAIL + + [rendered legend with display: grid] + expected: FAIL + + [rendered legend with display: flex] + expected: FAIL + + [rendered legend with display: table-row-group] + expected: FAIL + + [rendered legend with display: table-cell] + expected: FAIL + + [rendered legend with display: ruby] + expected: FAIL + + [rendered legend with display: list-item] + expected: FAIL + + [rendered legend with display: table-header-group] + expected: FAIL + + [rendered legend with display: table-footer-group] + expected: FAIL + + [rendered legend with display: table] + expected: FAIL + + [rendered legend with display: inline-flex] + expected: FAIL + + [rendered legend with display: run-in] + expected: FAIL + + [rendered legend with display: inline-block] + expected: FAIL + + [rendered legend with display: ruby-text] + expected: FAIL + + [rendered legend with display: ruby-base] + expected: FAIL + + [rendered legend with display: inline] + expected: FAIL + + [rendered legend with display: table-column] + expected: FAIL + diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float-abspos.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float-abspos.html.ini new file mode 100644 index 00000000000..0a55a47c4ba --- /dev/null +++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float-abspos.html.ini @@ -0,0 +1,13 @@ +[legend-float-abspos.html] + [dynamic changes to float] + expected: FAIL + + [dynamic changes to position] + expected: FAIL + + [inserting a new legend and removing it again] + expected: FAIL + + [no dynamic changes] + expected: FAIL + diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-grid-flex-multicol.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-grid-flex-multicol.html.ini new file mode 100644 index 00000000000..d4bd3869fdf --- /dev/null +++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-grid-flex-multicol.html.ini @@ -0,0 +1,10 @@ +[legend-grid-flex-multicol.html] + [multicol] + expected: FAIL + + [inline-grid] + expected: FAIL + + [grid] + expected: FAIL + diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item.html.ini new file mode 100644 index 00000000000..84b3539d05c --- /dev/null +++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item.html.ini @@ -0,0 +1,2 @@ +[legend-list-item.html] + expected: FAIL diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-position-relative.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-position-relative.html.ini new file mode 100644 index 00000000000..f1efd104b95 --- /dev/null +++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-position-relative.html.ini @@ -0,0 +1,2 @@ +[legend-position-relative.html] + expected: FAIL diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-sans-fieldset-display.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-sans-fieldset-display.html.ini new file mode 100644 index 00000000000..3d009c9c9c2 --- /dev/null +++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-sans-fieldset-display.html.ini @@ -0,0 +1,7 @@ +[legend-sans-fieldset-display.html] + [.ruby] + expected: FAIL + + [.rt] + expected: FAIL + diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend.html.ini new file mode 100644 index 00000000000..af60f72f9b8 --- /dev/null +++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend.html.ini @@ -0,0 +1,4 @@ +[legend.html] + [rendered-legend: width] + expected: FAIL + diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/min-inline-size.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/min-inline-size.html.ini new file mode 100644 index 00000000000..45e26f2671f --- /dev/null +++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/min-inline-size.html.ini @@ -0,0 +1,16 @@ +[min-inline-size.html] + [horizontal-tb ] + expected: FAIL + + [vertical-rl ] + expected: FAIL + + [vertical-lr ] + expected: FAIL + + [vertical-lr override] + expected: FAIL + + [vertical-rl override] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/script-onerror-insertion-point-2.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/script-onerror-insertion-point-2.html.ini deleted file mode 100644 index 178680e5d14..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/script-onerror-insertion-point-2.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[script-onerror-insertion-point-2.html] - expected: TIMEOUT diff --git a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/quirks.window.js.ini b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/quirks.window.js.ini new file mode 100644 index 00000000000..ac0f3147f9f --- /dev/null +++ b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/quirks.window.js.ini @@ -0,0 +1,13 @@ +[quirks.window.html] + [document.open() sets document to no-quirks mode (write new doctype)] + expected: FAIL + + [document.open() sets document to no-quirks mode, not limited-quirks mode] + expected: FAIL + + [document.open() sets document to no-quirks mode (write no doctype)] + expected: FAIL + + [document.open() sets document to no-quirks mode (write old doctype)] + expected: FAIL + diff --git a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/readiness.window.js.ini b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/readiness.window.js.ini new file mode 100644 index 00000000000..1f1bf468470 --- /dev/null +++ b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/readiness.window.js.ini @@ -0,0 +1,4 @@ +[readiness.window.html] + [document.open() and readiness] + expected: FAIL + diff --git a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/url-fragment.window.js.ini b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/url-fragment.window.js.ini new file mode 100644 index 00000000000..743f32638ad --- /dev/null +++ b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/url-fragment.window.js.ini @@ -0,0 +1,4 @@ +[url-fragment.window.html] + [document.open() and document's URL containing a fragment (entry is not relevant)] + expected: FAIL + diff --git a/tests/wpt/metadata/quirks/unitless-length/excluded-properties-001.html.ini b/tests/wpt/metadata/quirks/unitless-length/excluded-properties-001.html.ini new file mode 100644 index 00000000000..05a16975210 --- /dev/null +++ b/tests/wpt/metadata/quirks/unitless-length/excluded-properties-001.html.ini @@ -0,0 +1,145 @@ +[excluded-properties-001.html] + [Property grid-auto-rows does not support quirky length] + expected: FAIL + + [Property background-position-x does not support quirky length] + expected: FAIL + + [Property scroll-padding-left does not support quirky length] + expected: FAIL + + [Property grid-template-rows does not support quirky length] + expected: FAIL + + [Property padding-block-end does not support quirky length] + expected: FAIL + + [Property inline-size does not support quirky length] + expected: FAIL + + [Property padding-inline-end does not support quirky length] + expected: FAIL + + [Property scroll-margin-inline-end does not support quirky length] + expected: FAIL + + [Property border-bottom-left-radius does not support quirky length] + expected: FAIL + + [Property scroll-padding-inline-start does not support quirky length] + expected: FAIL + + [Property offset-distance does not support quirky length] + expected: FAIL + + [Property grid-auto-columns does not support quirky length] + expected: FAIL + + [Property padding-inline-start does not support quirky length] + expected: FAIL + + [Property scroll-padding-block-end does not support quirky length] + expected: FAIL + + [Property outline-width does not support quirky length] + expected: FAIL + + [Property column-rule-width does not support quirky length] + expected: FAIL + + [Property scroll-margin-bottom does not support quirky length] + expected: FAIL + + [Property grid-template-columns does not support quirky length] + expected: FAIL + + [Property perspective does not support quirky length] + expected: FAIL + + [Property margin-block-end does not support quirky length] + expected: FAIL + + [Property margin-block-start does not support quirky length] + expected: FAIL + + [Property scroll-margin-right does not support quirky length] + expected: FAIL + + [Property margin-inline-end does not support quirky length] + expected: FAIL + + [Property scroll-padding-right does not support quirky length] + expected: FAIL + + [Property block-size does not support quirky length] + expected: FAIL + + [Property scroll-padding-bottom does not support quirky length] + expected: FAIL + + [Property scroll-margin-top does not support quirky length] + expected: FAIL + + [Property background-position-y does not support quirky length] + expected: FAIL + + [Property border-top-left-radius does not support quirky length] + expected: FAIL + + [Property column-width does not support quirky length] + expected: FAIL + + [Property min-block-size does not support quirky length] + expected: FAIL + + [Property outline-offset does not support quirky length] + expected: FAIL + + [Property flex-basis does not support quirky length] + expected: FAIL + + [Property scroll-padding-block-start does not support quirky length] + expected: FAIL + + [Property padding-block-start does not support quirky length] + expected: FAIL + + [Property scroll-margin-block-end does not support quirky length] + expected: FAIL + + [Property row-gap does not support quirky length] + expected: FAIL + + [Property min-inline-size does not support quirky length] + expected: FAIL + + [Property margin-inline-start does not support quirky length] + expected: FAIL + + [Property scroll-margin-inline-start does not support quirky length] + expected: FAIL + + [Property scroll-padding-top does not support quirky length] + expected: FAIL + + [Property border-bottom-right-radius does not support quirky length] + expected: FAIL + + [Property scroll-padding-inline-end does not support quirky length] + expected: FAIL + + [Property border-top-right-radius does not support quirky length] + expected: FAIL + + [Property column-gap does not support quirky length] + expected: FAIL + + [Property scroll-margin-block-start does not support quirky length] + expected: FAIL + + [Property scroll-margin-left does not support quirky length] + expected: FAIL + + [Property shape-margin does not support quirky length] + expected: FAIL + diff --git a/tests/wpt/metadata/quirks/unitless-length/excluded-properties-002.html.ini b/tests/wpt/metadata/quirks/unitless-length/excluded-properties-002.html.ini new file mode 100644 index 00000000000..2921e774187 --- /dev/null +++ b/tests/wpt/metadata/quirks/unitless-length/excluded-properties-002.html.ini @@ -0,0 +1,34 @@ +[excluded-properties-002.html] + [Property mask does not support quirky length] + expected: FAIL + + [Property background-blend-mode does not support quirky length] + expected: FAIL + + [Property transform-origin does not support quirky length] + expected: FAIL + + [Property filter does not support quirky length] + expected: FAIL + + [Property text-shadow does not support quirky length] + expected: FAIL + + [Property clip-path does not support quirky length] + expected: FAIL + + [Property column-span does not support quirky length] + expected: FAIL + + [Property background-size does not support quirky length] + expected: FAIL + + [Property box-shadow does not support quirky length] + expected: FAIL + + [Property perspective-origin does not support quirky length] + expected: FAIL + + [Property object-position does not support quirky length] + expected: FAIL + diff --git a/tests/wpt/metadata/url/urlencoded-parser.any.js.ini b/tests/wpt/metadata/url/urlencoded-parser.any.js.ini index 4c38403a6f1..88948111d26 100644 --- a/tests/wpt/metadata/url/urlencoded-parser.any.js.ini +++ b/tests/wpt/metadata/url/urlencoded-parser.any.js.ini @@ -1,17 +1,11 @@ [urlencoded-parser.any.html] - [response.formData() with input: a&b&c] - expected: FAIL - [request.formData() with input: a&b&c] expected: FAIL - [request.formData() with input: &&&a=b&&&&c=d&] - expected: FAIL - - [response.formData() with input: &&&a=b&&&&c=d&] + [request.formData() with input: a=b&c=d] expected: FAIL - [response.formData() with input: a=b&c=d] + [response.formData() with input: _charset_=windows-1252&test=%C2x] expected: FAIL @@ -22,15 +16,9 @@ [request.formData() with input: a&b&c] expected: FAIL - [response.formData() with input: a=b&c=d&] - expected: FAIL - - [request.formData() with input: a=b&c=d] - expected: FAIL - - [response.formData() with input: a=b&c=d] + [request.formData() with input: a=b&c=d&] expected: FAIL - [request.formData() with input: a=b&c=d&] + [request.formData() with input: _charset_=windows-1252&test=%C2x] expected: FAIL diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/audioparam-exceptional-values.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/audioparam-exceptional-values.html.ini index 83d2ecf7e47..66426f2d8e4 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/audioparam-exceptional-values.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/audioparam-exceptional-values.html.ini @@ -29,10 +29,10 @@ [X gain.gain.setValueCurveAtTime(curve, 1, 0) threw "TypeError" instead of EcmaScript error RangeError.] expected: FAIL - [X gain.gain.setValueCurveAtTime(\[0,0,0\],1,-1) threw "TypeError" instead of EcmaScript error RangeError.] + [X gain.gain.setValueCurveAtTime([0,0,0\],1,-1) threw "TypeError" instead of EcmaScript error RangeError.] expected: FAIL - [X gain.gain.setValueCurveAtTime(\[0,0,0\],-1,1) threw "TypeError" instead of EcmaScript error RangeError.] + [X gain.gain.setValueCurveAtTime([0,0,0\],-1,1) threw "TypeError" instead of EcmaScript error RangeError.] expected: FAIL [< [special cases 1\] 8 out of 8 assertions were failed.] @@ -53,3 +53,9 @@ [# AUDIT TASK RUNNER FINISHED: 2 out of 6 tasks were failed.] expected: FAIL + [< [special cases 1\] 9 out of 9 assertions were failed.] + expected: FAIL + + [X gain.gain.setValueCurveAtTime(curve, 1, -1) threw "TypeError" instead of EcmaScript error RangeError.] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/delaynode-maxdelaylimit.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/delaynode-maxdelaylimit.html.ini index 031e60e922d..df8c64b0086 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/delaynode-maxdelaylimit.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/delaynode-maxdelaylimit.html.ini @@ -9,3 +9,12 @@ [X () => context.createDelay(-1) threw "TypeError" instead of Delay length cannot be negative.] expected: FAIL + [X Setting Delay length to negative threw "TypeError" instead of NotSupportedError.] + expected: FAIL + + [X Setting Delay length to 0 seconds threw "TypeError" instead of NotSupportedError.] + expected: FAIL + + [X Setting Delay length to 180 seconds or more threw "TypeError" instead of NotSupportedError.] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-pannernode-interface/ctor-panner.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-pannernode-interface/ctor-panner.html.ini index 60f05981dcb..c2ec70499b3 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-pannernode-interface/ctor-panner.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-pannernode-interface/ctor-panner.html.ini @@ -1,4 +1,5 @@ [ctor-panner.html] + expected: ERROR [X context = new OfflineAudioContext(...) incorrectly threw ReferenceError: "OfflineAudioContext is not defined".] expected: FAIL @@ -20,3 +21,9 @@ [X node6.channelInterpretation is not equal to discrete. Got speakers.] expected: FAIL + [X node = new PannerNode(c, {"panningModel":"HRTF","positionX":1.4142135623730951,"positionY":2.8284271247461903,"positionZ":4.242640687119286,"orientationX":-1.4142135623730951,"orientationY":-2.8284271247461903,"orientationZ":-4.242640687119286,"distanceModel":"linear","refDistance":3.141592653589793,"maxDistance":6.283185307179586,"rolloffFactor":9.42477796076938,"coneInnerAngle":12.566370614359172,"coneOuterAngle":15.707963267948966,"coneOuterGain":18.84955592153876}) incorrectly threw InvalidStateError: "The object is in an invalid state.".] + expected: FAIL + + [X node instanceof PannerNode is not equal to true. Got false.] + expected: FAIL + diff --git a/tests/wpt/metadata/workers/baseurl/alpha/sharedworker-in-worker.html.ini b/tests/wpt/metadata/workers/baseurl/alpha/sharedworker-in-worker.html.ini index 650c91da4a6..333edb3a26e 100644 --- a/tests/wpt/metadata/workers/baseurl/alpha/sharedworker-in-worker.html.ini +++ b/tests/wpt/metadata/workers/baseurl/alpha/sharedworker-in-worker.html.ini @@ -1,5 +1,4 @@ [sharedworker-in-worker.html] - expected: ERROR [Base URL in workers: new SharedWorker()] expected: FAIL diff --git a/tests/wpt/metadata/xhr/headers-normalize-response.htm.ini b/tests/wpt/metadata/xhr/headers-normalize-response.htm.ini index 7ac33fce748..c5dc615ee07 100644 --- a/tests/wpt/metadata/xhr/headers-normalize-response.htm.ini +++ b/tests/wpt/metadata/xhr/headers-normalize-response.htm.ini @@ -6,15 +6,9 @@ [Header value: \\0hello_world] expected: FAIL - [Header value: hello\\0world] - expected: FAIL - [Header value: hello_world[tab\]] expected: FAIL [Header value: [tab\]hello_world[tab\]] expected: FAIL - [Header value: \\0] - expected: FAIL - diff --git a/tests/wpt/mozilla/meta/css/transition_calc_implicit.html.ini b/tests/wpt/mozilla/meta/css/transition_calc_implicit.html.ini deleted file mode 100644 index dbea4f293ad..00000000000 --- a/tests/wpt/mozilla/meta/css/transition_calc_implicit.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[transition_calc_implicit.html] - expected: TIMEOUT diff --git a/tests/wpt/web-platform-tests/2dcontext/drawing-text-to-the-canvas/2d.text.measure.advances.html b/tests/wpt/web-platform-tests/2dcontext/drawing-text-to-the-canvas/2d.text.measure.advances.html index 0af5a213cd3..ed8c04d0ab7 100644 --- a/tests/wpt/web-platform-tests/2dcontext/drawing-text-to-the-canvas/2d.text.measure.advances.html +++ b/tests/wpt/web-platform-tests/2dcontext/drawing-text-to-the-canvas/2d.text.measure.advances.html @@ -38,6 +38,13 @@ step_timeout(t.step_func_done(function () { _assert(ctx.measureText('Hello').advances[2] >= 58, "ctx.measureText('Hello').advances[\""+(2)+"\"] >= 58"); _assert(ctx.measureText('Hello').advances[3] >= 70, "ctx.measureText('Hello').advances[\""+(3)+"\"] >= 70"); _assert(ctx.measureText('Hello').advances[4] >= 80, "ctx.measureText('Hello').advances[\""+(4)+"\"] >= 80"); + + var tm = ctx.measureText('Hello'); + _assertSame(ctx.measureText('Hello').advances[0], tm.advances[0], "ctx.measureText('Hello').advances[\""+(0)+"\"]", "tm.advances[\""+(0)+"\"]"); + _assertSame(ctx.measureText('Hello').advances[1], tm.advances[1], "ctx.measureText('Hello').advances[\""+(1)+"\"]", "tm.advances[\""+(1)+"\"]"); + _assertSame(ctx.measureText('Hello').advances[2], tm.advances[2], "ctx.measureText('Hello').advances[\""+(2)+"\"]", "tm.advances[\""+(2)+"\"]"); + _assertSame(ctx.measureText('Hello').advances[3], tm.advances[3], "ctx.measureText('Hello').advances[\""+(3)+"\"]", "tm.advances[\""+(3)+"\"]"); + _assertSame(ctx.measureText('Hello').advances[4], tm.advances[4], "ctx.measureText('Hello').advances[\""+(4)+"\"]", "tm.advances[\""+(4)+"\"]"); }), 500); diff --git a/tests/wpt/web-platform-tests/2dcontext/drawing-text-to-the-canvas/2d.text.measure.emHeights.html b/tests/wpt/web-platform-tests/2dcontext/drawing-text-to-the-canvas/2d.text.measure.emHeights.html index 19b939e63b7..36087e7b035 100644 --- a/tests/wpt/web-platform-tests/2dcontext/drawing-text-to-the-canvas/2d.text.measure.emHeights.html +++ b/tests/wpt/web-platform-tests/2dcontext/drawing-text-to-the-canvas/2d.text.measure.emHeights.html @@ -31,11 +31,13 @@ step_timeout(t.step_func_done(function () { ctx.font = '50px CanvasTest'; ctx.direction = 'ltr'; ctx.align = 'left' - _assertSame(ctx.measureText('A').emHeightAscent, 124, "ctx.measureText('A').emHeightAscent", "124"); - _assertSame(Math.abs(ctx.measureText('A').emHeightDescent), 0, "Math.abs(ctx.measureText('A').emHeightDescent)", "0"); + _assertSame(ctx.measureText('A').emHeightAscent, 37.5, "ctx.measureText('A').emHeightAscent", "37.5"); + _assertSame(ctx.measureText('A').emHeightDescent, 12.5, "ctx.measureText('A').emHeightDescent", "12.5"); + _assertSame(ctx.measureText('A').emHeightDescent + ctx.measureText('A').emHeightAscent, 50, "ctx.measureText('A').emHeightDescent + ctx.measureText('A').emHeightAscent", "50"); - _assertSame(ctx.measureText('ABCD').emHeightAscent, 124, "ctx.measureText('ABCD').emHeightAscent", "124"); - _assertSame(Math.abs(ctx.measureText('ABCD').emHeightDescent), 0, "Math.abs(ctx.measureText('ABCD').emHeightDescent)", "0"); + _assertSame(ctx.measureText('ABCD').emHeightAscent, 37.5, "ctx.measureText('ABCD').emHeightAscent", "37.5"); + _assertSame(ctx.measureText('ABCD').emHeightDescent, 12.5, "ctx.measureText('ABCD').emHeightDescent", "12.5"); + _assertSame(ctx.measureText('ABCD').emHeightDescent + ctx.measureText('ABCD').emHeightAscent, 50, "ctx.measureText('ABCD').emHeightDescent + ctx.measureText('ABCD').emHeightAscent", "50"); }), 500); diff --git a/tests/wpt/web-platform-tests/2dcontext/drawing-text-to-the-canvas/2d.text.draw.baseline.alphabetic.html b/tests/wpt/web-platform-tests/2dcontext/text-styles/2d.text.draw.baseline.alphabetic.html index f070d0d5b7f..f070d0d5b7f 100644 --- a/tests/wpt/web-platform-tests/2dcontext/drawing-text-to-the-canvas/2d.text.draw.baseline.alphabetic.html +++ b/tests/wpt/web-platform-tests/2dcontext/text-styles/2d.text.draw.baseline.alphabetic.html diff --git a/tests/wpt/web-platform-tests/2dcontext/tools/name2dir.yaml b/tests/wpt/web-platform-tests/2dcontext/tools/name2dir.yaml index 479c171810c..40a04057881 100644 --- a/tests/wpt/web-platform-tests/2dcontext/tools/name2dir.yaml +++ b/tests/wpt/web-platform-tests/2dcontext/tools/name2dir.yaml @@ -9,7 +9,6 @@ 2d.fillRect: "drawing-rectangles-to-the-canvas" 2d.strokeRect: "drawing-rectangles-to-the-canvas" 2d.text.draw: "drawing-text-to-the-canvas" -2d.text.draw.baseline.alphabetic: "drawing-text-to-the-canvas" 2d.text.draw.space.basic: "drawing-text-to-the-canvas" 2d.text.draw.space.collapse: "drawing-text-to-the-canvas" 2d.text.measure: "drawing-text-to-the-canvas" diff --git a/tests/wpt/web-platform-tests/2dcontext/tools/tests2dtext.yaml b/tests/wpt/web-platform-tests/2dcontext/tools/tests2dtext.yaml index 8490cd4f2b2..f89d6d48a4f 100644 --- a/tests/wpt/web-platform-tests/2dcontext/tools/tests2dtext.yaml +++ b/tests/wpt/web-platform-tests/2dcontext/tools/tests2dtext.yaml @@ -1037,6 +1037,13 @@ @assert ctx.measureText('Hello').advances[2] >= 58; @assert ctx.measureText('Hello').advances[3] >= 70; @assert ctx.measureText('Hello').advances[4] >= 80; + + var tm = ctx.measureText('Hello'); + @assert ctx.measureText('Hello').advances[0] === tm.advances[0]; + @assert ctx.measureText('Hello').advances[1] === tm.advances[1]; + @assert ctx.measureText('Hello').advances[2] === tm.advances[2]; + @assert ctx.measureText('Hello').advances[3] === tm.advances[3]; + @assert ctx.measureText('Hello').advances[4] === tm.advances[4]; }), 500); - name: 2d.text.measure.actualBoundingBox @@ -1096,11 +1103,13 @@ ctx.font = '50px CanvasTest'; ctx.direction = 'ltr'; ctx.align = 'left' - @assert ctx.measureText('A').emHeightAscent === 124; - @assert Math.abs(ctx.measureText('A').emHeightDescent) === 0; + @assert ctx.measureText('A').emHeightAscent === 37.5; + @assert ctx.measureText('A').emHeightDescent === 12.5; + @assert ctx.measureText('A').emHeightDescent + ctx.measureText('A').emHeightAscent === 50; - @assert ctx.measureText('ABCD').emHeightAscent === 124; - @assert Math.abs(ctx.measureText('ABCD').emHeightDescent) === 0; + @assert ctx.measureText('ABCD').emHeightAscent === 37.5; + @assert ctx.measureText('ABCD').emHeightDescent === 12.5; + @assert ctx.measureText('ABCD').emHeightDescent + ctx.measureText('ABCD').emHeightAscent === 50; }), 500); - name: 2d.text.measure.baselines diff --git a/tests/wpt/web-platform-tests/compat/css-style-declaration-alias-enumeration.html b/tests/wpt/web-platform-tests/compat/css-style-declaration-alias-enumeration.html index 4608af9d5fc..cdd9cc8eaef 100644 --- a/tests/wpt/web-platform-tests/compat/css-style-declaration-alias-enumeration.html +++ b/tests/wpt/web-platform-tests/compat/css-style-declaration-alias-enumeration.html @@ -1,6 +1,5 @@ <!DOCTYPE html> <title>Aliases enumerated on CSSStyleDeclaration</title> -<link rel="author" title="Anders Hartvoll Ruud" href="andruud@chromium.org"> <link rel="help" href="https://compat.spec.whatwg.org/#css-simple-aliases"> <meta name="assert" content="This test verifies that aliases are enumerated on CSSStyleDeclaration" /> diff --git a/tests/wpt/web-platform-tests/compat/webkit-appearance.html b/tests/wpt/web-platform-tests/compat/webkit-appearance.html new file mode 100644 index 00000000000..210944522a9 --- /dev/null +++ b/tests/wpt/web-platform-tests/compat/webkit-appearance.html @@ -0,0 +1,57 @@ +<!doctype html> +<title>-webkit-appearance</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<button id=button>Test</button> +<script> + const button = document.getElementById('button'); + // values from https://developer.mozilla.org/en-US/docs/Web/CSS/-moz-appearance + // intersection of Firefox and Chrome. + const values = ["none", + "button", + "button-bevel", + "caret", + "checkbox", + "listbox", + "listitem", + "menulist", + "menulist-button", + "menulist-text", + "menulist-textfield", + "radio", + "searchfield", + "textfield", + ]; + for (const value of values) { + test(() => { + button.removeAttribute('style'); + button.style.setProperty('-webkit-appearance', value); + assert_equals(button.style.WebkitAppearance, value); + assert_equals(button.style.webkitAppearance, value); // lowercase w + const style = getComputedStyle(button); + assert_equals(style.WebkitAppearance, value); + assert_equals(style.webkitAppearance, value); // lowercase w + }, `-webkit-appearance: ${value}`); + } + + const invalidValues = ["bogus-button"]; + for (const invalidValue of invalidValues) { + test(() => { + button.removeAttribute('style'); + button.style.setProperty('-webkit-appearance', invalidValue); + assert_equals(button.style.WebkitAppearance, ""); + assert_equals(button.style.webkitAppearance, ""); // lowercase w + const style = getComputedStyle(button); + assert_equals(style.WebkitAppearance, "button"); + assert_equals(style.webkitAppearance, "button"); // lowercase w + }, `-webkit-appearance: ${invalidValue} (invalid)`); + } + + test(() => { + button.removeAttribute('style'); + button.style.setProperty('appearance', 'auto'); + assert_equals(button.style.appearance, undefined); + const style = getComputedStyle(button); + assert_equals(style.appearance, undefined); + }, 'appearance'); +</script> diff --git a/tests/wpt/web-platform-tests/cookies/http-state/attribute-tests.html b/tests/wpt/web-platform-tests/cookies/http-state/attribute-tests.html index 6e7d5feabb2..1d2141d38c4 100644 --- a/tests/wpt/web-platform-tests/cookies/http-state/attribute-tests.html +++ b/tests/wpt/web-platform-tests/cookies/http-state/attribute-tests.html @@ -9,8 +9,14 @@ <script src="/resources/testharnessreport.js"></script> <script src="resources/cookie-http-state-template.js"></script> </head> - <body> - <div id="log"></div> + <body style="background:#EEE"> + <h3>Log</h3> + <div id="log" style="height:50px; overflow-y:scroll; background: #FFF"> + </div> + <h3>IFrames</h3> + <div id="iframes" style="height:170px; overflow-y:scroll; background: #FFF"> + </div> + <h3>Test Results</h3> <script> setup({ explicit_timeout: true }); diff --git a/tests/wpt/web-platform-tests/cookies/http-state/charset-tests.html b/tests/wpt/web-platform-tests/cookies/http-state/charset-tests.html new file mode 100644 index 00000000000..9d9ef1bb087 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/charset-tests.html @@ -0,0 +1,39 @@ +<!doctype html> +<html> + <head> + <meta charset=utf-8> + <title>Tests cookie charset functionality</title> + <meta name=help href="https://tools.ietf.org/html/rfc6265#page-8"> + + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="resources/cookie-http-state-template.js"></script> + </head> + <body style="background:#EEE"> + <h3>Log</h3> + <div id="log" style="height:50px; overflow-y:scroll; background: #FFF"> + </div> + <h3>IFrames</h3> + <div id="iframes" style="height:170px; overflow-y:scroll; background: #FFF"> + </div> + <h3>Test Results</h3> + <script> + setup({ explicit_timeout: true }); + + const TEST_CASES = [ + {file: "charset0001", name: "charset0001"}, + {file: "charset0002", name: "charset0002"}, + {file: "charset0003", name: "charset0003"}, + {file: "charset0004", name: "charset0004"}, + ]; + + for (const i in TEST_CASES) { + const t = TEST_CASES[i]; + promise_test(createCookieTest(t.file), + t.file + " - " + t.name, + { timeout: 3000 }); + } + + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/cookies/http-state/chromium-tests.html b/tests/wpt/web-platform-tests/cookies/http-state/chromium-tests.html new file mode 100644 index 00000000000..e5d745e0390 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/chromium-tests.html @@ -0,0 +1,58 @@ +<!doctype html> +<html> + <head> + <meta charset=utf-8> + <title>Tests chromium cookie functionality</title> + <meta name=help href="https://tools.ietf.org/html/rfc6265#page-8"> + + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="resources/cookie-http-state-template.js"></script> + </head> + <body style="background:#EEE"> + <h3>Log</h3> + <div id="log" style="height:50px; overflow-y:scroll; background: #FFF"> + </div> + <h3>IFrames</h3> + <div id="iframes" style="height:170px; overflow-y:scroll; background: #FFF"> + </div> + <h3>Test Results</h3> + <script> + setup({ explicit_timeout: true }); + + const TEST_CASES = [ + {file: "chromium0001", name: "chromium0001"}, + {file: "chromium0002", name: "chromium0002"}, + {file: "chromium0003", name: "chromium0003"}, + {file: "chromium0004", name: "chromium0004"}, + {file: "chromium0005", name: "chromium0005"}, + {file: "chromium0006", name: "chromium0006"}, + {file: "chromium0007", name: "chromium0007"}, + {file: "chromium0008", name: "chromium0008"}, + {file: "chromium0009", name: "chromium0009"}, + {file: "chromium0010", name: "chromium0010"}, + {file: "chromium0011", name: "chromium0011"}, + {file: "chromium0012", name: "chromium0012"}, + {file: "chromium0013", name: "chromium0013"}, + {file: "chromium0014", name: "chromium0014"}, + {file: "chromium0015", name: "chromium0015"}, + {file: "chromium0016", name: "chromium0016"}, + {file: "chromium0017", name: "chromium0017"}, + {file: "chromium0018", name: "chromium0018"}, + {file: "chromium0019", name: "chromium0019"}, + {file: "disabled-chromium0020", name: "disabled-chromium0020"}, + {file: "chromium0021", name: "chromium0021"}, + {file: "disabled-chromium0022", name: "disabled-chromium0022"}, + {file: "disabled-chromium0023", name: "disabled-chromium0023"}, + ]; + + for (const i in TEST_CASES) { + const t = TEST_CASES[i]; + promise_test(createCookieTest(t.file), + t.file + " - " + t.name, + { timeout: 3000 }); + } + + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/cookies/http-state/comma-tests.html b/tests/wpt/web-platform-tests/cookies/http-state/comma-tests.html new file mode 100644 index 00000000000..f71bb8d9610 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/comma-tests.html @@ -0,0 +1,42 @@ +<!doctype html> +<html> + <head> + <meta charset=utf-8> + <title>Tests cookie setting comma functionality</title> + <meta name=help href="https://tools.ietf.org/html/rfc6265#page-8"> + + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="resources/cookie-http-state-template.js"></script> + </head> + <body style="background:#EEE"> + <h3>Log</h3> + <div id="log" style="height:50px; overflow-y:scroll; background: #FFF"> + </div> + <h3>IFrames</h3> + <div id="iframes" style="height:170px; overflow-y:scroll; background: #FFF"> + </div> + <h3>Test Results</h3> + <script> + setup({ explicit_timeout: true }); + + const TEST_CASES = [ + {file: "comma0001", name: "comma0001"}, + {file: "comma0002", name: "comma0002"}, + {file: "comma0003", name: "comma0003"}, + {file: "comma0004", name: "comma0004"}, + {file: "comma0005", name: "comma0005"}, + {file: "comma0006", name: "comma0006"}, + {file: "comma0007", name: "comma0007"}, + ]; + + for (const i in TEST_CASES) { + const t = TEST_CASES[i]; + promise_test(createCookieTest(t.file), + t.file + " - " + t.name, + { timeout: 3000 }); + } + + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/cookies/http-state/domain-tests.html b/tests/wpt/web-platform-tests/cookies/http-state/domain-tests.html new file mode 100644 index 00000000000..85c8cd00a44 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/domain-tests.html @@ -0,0 +1,79 @@ +<!doctype html> +<html> + <head> + <meta charset=utf-8> + <title>Tests cookie setting domain functionality</title> + <meta name=help href="https://tools.ietf.org/html/rfc6265#page-8"> + + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="resources/cookie-http-state-template.js"></script> + </head> + <body style="background:#EEE"> + <h3>Log</h3> + <div id="log" style="height:50px; overflow-y:scroll; background: #FFF"> + </div> + <h3>IFrames</h3> + <div id="iframes" style="height:170px; overflow-y:scroll; background: #FFF"> + </div> + <h3>Test Results</h3> + <script> + setup({ explicit_timeout: true }); + + const TEST_CASES = [ + {file: "domain0001", name: "domain0001"}, + {file: "domain0002", name: "domain0002"}, + {file: "domain0003", name: "domain0003"}, + {file: "domain0004", name: "domain0004"}, + {file: "domain0005", name: "domain0005"}, + {file: "domain0006", name: "domain0006"}, + {file: "domain0007", name: "domain0007"}, + {file: "domain0008", name: "domain0008"}, + {file: "domain0009", name: "domain0009"}, + {file: "domain0010", name: "domain0010"}, + {file: "domain0011", name: "domain0011"}, + {file: "domain0012", name: "domain0012"}, + {file: "domain0013", name: "domain0013"}, + {file: "domain0014", name: "domain0014"}, + {file: "domain0015", name: "domain0015"}, + {file: "domain0016", name: "domain0016"}, + {file: "domain0017", name: "domain0017"}, + {file: "domain0018", name: "domain0018"}, + {file: "domain0019", name: "domain0019"}, + {file: "domain0020", name: "domain0020"}, + {file: "domain0021", name: "domain0021"}, + {file: "domain0022", name: "domain0022"}, + {file: "domain0023", name: "domain0023"}, + {file: "domain0024", name: "domain0024"}, + {file: "domain0025", name: "domain0025"}, + {file: "domain0026", name: "domain0026"}, + {file: "domain0027", name: "domain0027"}, + {file: "domain0028", name: "domain0028"}, + {file: "domain0029", name: "domain0029"}, + {file: "optional-domain0030", name: "optional-domain0030"}, + {file: "domain0031", name: "domain0031"}, + {file: "domain0033", name: "domain0033"}, + {file: "domain0034", name: "domain0034"}, + {file: "domain0035", name: "domain0035"}, + {file: "domain0036", name: "domain0036"}, + {file: "domain0037", name: "domain0037"}, + {file: "domain0038", name: "domain0038"}, + {file: "domain0039", name: "domain0039"}, + {file: "domain0040", name: "domain0040"}, + {file: "domain0041", name: "domain0041"}, + {file: "domain0042", name: "domain0042"}, + {file: "optional-domain0041", name: "optional-domain0041"}, + {file: "optional-domain0042", name: "optional-domain0042"}, + {file: "optional-domain0043", name: "optional-domain0043"}, + ]; + + for (const i in TEST_CASES) { + const t = TEST_CASES[i]; + promise_test(createCookieTest(t.file), + t.file + " - " + t.name, + { timeout: 3000 }); + } + + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/cookies/http-state/general-tests.html b/tests/wpt/web-platform-tests/cookies/http-state/general-tests.html index 169984de6ac..1e63043ae11 100644 --- a/tests/wpt/web-platform-tests/cookies/http-state/general-tests.html +++ b/tests/wpt/web-platform-tests/cookies/http-state/general-tests.html @@ -9,8 +9,14 @@ <script src="/resources/testharnessreport.js"></script> <script src="resources/cookie-http-state-template.js"></script> </head> - <body> - <div id="log"></div> + <body style="background:#EEE"> + <h3>Log</h3> + <div id="log" style="height:50px; overflow-y:scroll; background: #FFF"> + </div> + <h3>IFrames</h3> + <div id="iframes" style="height:170px; overflow-y:scroll; background: #FFF"> + </div> + <h3>Test Results</h3> <script> setup({ explicit_timeout: true }); diff --git a/tests/wpt/web-platform-tests/cookies/http-state/mozilla-tests.html b/tests/wpt/web-platform-tests/cookies/http-state/mozilla-tests.html new file mode 100644 index 00000000000..01a5645b140 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/mozilla-tests.html @@ -0,0 +1,52 @@ +<!doctype html> +<html> + <head> + <meta charset=utf-8> + <title>Tests basic cookie setting functionality</title> + <meta name=help href="https://tools.ietf.org/html/rfc6265#page-8"> + + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="resources/cookie-http-state-template.js"></script> + </head> + <body style="background:#EEE"> + <h3>Log</h3> + <div id="log" style="height:50px; overflow-y:scroll; background: #FFF"> + </div> + <h3>IFrames</h3> + <div id="iframes" style="height:170px; overflow-y:scroll; background: #FFF"> + </div> + <h3>Test Results</h3> + <script> + setup({ explicit_timeout: true }); + + const TEST_CASES = [ + {file: "mozilla0001", name: "mozilla0001"}, + {file: "mozilla0002", name: "mozilla0002"}, + {file: "mozilla0003", name: "mozilla0003"}, + {file: "mozilla0004", name: "mozilla0004"}, + {file: "mozilla0005", name: "mozilla0005"}, + {file: "mozilla0006", name: "mozilla0006"}, + {file: "mozilla0007", name: "mozilla0007"}, + {file: "mozilla0008", name: "mozilla0008"}, + {file: "mozilla0009", name: "mozilla0009"}, + {file: "mozilla0010", name: "mozilla0010"}, + {file: "mozilla0011", name: "mozilla0011"}, + {file: "mozilla0012", name: "mozilla0012"}, + {file: "mozilla0013", name: "mozilla0013"}, + {file: "mozilla0014", name: "mozilla0014"}, + {file: "mozilla0015", name: "mozilla0015"}, + {file: "mozilla0016", name: "mozilla0016"}, + {file: "mozilla0017", name: "mozilla0017"}, + ]; + + for (const i in TEST_CASES) { + const t = TEST_CASES[i]; + promise_test(createCookieTest(t.file), + t.file + " - " + t.name, + { timeout: 3000 }); + } + + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/cookies/http-state/name-tests.html b/tests/wpt/web-platform-tests/cookies/http-state/name-tests.html new file mode 100644 index 00000000000..9dd2781f235 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/name-tests.html @@ -0,0 +1,68 @@ +<!doctype html> +<html> + <head> + <meta charset=utf-8> + <title>Tests basic cookie setting functionality</title> + <meta name=help href="https://tools.ietf.org/html/rfc6265#page-8"> + + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="resources/cookie-http-state-template.js"></script> + </head> + <body style="background:#EEE"> + <h3>Log</h3> + <div id="log" style="height:50px; overflow-y:scroll; background: #FFF"> + </div> + <h3>IFrames</h3> + <div id="iframes" style="height:170px; overflow-y:scroll; background: #FFF"> + </div> + <h3>Test Results</h3> + <script> + setup({ explicit_timeout: true }); + + const TEST_CASES = [ + {file: "name0001", name: "name0001"}, + {file: "name0002", name: "name0002"}, + {file: "name0003", name: "name0003"}, + {file: "name0004", name: "name0004"}, + {file: "name0005", name: "name0005"}, + {file: "name0006", name: "name0006"}, + {file: "name0007", name: "name0007"}, + {file: "name0008", name: "name0008"}, + {file: "name0009", name: "name0009"}, + {file: "name0010", name: "name0010"}, + {file: "name0011", name: "name0011"}, + {file: "name0012", name: "name0012"}, + {file: "name0013", name: "name0013"}, + {file: "name0014", name: "name0014"}, + {file: "name0015", name: "name0015"}, + {file: "name0016", name: "name0016"}, + {file: "name0017", name: "name0017"}, + {file: "name0018", name: "name0018"}, + {file: "name0019", name: "name0019"}, + {file: "name0020", name: "name0020"}, + {file: "name0021", name: "name0021"}, + {file: "name0022", name: "name0022"}, + {file: "name0023", name: "name0023"}, + {file: "name0024", name: "name0024"}, + {file: "name0025", name: "name0025"}, + {file: "name0026", name: "name0026"}, + {file: "name0027", name: "name0027"}, + {file: "name0028", name: "name0028"}, + {file: "name0029", name: "name0029"}, + {file: "name0030", name: "name0030"}, + {file: "name0031", name: "name0031"}, + {file: "name0032", name: "name0032"}, + {file: "name0033", name: "name0033"}, + ]; + + for (const i in TEST_CASES) { + const t = TEST_CASES[i]; + promise_test(createCookieTest(t.file), + t.file + " - " + t.name, + { timeout: 3000 }); + } + + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/cookies/http-state/ordering-tests.html b/tests/wpt/web-platform-tests/cookies/http-state/ordering-tests.html new file mode 100644 index 00000000000..53cfae452be --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/ordering-tests.html @@ -0,0 +1,36 @@ +<!doctype html> +<html> + <head> + <meta charset=utf-8> + <title>Tests basic cookie setting functionality</title> + <meta name=help href="https://tools.ietf.org/html/rfc6265#page-8"> + + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="resources/cookie-http-state-template.js"></script> + </head> + <body style="background:#EEE"> + <h3>Log</h3> + <div id="log" style="height:50px; overflow-y:scroll; background: #FFF"> + </div> + <h3>IFrames</h3> + <div id="iframes" style="height:170px; overflow-y:scroll; background: #FFF"> + </div> + <h3>Test Results</h3> + <script> + setup({ explicit_timeout: true }); + + const TEST_CASES = [ + {file: "ordering0001", name: "ordering0001"}, + ]; + + for (const i in TEST_CASES) { + const t = TEST_CASES[i]; + promise_test(createCookieTest(t.file), + t.file + " - " + t.name, + { timeout: 3000 }); + } + + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/cookies/http-state/path-tests.html b/tests/wpt/web-platform-tests/cookies/http-state/path-tests.html new file mode 100644 index 00000000000..464f39becd9 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/path-tests.html @@ -0,0 +1,68 @@ +<!doctype html> +<html> + <head> + <meta charset=utf-8> + <title>Tests basic cookie setting functionality</title> + <meta name=help href="https://tools.ietf.org/html/rfc6265#page-8"> + + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="resources/cookie-http-state-template.js"></script> + </head> + <body style="background:#EEE"> + <h3>Log</h3> + <div id="log" style="height:50px; overflow-y:scroll; background: #FFF"> + </div> + <h3>IFrames</h3> + <div id="iframes" style="height:170px; overflow-y:scroll; background: #FFF"> + </div> + <h3>Test Results</h3> + <script> + setup({ explicit_timeout: true }); + + const TEST_CASES = [ + {file: "path0001", name: "path0001"}, + {file: "path0002", name: "path0002"}, + {file: "path0003", name: "path0003"}, + {file: "path0004", name: "path0004"}, + {file: "path0005", name: "path0005"}, + {file: "path0006", name: "path0006"}, + {file: "path0007", name: "path0007"}, + {file: "path0008", name: "path0008"}, + {file: "path0009", name: "path0009"}, + {file: "path0010", name: "path0010"}, + {file: "path0011", name: "path0011"}, + {file: "path0012", name: "path0012"}, + {file: "path0013", name: "path0013"}, + {file: "path0014", name: "path0014"}, + {file: "path0015", name: "path0015"}, + {file: "path0016", name: "path0016"}, + {file: "path0017", name: "path0017"}, + {file: "path0018", name: "path0018"}, + {file: "path0019", name: "path0019"}, + {file: "path0020", name: "path0020"}, + {file: "path0021", name: "path0021"}, + {file: "path0022", name: "path0022"}, + {file: "path0023", name: "path0023"}, + {file: "path0024", name: "path0024"}, + {file: "path0025", name: "path0025"}, + {file: "path0026", name: "path0026"}, + {file: "path0027", name: "path0027"}, + {file: "path0028", name: "path0028"}, + {file: "disabled-path0029", name: "disabled-path0029"}, + {file: "path0029", name: "path0029"}, + {file: "path0030", name: "path0030"}, + {file: "path0031", name: "path0031"}, + {file: "path0032", name: "path0032"}, + ]; + + for (const i in TEST_CASES) { + const t = TEST_CASES[i]; + promise_test(createCookieTest(t.file), + t.file + " - " + t.name, + { timeout: 3000 }); + } + + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/all-tests.html.py-str b/tests/wpt/web-platform-tests/cookies/http-state/resources/all-tests.html.py-str new file mode 100644 index 00000000000..37d630fef4f --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/all-tests.html.py-str @@ -0,0 +1,79 @@ +<!doctype html> +<html> + <head> + <meta charset=utf-8> + <title>Tests basic cookie setting functionality</title> + <meta name=help href="https://tools.ietf.org/html/rfc6265#page-8"> + + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="cookie-http-state-template.js"></script> + </head> + <body style="background:#EEE"> + <h1>Cookie Tests</h1> + This page is a debug page for cookie tests. To run a test in isolation, + append "?debug=" and the test id to this URL. E.g. to debug "value0001", use + this url:<br> + <a href="cookie-setter.py?debug=value0001"> + cookie-setter.py?debug=value0001 + </a><br> + <br> + To request, append "?file=" and the file name (stripped of + "-tests.html"). For value0001, this would be:<br> + <a href="cookie-setter.py?file=value0001"> + cookie-setter.py?file=value0001 + </a><br> + <br> + Please note, the general tests are one level higher:<br> + <a href="../attribute-tests.html"> ../attribute-tests.html </a><br> + <a href="../charset-tests.html"> ../charset-tests.html </a><br> + <a href="../chromium-tests.html"> ../chromium-tests.html </a><br> + <a href="../comma-tests.html"> ../comma-tests.html </a><br> + <a href="../domain-tests.html"> ../domain-tests.html </a><br> + <a href="../general-tests.html"> ../general-tests.html </a><br> + <a href="../mozilla-tests.html"> ../mozilla-tests.html </a><br> + <a href="../name-tests.html"> ../name-tests.html </a><br> + <a href="../ordering-tests.html"> ../ordering-tests.html </a><br> + <a href="../path-tests.html"> ../path-tests.html </a><br> + <a href="../value-tests.html"> ../value-tests.html </a><br> + + <h2>Current Cookies</h2> + These are all cookies, currently set by the browser for this domain: <br> + <span id="cookies">(None)</span> + <script type="text/javascript"> + setInterval(() => { + document.getElementById("cookies").textContent = + document.cookie || "(None)"; + }, 500); + </script> + + <h2>All Tests</h2> + Below, all tests are running. The Log contains messages (e.g. when cookies + are left over) and the IFrames list preserves all requested files and shows + which cookies were expected to show. <br> + <h3>Log</h3> + <div id="log" style="height:50px; overflow-y:scroll; background: #FFF"> + </div> + <h3>IFrames</h3> + <div id="iframes" style="height:170px; overflow-y:scroll; background: #FFF"> + </div> + <h3>Test Results</h3> + <!-- No element should come after this - the test harness appends the result + here when it finished running all of them. --> + + <script type="text/javascript"> + setup({ explicit_timeout: true }); + + const TEST_CASES = [%s]; + + for (const i in TEST_CASES) { + const t = TEST_CASES[i]; + promise_test(createCookieTest(t.file), + t.file + " - " + t.name, + { timeout: 3000 }); + } + + + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/cookie-http-state-template.js b/tests/wpt/web-platform-tests/cookies/http-state/resources/cookie-http-state-template.js index 470d46ebc43..d737b38c520 100644 --- a/tests/wpt/web-platform-tests/cookies/http-state/resources/cookie-http-state-template.js +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/cookie-http-state-template.js @@ -1,16 +1,32 @@ const SERVER_LOCATION = "resources"; const SERVER_SCRIPT = SERVER_LOCATION + "/cookie-setter.py"; +/* Adds a div with "<time> [<tag>] - <message>" to the "#log" container.*/ +function log(message, tag) { + let log_str = document.createElement('div'); + log_str.textContent = new Date().toTimeString().replace(/\s.+$/, ''); + if (tag) { + log_str.textContent += " [" + tag + "] "; + } + log_str.textContent += " - " + message; + let log_container = document.getElementById("log"); + log_container.appendChild(log_str); + log_container.scrollTo(0, log_container.scrollHeight); +} + +/* Removes the "Cookie: " prefix and strip any leading or trailing whitespace.*/ function stripPrefixAndWhitespace(cookie_text) { return cookie_text.replace(/^Cookie: /, '').replace(/^\s+|\s+$/g, ''); } +/* Returns the absolute path of the resource folder, ignoring any navigation. */ function getLocalResourcesPath() { let replace = "(" + SERVER_LOCATION + "\/)*"; // Redundant location. replace += "[^\/]*$"; // Everything after the last "/". return location.pathname.replace(new RegExp(replace), "") + SERVER_LOCATION; } +/* Returns the absolute server location ignoring any navgation.*/ function getAbsoluteServerLocation() { // Replace the server location and everything coming after it ... let replace = SERVER_LOCATION + ".*$"; @@ -18,6 +34,7 @@ function getAbsoluteServerLocation() { return getLocalResourcesPath().replace(new RegExp(replace),'')+ SERVER_SCRIPT; } +/* Expires a cookie by name by setting it's expiry date into the past.*/ function expireCookie(name, expiry_date, path) { name = name || ""; expiry_date = expiry_date || "Thu, 01 Jan 1970 00:00:00 UTC"; @@ -25,10 +42,16 @@ function expireCookie(name, expiry_date, path) { document.cookie = name + "=; expires=" + expiry_date + "; path=" + path + ";"; } +/* Captures a snapshot of cookies with |parse| and allows to diff it with a +second snapshot with |diffWith|. This allows to run tests even if cookies were +previously set that would mess with the expected final set of Cookies. +With |resetCookies|, all cookies set between first and second snapshot are +expired. */ function CookieManager() { this.initial_cookies = []; } +/* Creates a snapshot of the current given document cookies.*/ CookieManager.prototype.parse = document_cookies => { this.initial_cookies = []; document_cookies = document_cookies.replace(/^Cookie: /, ''); @@ -37,22 +60,25 @@ CookieManager.prototype.parse = document_cookies => { } } +/* Creates a diff of newly added cookies between the initial snapshot and the +newly given cookies. The diff is stored for cleaning purposes. A second call +will replace the the stored diff entirely.*/ CookieManager.prototype.diffWith = document_cookies => { this.actual_cookies = document_cookies; for (let i in initial_cookies) { let no_spaces_cookie_regex = - new RegExp(/\s*[\;]*\s/.source + initial_cookies[i]); - this.actual_cookies = actual_cookies.replace(no_spaces_cookie_regex, ''); + new RegExp(/\s*[\;]*\s/.source + initial_cookies[i].replace(/\\/, "\\\\")); + this.actual_cookies = this.actual_cookies.replace(no_spaces_cookie_regex, ''); } return this.actual_cookies; } +/* Cleans cookies between the first and the second snapshot. +Some tests might set cookies to the root path or cookies without key. Both cases +are dropped here.*/ CookieManager.prototype.resetCookies = () => { - expireCookie(/*name=*/""); // If a cookie without keys was accepted, drop it. - if (this.actual_cookies == "") { - return; // There is nothing to reset here. - } - let cookies_to_delete = this.actual_cookies.split(/\s*;\s*/) + // If a cookie without keys was accepted, drop it additionally. + let cookies_to_delete = [""].concat(this.actual_cookies.split(/\s*;\s*/)) for (let i in cookies_to_delete){ expireCookie(cookies_to_delete[i].replace(/=.*$/, "")); // Drop cookies with same name that were set to the root path which happens @@ -63,14 +89,27 @@ CookieManager.prototype.resetCookies = () => { } } +/* Returns a new cookie test. +The test creates an iframe where a |file| from the cookie-setter.py is loaded. +This sets cookies which are diffed with an initial cookie snapshot and compared +to the expectation that the server returned. +Finally, it cleans up newly set cookies and all cookies in the root path or +without key. */ function createCookieTest(file) { return t => { + let iframe_container = document.getElementById("iframes"); const iframe = document.createElement('iframe'); - document.body.appendChild(iframe); + iframe_container.appendChild(iframe); + iframe_container.scrollTo(0, iframe_container.scrollHeight); let diff_tool = new CookieManager(); t.add_cleanup(diff_tool.resetCookies); return new Promise((resolve, reject) => { diff_tool.parse(document.cookie); + if (diff_tool.initial_cookies.length > 0) { + // The cookies should ideally be empty. If that isn't the case, log it. + //Cookies with equal keys (e.g. foo=) may have unwanted side-effects. + log("Run with existing cookies: " + diff_tool.initial_cookies, file); + } window.addEventListener("message", t.step_func(e => { assert_true(!!e.data, "Message contains data") resolve(e.data); diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/cookie-setter.py b/tests/wpt/web-platform-tests/cookies/http-state/resources/cookie-setter.py index 0418f4b7630..758b1429f72 100644 --- a/tests/wpt/web-platform-tests/cookies/http-state/resources/cookie-setter.py +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/cookie-setter.py @@ -1,5 +1,17 @@ -from os import path; +from os import path +from os import listdir +""" +The main purpose of this script is to set cookies based on files in this folder: + cookies/http-state/resources + +If a wpt server is running, navigate to + http://<server>/cookies/http-state/resources/cookie-setter.py +which will run all cookie tests and explain the usage of this script in detail. + +If you want to run a test in isolation, append "?debug=" and the test id to the +URL above. +""" SETUP_FILE_TEMPLATE = "{}-test" EXPECTATION_FILE_TEMPLATE = "{}-expected" @@ -7,13 +19,18 @@ EXPECTATION_HTML_SCAFFOLD = "iframe-expectation-doc.html.py-str" DEBUGGING_HTML_SCAFFOLD = "debugging-single-test.html.py-str" DEFAULT_RESOURCE_DIR = path.join("cookies", "http-state", "resources") DEFAULT_TEST_DIR = "test-files" +ALL_TESTS = "all-tests.html.py-str" def dump_file(directory, filename): + """Reads a file into a string.""" return open(path.join(directory, filename), "r").read() class CookieTestResponse(object): + """Loads the Set-Cookie header from a given file name. Relies on the naming + convention that ever test file is called '<test_id>-test' and every + expectation is called '<test_id>-expected'.""" def __init__(self, file, root): super(CookieTestResponse, self).__init__() self.__test_file = SETUP_FILE_TEMPLATE.format(file) @@ -22,16 +39,36 @@ class CookieTestResponse(object): self.__test_files_dir = path.join(self.__resources_dir, DEFAULT_TEST_DIR) def cookie_setting_header(self): + """Returns the loaded header.""" return dump_file(self.__test_files_dir, self.__test_file) def body_with_expectation(self): + """Returns a full HTML document which contains the expectation.""" html_frame = dump_file(self.__resources_dir, EXPECTATION_HTML_SCAFFOLD) - expected_data = dump_file(self.__test_files_dir, self.__expectation_file); + expected_data = dump_file(self.__test_files_dir, self.__expectation_file) return html_frame.format(**{'data' : expected_data}) +def find_all_test_files(root): + """Retrieves all files from the test-files/ folder and returns them as + string pair as used in the JavaScript object. Sorted by filename.""" + all_files = [] + line_template = '{{file: "{filename}", name: "{filename}"}},' + for file in listdir(path.join(root, DEFAULT_RESOURCE_DIR, DEFAULT_TEST_DIR)): + if file.endswith('-test'): + name = file.replace('-test', '') + all_files.append(line_template.format(**{'filename' : name})) + all_files.sort() + return all_files + +def generate_for_all_tests(root): + """Returns an HTML document which loads and executes all tests in the + test-files/ directory.""" + html_frame = dump_file(path.join(root, DEFAULT_RESOURCE_DIR), ALL_TESTS) + return html_frame % '\n'.join(find_all_test_files(root)) def main(request, response): if "debug" in request.GET: + """If '?debug=' is set, return the document for a single test.""" response.writer.write_status(200) response.writer.end_headers() html_frame = dump_file(path.join(request.doc_root, DEFAULT_RESOURCE_DIR), @@ -40,15 +77,18 @@ def main(request, response): response.writer.write_content(test_file) return; - if not "file" in request.GET: - response.writer.write_status(404) + if "file" in request.GET: + """If '?file=' is set, send a cookie and a document which contains the + expectation of which cookies should be set by the browser in response.""" + cookie_response = CookieTestResponse(request.GET['file'], request.doc_root) + + response.writer.write_status(200) + response.writer.write(cookie_response.cookie_setting_header()) response.writer.end_headers() - response.writer.write_content("The 'file' parameter is missing!") + response.writer.write_content(cookie_response.body_with_expectation()) return; - cookie_response = CookieTestResponse(request.GET['file'], request.doc_root) - + """Without any arguments, return documentation and run all available tests.""" response.writer.write_status(200) - response.writer.write(cookie_response.cookie_setting_header()) response.writer.end_headers() - response.writer.write_content(cookie_response.body_with_expectation()) + response.writer.write_content(generate_for_all_tests(request.doc_root)) diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/debugging-single-test.html.py-str b/tests/wpt/web-platform-tests/cookies/http-state/resources/debugging-single-test.html.py-str index d34ff872c1d..40d9809a4bc 100644 --- a/tests/wpt/web-platform-tests/cookies/http-state/resources/debugging-single-test.html.py-str +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/debugging-single-test.html.py-str @@ -8,9 +8,19 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="cookie-http-state-template.js"></script> + <style type="text/css"> + .scrollable { + height:150px; + overflow-y:scroll; + } + </style> </head> <body> - <div id="log"></div> + <h3>Log</h3> + <div id="log" class="scrollable"></div> + <h3>IFrame</h3> + <div id="iframes" class="toggleable scrollable"></div> + <h3>Test Results</h3> <script> setup({ explicit_timeout: true }); diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0001-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0001-expected new file mode 100644 index 00000000000..8646afc6366 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0001-expected @@ -0,0 +1 @@ +Cookie: foo=春节回家路·春运完全手册 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0001-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0001-test new file mode 100644 index 00000000000..e89a36dd89e --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0001-test @@ -0,0 +1 @@ +Set-Cookie: foo=春节回家路·春运完全手册 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0002-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0002-expected new file mode 100644 index 00000000000..fc7d2561017 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0002-expected @@ -0,0 +1 @@ +Cookie: 春节回=家路·春运完全手册 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0002-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0002-test new file mode 100644 index 00000000000..70ce472afa6 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0002-test @@ -0,0 +1 @@ +Set-Cookie: 春节回=家路·春运完全手册 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0003-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0003-expected new file mode 100644 index 00000000000..1969bc86b97 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0003-expected @@ -0,0 +1 @@ +Cookie: 春节回=家路·春运 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0003-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0003-test new file mode 100644 index 00000000000..446e2fd29f2 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0003-test @@ -0,0 +1 @@ +Set-Cookie: 春节回=家路·春运; 完全手册 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0004-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0004-expected new file mode 100644 index 00000000000..1d6d952989e --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0004-expected @@ -0,0 +1 @@ +Cookie: foo="春节回家路·春运完全手册" diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0004-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0004-test new file mode 100644 index 00000000000..1564ba4fc92 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0004-test @@ -0,0 +1 @@ +Set-Cookie: foo="春节回家路·春运完全手册" diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0001-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0001-expected new file mode 100644 index 00000000000..1022f64a290 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0001-expected @@ -0,0 +1 @@ +Cookie: a=b diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0001-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0001-test new file mode 100644 index 00000000000..4635f0e7e37 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0001-test @@ -0,0 +1 @@ +Set-Cookie: a=b diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0002-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0002-expected new file mode 100644 index 00000000000..64932dcffb4 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0002-expected @@ -0,0 +1 @@ +Cookie: aBc="zzz " diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0002-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0002-test new file mode 100644 index 00000000000..24ab0d2da56 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0002-test @@ -0,0 +1 @@ +Set-Cookie: aBc="zzz " ; diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0003-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0003-expected new file mode 100644 index 00000000000..64932dcffb4 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0003-expected @@ -0,0 +1 @@ +Cookie: aBc="zzz " diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0003-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0003-test new file mode 100644 index 00000000000..bac41f99288 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0003-test @@ -0,0 +1 @@ +Set-Cookie: aBc="zzz " ; diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0004-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0004-expected new file mode 100644 index 00000000000..9be3e8f6435 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0004-expected @@ -0,0 +1 @@ +Cookie: aBc="zz diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0004-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0004-test new file mode 100644 index 00000000000..45cab2f409d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0004-test @@ -0,0 +1 @@ +Set-Cookie: aBc="zz;pp" ; ; diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0005-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0005-expected new file mode 100644 index 00000000000..9be3e8f6435 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0005-expected @@ -0,0 +1 @@ +Cookie: aBc="zz diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0005-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0005-test new file mode 100644 index 00000000000..c2dfebd3c44 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0005-test @@ -0,0 +1 @@ +Set-Cookie: aBc="zz ; diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0006-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0006-expected new file mode 100644 index 00000000000..8121145c18b --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0006-expected @@ -0,0 +1 @@ +Cookie: aBc="zzz " "ppp" diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0006-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0006-test new file mode 100644 index 00000000000..a9da26811a4 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0006-test @@ -0,0 +1 @@ +Set-Cookie: aBc="zzz " "ppp" ; diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0007-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0007-expected new file mode 100644 index 00000000000..8121145c18b --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0007-expected @@ -0,0 +1 @@ +Cookie: aBc="zzz " "ppp" diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0007-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0007-test new file mode 100644 index 00000000000..dca20b8e7df --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0007-test @@ -0,0 +1 @@ +Set-Cookie: aBc="zzz " "ppp" ; diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0008-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0008-expected new file mode 100644 index 00000000000..602c0e017c4 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0008-expected @@ -0,0 +1 @@ +Cookie: aBc=A"B diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0008-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0008-test new file mode 100644 index 00000000000..ece6c66f0b1 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0008-test @@ -0,0 +1 @@ +Set-Cookie: aBc=A"B ; diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0009-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0009-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0009-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0009-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0009-test new file mode 100644 index 00000000000..eecdae60cc4 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0009-test @@ -0,0 +1 @@ +Set-Cookie: BLAHHH; path=/; diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0010-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0010-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0010-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0010-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0010-test new file mode 100644 index 00000000000..17a18ea9272 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0010-test @@ -0,0 +1 @@ +Set-Cookie: "BLA\"HHH"; path=/; diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0011-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0011-expected new file mode 100644 index 00000000000..2062e231556 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0011-expected @@ -0,0 +1 @@ +Cookie: a="B diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0011-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0011-test new file mode 100644 index 00000000000..4000f269a49 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0011-test @@ -0,0 +1 @@ +Set-Cookie: a="B diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0012-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0012-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0012-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0012-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0012-test new file mode 100644 index 00000000000..b33a4e7427b --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0012-test @@ -0,0 +1 @@ +Set-Cookie: =ABC diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0013-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0013-expected new file mode 100644 index 00000000000..5d2d06092c4 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0013-expected @@ -0,0 +1 @@ +Cookie: ABC= diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0013-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0013-test new file mode 100644 index 00000000000..f61a087bb8f --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0013-test @@ -0,0 +1 @@ +Set-Cookie: ABC=; path = / diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0014-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0014-expected new file mode 100644 index 00000000000..21bfd134e54 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0014-expected @@ -0,0 +1 @@ +Cookie: A=BC diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0014-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0014-test new file mode 100644 index 00000000000..edbb7931a38 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0014-test @@ -0,0 +1 @@ +Set-Cookie: A = BC ;foo;;; bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0015-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0015-expected new file mode 100644 index 00000000000..b968e7427a0 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0015-expected @@ -0,0 +1 @@ +Cookie: A=== BC diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0015-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0015-test new file mode 100644 index 00000000000..80d32366b5d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0015-test @@ -0,0 +1 @@ +Set-Cookie: A=== BC ;foo;;; bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0016-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0016-expected new file mode 100644 index 00000000000..11d8efaea2a --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0016-expected @@ -0,0 +1 @@ +Cookie: foo="zohNumRKgI0oxyhSsV3Z7D" diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0016-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0016-test new file mode 100644 index 00000000000..8abf12026c7 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0016-test @@ -0,0 +1 @@ +Set-Cookie: foo="zohNumRKgI0oxyhSsV3Z7D" ; expires=Sun, 18-Apr-2027 21:06:29 GMT ; path=/ ; diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0017-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0017-expected new file mode 100644 index 00000000000..6bb84483a05 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0017-expected @@ -0,0 +1 @@ +Cookie: foo=zohNumRKgI0oxyhSsV3Z7D diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0017-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0017-test new file mode 100644 index 00000000000..94cce02078b --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0017-test @@ -0,0 +1 @@ +Set-Cookie: foo=zohNumRKgI0oxyhSsV3Z7D ; expires=Sun, 18-Apr-2027 21:06:29 GMT ; path=/ ; diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0018-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0018-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0018-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0018-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0018-test new file mode 100644 index 00000000000..145ad2c5def --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0018-test @@ -0,0 +1 @@ +Set-Cookie: diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0019-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0019-expected new file mode 100644 index 00000000000..b6df50eef28 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0019-expected @@ -0,0 +1 @@ +Cookie: a=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0019-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0019-test new file mode 100644 index 00000000000..e3bcc4a18c3 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0019-test @@ -0,0 +1 @@ +Set-Cookie: a=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0021-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0021-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0021-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0021-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0021-test new file mode 100644 index 00000000000..145ad2c5def --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0021-test @@ -0,0 +1 @@ +Set-Cookie: diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0001-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0001-expected new file mode 100644 index 00000000000..ab55cea018a --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0001-expected @@ -0,0 +1 @@ +Cookie: foo=bar, baz=qux diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0001-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0001-test new file mode 100644 index 00000000000..5b3678de396 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0001-test @@ -0,0 +1 @@ +Set-Cookie: foo=bar, baz=qux diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0002-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0002-expected new file mode 100644 index 00000000000..33590a08486 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0002-expected @@ -0,0 +1 @@ +Cookie: foo="bar, baz=qux" diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0002-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0002-test new file mode 100644 index 00000000000..164c0a93bfc --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0002-test @@ -0,0 +1 @@ +Set-Cookie: foo="bar, baz=qux" diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0003-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0003-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0003-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0003-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0003-test new file mode 100644 index 00000000000..213d3a5f267 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0003-test @@ -0,0 +1 @@ +Set-Cookie: foo=bar; b,az=qux diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0004-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0004-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0004-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0004-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0004-test new file mode 100644 index 00000000000..e93f6f4062c --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0004-test @@ -0,0 +1 @@ +Set-Cookie: foo=bar; baz=q,ux diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0005-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0005-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0005-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0005-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0005-test new file mode 100644 index 00000000000..eeb040d0a31 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0005-test @@ -0,0 +1 @@ +Set-Cookie: foo=bar; Max-Age=50,399 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0006-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0006-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0006-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0006-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0006-test new file mode 100644 index 00000000000..a3eaff03ba3 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0006-test @@ -0,0 +1 @@ +Set-Cookie: foo=bar; Expires=Fri, 07 Aug 2019 08:04:19 GMT diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0007-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0007-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0007-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0007-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0007-test new file mode 100644 index 00000000000..29fb0a2695d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0007-test @@ -0,0 +1 @@ +Set-Cookie: foo=bar; Expires=Fri 07 Aug 2019 08:04:19 GMT, baz=qux diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0020-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0020-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0020-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0020-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0020-test new file mode 100644 index 00000000000..67cefa339ef --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0020-test @@ -0,0 +1 @@ +Set-Cookie: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0022-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0022-expected new file mode 100644 index 00000000000..8ac13216032 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0022-expected @@ -0,0 +1 @@ +Cookie: AAA=BB diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0022-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0022-test Binary files differnew file mode 100644 index 00000000000..1a8f35ffbd8 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0022-test diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0023-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0023-expected new file mode 100644 index 00000000000..8ac13216032 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0023-expected @@ -0,0 +1 @@ +Cookie: AAA=BB diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0023-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0023-test new file mode 100644 index 00000000000..76a8ed4e9b8 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0023-test @@ -0,0 +1 @@ +Set-Cookie: AAA=BB
ZYX diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-path0029-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-path0029-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-path0029-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-path0029-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-path0029-test new file mode 100644 index 00000000000..d7219d590c6 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-path0029-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; path=/cookie-parser-result/foo/bar +Location: /cookie-parser-result/f%6Fo/bar?disabled-path0029 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0001-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0001-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0001-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0001-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0001-test new file mode 100644 index 00000000000..fd8926d7b4f --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0001-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; domain=home.example.org +Location: http://home.example.org:8888/cookie-parser-result?domain0001 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0002-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0002-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0002-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0002-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0002-test new file mode 100644 index 00000000000..a6ad2a80856 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0002-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; domain=home.example.org +Location: http://sibling.example.org:8888/cookie-parser-result?domain0002 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0003-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0003-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0003-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0003-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0003-test new file mode 100644 index 00000000000..ff051f4806c --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0003-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; domain=.home.example.org +Location: http://home.example.org:8888/cookie-parser-result?domain0003 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0004-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0004-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0004-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0004-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0004-test new file mode 100644 index 00000000000..f05029bb5a7 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0004-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; domain=home.example.org +Location: http://subdomain.home.example.org:8888/cookie-parser-result?domain0004 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0005-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0005-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0005-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0005-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0005-test new file mode 100644 index 00000000000..697ab186fcd --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0005-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; domain=.home.example.org +Location: http://subdomain.home.example.org:8888/cookie-parser-result?domain0005 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0006-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0006-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0006-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0006-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0006-test new file mode 100644 index 00000000000..fe5f90df9dc --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0006-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; domain=.home.example.org +Location: http://sibling.example.org:8888/cookie-parser-result?domain0006 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0007-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0007-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0007-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0007-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0007-test new file mode 100644 index 00000000000..1d2c6fcec62 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0007-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; domain=sibling.example.org +Location: http://sibling.example.org:8888/cookie-parser-result?domain0007 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0008-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0008-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0008-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0008-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0008-test new file mode 100644 index 00000000000..491c52de9da --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0008-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; domain=.example.org +Location: http://home.example.org:8888/cookie-parser-result?domain0008 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0009-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0009-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0009-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0009-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0009-test new file mode 100644 index 00000000000..736e69fe8e5 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0009-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; domain=example.org +Location: http://home.example.org:8888/cookie-parser-result?domain0009 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0010-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0010-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0010-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0010-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0010-test new file mode 100644 index 00000000000..5bf212f27d8 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0010-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; domain=..home.example.org +Location: http://home.example.org:8888/cookie-parser-result?domain0010 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0011-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0011-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0011-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0011-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0011-test new file mode 100644 index 00000000000..e1c54db25ed --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0011-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; domain=home..example.org +Location: http://home.example.org:8888/cookie-parser-result?domain0011 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0012-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0012-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0012-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0012-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0012-test new file mode 100644 index 00000000000..a189f38087a --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0012-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; domain= .home.example.org +Location: http://home.example.org:8888/cookie-parser-result?domain0012 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0013-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0013-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0013-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0013-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0013-test new file mode 100644 index 00000000000..8493146e767 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0013-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; domain= . home.example.org +Location: http://home.example.org:8888/cookie-parser-result?domain0013 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0014-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0014-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0014-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0014-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0014-test new file mode 100644 index 00000000000..adccd0d3205 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0014-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; domain=home.example.org. +Location: http://home.example.org:8888/cookie-parser-result?domain0014 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0015-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0015-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0015-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0015-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0015-test new file mode 100644 index 00000000000..c123ba940d3 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0015-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; domain=home.example.org.. +Location: http://home.example.org:8888/cookie-parser-result?domain0015 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0016-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0016-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0016-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0016-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0016-test new file mode 100644 index 00000000000..9136ac4d86a --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0016-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; domain=home.example.org . +Location: http://home.example.org:8888/cookie-parser-result?domain0016 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0017-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0017-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0017-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0017-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0017-test new file mode 100644 index 00000000000..8e876b8d687 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0017-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; domain=.org +Location: http://home.example.org:8888/cookie-parser-result?domain0017 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0018-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0018-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0018-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0018-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0018-test new file mode 100644 index 00000000000..3763f9625ef --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0018-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; domain=.org. +Location: http://home.example.org:8888/cookie-parser-result?domain0018 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0019-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0019-expected new file mode 100644 index 00000000000..1f359c4850b --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0019-expected @@ -0,0 +1 @@ +Cookie: foo=bar; foo2=bar2 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0019-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0019-test new file mode 100644 index 00000000000..f5aebfd0e10 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0019-test @@ -0,0 +1,3 @@ +Set-Cookie: foo=bar; domain=home.example.org +Set-Cookie: foo2=bar2; domain=.home.example.org +Location: http://home.example.org:8888/cookie-parser-result?domain0019 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0020-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0020-expected new file mode 100644 index 00000000000..5eb3ac42d41 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0020-expected @@ -0,0 +1 @@ +Cookie: foo2=bar2; foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0020-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0020-test new file mode 100644 index 00000000000..1c7a61c85f6 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0020-test @@ -0,0 +1,3 @@ +Set-Cookie: foo2=bar2; domain=.home.example.org +Set-Cookie: foo=bar; domain=home.example.org +Location: http://home.example.org:8888/cookie-parser-result?domain0020 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0021-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0021-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0021-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0021-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0021-test new file mode 100644 index 00000000000..895744eac5d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0021-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; domain="home.example.org" +Location: http://home.example.org:8888/cookie-parser-result?domain0021 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0022-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0022-expected new file mode 100644 index 00000000000..1f359c4850b --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0022-expected @@ -0,0 +1 @@ +Cookie: foo=bar; foo2=bar2 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0022-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0022-test new file mode 100644 index 00000000000..6eeae00159f --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0022-test @@ -0,0 +1,3 @@ +Set-Cookie: foo=bar; domain=home.example.org +Set-Cookie: foo2=bar2; domain=.example.org +Location: http://home.example.org:8888/cookie-parser-result?domain0022 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0023-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0023-expected new file mode 100644 index 00000000000..5eb3ac42d41 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0023-expected @@ -0,0 +1 @@ +Cookie: foo2=bar2; foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0023-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0023-test new file mode 100644 index 00000000000..91a81ed003c --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0023-test @@ -0,0 +1,3 @@ +Set-Cookie: foo2=bar2; domain=.example.org +Set-Cookie: foo=bar; domain=home.example.org +Location: http://home.example.org:8888/cookie-parser-result?domain0023 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0024-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0024-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0024-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0024-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0024-test new file mode 100644 index 00000000000..63157b9b457 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0024-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; domain=.example.org; domain=home.example.org +Location: http://sibling.example.org:8888/cookie-parser-result?domain0024 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0025-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0025-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0025-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0025-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0025-test new file mode 100644 index 00000000000..353c3bb6346 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0025-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; domain=home.example.org; domain=.example.org +Location: http://sibling.example.org:8888/cookie-parser-result?domain0025 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0026-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0026-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0026-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0026-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0026-test new file mode 100644 index 00000000000..3b14e307546 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0026-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; domain=home.eXaMpLe.org +Location: http://home.example.org:8888/cookie-parser-result?domain0026 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0027-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0027-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0027-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0027-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0027-test new file mode 100644 index 00000000000..8b7adbd17a1 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0027-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; domain=home.example.org:8888 +Location: http://home.example.org:8888/cookie-parser-result?domain0027 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0028-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0028-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0028-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0028-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0028-test new file mode 100644 index 00000000000..ab8f2c401eb --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0028-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; domain=subdomain.home.example.org +Location: http://subdomain.home.example.org:8888/cookie-parser-result?domain0028 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0029-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0029-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0029-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0029-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0029-test new file mode 100644 index 00000000000..cfab57a6e49 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0029-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar +Location: http://subdomain.home.example.org:8888/cookie-parser-result?domain0029 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0031-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0031-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0031-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0031-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0031-test new file mode 100644 index 00000000000..6eccb78b8b8 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0031-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; domain=home.example.org; domain=.example.org +Location: http://sibling.example.org:8888/cookie-parser-result?domain0031 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0033-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0033-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0033-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0033-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0033-test new file mode 100644 index 00000000000..7fdcc8356a1 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0033-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; domain=home.example.org +Location: http://hoMe.eXaMplE.org:8888/cookie-parser-result?domain0033 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0034-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0034-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0034-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0034-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0034-test new file mode 100644 index 00000000000..d3f4723fd08 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0034-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; domain=home.example.org; domain=home.example.com +Location: http://home.example.org:8888/cookie-parser-result?domain0034 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0035-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0035-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0035-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0035-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0035-test new file mode 100644 index 00000000000..967d248c256 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0035-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; domain=home.example.com; domain=home.example.org +Location: http://home.example.org:8888/cookie-parser-result?domain0035 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0036-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0036-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0036-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0036-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0036-test new file mode 100644 index 00000000000..a618ec4dd20 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0036-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; domain=home.example.org; domain=home.example.com; domain=home.example.org +Location: http://home.example.org:8888/cookie-parser-result?domain0036 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0037-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0037-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0037-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0037-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0037-test new file mode 100644 index 00000000000..c61fe8f2762 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0037-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; domain=home.example.com; domain=home.example.org; domain=home.example.com +Location: http://home.example.org:8888/cookie-parser-result?domain0037 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0038-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0038-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0038-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0038-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0038-test new file mode 100644 index 00000000000..2d8fcca5731 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0038-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; domain=home.example.org; domain=home.example.org +Location: http://home.example.org:8888/cookie-parser-result?domain0038 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0039-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0039-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0039-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0039-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0039-test new file mode 100644 index 00000000000..3225b28baac --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0039-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; domain=home.example.org; domain=example.org +Location: http://home.example.org:8888/cookie-parser-result?domain0039 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0040-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0040-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0040-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0040-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0040-test new file mode 100644 index 00000000000..3e32fa895c3 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0040-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; domain=example.org; domain=home.example.org +Location: http://home.example.org:8888/cookie-parser-result?domain0040 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0041-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0041-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0041-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0041-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0041-test new file mode 100644 index 00000000000..6fbc4ad1141 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0041-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; domain=.sibling.example.org +Location: http://sibling.example.org:8888/cookie-parser-result?domain0041 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0042-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0042-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0042-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0042-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0042-test new file mode 100644 index 00000000000..9258624cc56 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0042-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; domain=.sibling.home.example.org +Location: http://sibling.home.example.org:8888/cookie-parser-result?domain0042 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0001-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0001-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0001-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0001-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0001-test new file mode 100644 index 00000000000..53f98e23b2a --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0001-test @@ -0,0 +1 @@ +Set-Cookie: foo=bar; max-age=-1 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0002-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0002-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0002-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0002-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0002-test new file mode 100644 index 00000000000..a79c5be41f4 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0002-test @@ -0,0 +1 @@ +Set-Cookie: foo=bar; max-age=0 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0003-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0003-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0003-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0003-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0003-test new file mode 100644 index 00000000000..785c326fae4 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0003-test @@ -0,0 +1 @@ +Set-Cookie: foo=bar; expires=Thu, 10 Apr 1980 16:33:12 GMT diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0004-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0004-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0004-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0004-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0004-test new file mode 100644 index 00000000000..567134f5d3a --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0004-test @@ -0,0 +1 @@ +Set-Cookie: foo=bar; max-age=60 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0005-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0005-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0005-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0005-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0005-test new file mode 100644 index 00000000000..0fa350adc36 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0005-test @@ -0,0 +1 @@ +Set-Cookie: foo=bar; max-age=-20 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0006-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0006-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0006-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0006-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0006-test new file mode 100644 index 00000000000..567134f5d3a --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0006-test @@ -0,0 +1 @@ +Set-Cookie: foo=bar; max-age=60 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0007-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0007-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0007-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0007-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0007-test new file mode 100644 index 00000000000..785c326fae4 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0007-test @@ -0,0 +1 @@ +Set-Cookie: foo=bar; expires=Thu, 10 Apr 1980 16:33:12 GMT diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0008-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0008-expected new file mode 100644 index 00000000000..0f62babd8b0 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0008-expected @@ -0,0 +1 @@ +Cookie: foo=bar; foo1=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0008-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0008-test new file mode 100644 index 00000000000..d6350d6c7b5 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0008-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; max-age=60 +Set-Cookie: foo1=bar; max-age=60 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0009-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0009-expected new file mode 100644 index 00000000000..555fbaf5471 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0009-expected @@ -0,0 +1 @@ +Cookie: foo1=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0009-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0009-test new file mode 100644 index 00000000000..84944d4d50b --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0009-test @@ -0,0 +1,3 @@ +Set-Cookie: foo=bar; max-age=60 +Set-Cookie: foo1=bar; max-age=60 +Set-Cookie: foo=differentvalue; max-age=0 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0010-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0010-expected new file mode 100644 index 00000000000..555fbaf5471 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0010-expected @@ -0,0 +1 @@ +Cookie: foo1=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0010-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0010-test new file mode 100644 index 00000000000..13477a47c26 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0010-test @@ -0,0 +1,4 @@ +Set-Cookie: foo=bar; max-age=60 +Set-Cookie: foo1=bar; max-age=60 +Set-Cookie: foo=differentvalue; max-age=0 +Set-Cookie: foo2=evendifferentvalue; max-age=0 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0011-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0011-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0011-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0011-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0011-test new file mode 100644 index 00000000000..bba20536edd --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0011-test @@ -0,0 +1 @@ +Set-Cookie: test=parser; domain=.parser.test; ;; ;=; ,,, ===,abc,=; abracadabra! max-age=20;=;; diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0012-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0012-expected new file mode 100644 index 00000000000..10e669a0134 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0012-expected @@ -0,0 +1 @@ +Cookie: test="fubar! = foo diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0012-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0012-test new file mode 100644 index 00000000000..9ba773f5c74 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0012-test @@ -0,0 +1,2 @@ +Set-Cookie: test="fubar! = foo;bar\";" parser; max-age=6 +Set-Cookie: five; max-age=2.63, diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0013-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0013-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0013-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0013-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0013-test new file mode 100644 index 00000000000..d491267e4aa --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0013-test @@ -0,0 +1,2 @@ +Set-Cookie: test=kill; max-age=0 +Set-Cookie: five; max-age=0 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0014-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0014-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0014-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0014-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0014-test new file mode 100644 index 00000000000..4cc1f450756 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0014-test @@ -0,0 +1 @@ +Set-Cookie: six diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0015-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0015-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0015-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0015-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0015-test new file mode 100644 index 00000000000..13254db6886 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0015-test @@ -0,0 +1,2 @@ +Set-Cookie: six +Set-Cookie: seven diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0016-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0016-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0016-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0016-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0016-test new file mode 100644 index 00000000000..6aab3e80d6f --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0016-test @@ -0,0 +1,3 @@ +Set-Cookie: six +Set-Cookie: seven +Set-Cookie: =eight diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0017-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0017-expected new file mode 100644 index 00000000000..fc9a2496c60 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0017-expected @@ -0,0 +1 @@ +Cookie: test=six diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0017-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0017-test new file mode 100644 index 00000000000..b6c297cc77d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0017-test @@ -0,0 +1,4 @@ +Set-Cookie: six +Set-Cookie: seven +Set-Cookie: =eight +Set-Cookie: test=six diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0001-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0001-expected new file mode 100644 index 00000000000..96527926e10 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0001-expected @@ -0,0 +1 @@ +Cookie: a=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0001-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0001-test new file mode 100644 index 00000000000..3ce5f5f9824 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0001-test @@ -0,0 +1 @@ +Set-Cookie: a=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0002-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0002-expected new file mode 100644 index 00000000000..d4d3cda811b --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0002-expected @@ -0,0 +1 @@ +Cookie: 1=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0002-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0002-test new file mode 100644 index 00000000000..d6eac8a757a --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0002-test @@ -0,0 +1 @@ +Set-Cookie: 1=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0003-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0003-expected new file mode 100644 index 00000000000..0c00f45c4a4 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0003-expected @@ -0,0 +1 @@ +Cookie: $=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0003-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0003-test new file mode 100644 index 00000000000..7ea96155bd7 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0003-test @@ -0,0 +1 @@ +Set-Cookie: $=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0004-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0004-expected new file mode 100644 index 00000000000..b079529aa24 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0004-expected @@ -0,0 +1 @@ +Cookie: !a=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0004-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0004-test new file mode 100644 index 00000000000..99f0e61801a --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0004-test @@ -0,0 +1 @@ +Set-Cookie: !a=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0005-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0005-expected new file mode 100644 index 00000000000..a0f031bb34e --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0005-expected @@ -0,0 +1 @@ +Cookie: @a=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0005-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0005-test new file mode 100644 index 00000000000..9e33e0c8e47 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0005-test @@ -0,0 +1 @@ +Set-Cookie: @a=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0006-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0006-expected new file mode 100644 index 00000000000..ee0e7d7c335 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0006-expected @@ -0,0 +1 @@ +Cookie: #a=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0006-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0006-test new file mode 100644 index 00000000000..fbd03632c61 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0006-test @@ -0,0 +1 @@ +Set-Cookie: #a=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0007-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0007-expected new file mode 100644 index 00000000000..6d6e56ebe59 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0007-expected @@ -0,0 +1 @@ +Cookie: $a=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0007-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0007-test new file mode 100644 index 00000000000..d41e64b87ec --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0007-test @@ -0,0 +1 @@ +Set-Cookie: $a=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0008-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0008-expected new file mode 100644 index 00000000000..a4b8c242825 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0008-expected @@ -0,0 +1 @@ +Cookie: %a=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0008-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0008-test new file mode 100644 index 00000000000..7afcf700376 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0008-test @@ -0,0 +1 @@ +Set-Cookie: %a=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0009-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0009-expected new file mode 100644 index 00000000000..49506acc248 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0009-expected @@ -0,0 +1 @@ +Cookie: ^a=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0009-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0009-test new file mode 100644 index 00000000000..f40d2c4d6b9 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0009-test @@ -0,0 +1 @@ +Set-Cookie: ^a=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0010-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0010-expected new file mode 100644 index 00000000000..1e72557892b --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0010-expected @@ -0,0 +1 @@ +Cookie: &a=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0010-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0010-test new file mode 100644 index 00000000000..fb4fd921be3 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0010-test @@ -0,0 +1 @@ +Set-Cookie: &a=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0011-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0011-expected new file mode 100644 index 00000000000..260d7028a01 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0011-expected @@ -0,0 +1 @@ +Cookie: *a=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0011-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0011-test new file mode 100644 index 00000000000..b36b72388f2 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0011-test @@ -0,0 +1 @@ +Set-Cookie: *a=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0012-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0012-expected new file mode 100644 index 00000000000..0a2686a1525 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0012-expected @@ -0,0 +1 @@ +Cookie: (a=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0012-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0012-test new file mode 100644 index 00000000000..6927aac6fa0 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0012-test @@ -0,0 +1 @@ +Set-Cookie: (a=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0013-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0013-expected new file mode 100644 index 00000000000..87dec78b622 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0013-expected @@ -0,0 +1 @@ +Cookie: )a=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0013-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0013-test new file mode 100644 index 00000000000..59ada98321c --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0013-test @@ -0,0 +1 @@ +Set-Cookie: )a=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0014-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0014-expected new file mode 100644 index 00000000000..82bfe0e60ac --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0014-expected @@ -0,0 +1 @@ +Cookie: -a=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0014-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0014-test new file mode 100644 index 00000000000..a113e99be5e --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0014-test @@ -0,0 +1 @@ +Set-Cookie: -a=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0015-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0015-expected new file mode 100644 index 00000000000..390b77b30c4 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0015-expected @@ -0,0 +1 @@ +Cookie: _a=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0015-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0015-test new file mode 100644 index 00000000000..60fc0746ba2 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0015-test @@ -0,0 +1 @@ +Set-Cookie: _a=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0016-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0016-expected new file mode 100644 index 00000000000..7d4d9e33079 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0016-expected @@ -0,0 +1 @@ +Cookie: +=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0016-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0016-test new file mode 100644 index 00000000000..371dbcde6ca --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0016-test @@ -0,0 +1 @@ +Set-Cookie: +=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0017-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0017-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0017-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0017-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0017-test new file mode 100644 index 00000000000..056143166bd --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0017-test @@ -0,0 +1 @@ +Set-Cookie: =a=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0018-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0018-expected new file mode 100644 index 00000000000..96527926e10 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0018-expected @@ -0,0 +1 @@ +Cookie: a=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0018-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0018-test new file mode 100644 index 00000000000..e86a48360cf --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0018-test @@ -0,0 +1 @@ +Set-Cookie: a =bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0019-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0019-expected new file mode 100644 index 00000000000..8d0bc2d07d6 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0019-expected @@ -0,0 +1 @@ +Cookie: "a=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0019-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0019-test new file mode 100644 index 00000000000..d48e3f6954a --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0019-test @@ -0,0 +1 @@ +Set-Cookie: "a=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0020-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0020-expected new file mode 100644 index 00000000000..aa9cd6d435c --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0020-expected @@ -0,0 +1 @@ +Cookie: "a=b"=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0020-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0020-test new file mode 100644 index 00000000000..b84f64d1798 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0020-test @@ -0,0 +1 @@ +Set-Cookie: "a=b"=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0021-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0021-expected new file mode 100644 index 00000000000..206ff76e3e3 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0021-expected @@ -0,0 +1 @@ +Cookie: "a=qux diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0021-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0021-test new file mode 100644 index 00000000000..56b319e9d49 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0021-test @@ -0,0 +1,2 @@ +Set-Cookie: "a=b"=bar +Set-Cookie: "a=qux diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0022-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0022-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0022-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0022-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0022-test new file mode 100644 index 00000000000..cc59ff17eda --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0022-test @@ -0,0 +1 @@ +Set-Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0023-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0023-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0023-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0023-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0023-test new file mode 100644 index 00000000000..b7f9cc257d2 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0023-test @@ -0,0 +1 @@ +Set-Cookie: foo;bar=baz diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0024-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0024-expected new file mode 100644 index 00000000000..5ac4f2535c8 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0024-expected @@ -0,0 +1 @@ +Cookie: $Version=1 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0024-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0024-test new file mode 100644 index 00000000000..da7b696da91 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0024-test @@ -0,0 +1 @@ +Set-Cookie: $Version=1; foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0025-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0025-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0025-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0025-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0025-test new file mode 100644 index 00000000000..708f006b9c0 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0025-test @@ -0,0 +1 @@ +Set-Cookie: ===a=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0026-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0026-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0026-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0026-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0026-test new file mode 100644 index 00000000000..bbeb77a029c --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0026-test @@ -0,0 +1 @@ +Set-Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0027-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0027-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0027-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0027-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0027-test new file mode 100644 index 00000000000..d222227e6de --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0027-test @@ -0,0 +1 @@ +Set-Cookie: foo=bar ; diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0028-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0028-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0028-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0028-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0028-test new file mode 100644 index 00000000000..1c197e3324c --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0028-test @@ -0,0 +1 @@ +Set-Cookie: =a diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0029-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0029-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0029-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0029-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0029-test new file mode 100644 index 00000000000..44212468d44 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0029-test @@ -0,0 +1 @@ +Set-Cookie: = diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0030-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0030-expected new file mode 100644 index 00000000000..a391380fb66 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0030-expected @@ -0,0 +1 @@ +Cookie: foo bar=baz diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0030-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0030-test new file mode 100644 index 00000000000..cf3ff160f45 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0030-test @@ -0,0 +1 @@ +Set-Cookie: foo bar=baz diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0031-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0031-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0031-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0031-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0031-test new file mode 100644 index 00000000000..93941849040 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0031-test @@ -0,0 +1 @@ +Set-Cookie: "foo;bar"=baz diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0032-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0032-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0032-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0032-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0032-test new file mode 100644 index 00000000000..93fc9752333 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0032-test @@ -0,0 +1 @@ +Set-Cookie: "foo\"bar;baz"=qux diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0033-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0033-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0033-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0033-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0033-test new file mode 100644 index 00000000000..7bbdd89566a --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0033-test @@ -0,0 +1,2 @@ +Set-Cookie: =foo=bar +Set-Cookie: aaa diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0030-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0030-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0030-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0030-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0030-test new file mode 100644 index 00000000000..3ab75aa3a07 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0030-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; domain= +Location: http://home.example.org:8888/cookie-parser-result?optional-domain0030 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0041-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0041-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0041-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0041-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0041-test new file mode 100644 index 00000000000..b85a6c9e43c --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0041-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; domain=example.org; domain= +Location: http://home.example.org:8888/cookie-parser-result?optional-domain0041 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0042-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0042-expected new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0042-expected @@ -0,0 +1 @@ + diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0042-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0042-test new file mode 100644 index 00000000000..524d192b6e7 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0042-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; domain=foo.example.org; domain= +Location: http://home.example.org:8888/cookie-parser-result?optional-domain0042 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0043-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0043-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0043-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0043-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0043-test new file mode 100644 index 00000000000..506cdc46e52 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0043-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; domain=foo.example.org; domain= +Location: http://subdomain.home.example.org:8888/cookie-parser-result?optional-domain0043 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/ordering0001-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/ordering0001-expected new file mode 100644 index 00000000000..3d819593f53 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/ordering0001-expected @@ -0,0 +1 @@ +Cookie: key=val5; key=val1; key=val2; key=val4 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/ordering0001-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/ordering0001-test new file mode 100644 index 00000000000..ba6e85c44cd --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/ordering0001-test @@ -0,0 +1,7 @@ +Set-Cookie: key=val0; +Set-Cookie: key=val1; path=/cookie-parser-result +Set-Cookie: key=val2; path=/ +Set-Cookie: key=val3; path=/bar +Set-Cookie: key=val4; domain=.example.org +Set-Cookie: key=val5; domain=.example.org; path=/cookie-parser-result/foo +Location: /cookie-parser-result/foo/baz?ordering0001 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0001-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0001-expected new file mode 100644 index 00000000000..785d0a2f5f7 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0001-expected @@ -0,0 +1 @@ +Cookie: x=y; a=b diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0001-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0001-test new file mode 100644 index 00000000000..ed81cb955f7 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0001-test @@ -0,0 +1,2 @@ +Set-Cookie: a=b; path=/ +Set-Cookie: x=y; path=/cookie-parser-result diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0002-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0002-expected new file mode 100644 index 00000000000..2314ba0d495 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0002-expected @@ -0,0 +1 @@ +Cookie: a=b; x=y diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0002-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0002-test new file mode 100644 index 00000000000..22493285185 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0002-test @@ -0,0 +1,2 @@ +Set-Cookie: a=b; path=/cookie-parser-result +Set-Cookie: x=y; path=/ diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0003-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0003-expected new file mode 100644 index 00000000000..2314ba0d495 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0003-expected @@ -0,0 +1 @@ +Cookie: a=b; x=y diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0003-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0003-test new file mode 100644 index 00000000000..e4b5a4b2565 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0003-test @@ -0,0 +1,2 @@ +Set-Cookie: x=y; path=/ +Set-Cookie: a=b; path=/cookie-parser-result diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0004-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0004-expected new file mode 100644 index 00000000000..785d0a2f5f7 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0004-expected @@ -0,0 +1 @@ +Cookie: x=y; a=b diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0004-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0004-test new file mode 100644 index 00000000000..a80ea6ec015 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0004-test @@ -0,0 +1,2 @@ +Set-Cookie: x=y; path=/cookie-parser-result +Set-Cookie: a=b; path=/ diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0005-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0005-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0005-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0005-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0005-test new file mode 100644 index 00000000000..6447c9164f9 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0005-test @@ -0,0 +1 @@ +Set-Cookie: foo=bar; path=/cookie-parser-result/foo diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0006-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0006-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0006-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0006-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0006-test new file mode 100644 index 00000000000..07ecf27b82b --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0006-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar +Set-Cookie: foo=qux; path=/cookie-parser-result/foo diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0007-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0007-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0007-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0007-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0007-test new file mode 100644 index 00000000000..66a54de7420 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0007-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; path=/cookie-parser-result/foo +Location: /cookie-parser-result/foo?path0007 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0008-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0008-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0008-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0008-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0008-test new file mode 100644 index 00000000000..b10012d3096 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0008-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; path=/cookie-parser-result/foo +Location: /cookie-parser-result/bar?path0008 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0009-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0009-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0009-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0009-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0009-test new file mode 100644 index 00000000000..874f21bad97 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0009-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; path=/cookie-parser-result/foo/qux +Location: /cookie-parser-result/foo?path0009 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0010-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0010-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0010-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0010-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0010-test new file mode 100644 index 00000000000..0ea62fd5ec5 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0010-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; path=/cookie-parser-result/foo/qux +Location: /cookie-parser-result/foo/qux?path0010 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0011-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0011-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0011-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0011-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0011-test new file mode 100644 index 00000000000..35ea0620495 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0011-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; path=/cookie-parser-result/foo/qux +Location: /cookie-parser-result/bar/qux?path0011 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0012-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0012-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0012-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0012-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0012-test new file mode 100644 index 00000000000..4c0577897bd --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0012-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; path=/cookie-parser-result/foo/qux +Location: /cookie-parser-result/foo/baz?path0012 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0013-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0013-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0013-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0013-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0013-test new file mode 100644 index 00000000000..d17b99b6b43 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0013-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; path=/cookie-parser-result/foo/qux/ +Location: /cookie-parser-result/foo/baz?path0013 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0014-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0014-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0014-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0014-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0014-test new file mode 100644 index 00000000000..a953e707b3b --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0014-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; path=/cookie-parser-result/foo/qux/ +Location: /cookie-parser-result/foo/qux?path0014 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0015-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0015-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0015-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0015-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0015-test new file mode 100644 index 00000000000..253a9bb2fcd --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0015-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; path=/cookie-parser-result/foo/qux/ +Location: /cookie-parser-result/foo/qux/?path0015 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0016-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0016-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0016-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0016-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0016-test new file mode 100644 index 00000000000..433faeb9120 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0016-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; path=/cookie-parser-result/foo/ +Location: /cookie-parser-result/foo/qux?path0016 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0017-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0017-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0017-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0017-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0017-test new file mode 100644 index 00000000000..a602d7ca6fe --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0017-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; path=/cookie-parser-result/foo/ +Location: /cookie-parser-result/foo//qux?path0017 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0018-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0018-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0018-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0018-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0018-test new file mode 100644 index 00000000000..37040dac5d3 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0018-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; path=/cookie-parser-result/foo/ +Location: /cookie-parser-result/fooqux?path0018 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0019-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0019-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0019-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0019-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0019-test new file mode 100644 index 00000000000..6d498600a2f --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0019-test @@ -0,0 +1 @@ +Set-Cookie: foo=bar; path diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0020-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0020-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0020-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0020-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0020-test new file mode 100644 index 00000000000..603eded7ebd --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0020-test @@ -0,0 +1 @@ +Set-Cookie: foo=bar; path= diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0021-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0021-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0021-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0021-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0021-test new file mode 100644 index 00000000000..4577c510a42 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0021-test @@ -0,0 +1 @@ +Set-Cookie: foo=bar; path=/ diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0022-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0022-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0022-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0022-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0022-test new file mode 100644 index 00000000000..4aade9e0145 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0022-test @@ -0,0 +1 @@ +Set-Cookie: foo=bar; path= / diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0023-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0023-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0023-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0023-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0023-test new file mode 100644 index 00000000000..f14d683df97 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0023-test @@ -0,0 +1 @@ +Set-Cookie: foo=bar; Path=/cookie-PARSER-result diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0024-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0024-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0024-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0024-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0024-test new file mode 100644 index 00000000000..18a71c875b4 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0024-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; path=/cookie-parser-result/foo/qux? +Location: /cookie-parser-result/foo/qux?path0024 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0025-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0025-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0025-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0025-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0025-test new file mode 100644 index 00000000000..b6c497b9715 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0025-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; path=/cookie-parser-result/foo/qux# +Location: /cookie-parser-result/foo/qux?path0025 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0026-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0026-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0026-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0026-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0026-test new file mode 100644 index 00000000000..ffc3b7a54fa --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0026-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; path=/cookie-parser-result/foo/qux; +Location: /cookie-parser-result/foo/qux?path0026 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0027-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0027-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0027-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0027-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0027-test new file mode 100644 index 00000000000..bd021f33e2c --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0027-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; path="/cookie-parser-result/foo/qux;" +Location: /cookie-parser-result/foo/qux?path0027 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0028-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0028-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0028-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0028-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0028-test new file mode 100644 index 00000000000..3bcd6a5c657 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0028-test @@ -0,0 +1,2 @@ +Set-Cookie: foo=bar; path=/cookie-parser-result/f%6Fo/bar +Location: /cookie-parser-result/foo/bar?path0028 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0029-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0029-expected new file mode 100644 index 00000000000..1022f64a290 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0029-expected @@ -0,0 +1 @@ +Cookie: a=b diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0029-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0029-test new file mode 100644 index 00000000000..17bd42f4212 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0029-test @@ -0,0 +1,2 @@ +Set-Cookie: a=b; path = /cookie-parser-result +Set-Cookie: x=y; path = /book diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0030-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0030-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0030-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0030-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0030-test new file mode 100644 index 00000000000..e17a2d490b7 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0030-test @@ -0,0 +1 @@ +Set-Cookie: foo=bar; path=/dog; path= diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0031-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0031-expected new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0031-expected diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0031-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0031-test new file mode 100644 index 00000000000..3b24090b338 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0031-test @@ -0,0 +1 @@ +Set-Cookie: foo=bar; path=; path=/dog diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0032-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0032-expected new file mode 100644 index 00000000000..e7403c4aadc --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0032-expected @@ -0,0 +1 @@ +Cookie: foo=qux; foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0032-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0032-test new file mode 100644 index 00000000000..db6ceb2ea06 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0032-test @@ -0,0 +1,3 @@ +Set-Cookie: foo=bar; path=/cookie-parser-result +Set-Cookie: foo=qux; path=/cookie-parser-result/ +Location: /cookie-parser-result/dog?path0032 diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0001-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0001-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0001-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0001-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0001-test new file mode 100644 index 00000000000..38b7dd296e6 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0001-test @@ -0,0 +1 @@ +Set-Cookie: foo= bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0002-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0002-expected new file mode 100644 index 00000000000..9e96a81e3b4 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0002-expected @@ -0,0 +1 @@ +Cookie: foo="bar" diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0002-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0002-test new file mode 100644 index 00000000000..bed691f1809 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0002-test @@ -0,0 +1 @@ +Set-Cookie: foo="bar" diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0003-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0003-expected new file mode 100644 index 00000000000..5cc2d467ef7 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0003-expected @@ -0,0 +1 @@ +Cookie: foo=" bar " diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0003-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0003-test new file mode 100644 index 00000000000..ce1d455201d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0003-test @@ -0,0 +1 @@ +Set-Cookie: foo=" bar " diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0004-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0004-expected new file mode 100644 index 00000000000..400030f6f1d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0004-expected @@ -0,0 +1 @@ +Cookie: foo="bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0004-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0004-test new file mode 100644 index 00000000000..c569216520c --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0004-test @@ -0,0 +1 @@ +Set-Cookie: foo="bar;baz" diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0005-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0005-expected new file mode 100644 index 00000000000..cad285f7086 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0005-expected @@ -0,0 +1 @@ +Cookie: foo="bar=baz" diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0005-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0005-test new file mode 100644 index 00000000000..514c0f125f1 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0005-test @@ -0,0 +1 @@ +Set-Cookie: foo="bar=baz" diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0006-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0006-expected new file mode 100644 index 00000000000..b14d4f69b58 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0006-expected @@ -0,0 +1 @@ +Cookie: foo=bar diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0006-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0006-test new file mode 100644 index 00000000000..a939a822914 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0006-test @@ -0,0 +1 @@ +Set-Cookie: foo = bar ; ttt diff --git a/tests/wpt/web-platform-tests/cookies/http-state/value-tests.html b/tests/wpt/web-platform-tests/cookies/http-state/value-tests.html new file mode 100644 index 00000000000..cb09034ae85 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/http-state/value-tests.html @@ -0,0 +1,41 @@ +<!doctype html> +<html> + <head> + <meta charset=utf-8> + <title>Tests basic cookie setting functionality</title> + <meta name=help href="https://tools.ietf.org/html/rfc6265#page-8"> + + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="resources/cookie-http-state-template.js"></script> + </head> + <body style="background:#EEE"> + <h3>Log</h3> + <div id="log" style="height:50px; overflow-y:scroll; background: #FFF"> + </div> + <h3>IFrames</h3> + <div id="iframes" style="height:170px; overflow-y:scroll; background: #FFF"> + </div> + <h3>Test Results</h3> + <script> + setup({ explicit_timeout: true }); + + const TEST_CASES = [ + {file: "value0001", name: "value0001"}, + {file: "value0002", name: "value0002"}, + {file: "value0003", name: "value0003"}, + {file: "value0004", name: "value0004"}, + {file: "value0005", name: "value0005"}, + {file: "value0006", name: "value0006"}, + ]; + + for (const i in TEST_CASES) { + const t = TEST_CASES[i]; + promise_test(createCookieTest(t.file), + t.file + " - " + t.name, + { timeout: 3000 }); + } + + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/cookies/secure/create-cookie-http.html b/tests/wpt/web-platform-tests/cookies/secure/create-cookie-http.html deleted file mode 100644 index 425f66fde5c..00000000000 --- a/tests/wpt/web-platform-tests/cookies/secure/create-cookie-http.html +++ /dev/null @@ -1,38 +0,0 @@ -<!DOCTYPE html> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="/cookies/resources/cookie-helper.sub.js"></script> -<script> - //origin is who sets the cookie - //target is who tries to send cookie - function create_test(origin, target, expectedStatus, title) { - promise_test(t => { - var value = "" + Math.random(); - return resetSecureCookies(origin, value) - .then(_ => { - return credFetch(target + "/cookies/resources/list.py") - .then(r => r.json()) - .then(cookies => verifySecureCookieState(expectedStatus, value, cookies)); - }); - }, title); - } - - //Given an |expectedStatus| and |expectedValue|, assert the |cookies| contains the - //proper set of cookie names and values. - function verifySecureCookieState(expectedStatus, expectedValue, cookies) { - assert_equals(cookies["alone_insecure"], expectedValue, "Insecure cookies are always present"); - if (expectedStatus == SecureStatus.INSECURE_COOKIE_ONLY) { - assert_equals(cookies["alone_secure"], undefined, "Secure cookies are not present"); - } else if (expectedStatus == SecureStatus.BOTH_COOKIES) { - assert_equals(cookies["alone_secure"], expectedValue, "Secure cookies are present"); - } - } - - //cookies set by insecure origins - create_test(INSECURE_ORIGIN, INSECURE_ORIGIN, SecureStatus.INSECURE_COOKIE_ONLY, "Secure cookies cannot be set by insecure origins"); - //create_test(INSECURE_ORIGIN, SECURE_ORIGIN, SecureStatus.INSECURE_COOKIE_ONLY, "Secure cookies cannot be set by insecure origins, even if read from a secure origin"); - - //This test should set the secure cookie right but not be able to read it from the secure origin - //create_test(SECURE_ORIGIN, INSECURE_ORIGIN, SecureStatus.INSECURE_COOKIE_ONLY, "Secure cookies should not be read by insecure origins"); - //create_test(SECURE_ORIGIN, SECURE_ORIGIN, SecureStatus.BOTH_COOKIES, "Secure cookies should be set and read by secure domains") -</script> diff --git a/tests/wpt/web-platform-tests/css/CSS2/abspos/static-inside-table-cell.html b/tests/wpt/web-platform-tests/css/CSS2/abspos/static-inside-table-cell.html new file mode 100644 index 00000000000..712bfbaf1e8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/CSS2/abspos/static-inside-table-cell.html @@ -0,0 +1,17 @@ +<!DOCTYPE html> +<title>Static position inside table cell</title> +<link rel="author" title="Aleks Totic" href="atotic@chromium.org"> +<link rel="help" href="https://www.w3.org/TR/CSS22/visudet.html#abs-non-replaced-width" title="10.3.7 Absolutely positioned, non-replaced elements"> +<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div id="container" style="position:relative;"> + <div id="changeMe" style="height:100px;"></div> + <div style="display:table-cell;"> + <div style="position:absolute; width:100px; height:100px; background:green;"></div> + <div style="width:100px; height:100px; background:red;"></div> + </div> +</div> +<script> + document.body.offsetTop; + document.querySelector('#changeMe').style.height = "auto"; +</script> diff --git a/tests/wpt/web-platform-tests/css/CSS2/linebox/anonymous-inline-inherit-001-ref.html b/tests/wpt/web-platform-tests/css/CSS2/linebox/anonymous-inline-inherit-001-ref.html new file mode 100644 index 00000000000..e97da2169d5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/CSS2/linebox/anonymous-inline-inherit-001-ref.html @@ -0,0 +1,7 @@ +<!DOCTYPE html> +<body> + <span> + <span style="font-size: 500%">A</span> + x + </span> +</body> diff --git a/tests/wpt/web-platform-tests/css/CSS2/linebox/anonymous-inline-inherit-001.html b/tests/wpt/web-platform-tests/css/CSS2/linebox/anonymous-inline-inherit-001.html new file mode 100644 index 00000000000..77904d80e45 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/CSS2/linebox/anonymous-inline-inherit-001.html @@ -0,0 +1,15 @@ +<!DOCTYPE html> +<link rel="match" href="anonymous-inline-inherit-001-ref.html"> +<link rel="help" href="https://drafts.csswg.org/css2/visuren.html#anonymous"> +<link rel="author" href="kojii@chromium.org"> +<!-- + The text node for "x" should be wrapped in an anonymous inline box, + which should have the initial value for non-inherited properties. + https://drafts.csswg.org/css2/visuren.html#anonymous +--> +<body> + <span style="vertical-align: top"> + <span style="font-size: 500%">A</span> + x + </span> +</body> diff --git a/tests/wpt/web-platform-tests/css/CSS2/linebox/vertical-align-nested-top-001-ref.html b/tests/wpt/web-platform-tests/css/CSS2/linebox/vertical-align-nested-top-001-ref.html new file mode 100644 index 00000000000..1fd155e3801 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/CSS2/linebox/vertical-align-nested-top-001-ref.html @@ -0,0 +1,14 @@ +<!DOCTYPE html> +<style> +body { + font-size: 18px; + line-height: 20px; +} +.hb { + font-size: 12px; + vertical-align: top; +} +</style> +<body> + <span class="hb">XX</span> +</body> diff --git a/tests/wpt/web-platform-tests/css/CSS2/linebox/vertical-align-nested-top-001.html b/tests/wpt/web-platform-tests/css/CSS2/linebox/vertical-align-nested-top-001.html new file mode 100644 index 00000000000..3667ced2ca3 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/CSS2/linebox/vertical-align-nested-top-001.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<link rel="match" href="vertical-align-nested-top-001-ref.html"> +<link rel="help" href="https://drafts.csswg.org/css2/visudet.html#propdef-vertical-align" /> +<link rel="author" href="kojii@chromium.org"> +<style> +body { + font-size: 18px; + line-height: 20px; +} +.hb { + font-size: 12px; + vertical-align: top; +} +.g2 { + vertical-align: top; +} +</style> +<body> + <span class="hb">X<span class="g2">X</span></span> +</body> diff --git a/tests/wpt/web-platform-tests/css/CSS2/positioning/abspos-inline-008.xht b/tests/wpt/web-platform-tests/css/CSS2/positioning/abspos-inline-008.xht new file mode 100644 index 00000000000..9233b4373e5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/CSS2/positioning/abspos-inline-008.xht @@ -0,0 +1,17 @@ +<!DOCTYPE HTML> +<html lang="en" xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Absolutely positioned descendant under relative positioned inline with negative offset</title> + <link rel="author" title="Tien-Ren Chen" href="mailto:trchen@chromium.org"/> + <link rel="help" href="https://www.w3.org/TR/CSS2/visudet.html#abs-non-replaced-width"/> + <link rel="match" href="../../reference/ref-filled-green-100px-square-only.html"/> + </head> + <body> + <p>Test passes if there is a filled green square.</p> + <div style="position:relative; left:100px; width:100px;"> + <span style="position:relative; left:-100px;"> + <div style="position:absolute; display:inline-block; width:100px; height:100px; background:green;"></div> + </span> + </div> + </body> +</html>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-break/reference/widows-orphans-001-ref.html b/tests/wpt/web-platform-tests/css/css-break/reference/widows-orphans-001-ref.html new file mode 100644 index 00000000000..06108ac800c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-break/reference/widows-orphans-001-ref.html @@ -0,0 +1,17 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Fragmentation level 3 Test Reference File</title> +<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> +<style> +div { + position: absolute; + columns: 2; + column-fill: balance-all; + column-gap: 0; +} +</style> +<body> + <p>Test passes if there are 4 “X” characters <strong>arranged in a 2 by 2 square</strong> below. + + <div>X<br>X<br>X<br>X</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-break/widows-orphans-001.html b/tests/wpt/web-platform-tests/css/css-break/widows-orphans-001.html new file mode 100644 index 00000000000..8da27f0b659 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-break/widows-orphans-001.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Fragmentation level 3 Test: widows and block level boxes</title> +<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> +<link rel="help" href="https://drafts.csswg.org/css-break/#widows-orphans"> +<link rel="match" href="reference/widows-orphans-001-ref.html"> +<meta name="assert" content="The widows property has no effect on block container boxes that contains only block-level boxes."> +<meta name="flags" content=""> +<style> +div p { margin: 0; } + +div { + columns: 2; + column-gap: 0; + position: absolute; /* shrinkwrap. Using an explicit width in 'ch' with a monospace font would be fine as well if all UAs supported 'ch', but some don't. */ + column-fill: balance-all; /* to make sure it balances as well on paged media */ + + widows: 4; +} + +/* If the property applied to block container boxes that contain block-level boxes, + it would force the two two-line paragraphs to stick together.*/ + +</style> +<body> + <p>Test passes if there are 4 “X” characters <strong>arranged in a 2 by 2 square</strong> below. + + <div> + <p>X<br>X + <p>X<br>X + </div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-break/widows-orphans-002.html b/tests/wpt/web-platform-tests/css/css-break/widows-orphans-002.html new file mode 100644 index 00000000000..cf9afe7c033 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-break/widows-orphans-002.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Fragmentation level 3 Test: widows and line boxes</title> +<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> +<link rel="help" href="https://drafts.csswg.org/css-break/#widows-orphans"> +<link rel="match" href="reference/widows-orphans-001-ref.html"> +<meta name="assert" content="The widows property affects block containers that establish an inline formatting context"> +<meta name="flags" content=""> +<style> +div p { margin: 0; } + +div { + columns: 4; + column-gap: 0; + position: absolute; /* shrinkwrap. Using an explicit width in 'ch' with a monospace font would be fine as well if all UAs supported 'ch', but some don't. */ + column-fill: balance-all; /* to make sure it balances as well on paged media */ +} +div p { + orphans: 1; /* to avoid interference */ + widows: 2; +} + +/* The lines of each paragraphs should be kept together if the widows property applies, + or spread over the 4 columns if it fails to, + or all above one-another in a single column if multicol doesn't work. */ + +</style> +<body> + <p>Test passes if there are 4 “X” characters <strong>arranged in a 2 by 2 square</strong> below. + + <div> + <p>X<br>X + <p>X<br>X + </div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-break/widows-orphans-003.html b/tests/wpt/web-platform-tests/css/css-break/widows-orphans-003.html new file mode 100644 index 00000000000..31114840926 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-break/widows-orphans-003.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Fragmentation level 3 Test: orphans and block level boxes</title> +<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> +<link rel="help" href="https://drafts.csswg.org/css-break/#widows-orphans"> +<link rel="match" href="reference/widows-orphans-001-ref.html"> +<meta name="assert" content="The orphans property has no effect on block container boxes that contains only block-level boxes."> +<meta name="flags" content=""> +<style> +div p { margin: 0; } + +div { + columns: 2; + column-gap: 0; + position: absolute; /* shrinkwrap. Using an explicit width in 'ch' with a monospace font would be fine as well if all UAs supported 'ch', but some don't. */ + column-fill: balance-all; /* to make sure it balances as well on paged media */ + + orphans: 4; +} + +/* If the property applied to block container boxes that contain block-level boxes, + it would force the two two-line paragraphs to stick together.*/ + +</style> +<body> + <p>Test passes if there are 4 “X” characters <strong>arranged in a 2 by 2 square</strong> below. + + <div> + <p>X<br>X + <p>X<br>X + </div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-break/widows-orphans-004.html b/tests/wpt/web-platform-tests/css/css-break/widows-orphans-004.html new file mode 100644 index 00000000000..3e226d9e41e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-break/widows-orphans-004.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Fragmentation level 3 Test: orphans and line boxes</title> +<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> +<link rel="help" href="https://drafts.csswg.org/css-break/#widows-orphans"> +<link rel="match" href="reference/widows-orphans-001-ref.html"> +<meta name="assert" content="The orphans property affects block containers that establish an inline formatting context"> +<meta name="flags" content=""> +<style> +div p { margin: 0; } + +div { + columns: 4; + column-gap: 0; + position: absolute; /* shrinkwrap. Using an explicit width in 'ch' with a monospace font would be fine as well if all UAs supported 'ch', but some don't. */ + column-fill: balance-all; /* to make sure it balances as well on paged media */ +} +div p { + widows: 1; /* to avoid interference */ + orphans: 2; +} + +/* The lines of each paragraphs should be kept together if the orphans property applies, + or spread over the 4 columns if it fails to, + or all above one-another in a single column if multicol doesn't work. */ + +</style> +<body> + <p>Test passes if there are 4 “X” characters <strong>arranged in a 2 by 2 square</strong> below. + + <div> + <p>X<br>X + <p>X<br>X + </div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-contain/reference/contain-style-counters-003-ref.html b/tests/wpt/web-platform-tests/css/css-contain/reference/contain-style-counters-003-ref.html index 8eb67b5943f..12f9b989fd2 100644 --- a/tests/wpt/web-platform-tests/css/css-contain/reference/contain-style-counters-003-ref.html +++ b/tests/wpt/web-platform-tests/css/css-contain/reference/contain-style-counters-003-ref.html @@ -13,6 +13,6 @@ } </style> - <p>Test passes if there is the digit 20. + <p>Test passes if there is the number 20. <div>20</div> diff --git a/tests/wpt/web-platform-tests/css/css-filter/blur-clip-stacking-context-001.html b/tests/wpt/web-platform-tests/css/css-filter/blur-clip-stacking-context-001.html new file mode 100644 index 00000000000..a96994a8afe --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-filter/blur-clip-stacking-context-001.html @@ -0,0 +1,35 @@ +<!doctype html> +<title>CSS Test: Blurs are correctly clipped by an overflow: hidden ancestor</title> +<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez"> +<link rel="help" href="https://drafts.fxtf.org/filter-effects/#funcdef-filter-blur"> +<link rel="help" href="https://drafts.csswg.org/css-overflow-3/#valdef-overflow-hidden"> +<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1459065"> +<link rel="match" href="blur-clip-stacking-context-ref.html"> +<style> + #cover, #clip, #blur { + width: 100px; + height: 100px; + } + + #cover, #clip { + position: absolute; + top: 10px; + left: 10px; + } + + #cover { + background: green; + } + + #clip { + overflow: hidden; + background: red; + } + + #blur { + background: blue; + filter: blur(20px); + } +</style> +<div id="clip"><div id="blur"></div></div> +<div id="cover"></div> diff --git a/tests/wpt/web-platform-tests/css/css-filter/blur-clip-stacking-context-002.html b/tests/wpt/web-platform-tests/css/css-filter/blur-clip-stacking-context-002.html new file mode 100644 index 00000000000..0473f129494 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-filter/blur-clip-stacking-context-002.html @@ -0,0 +1,28 @@ +<!doctype html> +<title>CSS Test: Blurs on an overflow: hidden element are correctly not-clipped to the padding box</title> +<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez"> +<link rel="help" href="https://drafts.fxtf.org/filter-effects/#funcdef-filter-blur"> +<link rel="help" href="https://drafts.csswg.org/css-overflow-3/#valdef-overflow-hidden"> +<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1459065"> +<link rel="mismatch" href="blur-clip-stacking-context-ref.html"> +<style> + #cover, #clip { + position: absolute; + top: 10px; + left: 10px; + width: 100px; + height: 100px; + } + + #cover { + background: green; + } + + #clip { + overflow: hidden; + background: blue; + filter: blur(20px); + } +</style> +<div id="clip"></div> +<div id="cover"></div> diff --git a/tests/wpt/web-platform-tests/css/css-filter/blur-clip-stacking-context-ref.html b/tests/wpt/web-platform-tests/css/css-filter/blur-clip-stacking-context-ref.html new file mode 100644 index 00000000000..82b907334fd --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-filter/blur-clip-stacking-context-ref.html @@ -0,0 +1,14 @@ +<!doctype html> +<title>CSS Test Reference</title> +<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez"> +<style> + div { + position: absolute; + top: 10px; + left: 10px; + background: green; + width: 100px; + height: 100px; + } +</style> +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-001.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-001.html index b35b16d648d..79dd1d43506 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-001.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-001.html @@ -23,14 +23,17 @@ .columns { grid-template-columns: 100px 100px; } .rows { grid-template-rows: 100px 100px; } -.min-content-columns { grid-auto-columns: min-content; } -.max-content-columns { grid-auto-columns: max-content; } -.fit-content-columns { grid-auto-columns: fit-content; } -.flex-columns { grid-auto-columns: 1fr; } -.min-content-rows { grid-auto-rows: min-content; } -.max-content-rows { grid-auto-rows: max-content; } -.fit-content-rows { grid-auto-rows: fit-content; } -.flex-rows { grid-auto-rows: 1fr; } +.min-content-columns { grid-template-columns: min-content; } +.max-content-columns { grid-template-columns: max-content; } +.fit-content-columns { grid-template-columns: fit-content; } +.min-content-rows { grid-template-rows: min-content; } +.max-content-rows { grid-template-rows: max-content; } +.fit-content-rows { grid-template-rows: fit-content; } + +.flex-columns { grid-template-columns: 1fr; } +.max-flex-columns { grid-template-columns: minmax(0px, 1fr); } +.flex-rows { grid-template-rows: 1fr; } +.max-flex-rows { grid-template-rows: minmax(0px, 1fr); } .height25 { height: 25px; } .height50 { height: 50px; } @@ -47,82 +50,113 @@ <script src="/resources/check-layout-th.js"></script> <body onload="checkLayout('.inline-grid')"> -<pre>auto-sized rows - items with relative height</pre> - -<div class="inline-grid alignItemsBaseline columns"> - <div class="firstRowFirstColumn height50" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="50"></div> - <div class="firstRowSecondColumn height200Percent" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="100"></div> - <div class="autoRowAutoColumnSpanning2 height25" data-offset-x="0" data-offset-y="50" data-expected-width="200" data-expected-height="25"></div> +<div style="height: 125px"> + <pre>auto-sized rows - items with relative height</pre> + <div class="inline-grid alignItemsBaseline columns"> + <div class="firstRowFirstColumn height50" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="50"></div> + <div class="firstRowSecondColumn height200Percent" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="100"></div> + <div class="autoRowAutoColumnSpanning2 height25" data-offset-x="0" data-offset-y="50" data-expected-width="200" data-expected-height="25"></div> + </div> </div> -<pre>min-content-sized rows - items with relative height</pre> - -<div class="inline-grid alignItemsBaseline columns min-content-rows"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="80">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> - <div class="firstRowSecondColumn height200Percent" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="160"></div> - <div class="autoRowAutoColumnSpanning2 height25" data-offset-x="0" data-offset-y="80" data-expected-width="200" data-expected-height="25"></div> +<div style="height: 200px"> + <pre>min-content-sized rows - items with relative height</pre> + <div class="inline-grid alignItemsBaseline columns min-content-rows"> + <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="80">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> + <div class="firstRowSecondColumn height200Percent" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="160"></div> + <div class="autoRowAutoColumnSpanning2 height25" data-offset-x="0" data-offset-y="80" data-expected-width="200" data-expected-height="25"></div> + </div> </div> -<pre>max-content-sized rows - items with relative height</pre> - -<div class="inline-grid alignItemsBaseline columns max-content-rows"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="80">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> - <div class="firstRowSecondColumn height200Percent" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="160"></div> - <div class="autoRowAutoColumnSpanning2 height25" data-offset-x="0" data-offset-y="80" data-expected-width="200" data-expected-height="25"></div> +<div style="height: 200px"> + <pre>max-content-sized rows - items with relative height</pre> + <div class="inline-grid alignItemsBaseline columns max-content-rows"> + <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="80">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> + <div class="firstRowSecondColumn height200Percent" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="160"></div> + <div class="autoRowAutoColumnSpanning2 height25" data-offset-x="0" data-offset-y="80" data-expected-width="200" data-expected-height="25"></div> + </div> </div> -<pre>fit-content-sized rows - items with relative height</pre> - -<div class="inline-grid alignItemsBaseline columns fit-content-rows"> - <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="80">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> - <div class="firstRowSecondColumn height200Percent" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="160"></div> - <div class="autoRowAutoColumnSpanning2 height25" data-offset-x="0" data-offset-y="80" data-expected-width="200" data-expected-height="25"></div> +<div style="height: 200px"> + <pre>fit-content-sized rows - items with relative height</pre> + <div class="inline-grid alignItemsBaseline columns fit-content-rows"> + <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="80">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> + <div class="firstRowSecondColumn height200Percent" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="160"></div> + <div class="autoRowAutoColumnSpanning2 height25" data-offset-x="0" data-offset-y="80" data-expected-width="200" data-expected-height="25"></div> + </div> </div> -<pre>flexible-sized rows - items with relative height</pre> - -<div class="inline-grid alignItemsBaseline columns flex-rows"> - <div class="firstRowFirstColumn height50" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="50"></div> - <div class="firstRowSecondColumn height200Percent" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="100"></div> - <div class="autoRowAutoColumnSpanning2 height25" data-offset-x="0" data-offset-y="50" data-expected-width="200" data-expected-height="25"></div> +<div style="height: 125px"> + <pre>flexible-sized rows - items with relative height</pre> + <div class="inline-grid alignItemsBaseline columns flex-rows"> + <div class="firstRowFirstColumn height50" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="50"></div> + <div class="firstRowSecondColumn height200Percent" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="100"></div> + <div class="autoRowAutoColumnSpanning2 height25" data-offset-x="0" data-offset-y="50" data-expected-width="200" data-expected-height="25"></div> + </div> </div> -<pre>auto-sized columns - items with relative width</pre> - -<div class="inline-grid justifyItemsBaseline rows"> - <div class="firstRowFirstColumn verticalRL width50" data-offset-x="0" data-offset-y="0" data-expected-width="50" data-expected-height="100"></div> - <div class="secondRowFirstColumn verticalRL width200Percent" data-offset-x="0" data-offset-y="100" data-expected-width="100" data-expected-height="100"></div> - <div class="firstRowSpanning2AutoColumn verticalRL width25" data-offset-x="50" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> +<div style="height: 125px"> + <pre>flex max-function rows - items with relative height</pre> + <div class="inline-grid alignItemsBaseline columns max-flex-rows"> + <div class="firstRowFirstColumn height50" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="50"></div> + <div class="firstRowSecondColumn height200Percent" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="100"></div> + <div class="autoRowAutoColumnSpanning2 height25" data-offset-x="0" data-offset-y="50" data-expected-width="200" data-expected-height="25"></div> + </div> </div> -<pre>min-content-sized columns - items with relative width</pre> - -<div class="inline-grid justifyItemsBaseline rows min-content-columns"> - <div class="firstRowFirstColumn verticalRL" data-offset-x="0" data-offset-y="0" data-expected-width="80" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> - <div class="secondRowFirstColumn verticalRL width200Percent" data-offset-x="0" data-offset-y="100" data-expected-width="160" data-expected-height="100"></div> - <div class="firstRowSpanning2AutoColumn verticalRL width25" data-offset-x="80" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> +<div style="height: 250px"> + <pre>auto-sized columns - items with relative width</pre> + <div class="inline-grid justifyItemsBaseline rows"> + <div class="firstRowFirstColumn verticalRL width50" data-offset-x="0" data-offset-y="0" data-expected-width="50" data-expected-height="100"></div> + <div class="secondRowFirstColumn verticalRL width200Percent" data-offset-x="0" data-offset-y="100" data-expected-width="100" data-expected-height="100"></div> + <div class="firstRowSpanning2AutoColumn verticalRL width25" data-offset-x="50" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> + </div> </div> -<pre>max-content-sized columns - items with relative width</pre> - -<div class="inline-grid justifyItemsBaseline rows max-content-columns"> - <div class="firstRowFirstColumn verticalRL" data-offset-x="0" data-offset-y="0" data-expected-width="80" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> - <div class="secondRowFirstColumn verticalRL width200Percent" data-offset-x="0" data-offset-y="100" data-expected-width="160" data-expected-height="100"></div> - <div class="firstRowSpanning2AutoColumn verticalRL width25" data-offset-x="80" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> +<div style="height: 250px"> + <pre>min-content-sized columns - items with relative width</pre> + <div class="inline-grid justifyItemsBaseline rows min-content-columns"> + <div class="firstRowFirstColumn verticalRL" data-offset-x="0" data-offset-y="0" data-expected-width="80" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> + <div class="secondRowFirstColumn verticalRL width200Percent" data-offset-x="0" data-offset-y="100" data-expected-width="160" data-expected-height="100"></div> + <div class="firstRowSpanning2AutoColumn verticalRL width25" data-offset-x="80" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> + </div> </div> -<pre>fit-content-sized columns - items with relative width</pre> +<div style="height: 250px"> + <pre>max-content-sized columns - items with relative width</pre> + <div class="inline-grid justifyItemsBaseline rows max-content-columns"> + <div class="firstRowFirstColumn verticalRL" data-offset-x="0" data-offset-y="0" data-expected-width="80" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> + <div class="secondRowFirstColumn verticalRL width200Percent" data-offset-x="0" data-offset-y="100" data-expected-width="160" data-expected-height="100"></div> + <div class="firstRowSpanning2AutoColumn verticalRL width25" data-offset-x="80" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> + </div> +</div> -<div class="inline-grid justifyItemsBaseline rows fit-content-columns"> - <div class="firstRowFirstColumn verticalRL" data-offset-x="0" data-offset-y="0" data-expected-width="80" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> - <div class="secondRowFirstColumn verticalRL width200Percent" data-offset-x="0" data-offset-y="100" data-expected-width="160" data-expected-height="100"></div> - <div class="firstRowSpanning2AutoColumn verticalRL width25" data-offset-x="80" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> +<div style="height: 250px"> + <pre>fit-content-sized columns - items with relative width</pre> + <div class="inline-grid justifyItemsBaseline rows fit-content-columns"> + <div class="firstRowFirstColumn verticalRL" data-offset-x="0" data-offset-y="0" data-expected-width="80" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> + <div class="secondRowFirstColumn verticalRL width200Percent" data-offset-x="0" data-offset-y="100" data-expected-width="160" data-expected-height="100"></div> + <div class="firstRowSpanning2AutoColumn verticalRL width25" data-offset-x="80" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> + </div> </div> -<pre>flexible-sized columns - items with relative width</pre> +<div style="height: 250px"> + <pre>flexible-sized columns - items with relative width</pre> + <div class="inline-grid justifyItemsBaseline rows flex-columns"> + <div class="firstRowFirstColumn verticalRL width50" data-offset-x="0" data-offset-y="0" data-expected-width="50" data-expected-height="100"></div> + <div class="secondRowFirstColumn verticalRL width200Percent" data-offset-x="0" data-offset-y="100" data-expected-width="100" data-expected-height="100"></div> + <div class="firstRowSpanning2AutoColumn verticalRL width25" data-offset-x="50" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> + </div> +</div> -<div class="inline-grid justifyItemsBaseline rows flex-columns"> - <div class="firstRowFirstColumn verticalRL width50" data-offset-x="0" data-offset-y="0" data-expected-width="50" data-expected-height="100"></div> - <div class="secondRowFirstColumn verticalRL width200Percent" data-offset-x="0" data-offset-y="100" data-expected-width="100" data-expected-height="100"></div> - <div class="firstRowSpanning2AutoColumn verticalRL width25" data-offset-x="50" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> +<div style="height: 250px"> + <pre>flex max-function columns - items with relative width<br>baseline is not applied initially, but orthogonal items force repeating the track sizing and height is not indefinite in that phase.</pre> + <!-- https://github.com/w3c/csswg-drafts/issues/3046 --> + <div class="inline-grid justifyItemsBaseline rows max-flex-columns"> + <div class="firstRowFirstColumn verticalRL width50" data-offset-x="0" data-offset-y="0" data-expected-width="50" data-expected-height="100"></div> + <div class="secondRowFirstColumn verticalRL width200Percent" data-offset-x="-50" data-offset-y="100" data-expected-width="100" data-expected-height="100"></div> + <div class="firstRowSpanning2AutoColumn verticalRL width25" data-offset-x="50" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> + </div> </div> + +</body> diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-002.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-002.html index 4d0f506c7b6..3232913cb13 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-002.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-002.html @@ -23,14 +23,17 @@ .columns { grid-template-columns: 100px 100px; } .rows { grid-template-rows: 100px 100px; } -.min-content-columns { grid-auto-columns: min-content; } -.max-content-columns { grid-auto-columns: max-content; } -.fit-content-columns { grid-auto-columns: fit-content; } -.flex-columns { grid-auto-columns: 1fr; } -.min-content-rows { grid-auto-rows: min-content; } -.max-content-rows { grid-auto-rows: max-content; } -.fit-content-rows { grid-auto-rows: fit-content; } -.flex-rows { grid-auto-rows: 1fr; } +.min-content-columns { grid-template-columns: min-content; } +.max-content-columns { grid-template-columns: max-content; } +.fit-content-columns { grid-template-columns: fit-content; } +.flex-columns { grid-template-columns: 1fr; } +.max-flex-columns { grid-template-columns: minmax(0px, 1fr); } + +.min-content-rows { grid-template-rows: min-content; } +.max-content-rows { grid-template-rows: max-content; } +.fit-content-rows { grid-template-rows: fit-content; } +.flex-rows { grid-template-rows: 1fr; } +.max-flex-rows { grid-template-rows: minmax(0px, 1fr); } .height25 { height: 25px; } .height50 { height: 50px; } @@ -50,7 +53,6 @@ <body onload="checkLayout('.inline-grid')"> <pre>auto-sized rows - horizonal grid and verticalLR item - column-axis baseline</pre> - <div class="inline-grid alignItemsBaseline columns height200"> <div class="firstRowFirstColumn bigFont paddingBottom" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="75">É</div> <div class="firstRowSecondColumn verticalLR" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="175">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> @@ -58,7 +60,6 @@ </div> <pre>min-content-sized rows - horizonal grid and verticalLR item - column-axis baseline</pre> - <div class="inline-grid alignItemsBaseline columns min-content-rows"> <div class="firstRowFirstColumn bigFont paddingBottom" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="75">É</div> <div class="firstRowSecondColumn verticalLR" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="75">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> @@ -66,23 +67,35 @@ </div> <pre>max-content-sized rows - horizonal grid and verticalLR item - column-axis baseline</pre> - <div class="inline-grid alignItemsBaseline columns max-content-rows"> - <div class="firstRowFirstColumn bigFont paddingBottom" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="75">É</div> - <div class="firstRowSecondColumn verticalLR" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="416">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> + <div class="firstRowFirstColumn bigFont paddingBottom" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="75">É</div> + <div class="firstRowSecondColumn verticalLR" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="416">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> <div class="autoRowAutoColumnSpanning2 height25" data-offset-x="0" data-offset-y="416" data-expected-width="200" data-expected-height="25"></div> </div> <pre>fit-content-sized rows - horizonal grid and verticalLR item - column-axis baseline</pre> - <div class="inline-grid alignItemsBaseline columns fit-content-rows"> - <div class="firstRowFirstColumn bigFont paddingBottom" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="75">É</div> - <div class="firstRowSecondColumn verticalLR" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="416">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> + <div class="firstRowFirstColumn bigFont paddingBottom" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="75">É</div> + <div class="firstRowSecondColumn verticalLR" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="416">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> <div class="autoRowAutoColumnSpanning2 height25" data-offset-x="0" data-offset-y="416" data-expected-width="200" data-expected-height="25"></div> </div> -<pre>auto-sized columns - horizontal grid item - row-axis baseline</pre> +<pre>flex-sized rows - horizonal grid and verticalLR item - column-axis baseline</pre> +<div class="inline-grid alignItemsBaseline columns flex-rows"> + <div class="firstRowFirstColumn bigFont paddingBottom" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="75">É</div> + <div class="firstRowSecondColumn verticalLR" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="416">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> + <div class="autoRowAutoColumnSpanning2 height25" data-offset-x="0" data-offset-y="416" data-expected-width="200" data-expected-height="25"></div> +</div> +<pre>max-flex-sized rows - horizonal grid and verticalLR item - column-axis baseline<br>baseline is not applied initially, but orthogonal items force repeating the track sizing and height is not indefinite in that phase.</pre> +<!-- https://github.com/w3c/csswg-drafts/issues/3046 --> +<div class="inline-grid alignItemsBaseline columns max-flex-rows"> + <div class="firstRowFirstColumn bigFont paddingBottom" data-offset-x="0" data-offset-y="376" data-expected-width="100" data-expected-height="75">É</div> + <div class="firstRowSecondColumn verticalLR" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="416">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> + <div class="autoRowAutoColumnSpanning2 height25" data-offset-x="0" data-offset-y="416" data-expected-width="200" data-expected-height="25"></div> +</div> + +<pre>auto-sized columns - horizontal grid item - row-axis baseline</pre> <div class="inline-grid justifyItemsBaseline rows width200"> <div class="firstRowFirstColumn bigFont verticalLR paddingLeft" data-offset-x="0" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div> <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="100" data-expected-width="175" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> @@ -90,7 +103,6 @@ </div> <pre>min-content-sized columns - horizontal grid item - row-axis baseline</pre> - <div class="inline-grid justifyItemsBaseline rows min-content-columns"> <div class="firstRowFirstColumn bigFont verticalLR paddingLeft" data-offset-x="0" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div> <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="100" data-expected-width="75" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> @@ -98,7 +110,6 @@ </div> <pre>max-content-sized columns - horizontal grid item - row-axis baseline</pre> - <div class="inline-grid justifyItemsBaseline rows max-content-columns"> <div class="firstRowFirstColumn bigFont verticalLR paddingLeft" data-offset-x="0" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div> <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="100" data-expected-width="416" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> @@ -106,15 +117,28 @@ </div> <pre>fit-content-sized columns - horizontal grid item - row-axis baseline</pre> - <div class="inline-grid justifyItemsBaseline rows fit-content-columns"> <div class="firstRowFirstColumn bigFont verticalLR paddingLeft" data-offset-x="0" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div> <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="100" data-expected-width="416" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> <div class="firstRowSpanning2AutoColumn width25" data-offset-x="416" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> </div> -<pre>auto-sized rows - verticalLR grid and horizontal item - column-axis baseline</pre> +<pre>flex-sized columns - horizontal grid item - row-axis baseline</pre> +<div class="inline-grid justifyItemsBaseline rows flex-columns"> + <div class="firstRowFirstColumn bigFont verticalLR paddingLeft" data-offset-x="0" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div> + <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="100" data-expected-width="416" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> + <div class="firstRowSpanning2AutoColumn width25" data-offset-x="416" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> +</div> + +<pre>max-flex-sized columns - horizontal grid item - row-axis baseline<br>baseline is not applied initially, but orthogonal items force repeating the track sizing and height is not indefinite in that phase.</pre> +<!-- https://github.com/w3c/csswg-drafts/issues/3046 --> +<div class="inline-grid justifyItemsBaseline rows max-flex-columns"> + <div class="firstRowFirstColumn bigFont verticalLR paddingLeft" data-offset-x="0" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div> + <div class="secondRowFirstColumn" data-offset-x="35" data-offset-y="100" data-expected-width="416" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> + <div class="firstRowSpanning2AutoColumn width25" data-offset-x="416" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> +</div> +<pre>auto-sized rows - verticalLR grid and horizontal item - column-axis baseline</pre> <div class="inline-grid verticalLR alignItemsBaseline columns width200"> <div class="firstRowFirstColumn bigFont paddingLeft" data-offset-x="0" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div> <div class="firstRowSecondColumn horizontalTB" data-offset-x="0" data-offset-y="100" data-expected-width="175" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> @@ -122,7 +146,6 @@ </div> <pre>min-content-sized rows - verticalLR grid and horizontal item - column-axis baseline</pre> - <div class="inline-grid verticalLR alignItemsBaseline columns min-content-rows"> <div class="firstRowFirstColumn bigFont paddingLeft" data-offset-x="0" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div> <div class="firstRowSecondColumn horizontalTB" data-offset-x="0" data-offset-y="100" data-expected-width="75" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> @@ -130,7 +153,6 @@ </div> <pre>max-content-sized rows - verticalLR grid and horizontal item - column-axis baseline</pre> - <div class="inline-grid verticalLR alignItemsBaseline columns max-content-rows"> <div class="firstRowFirstColumn bigFont paddingLeft" data-offset-x="0" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div> <div class="firstRowSecondColumn horizontalTB" data-offset-x="0" data-offset-y="100" data-expected-width="416" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> @@ -138,41 +160,68 @@ </div> <pre>fit-content-sized rows - verticalLR grid and horizontal item - column-axis baseline</pre> - <div class="inline-grid verticalLR alignItemsBaseline columns fit-content-rows"> <div class="firstRowFirstColumn bigFont paddingLeft" data-offset-x="0" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div> <div class="firstRowSecondColumn horizontalTB" data-offset-x="0" data-offset-y="100" data-expected-width="416" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> <div class="autoRowAutoColumnSpanning2 width25" data-offset-x="416" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> </div> -<pre>auto-sized rows - verticalRL grid and horizontal item - column-axis baseline</pre> +<pre>flex-sized rows - verticalLR grid and horizontal item - column-axis baseline</pre> +<div class="inline-grid verticalLR alignItemsBaseline columns flex-rows"> + <div class="firstRowFirstColumn bigFont paddingLeft" data-offset-x="0" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div> + <div class="firstRowSecondColumn horizontalTB" data-offset-x="0" data-offset-y="100" data-expected-width="416" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> + <div class="autoRowAutoColumnSpanning2 width25" data-offset-x="416" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> +</div> +<pre>max-flex-sized rows - verticalLR grid and horizontal item - column-axis baseline<br>baseline is not applied initially, but orthogonal items force repeating the track sizing and height is not indefinite in that phase.</pre> +<!-- https://github.com/w3c/csswg-drafts/issues/3046 --> +<div class="inline-grid verticalLR alignItemsBaseline columns max-flex-rows"> + <div class="firstRowFirstColumn bigFont paddingLeft" data-offset-x="0" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div> + <div class="firstRowSecondColumn horizontalTB" data-offset-x="35" data-offset-y="100" data-expected-width="416" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> + <div class="autoRowAutoColumnSpanning2 width25" data-offset-x="416" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> +</div> + +<pre>auto-sized rows - verticalRL grid and horizontal item - column-axis baseline</pre> <div class="inline-grid verticalRL alignItemsBaseline columns width200"> - <div class="firstRowFirstColumn bigFont paddingRight" data-offset-x="125" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div> - <div class="firstRowSecondColumn horizontalTB" data-offset-x="25" data-offset-y="100" data-expected-width="175" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> - <div class="autoRowAutoColumnSpanning2 width25" data-offset-x="0" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> + <div class="firstRowFirstColumn bigFont paddingLeft" data-offset-x="125" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div> + <div class="firstRowSecondColumn horizontalTB" data-offset-x="25" data-offset-y="100" data-expected-width="175" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> + <div class="autoRowAutoColumnSpanning2 width25" data-offset-x="0" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> </div> <pre>min-content-sized rows - verticalRL grid and horizontal item - column-axis baseline</pre> - <div class="inline-grid verticalRL alignItemsBaseline columns min-content-rows"> - <div class="firstRowFirstColumn bigFont paddingRight" data-offset-x="25" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div> - <div class="firstRowSecondColumn horizontalTB" data-offset-x="25" data-offset-y="100" data-expected-width="75" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> - <div class="autoRowAutoColumnSpanning2 width25" data-offset-x="0" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> + <div class="firstRowFirstColumn bigFont paddingLeft" data-offset-x="25" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div> + <div class="firstRowSecondColumn horizontalTB" data-offset-x="25" data-offset-y="100" data-expected-width="75" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> + <div class="autoRowAutoColumnSpanning2 width25" data-offset-x="0" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> </div> <pre>max-content-sized rows - verticalRL grid and horizontal item - column-axis baseline</pre> - <div class="inline-grid verticalRL alignItemsBaseline columns max-content-rows"> - <div class="firstRowFirstColumn bigFont paddingRight" data-offset-x="366" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div> - <div class="firstRowSecondColumn horizontalTB" data-offset-x="25" data-offset-y="100" data-expected-width="416" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> - <div class="autoRowAutoColumnSpanning2 width25" data-offset-x="0" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> + <div class="firstRowFirstColumn bigFont paddingLeft" data-offset-x="366" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div> + <div class="firstRowSecondColumn horizontalTB" data-offset-x="25" data-offset-y="100" data-expected-width="416" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> + <div class="autoRowAutoColumnSpanning2 width25" data-offset-x="0" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> </div> <pre>fit-content-sized rows - verticalRL grid and horizontal item - column-axis baseline</pre> - <div class="inline-grid verticalRL alignItemsBaseline columns fit-content-rows"> - <div class="firstRowFirstColumn bigFont paddingRight" data-offset-x="366" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div> - <div class="firstRowSecondColumn horizontalTB" data-offset-x="25" data-offset-y="100" data-expected-width="416" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> - <div class="autoRowAutoColumnSpanning2 width25" data-offset-x="0" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> + <div class="firstRowFirstColumn bigFont paddingLeft" data-offset-x="366" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div> + <div class="firstRowSecondColumn horizontalTB" data-offset-x="25" data-offset-y="100" data-expected-width="416" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> + <div class="autoRowAutoColumnSpanning2 width25" data-offset-x="0" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> +</div> + +<pre>flex-sized rows - verticalRL grid and horizontal item - column-axis baseline</pre> +<div class="inline-grid verticalRL alignItemsBaseline columns flex-rows"> + <div class="firstRowFirstColumn bigFont paddingLeft" data-offset-x="366" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div> + <div class="firstRowSecondColumn horizontalTB" data-offset-x="25" data-offset-y="100" data-expected-width="416" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> + <div class="autoRowAutoColumnSpanning2 width25" data-offset-x="0" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> </div> + +<pre>max-flex-sized rows - verticalRL grid and horizontal item - column-axis baseline<br>baseline is not applied initially, but orthogonal items force repeating the track sizing and height is not indefinite in that phase.</pre> +<!-- https://github.com/w3c/csswg-drafts/issues/3046 --> +<div class="inline-grid verticalRL alignItemsBaseline columns max-flex-rows"> + <div class="firstRowFirstColumn bigFont paddingLeft" data-offset-x="-10" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div> + <div class="firstRowSecondColumn horizontalTB" data-offset-x="25" data-offset-y="100" data-expected-width="416" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div> + <div class="autoRowAutoColumnSpanning2 width25" data-offset-x="0" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> +</div> + +</body> diff --git a/tests/wpt/web-platform-tests/css/css-multicol/inline-block-and-column-span-all.html b/tests/wpt/web-platform-tests/css/css-multicol/inline-block-and-column-span-all.html new file mode 100644 index 00000000000..c968a0875cd --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/inline-block-and-column-span-all.html @@ -0,0 +1,13 @@ +<!DOCTYPE html> +<title>Combining column-span and inline-block on the same element</title> +<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org"> +<link rel="help" href="https://www.w3.org/TR/css-multicol-1/#column-span" title="6.1. column-span"> +<link rel="match" href="../reference/ref-filled-green-100px-square.xht"> +<meta name="assert" content="column-span:all only applies to block-level elements, i.e. not inline-blocks, for instance"> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div style="columns:4; column-gap:0; width:400px;"> + <div style="column-span:all; display:inline-block;"> + <div style="float:left; width:100px; height:50px; background:green;"></div> + <div style="float:left; width:100px; height:50px; background:green;"></div> + </div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-multicol/intrinsic-size-001.html b/tests/wpt/web-platform-tests/css/css-multicol/intrinsic-size-001.html new file mode 100644 index 00000000000..ce8011b17f8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/intrinsic-size-001.html @@ -0,0 +1,9 @@ +<!DOCTYPE html> +<title>Intrinsic size computation with specified padding</title> +<link rel="author" title="Googld Inc." href="https://www.google.com/"> +<link rel="help" href="https://drafts.csswg.org/css-multicol/#pseudo-algorithm " title="3.4. Pseudo-algorithm"> +<link rel="match" href="../reference/ref-filled-green-100px-square.xht"> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div style="float:left; columns:2; height:40px; padding:30px; column-gap:0; background:green;"> + <div style="width:20px;"></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-properties-values-api/property-cascade.html b/tests/wpt/web-platform-tests/css/css-properties-values-api/property-cascade.html index 97c1975cf13..5f0b7eb50c2 100644 --- a/tests/wpt/web-platform-tests/css/css-properties-values-api/property-cascade.html +++ b/tests/wpt/web-platform-tests/css/css-properties-values-api/property-cascade.html @@ -1,5 +1,4 @@ <!DOCTYPE html> -<link rel="author" title="Anders Hartvoll Ruud" href="andruud@chromium.org"> <link rel="help" href="https://drafts.css-houdini.org/css-properties-values-api-1/#the-registerproperty-function" /> <meta name="assert" content="Verifies that registering a propety does not affect the cascade" /> <script src="/resources/testharness.js"></script> diff --git a/tests/wpt/web-platform-tests/css/css-properties-values-api/typedom.tentative.html b/tests/wpt/web-platform-tests/css/css-properties-values-api/typedom.tentative.html index 69ebf7a13d8..eb2d8549ba6 100644 --- a/tests/wpt/web-platform-tests/css/css-properties-values-api/typedom.tentative.html +++ b/tests/wpt/web-platform-tests/css/css-properties-values-api/typedom.tentative.html @@ -1,5 +1,4 @@ <!DOCTYPE html> -<link rel="author" title="Anders Hartvoll Ruud" href="andruud@chromium.org"> <!-- TODO(andruud): Add Typed OM details to spec and link to it here. --> <link rel="help" href="https://github.com/w3c/css-houdini-drafts/pull/783" /> <meta name="assert" content="Verifies that registered custom properties interact correctly with CSS Typed OM" /> @@ -341,99 +340,189 @@ test_style_property_map_set({ test_style_property_map_set({ syntax: '<angle>', initialValue: '0deg', - shouldAccept: [CSS.deg(42), CSS.turn(2)], - shouldReject: [unparsed('42deg'), CSS.px(15)], + shouldAccept: [CSS.deg(42), CSS.turn(2), '42deg'], + shouldReject: [unparsed('42deg'), CSS.px(15), '50px'], }); test_style_property_map_set({ syntax: '<custom-ident>', initialValue: 'none', - shouldAccept: [keyword('foo')], - shouldReject: [unparsed('foo'), CSS.px(15)], + shouldAccept: [keyword('foo'), 'foo'], + shouldReject: [unparsed('foo'), CSS.px(15), '15px'], }); test_style_property_map_set({ syntax: '<image>', initialValue: 'url(a)', - shouldAccept: [url_image('url(b)')], - shouldReject: [unparsed('url(b)'), CSS.px(100)], + shouldAccept: [url_image('url(b)'), 'url(b)'], + shouldReject: [unparsed('url(b)'), CSS.px(100), '50px'], }); test_style_property_map_set({ syntax: '<integer>', initialValue: '0', - shouldAccept: [CSS.number(1), CSS.number(-42)], - shouldReject: [unparsed('42'), CSS.px(100)], + shouldAccept: [CSS.number(1), CSS.number(-42), '1', '-42'], + shouldReject: [unparsed('42'), CSS.px(100), '50px'], }); test_style_property_map_set({ syntax: '<length-percentage>', initialValue: '0px', - shouldAccept: [CSS.percent(10), CSS.px(1), CSS.em(1)], - shouldReject: [unparsed('10%'), unparsed('10px'), CSS.dpi(1)], + shouldAccept: [CSS.percent(10), CSS.px(1), CSS.em(1), '10px', '10%'], + shouldReject: [unparsed('10%'), unparsed('10px'), CSS.dpi(1), 'url(b)'], }); test_style_property_map_set({ syntax: '<length>', initialValue: '0px', - shouldAccept: [CSS.px(10), CSS.em(10), CSS.vh(200), sum(CSS.px(10), CSS.em(20))], - shouldReject: [unparsed('10px'), CSS.percent(1)], + shouldAccept: [CSS.px(10), CSS.em(10), CSS.vh(200), sum(CSS.px(10), CSS.em(20)), '10em', 'calc(10px + 10em)'], + shouldReject: [unparsed('10px'), CSS.percent(1), 'url(b)'], }); test_style_property_map_set({ syntax: '<number>', initialValue: '0', - shouldAccept: [CSS.number(1337), CSS.number(-42.5)], - shouldReject: [unparsed('42'), CSS.px(15)], + shouldAccept: [CSS.number(1337), CSS.number(-42.5), '1337', '-42.5'], + shouldReject: [unparsed('42'), CSS.px(15), '#fef'], }); test_style_property_map_set({ syntax: '<percentage>', initialValue: '0%', - shouldAccept: [CSS.percent(10)], - shouldReject: [unparsed('10%'), CSS.px(1)], + shouldAccept: [CSS.percent(10), '10%'], + shouldReject: [unparsed('10%'), CSS.px(1), '#fef'], }); test_style_property_map_set({ syntax: '<resolution>', initialValue: '0dpi', - shouldAccept: [CSS.dpi(100), CSS.dpcm(10), CSS.dppx(50)], - shouldReject: [unparsed('42'), CSS.px(15)], + shouldAccept: [CSS.dpi(100), CSS.dpcm(10), CSS.dppx(50), '100dpi'], + shouldReject: [unparsed('42'), CSS.px(15), '#fef'], }); test_style_property_map_set({ syntax: '<time>', initialValue: '0s', - shouldAccept: [CSS.s(42), CSS.ms(16)], - shouldReject: [unparsed('42s'), CSS.px(15)], + shouldAccept: [CSS.s(42), CSS.ms(16), '16ms'], + shouldReject: [unparsed('42s'), CSS.px(15), '#fef'], }); test_style_property_map_set({ syntax: '<url>', initialValue: 'url(a)', shouldAccept: [url_image('url(b)')], - shouldReject: [unparsed('url(b)'), CSS.px(100)], + shouldReject: [unparsed('url(b)'), CSS.px(100), '#fef'], }); test_style_property_map_set({ syntax: '<transform-list>', initialValue: 'translateX(0px)', shouldAccept: [CSSStyleValue.parse('transform', 'translateX(10px)')], - shouldReject: [unparsed('transformX(10px'), CSS.px(100)], + shouldReject: [unparsed('transformX(10px'), CSS.px(100), '#fef'], }); test_style_property_map_set({ syntax: 'none | thing | THING', initialValue: 'none', - shouldAccept: [keyword('thing'), keyword('THING')], - shouldReject: [unparsed('thing'), CSS.px(15), keyword('notathing')], + shouldAccept: [keyword('thing'), keyword('THING'), 'thing'], + shouldReject: [unparsed('thing'), CSS.px(15), keyword('notathing'), 'notathing'], }); test_style_property_map_set({ syntax: '<angle> | <length>', initialValue: '0deg', - shouldAccept: [CSS.deg(42), CSS.turn(2), CSS.px(10), CSS.em(10)], - shouldReject: [unparsed('42deg'), unparsed('20px'), CSS.s(1)], + shouldAccept: [CSS.deg(42), CSS.turn(2), CSS.px(10), CSS.em(10), '10deg', '10px'], + shouldReject: [unparsed('42deg'), unparsed('20px'), CSS.s(1), '#fef'], }); +// CSSStyleValue.parse/parseAll + +function assert_parsed_type(prop, value, expected) { + let parse_value = CSSStyleValue.parse(prop, value); + let parse_all_value = CSSStyleValue.parseAll(prop, value); + + assert_true(parse_value instanceof expected); + assert_true(parse_all_value.every(x => x instanceof expected)) + + // If CSSStyleValue is expected, the values must be exactly CSSStyleValue. + // This is because CSSUnparsedValues are also CSSStyleValues, which would be + // wrong in this case. + if (expected == CSSStyleValue) { + assert_equals(parse_value.constructor, CSSStyleValue); + assert_true(parse_all_value.every(x => x.constructor == CSSStyleValue)); + } +} + +test(function(){ + assert_parsed_type(gen_prop('*', 'if(){}'), 'while(){}', CSSUnparsedValue); +}, 'CSSStyleValue.parse[All] returns CSSUnparsedValue for *'); + +test(function(){ + assert_parsed_type(gen_prop('<angle> | fail', 'fail'), '42deg', CSSUnitValue); +}, 'CSSStyleValue.parse[All] returns CSSUnitValue for <angle>'); + +test(function(){ + assert_parsed_type(gen_prop('<color> | fail', 'fail'), '#fefefe', CSSStyleValue); +}, 'CSSStyleValue.parse[All] returns CSSStyleValue for <color>'); + +test(function(){ + assert_parsed_type(gen_prop('<custom-ident> | <length>', '10px'), 'none', CSSKeywordValue); +}, 'CSSStyleValue.parse[All] returns CSSKeywordValue for <custom-ident>'); + +test(function(){ + assert_parsed_type(gen_prop('<image> | fail', 'fail'), 'url(thing.png)', CSSImageValue); +}, 'CSSStyleValue.parse[All] returns CSSImageValue for <image> [url]'); + +test(function(){ + assert_parsed_type(gen_prop('<integer> | fail', 'fail'), '100', CSSUnitValue); +}, 'CSSStyleValue.parse[All] returns CSSUnitValue for <integer>'); + +test(function(){ + assert_parsed_type(gen_prop('<length-percentage> | fail', 'fail'), '10%', CSSUnitValue); +}, 'CSSStyleValue.parse[All] returns CSSUnitValue for <length-percentage> [%]'); + +test(function(){ + assert_parsed_type(gen_prop('<length-percentage> | fail', 'fail'), '10px', CSSUnitValue); +}, 'CSSStyleValue.parse[All] returns CSSUnitValue for <length-percentage> [px]'); + +test(function(){ + assert_parsed_type(gen_prop('<length-percentage> | fail', 'fail'), 'calc(10px + 10%)', CSSMathSum); +}, 'CSSStyleValue.parse[All] returns CSSMathSum for <length-percentage> [px + %]'); + +test(function(){ + assert_parsed_type(gen_prop('<length> | fail', 'fail'), '10px', CSSUnitValue); +}, 'CSSStyleValue.parse[All] returns CSSUnitValue for <length>'); + +test(function(){ + assert_parsed_type(gen_prop('<number> | fail', 'fail'), '42', CSSUnitValue); +}, 'CSSStyleValue.parse[All] returns CSSUnitValue for <number>'); + +test(function(){ + assert_parsed_type(gen_prop('<percentage> | fail', 'fail'), '10%', CSSUnitValue); +}, 'CSSStyleValue.parse[All] returns CSSUnitValue for <percentage>'); + +test(function(){ + assert_parsed_type(gen_prop('<resolution> | fail', 'fail'), '300dpi', CSSUnitValue); +}, 'CSSStyleValue.parse[All] returns CSSUnitValue for <resolution>'); + +test(function(){ + assert_parsed_type(gen_prop('<time> | fail', 'fail'), '42s', CSSUnitValue); +}, 'CSSStyleValue.parse[All] returns CSSUnitValue for <time>'); + +test(function(){ + assert_parsed_type(gen_prop('<url> | fail', 'fail'), 'url(a)', CSSStyleValue); +}, 'CSSStyleValue.parse[All] returns CSSStyleValue for <url>'); + +test(function(){ + assert_parsed_type(gen_prop('thing1 | THING2 | <url>', 'url(fail)'), 'THING2', CSSKeywordValue); +}, 'CSSStyleValue.parse[All] returns CSSKeywordValue for ident'); + +test(function(){ + assert_parsed_type(gen_prop('<length>+ | fail', 'fail'), '10px 20px', CSSUnitValue); +}, 'CSSStyleValue.parse[All] returns list of CSSUnitValues for <length>+'); + +test(function(){ + assert_parsed_type(gen_prop('<length># | fail', 'fail'), '10px, 20px', CSSUnitValue); +}, 'CSSStyleValue.parse[All] returns list of CSSUnitValues for <length>#'); + </script> diff --git a/tests/wpt/web-platform-tests/css/css-properties-values-api/unit-cycles.html b/tests/wpt/web-platform-tests/css/css-properties-values-api/unit-cycles.html index c242640f2b9..b5c996a4429 100644 --- a/tests/wpt/web-platform-tests/css/css-properties-values-api/unit-cycles.html +++ b/tests/wpt/web-platform-tests/css/css-properties-values-api/unit-cycles.html @@ -1,5 +1,4 @@ <!DOCTYPE html> -<link rel="author" title="Anders Hartvoll Ruud" href="andruud@chromium.org"> <link rel="help" href="https://drafts.css-houdini.org/css-properties-values-api-1/#dependency-cycles-via-relative-units" /> <meta name="assert" content="This test verifies that reference cycles via units are detected" /> <script src="/resources/testharness.js"></script> diff --git a/tests/wpt/web-platform-tests/css/css-properties-values-api/url-resolution.html b/tests/wpt/web-platform-tests/css/css-properties-values-api/url-resolution.html index 6e7c008a58c..d9327896496 100644 --- a/tests/wpt/web-platform-tests/css/css-properties-values-api/url-resolution.html +++ b/tests/wpt/web-platform-tests/css/css-properties-values-api/url-resolution.html @@ -1,5 +1,4 @@ <!DOCTYPE html> -<link rel="author" title="Anders Hartvoll Ruud" href="andruud@chromium.org"> <link rel="help" href="https://drafts.css-houdini.org/css-properties-values-api-1/#relative-urls" /> <meta name="assert" content="This test verifies that relative URLs in registered properties resolve correctly" /> <script src="/resources/testharness.js"></script> diff --git a/tests/wpt/web-platform-tests/css/cssom/computed-style-set-property.html b/tests/wpt/web-platform-tests/css/cssom/computed-style-set-property.html index 65678526817..0a5e4cb0589 100644 --- a/tests/wpt/web-platform-tests/css/cssom/computed-style-set-property.html +++ b/tests/wpt/web-platform-tests/css/cssom/computed-style-set-property.html @@ -1,6 +1,5 @@ <!DOCTYPE html> <title>NoModificationAllowedError when mutating read only properties</title> -<link rel="author" title="Anders Hartvoll Ruud" href="andruud@chromium.org"> <link rel="help" href="https://www.w3.org/TR/cssom-1/#dom-cssstyledeclaration-setpropertyvalue"> <meta name="assert" content="This test verifies that NoModificationAllowedError is thrown when mutating read only properties" /> <script src="/resources/testharness.js"></script> diff --git a/tests/wpt/web-platform-tests/css/cssom/shorthand-serialization.html b/tests/wpt/web-platform-tests/css/cssom/shorthand-serialization.html index 2178ba37a95..44af6737e3e 100644 --- a/tests/wpt/web-platform-tests/css/cssom/shorthand-serialization.html +++ b/tests/wpt/web-platform-tests/css/cssom/shorthand-serialization.html @@ -58,6 +58,20 @@ assert_equals(testElem.style.margin, "20px"); assert_equals(testElem.style.cssText, "margin: 20px;") }, "Shorthand serialization after setting"); + + test(function() { + const testElem = document.getElementById("test"); + testElem.style.cssText = "margin: initial;"; + assert_equals(testElem.style.margin, "initial"); + assert_equals(testElem.style.cssText, "margin: initial;"); + }, "Shorthand serialization with 'initial' value."); + + test(function() { + const testElem = document.getElementById("test"); + testElem.style.setProperty("margin-top", "initial", "important"); + assert_equals(testElem.style.margin, ""); + assert_equals(testElem.style.cssText, "margin-top: initial !important; margin-right: initial; margin-bottom: initial; margin-left: initial;"); + }, "Shorthand serialization with 'initial' value, one longhand with important flag."); </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/compat/webkit-pseudo-element.html b/tests/wpt/web-platform-tests/css/selectors/webkit-pseudo-element.html index 8f69477489a..8b4adddba8f 100644 --- a/tests/wpt/web-platform-tests/compat/webkit-pseudo-element.html +++ b/tests/wpt/web-platform-tests/css/selectors/webkit-pseudo-element.html @@ -2,7 +2,7 @@ <title>WebKit-prefixed pseudo-elements</title> <link rel="author" title="Xidorn Quan" href="https://www.upsuper.org"> <link rel="author" title="Mozilla" href="https://www.mozilla.org"> -<link rel="help" href="https://compat.spec.whatwg.org/#css-webkit-pseudo-elements"> +<link rel="help" href="https://drafts.csswg.org/selectors-4/#compat"> <meta name="assert" content="WebKit-prefixed pseudo-elements should always be valid"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> diff --git a/tests/wpt/web-platform-tests/css/selectors/x-pseudo-element.html b/tests/wpt/web-platform-tests/css/selectors/x-pseudo-element.html new file mode 100644 index 00000000000..80ec44f9def --- /dev/null +++ b/tests/wpt/web-platform-tests/css/selectors/x-pseudo-element.html @@ -0,0 +1,22 @@ +<!doctype html> +<title>CSS Test: 'x-' prefixed pseudo-elements don't parse correctly</title> +<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io"> +<link rel="author" title="Mozilla" href="https://www.mozilla.org"> +<link rel="help" href="https://drafts.csswg.org/selectors-4/"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> + p { + color: green; + } + ::x-something-nobody-would-think-of, p { + color: red; + } +</style> +<p>Should be green +<script> + test(function() { + let p = document.querySelector('p'); + assert_equals(getComputedStyle(p).color, "rgb(0, 128, 0)"); + }, "x-prefixed pseudo-elements should make the whole rule invalid") +</script> diff --git a/tests/wpt/web-platform-tests/encoding/streams/backpressure.any.js b/tests/wpt/web-platform-tests/encoding/streams/backpressure.any.js new file mode 100644 index 00000000000..f17e149ed9e --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/streams/backpressure.any.js @@ -0,0 +1,60 @@ +// META: global=worker + +'use strict'; + +const classes = [ + { + constructor: TextDecoderStream, + input: new Uint8Array([65]) + }, + { + constructor: TextEncoderStream, + input: 'A' + } +]; + +const microtasksRun = () => new Promise(resolve => step_timeout(resolve, 0)); + +for (const streamClass of classes) { + promise_test(async () => { + const stream = new streamClass.constructor(); + const writer = stream.writable.getWriter(); + const reader = stream.readable.getReader(); + const events = []; + await microtasksRun(); + const writePromise = writer.write(streamClass.input); + writePromise.then(() => events.push('write')); + await microtasksRun(); + events.push('paused'); + await reader.read(); + events.push('read'); + await writePromise; + assert_array_equals(events, ['paused', 'read', 'write'], + 'write should happen after read'); + }, 'write() should not complete until read relieves backpressure for ' + + `${streamClass.constructor.name}`); + + promise_test(async () => { + const stream = new streamClass.constructor(); + const writer = stream.writable.getWriter(); + const reader = stream.readable.getReader(); + const events = []; + await microtasksRun(); + const readPromise1 = reader.read(); + readPromise1.then(() => events.push('read1')); + const writePromise1 = writer.write(streamClass.input); + const writePromise2 = writer.write(streamClass.input); + writePromise1.then(() => events.push('write1')); + writePromise2.then(() => events.push('write2')); + await microtasksRun(); + events.push('paused'); + const readPromise2 = reader.read(); + readPromise2.then(() => events.push('read2')); + await Promise.all([writePromise1, writePromise2, + readPromise1, readPromise2]); + assert_array_equals(events, ['read1', 'write1', 'paused', 'read2', + 'write2'], + 'writes should not happen before read2'); + }, 'additional writes should wait for backpressure to be relieved for ' + + `class ${streamClass.constructor.name}`); +} diff --git a/tests/wpt/web-platform-tests/encoding/streams/decode-bad-chunks.any.js b/tests/wpt/web-platform-tests/encoding/streams/decode-bad-chunks.any.js new file mode 100644 index 00000000000..101fb3aeb61 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/streams/decode-bad-chunks.any.js @@ -0,0 +1,72 @@ +// META: global=worker + +'use strict'; + +const badChunks = [ + { + name: 'undefined', + value: undefined + }, + { + name: 'null', + value: null + }, + { + name: 'numeric', + value: 3.14 + }, + { + name: 'object, not BufferSource', + value: {} + }, + { + name: 'array', + value: [65] + }, + { + name: 'detached ArrayBufferView', + value: (() => { + const u8 = new Uint8Array([65]); + const ab = u8.buffer; + const mc = new MessageChannel(); + mc.port1.postMessage(ab, [ab]); + return u8; + })() + }, + { + name: 'detached ArrayBuffer', + value: (() => { + const u8 = new Uint8Array([65]); + const ab = u8.buffer; + const mc = new MessageChannel(); + mc.port1.postMessage(ab, [ab]); + return ab; + })() + }, + { + name: 'SharedArrayBuffer', + // Use a getter to postpone construction so that all tests don't fail where + // SharedArrayBuffer is not yet implemented. + get value() { + return new SharedArrayBuffer(); + } + }, + { + name: 'shared Uint8Array', + get value() { + new Uint8Array(new SharedArrayBuffer()) + } + } +]; + +for (const chunk of badChunks) { + promise_test(async t => { + const tds = new TextDecoderStream(); + const reader = tds.readable.getReader(); + const writer = tds.writable.getWriter(); + const writePromise = writer.write(chunk.value); + const readPromise = reader.read(); + await promise_rejects(t, new TypeError(), writePromise, 'write should reject'); + await promise_rejects(t, new TypeError(), readPromise, 'read should reject'); + }, `chunk of type ${chunk.name} should error the stream`); +} diff --git a/tests/wpt/web-platform-tests/encoding/streams/decode-ignore-bom.any.js b/tests/wpt/web-platform-tests/encoding/streams/decode-ignore-bom.any.js new file mode 100644 index 00000000000..cbe26d71b13 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/streams/decode-ignore-bom.any.js @@ -0,0 +1,38 @@ +// META: global=worker +// META: script=resources/readable-stream-from-array.js +// META: script=resources/readable-stream-to-array.js + +const cases = [ + {encoding: 'utf-8', bytes: [0xEF, 0xBB, 0xBF, 0x61, 0x62, 0x63]}, + {encoding: 'utf-16le', bytes: [0xFF, 0xFE, 0x61, 0x00, 0x62, 0x00, 0x63, 0x00]}, + {encoding: 'utf-16be', bytes: [0xFE, 0xFF, 0x00, 0x61, 0x00, 0x62, 0x00, 0x63]} +]; +const BOM = '\uFEFF'; + +// |inputChunks| is an array of chunks, each represented by an array of +// integers. |ignoreBOM| is true or false. The result value is the output of the +// pipe, concatenated into a single string. +async function pipeAndAssemble(inputChunks, encoding, ignoreBOM) { + const chunksAsUint8 = inputChunks.map(values => new Uint8Array(values)); + const readable = readableStreamFromArray(chunksAsUint8); + const outputArray = await readableStreamToArray(readable.pipeThrough( + new TextDecoderStream(encoding, {ignoreBOM}))); + return outputArray.join(''); +} + +for (const testCase of cases) { + for (let splitPoint = 0; splitPoint < 4; ++splitPoint) { + promise_test(async () => { + const inputChunks = [testCase.bytes.slice(0, splitPoint), + testCase.bytes.slice(splitPoint)]; + const withIgnoreBOM = + await pipeAndAssemble(inputChunks, testCase.encoding, true); + assert_equals(withIgnoreBOM, BOM + 'abc', 'BOM should be preserved'); + + const withoutIgnoreBOM = + await pipeAndAssemble(inputChunks, testCase.encoding, false); + assert_equals(withoutIgnoreBOM, 'abc', 'BOM should be stripped') + }, `ignoreBOM should work for encoding ${testCase.encoding}, split at ` + + `character ${splitPoint}`); + } +} diff --git a/tests/wpt/web-platform-tests/encoding/streams/decode-incomplete-input.any.js b/tests/wpt/web-platform-tests/encoding/streams/decode-incomplete-input.any.js new file mode 100644 index 00000000000..80dd016d491 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/streams/decode-incomplete-input.any.js @@ -0,0 +1,24 @@ +// META: global=worker +// META: script=resources/readable-stream-from-array.js +// META: script=resources/readable-stream-to-array.js + +'use strict'; + +const inputBytes = [229]; + +promise_test(async () => { + const input = readableStreamFromArray([new Uint8Array(inputBytes)]); + const output = input.pipeThrough(new TextDecoderStream()); + const array = await readableStreamToArray(output); + assert_array_equals(array, ['\uFFFD'], 'array should have one element'); +}, 'incomplete input with error mode "replacement" should end with a ' + + 'replacement character'); + +promise_test(async t => { + const input = readableStreamFromArray([new Uint8Array(inputBytes)]); + const output = input.pipeThrough(new TextDecoderStream( + 'utf-8', {fatal: true})); + const reader = output.getReader(); + await promise_rejects(t, new TypeError(), reader.read(), + 'read should reject'); +}, 'incomplete input with error mode "fatal" should error the stream'); diff --git a/tests/wpt/web-platform-tests/encoding/streams/decode-non-utf8.any.js b/tests/wpt/web-platform-tests/encoding/streams/decode-non-utf8.any.js new file mode 100644 index 00000000000..7f39cdc04ca --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/streams/decode-non-utf8.any.js @@ -0,0 +1,77 @@ +// META: global=worker + +'use strict'; + +// The browser is assumed to use the same implementation as for TextDecoder, so +// this file don't replicate the exhaustive checks it has. It is just a smoke +// test that non-UTF-8 encodings work at all. + +const encodings = [ + { + name: 'UTF-16BE', + value: [108, 52], + expected: "\u{6c34}", + invalid: [0xD8, 0x00] + }, + { + name: 'UTF-16LE', + value: [52, 108], + expected: "\u{6c34}", + invalid: [0x00, 0xD8] + }, + { + name: 'Shift_JIS', + value: [144, 133], + expected: "\u{6c34}", + invalid: [255] + }, + { + name: 'ISO-8859-14', + value: [100, 240, 114], + expected: "d\u{0175}r", + invalid: undefined // all bytes are treated as valid + } +]; + +for (const encoding of encodings) { + promise_test(async () => { + const stream = new TextDecoderStream(encoding.name); + const reader = stream.readable.getReader(); + const writer = stream.writable.getWriter(); + const writePromise = writer.write(new Uint8Array(encoding.value)); + const {value, done} = await reader.read(); + assert_false(done, 'readable should not be closed'); + assert_equals(value, encoding.expected, 'chunk should match expected'); + await writePromise; + }, `TextDecoderStream should be able to decode ${encoding.name}`); + + if (!encoding.invalid) + continue; + + promise_test(async t => { + const stream = new TextDecoderStream(encoding.name); + const reader = stream.readable.getReader(); + const writer = stream.writable.getWriter(); + const writePromise = writer.write(new Uint8Array(encoding.invalid)); + const closePromise = writer.close(); + const {value, done} = await reader.read(); + assert_false(done, 'readable should not be closed'); + assert_equals(value, '\u{FFFD}', 'output should be replacement character'); + await Promise.all([writePromise, closePromise]); + }, `TextDecoderStream should be able to decode invalid sequences in ` + + `${encoding.name}`); + + promise_test(async t => { + const stream = new TextDecoderStream(encoding.name, {fatal: true}); + const reader = stream.readable.getReader(); + const writer = stream.writable.getWriter(); + const writePromise = writer.write(new Uint8Array(encoding.invalid)); + const closePromise = writer.close(); + await promise_rejects(t, new TypeError(), reader.read(), + 'readable should be errored'); + await promise_rejects(t, new TypeError(), + Promise.all([writePromise, closePromise]), + 'writable should be errored'); + }, `TextDecoderStream should be able to reject invalid sequences in ` + + `${encoding.name}`); +} diff --git a/tests/wpt/web-platform-tests/encoding/streams/decode-split-character.any.js b/tests/wpt/web-platform-tests/encoding/streams/decode-split-character.any.js new file mode 100644 index 00000000000..6c022697da6 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/streams/decode-split-character.any.js @@ -0,0 +1,50 @@ +// META: global=worker +// META: script=resources/readable-stream-from-array.js +// META: script=resources/readable-stream-to-array.js + +'use strict'; + +const inputBytes = [73, 32, 240, 159, 146, 153, 32, 115, 116, 114, 101, + 97, 109, 115]; +for (const splitPoint of [2, 3, 4, 5]) { + promise_test(async () => { + const input = readableStreamFromArray( + [new Uint8Array(inputBytes.slice(0, splitPoint)), + new Uint8Array(inputBytes.slice(splitPoint))]); + const expectedOutput = ['I ', '\u{1F499} streams']; + const output = input.pipeThrough(new TextDecoderStream()); + const array = await readableStreamToArray(output); + assert_array_equals(array, expectedOutput, + 'the split code point should be in the second chunk ' + + 'of the output'); + }, 'a code point split between chunks should not be emitted until all ' + + 'bytes are available; split point = ' + splitPoint); +} + +promise_test(async () => { + const splitPoint = 6; + const input = readableStreamFromArray( + [new Uint8Array(inputBytes.slice(0, splitPoint)), + new Uint8Array(inputBytes.slice(splitPoint))]); + const output = input.pipeThrough(new TextDecoderStream()); + const array = await readableStreamToArray(output); + assert_array_equals(array, ['I \u{1F499}', ' streams'], + 'the multibyte character should be in the first chunk ' + + 'of the output'); +}, 'a code point should be emitted as soon as all bytes are available'); + +for (let splitPoint = 1; splitPoint < 7; ++splitPoint) { + promise_test(async () => { + const input = readableStreamFromArray( + [new Uint8Array(inputBytes.slice(0, splitPoint)), + new Uint8Array([]), + new Uint8Array(inputBytes.slice(splitPoint))]); + const concatenatedOutput = 'I \u{1F499} streams'; + const output = input.pipeThrough(new TextDecoderStream()); + const array = await readableStreamToArray(output); + assert_equals(array.length, 2, 'two chunks should be output'); + assert_equals(array[0].concat(array[1]), concatenatedOutput, + 'output should be unchanged by the empty chunk'); + }, 'an empty chunk inside a code point split between chunks should not ' + + 'change the output; split point = ' + splitPoint); +} diff --git a/tests/wpt/web-platform-tests/encoding/streams/decode-utf8.any.js b/tests/wpt/web-platform-tests/encoding/streams/decode-utf8.any.js new file mode 100644 index 00000000000..34fa764bf0a --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/streams/decode-utf8.any.js @@ -0,0 +1,41 @@ +// META: global=worker +// META: script=resources/readable-stream-from-array.js +// META: script=resources/readable-stream-to-array.js + +'use strict'; + +const emptyChunk = new Uint8Array([]); +const inputChunk = new Uint8Array([73, 32, 240, 159, 146, 153, 32, 115, 116, + 114, 101, 97, 109, 115]); +const expectedOutputString = 'I \u{1F499} streams'; + +promise_test(async () => { + const input = readableStreamFromArray([inputChunk]); + const output = input.pipeThrough(new TextDecoderStream()); + const array = await readableStreamToArray(output); + assert_array_equals(array, [expectedOutputString], + 'the output should be in one chunk'); +}, 'decoding one UTF-8 chunk should give one output string'); + +promise_test(async () => { + const input = readableStreamFromArray([emptyChunk]); + const output = input.pipeThrough(new TextDecoderStream()); + const array = await readableStreamToArray(output); + assert_array_equals(array, [], 'no chunks should be output'); +}, 'decoding an empty chunk should give no output chunks'); + +promise_test(async () => { + const input = readableStreamFromArray([emptyChunk, inputChunk]); + const output = input.pipeThrough(new TextDecoderStream()); + const array = await readableStreamToArray(output); + assert_array_equals(array, [expectedOutputString], + 'the output should be in one chunk'); +}, 'an initial empty chunk should be ignored'); + +promise_test(async () => { + const input = readableStreamFromArray([inputChunk, emptyChunk]); + const output = input.pipeThrough(new TextDecoderStream()); + const array = await readableStreamToArray(output); + assert_array_equals(array, [expectedOutputString], + 'the output should be in one chunk'); +}, 'a trailing empty chunk should be ignored'); diff --git a/tests/wpt/web-platform-tests/encoding/streams/encode-bad-chunks.any.js b/tests/wpt/web-platform-tests/encoding/streams/encode-bad-chunks.any.js new file mode 100644 index 00000000000..868e34b7342 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/streams/encode-bad-chunks.any.js @@ -0,0 +1,63 @@ +// META: global=worker +// META: script=resources/readable-stream-from-array.js +// META: script=resources/readable-stream-to-array.js + +'use strict'; + +const error1 = new Error('error1'); +error1.name = 'error1'; + +promise_test(t => { + const ts = new TextEncoderStream(); + const writer = ts.writable.getWriter(); + const reader = ts.readable.getReader(); + const writePromise = writer.write({ + toString() { throw error1; } + }); + const readPromise = reader.read(); + return Promise.all([ + promise_rejects(t, error1, readPromise, 'read should reject with error1'), + promise_rejects(t, error1, writePromise, 'write should reject with error1'), + promise_rejects(t, error1, reader.closed, 'readable should be errored with error1'), + promise_rejects(t, error1, writer.closed, 'writable should be errored with error1'), + ]); +}, 'a chunk that cannot be converted to a string should error the streams'); + +const oddInputs = [ + { + name: 'undefined', + value: undefined, + expected: 'undefined' + }, + { + name: 'null', + value: null, + expected: 'null' + }, + { + name: 'numeric', + value: 3.14, + expected: '3.14' + }, + { + name: 'object', + value: {}, + expected: '[object Object]' + }, + { + name: 'array', + value: ['hi'], + expected: 'hi' + } +]; + +for (const input of oddInputs) { + promise_test(async () => { + const outputReadable = readableStreamFromArray([input.value]) + .pipeThrough(new TextEncoderStream()) + .pipeThrough(new TextDecoderStream()); + const output = await readableStreamToArray(outputReadable); + assert_equals(output.length, 1, 'output should contain one chunk'); + assert_equals(output[0], input.expected, 'output should be correct'); + }, `input of type ${input.name} should be converted correctly to string`); +} diff --git a/tests/wpt/web-platform-tests/encoding/streams/encode-utf8.any.js b/tests/wpt/web-platform-tests/encoding/streams/encode-utf8.any.js new file mode 100644 index 00000000000..74d1860e82b --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/streams/encode-utf8.any.js @@ -0,0 +1,144 @@ +// META: global=worker +// META: script=resources/readable-stream-from-array.js +// META: script=resources/readable-stream-to-array.js + +'use strict'; +const inputString = 'I \u{1F499} streams'; +const expectedOutputBytes = [0x49, 0x20, 0xf0, 0x9f, 0x92, 0x99, 0x20, 0x73, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73]; +// This is a character that must be represented in two code units in a string, +// ie. it is not in the Basic Multilingual Plane. +const astralCharacter = '\u{1F499}'; // BLUE HEART +const astralCharacterEncoded = [0xf0, 0x9f, 0x92, 0x99]; +const leading = astralCharacter[0]; +const trailing = astralCharacter[1]; +const replacementEncoded = [0xef, 0xbf, 0xbd]; + +// These tests assume that the implementation correctly classifies leading and +// trailing surrogates and treats all the code units in each set equivalently. + +const testCases = [ + { + input: [inputString], + output: [expectedOutputBytes], + description: 'encoding one string of UTF-8 should give one complete chunk' + }, + { + input: [leading, trailing], + output: [astralCharacterEncoded], + description: 'a character split between chunks should be correctly encoded' + }, + { + input: [leading, trailing + astralCharacter], + output: [astralCharacterEncoded.concat(astralCharacterEncoded)], + description: 'a character following one split between chunks should be ' + + 'correctly encoded' + }, + { + input: [leading, trailing + leading, trailing], + output: [astralCharacterEncoded, astralCharacterEncoded], + description: 'two consecutive astral characters each split down the ' + + 'middle should be correctly reassembled' + }, + { + input: [leading, trailing + leading + leading, trailing], + output: [astralCharacterEncoded.concat(replacementEncoded), astralCharacterEncoded], + description: 'two consecutive astral characters each split down the ' + + 'middle with an invalid surrogate in the middle should be correctly ' + + 'encoded' + }, + { + input: [leading], + output: [replacementEncoded], + description: 'a stream ending in a leading surrogate should emit a ' + + 'replacement character as a final chunk' + }, + { + input: [leading, astralCharacter], + output: [replacementEncoded.concat(astralCharacterEncoded)], + description: 'an unmatched surrogate at the end of a chunk followed by ' + + 'an astral character in the next chunk should be replaced with ' + + 'the replacement character at the start of the next output chunk' + }, + { + input: [leading, 'A'], + output: [replacementEncoded.concat([65])], + description: 'an unmatched surrogate at the end of a chunk followed by ' + + 'an ascii character in the next chunk should be replaced with ' + + 'the replacement character at the start of the next output chunk' + }, + { + input: [leading, leading, trailing], + output: [replacementEncoded, astralCharacterEncoded], + description: 'an unmatched surrogate at the end of a chunk followed by ' + + 'a plane 1 character split into two chunks should result in ' + + 'the encoded plane 1 character appearing in the last output chunk' + }, + { + input: [leading, leading], + output: [replacementEncoded, replacementEncoded], + description: 'two leading chunks should result in two replacement ' + + 'characters' + }, + { + input: [leading + leading, trailing], + output: [replacementEncoded, astralCharacterEncoded], + description: 'a non-terminal unpaired leading surrogate should ' + + 'immediately be replaced' + }, + { + input: [trailing, astralCharacter], + output: [replacementEncoded, astralCharacterEncoded], + description: 'a terminal unpaired trailing surrogate should ' + + 'immediately be replaced' + }, + { + input: [leading, '', trailing], + output: [astralCharacterEncoded], + description: 'a leading surrogate chunk should be carried past empty chunks' + }, + { + input: [leading, ''], + output: [replacementEncoded], + description: 'a leading surrogate chunk should error when it is clear ' + + 'it didn\'t form a pair' + }, + { + input: [''], + output: [], + description: 'an empty string should result in no output chunk' + }, + { + input: ['', inputString], + output: [expectedOutputBytes], + description: 'a leading empty chunk should be ignored' + }, + { + input: [inputString, ''], + output: [expectedOutputBytes], + description: 'a trailing empty chunk should be ignored' + }, + { + input: ['A'], + output: [[65]], + description: 'a plain ASCII chunk should be converted' + }, + { + input: ['\xff'], + output: [[195, 191]], + description: 'characters in the ISO-8859-1 range should be encoded correctly' + }, +]; + +for (const {input, output, description} of testCases) { + promise_test(async () => { + const inputStream = readableStreamFromArray(input); + const outputStream = inputStream.pipeThrough(new TextEncoderStream()); + const chunkArray = await readableStreamToArray(outputStream); + assert_equals(chunkArray.length, output.length, + 'number of chunks should match'); + for (let i = 0; i < output.length; ++i) { + assert_array_equals(chunkArray[i], output[i], `chunk ${i} should match`); + } + }, description); +} diff --git a/tests/wpt/web-platform-tests/encoding/streams/readable-writable-properties.any.js b/tests/wpt/web-platform-tests/encoding/streams/readable-writable-properties.any.js new file mode 100644 index 00000000000..ad7cde32f68 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/streams/readable-writable-properties.any.js @@ -0,0 +1,22 @@ +// META: global=worker + +// This just tests that the "readable" and "writable" properties pass the brand +// checks. All other relevant attributes are covered by the IDL tests. + +'use strict'; + +test(() => { + const te = new TextEncoderStream(); + assert_equals(typeof ReadableStream.prototype.getReader.call(te.readable), + 'object', 'readable property must pass brand check'); + assert_equals(typeof WritableStream.prototype.getWriter.call(te.writable), + 'object', 'writable property must pass brand check'); +}, 'TextEncoderStream readable and writable properties must pass brand checks'); + +test(() => { + const td = new TextDecoderStream(); + assert_equals(typeof ReadableStream.prototype.getReader.call(td.readable), + 'object', 'readable property must pass brand check'); + assert_equals(typeof WritableStream.prototype.getWriter.call(td.writable), + 'object', 'writable property must pass brand check'); +}, 'TextDecoderStream readable and writable properties must pass brand checks'); diff --git a/tests/wpt/web-platform-tests/encoding/streams/realms.window.js b/tests/wpt/web-platform-tests/encoding/streams/realms.window.js new file mode 100644 index 00000000000..b1cc13e0b80 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/streams/realms.window.js @@ -0,0 +1,347 @@ +'use strict'; + +// Test that objects created by the TextEncoderStream and TextDecoderStream APIs +// are created in the correct realm. The tests work by creating an iframe for +// each realm and then posting Javascript to them to be evaluated. Inputs and +// outputs are passed around via global variables in each realm's scope. + +// Async setup is required before creating any tests, so require done() to be +// called. +setup({explicit_done: true}); + +function createRealm() { + let iframe = document.createElement('iframe'); + const scriptEndTag = '<' + '/script>'; + iframe.srcdoc = `<!doctype html> +<script> +onmessage = event => { + if (event.source !== window.parent) { + throw new Error('unexpected message with source ' + event.source); + } + eval(event.data); +}; +${scriptEndTag}`; + iframe.style.display = 'none'; + document.body.appendChild(iframe); + let realmPromiseResolve; + const realmPromise = new Promise(resolve => { + realmPromiseResolve = resolve; + }); + iframe.onload = () => { + realmPromiseResolve(iframe.contentWindow); + }; + return realmPromise; +} + +async function createRealms() { + // All realms are visible on the global object so they can access each other. + + // The realm that the constructor function comes from. + window.constructorRealm = await createRealm(); + + // The realm in which the constructor object is called. + window.constructedRealm = await createRealm(); + + // The realm in which reading happens. + window.readRealm = await createRealm(); + + // The realm in which writing happens. + window.writeRealm = await createRealm(); + + // The realm that provides the definitions of Readable and Writable methods. + window.methodRealm = await createRealm(); + + await evalInRealmAndWait(methodRealm, ` + window.ReadableStreamDefaultReader = + new ReadableStream().getReader().constructor; + window.WritableStreamDefaultWriter = + new WritableStream().getWriter().constructor; +`); + window.readMethod = methodRealm.ReadableStreamDefaultReader.prototype.read; + window.writeMethod = methodRealm.WritableStreamDefaultWriter.prototype.write; +} + +// In order for values to be visible between realms, they need to be +// global. To prevent interference between tests, variable names are generated +// automatically. +const id = (() => { + let nextId = 0; + return () => { + return `realmsId${nextId++}`; + }; +})(); + +// Eval string "code" in the content of realm "realm". Evaluation happens +// asynchronously, meaning it hasn't happened when the function returns. +function evalInRealm(realm, code) { + realm.postMessage(code, window.origin); +} + +// Same as evalInRealm() but returns a Promise which will resolve when the +// function has actually. +async function evalInRealmAndWait(realm, code) { + const resolve = id(); + const waitOn = new Promise(r => { + realm[resolve] = r; + }); + evalInRealm(realm, code); + evalInRealm(realm, `${resolve}();`); + await waitOn; +} + +// The same as evalInRealmAndWait but returns the result of evaluating "code" as +// an expression. +async function evalInRealmAndReturn(realm, code) { + const myId = id(); + await evalInRealmAndWait(realm, `window.${myId} = ${code};`); + return realm[myId]; +} + +// Constructs an object in constructedRealm and copies it into readRealm and +// writeRealm. Returns the id that can be used to access the object in those +// realms. |what| can contain constructor arguments. +async function constructAndStore(what) { + const objId = id(); + // Call |constructorRealm|'s constructor from inside |constructedRealm|. + writeRealm[objId] = await evalInRealmAndReturn( + constructedRealm, `new parent.constructorRealm.${what}`); + readRealm[objId] = writeRealm[objId]; + return objId; +} + +// Calls read() on the readable side of the TransformStream stored in +// readRealm[objId]. Locks the readable side as a side-effect. +function readInReadRealm(objId) { + return evalInRealmAndReturn(readRealm, ` +parent.readMethod.call(window.${objId}.readable.getReader())`); +} + +// Calls write() on the writable side of the TransformStream stored in +// writeRealm[objId], passing |value|. Locks the writable side as a +// side-effect. +function writeInWriteRealm(objId, value) { + const valueId = id(); + writeRealm[valueId] = value; + return evalInRealmAndReturn(writeRealm, ` +parent.writeMethod.call(window.${objId}.writable.getWriter(), + window.${valueId})`); +} + +window.onload = () => { + createRealms().then(() => { + runGenericTests('TextEncoderStream'); + runTextEncoderStreamTests(); + runGenericTests('TextDecoderStream'); + runTextDecoderStreamTests(); + done(); + }); +}; + +function runGenericTests(classname) { + promise_test(async () => { + const obj = await evalInRealmAndReturn( + constructedRealm, `new parent.constructorRealm.${classname}()`); + assert_equals(obj.constructor, constructorRealm[classname], + 'obj should be in constructor realm'); + }, `a ${classname} object should be associated with the realm the ` + + 'constructor came from'); + + promise_test(async () => { + const objId = await constructAndStore(classname); + const readableGetterId = id(); + readRealm[readableGetterId] = Object.getOwnPropertyDescriptor( + methodRealm[classname].prototype, 'readable').get; + const writableGetterId = id(); + writeRealm[writableGetterId] = Object.getOwnPropertyDescriptor( + methodRealm[classname].prototype, 'writable').get; + const readable = await evalInRealmAndReturn( + readRealm, `${readableGetterId}.call(${objId})`); + const writable = await evalInRealmAndReturn( + writeRealm, `${writableGetterId}.call(${objId})`); + assert_equals(readable.constructor, constructorRealm.ReadableStream, + 'readable should be in constructor realm'); + assert_equals(writable.constructor, constructorRealm.WritableStream, + 'writable should be in constructor realm'); + }, `${classname}'s readable and writable attributes should come from the ` + + 'same realm as the constructor definition'); +} + +function runTextEncoderStreamTests() { + promise_test(async () => { + const objId = await constructAndStore('TextEncoderStream'); + const writePromise = writeInWriteRealm(objId, 'A'); + const result = await readInReadRealm(objId); + await writePromise; + assert_equals(result.constructor, constructorRealm.Object, + 'result should be in constructor realm'); + assert_equals(result.value.constructor, constructorRealm.Uint8Array, + 'chunk should be in constructor realm'); + }, 'the output chunks when read is called after write should come from the ' + + 'same realm as the constructor of TextEncoderStream'); + + promise_test(async () => { + const objId = await constructAndStore('TextEncoderStream'); + const chunkPromise = readInReadRealm(objId); + writeInWriteRealm(objId, 'A'); + // Now the read() should resolve. + const result = await chunkPromise; + assert_equals(result.constructor, constructorRealm.Object, + 'result should be in constructor realm'); + assert_equals(result.value.constructor, constructorRealm.Uint8Array, + 'chunk should be in constructor realm'); + }, 'the output chunks when write is called with a pending read should come ' + + 'from the same realm as the constructor of TextEncoderStream'); + + // There is not absolute consensus regarding what realm exceptions should be + // created in. Implementations may vary. The expectations in exception-related + // tests may change in future once consensus is reached. + promise_test(async t => { + const objId = await constructAndStore('TextEncoderStream'); + // Read first to relieve backpressure. + const readPromise = readInReadRealm(objId); + // promise_rejects() does not permit directly inspecting the rejection, so + // it's necessary to write it out long-hand. + let writeSucceeded = false; + try { + // Write an invalid chunk. + await writeInWriteRealm(objId, { + toString() { return {}; } + }); + writeSucceeded = true; + } catch (err) { + assert_equals(err.constructor, constructorRealm.TypeError, + 'write TypeError should come from constructor realm'); + } + assert_false(writeSucceeded, 'write should fail'); + + let readSucceeded = false; + try { + await readPromise; + readSucceeded = true; + } catch (err) { + assert_equals(err.constructor, constructorRealm.TypeError, + 'read TypeError should come from constructor realm'); + } + + assert_false(readSucceeded, 'read should fail'); + }, 'TypeError for unconvertable chunk should come from constructor realm ' + + 'of TextEncoderStream'); +} + +function runTextDecoderStreamTests() { + promise_test(async () => { + const objId = await constructAndStore('TextDecoderStream'); + const writePromise = writeInWriteRealm(objId, new Uint8Array([65])); + const result = await readInReadRealm(objId); + await writePromise; + assert_equals(result.constructor, constructorRealm.Object, + 'result should be in constructor realm'); + // A string is not an object, so doesn't have an associated realm. Accessing + // string properties will create a transient object wrapper belonging to the + // current realm. So checking the realm of result.value is not useful. + }, 'the result object when read is called after write should come from the ' + + 'same realm as the constructor of TextDecoderStream'); + + promise_test(async () => { + const objId = await constructAndStore('TextDecoderStream'); + const chunkPromise = readInReadRealm(objId); + writeInWriteRealm(objId, new Uint8Array([65])); + // Now the read() should resolve. + const result = await chunkPromise; + assert_equals(result.constructor, constructorRealm.Object, + 'result should be in constructor realm'); + // A string is not an object, so doesn't have an associated realm. Accessing + // string properties will create a transient object wrapper belonging to the + // current realm. So checking the realm of result.value is not useful. + }, 'the result object when write is called with a pending ' + + 'read should come from the same realm as the constructor of TextDecoderStream'); + + promise_test(async t => { + const objId = await constructAndStore('TextDecoderStream'); + // Read first to relieve backpressure. + const readPromise = readInReadRealm(objId); + // promise_rejects() does not permit directly inspecting the rejection, so + // it's necessary to write it out long-hand. + let writeSucceeded = false; + try { + // Write an invalid chunk. + await writeInWriteRealm(objId, {}); + writeSucceeded = true; + } catch (err) { + assert_equals(err.constructor, constructorRealm.TypeError, + 'write TypeError should come from constructor realm'); + } + assert_false(writeSucceeded, 'write should fail'); + + let readSucceeded = false; + try { + await readPromise; + readSucceeded = true; + } catch (err) { + assert_equals(err.constructor, constructorRealm.TypeError, + 'read TypeError should come from constructor realm'); + } + assert_false(readSucceeded, 'read should fail'); + }, 'TypeError for chunk with the wrong type should come from constructor ' + + 'realm of TextDecoderStream'); + + promise_test(async t => { + const objId = + await constructAndStore(`TextDecoderStream('utf-8', {fatal: true})`); + // Read first to relieve backpressure. + const readPromise = readInReadRealm(objId); + // promise_rejects() does not permit directly inspecting the rejection, so + // it's necessary to write it out long-hand. + let writeSucceeded = false; + try { + await writeInWriteRealm(objId, new Uint8Array([0xff])); + writeSucceeded = true; + } catch (err) { + assert_equals(err.constructor, constructorRealm.TypeError, + 'write TypeError should come from constructor realm'); + } + assert_false(writeSucceeded, 'write should fail'); + + let readSucceeded = false; + try { + await readPromise; + readSucceeded = true; + } catch (err) { + assert_equals(err.constructor, constructorRealm.TypeError, + 'read TypeError should come from constructor realm'); + } + assert_false(readSucceeded, 'read should fail'); + }, 'TypeError for invalid chunk should come from constructor realm ' + + 'of TextDecoderStream'); + + promise_test(async t => { + const objId = + await constructAndStore(`TextDecoderStream('utf-8', {fatal: true})`); + // Read first to relieve backpressure. + readInReadRealm(objId); + // Write an unfinished sequence of bytes. + const incompleteBytesId = id(); + writeRealm[incompleteBytesId] = new Uint8Array([0xf0]); + // promise_rejects() does not permit directly inspecting the rejection, so + // it's necessary to write it out long-hand. + let closeSucceeded = false; + try { + // Can't use writeInWriteRealm() here because it doesn't make it possible + // to reuse the writer. + await evalInRealmAndReturn(writeRealm, ` +(() => { + const writer = window.${objId}.writable.getWriter(); + parent.writeMethod.call(writer, window.${incompleteBytesId}); + return parent.methodRealm.WritableStreamDefaultWriter.prototype + .close.call(writer); +})(); +`); + closeSucceeded = true; + } catch (err) { + assert_equals(err.constructor, constructorRealm.TypeError, + 'close TypeError should come from constructor realm'); + } + assert_false(closeSucceeded, 'close should fail'); + }, 'TypeError for incomplete input should come from constructor realm ' + + 'of TextDecoderStream'); +} diff --git a/tests/wpt/web-platform-tests/encoding/streams/resources/readable-stream-from-array.js b/tests/wpt/web-platform-tests/encoding/streams/resources/readable-stream-from-array.js new file mode 100644 index 00000000000..5c12ba8c8bb --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/streams/resources/readable-stream-from-array.js @@ -0,0 +1,12 @@ +'use strict'; + +function readableStreamFromArray(array) { + return new ReadableStream({ + start(controller) { + for (let entry of array) { + controller.enqueue(entry); + } + controller.close(); + } + }); +} diff --git a/tests/wpt/web-platform-tests/encoding/streams/resources/readable-stream-to-array.js b/tests/wpt/web-platform-tests/encoding/streams/resources/readable-stream-to-array.js new file mode 100644 index 00000000000..fda03e22644 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/streams/resources/readable-stream-to-array.js @@ -0,0 +1,11 @@ +'use strict'; + +function readableStreamToArray(stream) { + var array = []; + var writable = new WritableStream({ + write(chunk) { + array.push(chunk); + } + }); + return stream.pipeTo(writable).then(() => array); +} diff --git a/tests/wpt/web-platform-tests/feature-policy/experimental-features/intrinsicSize-with-responsive-images.tentative.https.sub.html b/tests/wpt/web-platform-tests/feature-policy/experimental-features/intrinsicSize-with-responsive-images.tentative.https.sub.html new file mode 100644 index 00000000000..60bc00ddc3e --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/experimental-features/intrinsicSize-with-responsive-images.tentative.https.sub.html @@ -0,0 +1,97 @@ +<!DOCTYPE html> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +'use strict'; + +const srcs = [ + "/feature-policy/experimental-features/resources/image.svg", + "/feature-policy/experimental-features/resources/image.jpg", + "/feature-policy/experimental-features/resources/image.png", +]; + +for (var src of srcs) { + async_test(t => { + var img = document.createElement('IMG'); + img.intrinsicSize = '400 x 500'; + var expected_intrinsic_width = 400; + var expected_intrinsic_height = 500; + var expected_width = expected_intrinsic_width; + var expected_height = expected_intrinsic_height; + + document.body.appendChild(img); + img.addEventListener('load', t.step_func(() => { + assert_equals(img.width, expected_width, 'width'); + assert_equals(img.height, expected_height, 'height'); + assert_equals(img.naturalWidth, expected_intrinsic_width, 'naturalWidth'); + assert_equals(img.naturalHeight, expected_intrinsic_height, 'naturalHeigh'); + t.done(); + })); + img.srcset = src + ' 3x'; + }, 'Test image ' + src + ' with no specified sizes, width, or height'); + + async_test(t => { + var img = document.createElement('IMG'); + img.intrinsicSize = '400 x 500'; + img.width = '800'; /* 2x of intrinsic width */ + var expected_intrinsic_width = 400; + var expected_intrinsic_height = 500; + var expected_width = expected_intrinsic_width * 2; + var expected_height = expected_intrinsic_height * 2; + + document.body.appendChild(img); + img.addEventListener('load', t.step_func(() => { + assert_equals(img.width, expected_width, 'width'); + assert_equals(img.height, expected_height, 'height'); + assert_equals(img.naturalWidth, expected_intrinsic_width, 'naturalWidth'); + assert_equals(img.naturalHeight, expected_intrinsic_height, 'naturalHeigh'); + t.done(); + })); + img.srcset = src + ' 3x'; + }, 'Test image ' + src + ' with width = 800, no specified sizes, or height'); + + async_test(t => { + var img = document.createElement('IMG'); + img.intrinsicSize = '400 x 500'; + img.width = '800'; + img.style = 'height:800px;'; + var expected_intrinsic_width = 400; + var expected_intrinsic_height = 500; + var expected_width = 800; + var expected_height = 800; + + document.body.appendChild(img); + img.addEventListener('load', t.step_func(() => { + assert_equals(img.width, expected_width, 'width'); + assert_equals(img.height, expected_height, 'height'); + assert_equals(img.naturalWidth, expected_intrinsic_width, 'naturalWidth'); + assert_equals(img.naturalHeight, expected_intrinsic_height, 'naturalHeigh'); + t.done(); + })); + img.srcset = src + ' 3x'; + }, 'Test image ' + src + ' with width = 800, height = 800, and no specified sizes'); +} + +async_test(t => { + var img = document.createElement('IMG'); + img.intrinsicSize = '400 x 500'; + img.sizes = '100px'; + var expected_intrinsic_width = 100; + var expected_intrinsic_height = 125; + var expected_width = 100; + var expected_height = 125; + + document.body.appendChild(img); + img.addEventListener('load', t.step_func(() => { + assert_equals(img.width, expected_width, 'width'); + assert_equals(img.height, expected_height, 'height'); + assert_equals(img.naturalWidth, expected_intrinsic_width, 'naturalWidth'); + assert_equals(img.naturalHeight, expected_intrinsic_height, 'naturalHeigh'); + t.done(); + })); + img.srcset = srcs[2] + ' 32w'; +}, 'Test image (32 x 32) with sizes = 100 and srcset descriptor = 32w'); + +</script> +</body> diff --git a/tests/wpt/web-platform-tests/feature-policy/experimental-features/intrinsicSize-without-unsized-media.tentative.https.sub.html b/tests/wpt/web-platform-tests/feature-policy/experimental-features/intrinsicSize-without-unsized-media.tentative.https.sub.html new file mode 100644 index 00000000000..4a3526425d7 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/experimental-features/intrinsicSize-without-unsized-media.tentative.https.sub.html @@ -0,0 +1,100 @@ +<!DOCTYPE html> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +'use strict'; + +const srcs = [ + "/feature-policy/experimental-features/resources/image.svg", + "/feature-policy/experimental-features/resources/image.jpg", + "/feature-policy/experimental-features/resources/image.png", +]; + +// Set new attribute, and wait til the media element is repainted. +function updateAttribute(e, attribute, value) { + return new Promise(resolve => { + requestAnimationFrame(() => requestAnimationFrame(() => resolve())); + e.setAttribute(attribute, value); + }); +} + +// Test intrinsicSize attribute with image element. +for (var src of srcs) { + promise_test(async() => { + var img = document.createElement('IMG'); + document.body.appendChild(img); + img.src = src; + await new Promise(resolve => + img.addEventListener('load', () => resolve(), {once: true})); + await updateAttribute(img, 'intrinsicSize', '400 x 500'); + assert_equals(img.width, 400, 'width'); + assert_equals(img.height, 500, 'height'); + assert_equals(img.naturalWidth, 400, 'naturalWidth'); + assert_equals(img.naturalHeight, 500, 'naturalHeight'); + + await updateAttribute(img, 'width', '800'); + assert_equals(img.width, 800, 'width'); + assert_equals(img.height, 1000, 'height'); + assert_equals(img.naturalWidth, 400, 'naturalWidth'); + assert_equals(img.naturalHeight, 500, 'naturalHeight'); + + await updateAttribute(img, 'style', 'height:800px;'); + assert_equals(img.width, 800, 'width'); + assert_equals(img.height, 800, 'height'); + assert_equals(img.naturalWidth, 400, 'naturalWidth'); + assert_equals(img.naturalHeight, 500, 'naturalHeight'); + + await updateAttribute(img, 'width', ''); + assert_equals(img.width, 640, 'width'); + assert_equals(img.height, 800, 'height'); + assert_equals(img.naturalWidth, 400, 'naturalWidth'); + assert_equals(img.naturalHeight, 500, 'naturalHeight'); + + await updateAttribute(img, 'style', 'height:800px; writing-mode: vertical-rl;'); + assert_equals(img.width, 640, 'width'); + assert_equals(img.height, 800, 'height'); + assert_equals(img.naturalWidth, 400, 'naturalWidth'); + assert_equals(img.naturalHeight, 500, 'naturalHeight'); + + await updateAttribute(img, 'style', 'height:800px; writing-mode: horizontal-tb;'); + assert_equals(img.width, 640, 'width'); + assert_equals(img.height, 800, 'height'); + assert_equals(img.naturalWidth, 400, 'naturalWidth'); + assert_equals(img.naturalHeight, 500, 'naturalHeight'); + }, 'Test image with src=' + src); +} + +// Test intrinsicSize attribute with video element. +promise_test(async() => { + var video = document.createElement('video'); + document.body.appendChild(video); + video.src = "/feature-policy/experimental-features/resources/video.ogv"; + await new Promise(resolve => + video.addEventListener('canplaythrough', () => resolve(), {once: true})); + video.intrinsicSize = '400 x 500'; + assert_equals(video.getBoundingClientRect().width, 400, 'width'); + assert_equals(video.getBoundingClientRect().height, 500, 'height'); + assert_equals(video.videoWidth, 400, 'naturalWidth'); + assert_equals(video.videoHeight, 500, 'naturalHeight'); + + video.width = '800'; + assert_equals(video.getBoundingClientRect().width, 800, 'width'); + assert_equals(video.getBoundingClientRect().height, 1000, 'height'); + assert_equals(video.videoWidth, 400, 'naturalWidth'); + assert_equals(video.videoHeight, 500, 'naturalHeight'); + + video.style = 'height:800px;'; + assert_equals(video.getBoundingClientRect().width, 800, 'width'); + assert_equals(video.getBoundingClientRect().height, 800, 'height'); + assert_equals(video.videoWidth, 400, 'naturalWidth'); + assert_equals(video.videoHeight, 500, 'naturalHeight'); + + video.removeAttribute('width'); + assert_equals(video.getBoundingClientRect().width, 640, 'width'); + assert_equals(video.getBoundingClientRect().height, 800, 'height'); + assert_equals(video.videoWidth, 400, 'naturalWidth'); + assert_equals(video.videoHeight, 500, 'naturalHeight'); +}, 'Test video'); +</script> +</body> diff --git a/tests/wpt/web-platform-tests/feature-policy/experimental-features/intrinsicsize-without-unsized-media.tentative.https.sub.html.headers b/tests/wpt/web-platform-tests/feature-policy/experimental-features/intrinsicsize-without-unsized-media.tentative.https.sub.html.headers new file mode 100644 index 00000000000..4fbf3f5addd --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/experimental-features/intrinsicsize-without-unsized-media.tentative.https.sub.html.headers @@ -0,0 +1 @@ +Feature-Policy: unsized-media * diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/camera-reporting.https.html b/tests/wpt/web-platform-tests/feature-policy/reporting/camera-reporting.https.html new file mode 100644 index 00000000000..14b2ed1d37c --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/camera-reporting.https.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> + <head> + <script src='/resources/testharness.js'></script> + <script src='/resources/testharnessreport.js'></script> + </head> + <body> + <script> +var t = async_test("Camera Report Format"); + +var check_report_format = (reports, observer) => { + let report = reports[0]; + assert_equals(report.type, "feature-policy"); + assert_equals(report.url, document.location.href); + assert_equals(report.body.feature, "camera"); + assert_equals(report.body.sourceFile, document.location.href); + assert_equals(typeof report.body.message, "string"); + assert_equals(typeof report.body.lineNumber, "number"); + assert_equals(typeof report.body.columnNumber, "number"); +}; + +new ReportingObserver(t.step_func_done(check_report_format), + {types: ['feature-policy']}).observe(); + +navigator.mediaDevices.getUserMedia({video: true}).then( + t.unreached_func("UserMedia camera access should not be allowed in this document.") +).catch(() => {}); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/camera-reporting.https.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/camera-reporting.https.html.headers new file mode 100644 index 00000000000..2adc5e237fc --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/camera-reporting.https.html.headers @@ -0,0 +1 @@ +Feature-Policy: camera 'none' diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/document-write-reporting.html b/tests/wpt/web-platform-tests/feature-policy/reporting/document-write-reporting.html new file mode 100644 index 00000000000..cb08b8d72d1 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/document-write-reporting.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<html> + <head> + <script src='/resources/testharness.js'></script> + <script src='/resources/testharnessreport.js'></script> + </head> + <body> + <script> +var t = async_test("Document-write Report Format"); + +var check_report_format = (reports, observer) => { + let report = reports[0]; + assert_equals(report.type, "feature-policy"); + assert_equals(report.url, document.location.href); + assert_equals(report.body.feature, "document-write"); + assert_equals(report.body.sourceFile, document.location.href); + assert_equals(typeof report.body.message, "string"); + assert_equals(typeof report.body.lineNumber, "number"); + assert_equals(typeof report.body.columnNumber, "number"); +}; + +new ReportingObserver(t.step_func_done(check_report_format), + {types: ['feature-policy']}).observe(); + +t.step_func(() => { + assert_throws('NotAllowedError', + () => document.write("This should not succeed"), + "document.write should throw an exception when disabled"); +})(); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/document-write-reporting.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/document-write-reporting.html.headers new file mode 100644 index 00000000000..57102d5ee7c --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/document-write-reporting.html.headers @@ -0,0 +1 @@ +Feature-Policy: document-write 'none' diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/fullscreen-reporting.html b/tests/wpt/web-platform-tests/feature-policy/reporting/fullscreen-reporting.html new file mode 100644 index 00000000000..83d97c91fab --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/fullscreen-reporting.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<html> + <head> + <script src='/resources/testharness.js'></script> + <script src='/resources/testharnessreport.js'></script> + </head> + <body> + <div id='fs'></div> + <script> +var check_report_format = (reports, observer) => { + let report = reports[0]; + assert_equals(report.type, "feature-policy"); + assert_equals(report.url, document.location.href); + assert_equals(report.body.feature, "fullscreen"); + assert_equals(report.body.sourceFile, document.location.href); + assert_equals(typeof report.body.message, "string"); + assert_equals(typeof report.body.lineNumber, "number"); + assert_equals(typeof report.body.columnNumber, "number"); +}; + +async_test(t => { + new ReportingObserver(t.step_func_done(check_report_format), + {types: ['feature-policy']}).observe(); + document.getElementById('fs').requestFullscreen().then(t.unreached_func( + "Fullscreen should not be allowed in this document.")).catch(()=>{}); +}, "Fullscreen Report Format"); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/fullscreen-reporting.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/fullscreen-reporting.html.headers new file mode 100644 index 00000000000..d35e48ba40d --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/fullscreen-reporting.html.headers @@ -0,0 +1 @@ +Feature-Policy: fullscreen 'none' diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/geolocation-reporting.https.html b/tests/wpt/web-platform-tests/feature-policy/reporting/geolocation-reporting.https.html new file mode 100644 index 00000000000..22e258563b7 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/geolocation-reporting.https.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> + <head> + <script src='/resources/testharness.js'></script> + <script src='/resources/testharnessreport.js'></script> + </head> + <body> + <script> +var t = async_test("Geolocation Report Format"); + +var check_report_format = (reports, observer) => { + let report = reports[0]; + assert_equals(report.type, "feature-policy"); + assert_equals(report.url, document.location.href); + assert_equals(report.body.feature, "geolocation"); + assert_equals(report.body.sourceFile, document.location.href); + assert_equals(typeof report.body.message, "string"); + assert_equals(typeof report.body.lineNumber, "number"); + assert_equals(typeof report.body.columnNumber, "number"); +}; + +new ReportingObserver(t.step_func_done(check_report_format), + {types: ['feature-policy']}).observe(); + +navigator.geolocation.getCurrentPosition( + t.unreached_func("geolocation should be disabled in this document"), + () => {}); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/geolocation-reporting.https.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/geolocation-reporting.https.html.headers new file mode 100644 index 00000000000..7e75481ea6d --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/geolocation-reporting.https.html.headers @@ -0,0 +1 @@ +Feature-Policy: geolocation 'none' diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/image.jpg b/tests/wpt/web-platform-tests/feature-policy/reporting/image.jpg Binary files differnew file mode 100644 index 00000000000..c059b96d97f --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/image.jpg diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/microphone-reporting.https.html b/tests/wpt/web-platform-tests/feature-policy/reporting/microphone-reporting.https.html new file mode 100644 index 00000000000..7347a2332bc --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/microphone-reporting.https.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> + <head> + <script src='/resources/testharness.js'></script> + <script src='/resources/testharnessreport.js'></script> + </head> + <body> + <script> +var t = async_test("Microphone Report Format"); + +var check_report_format = (reports, observer) => { + let report = reports[0]; + assert_equals(report.type, "feature-policy"); + assert_equals(report.url, document.location.href); + assert_equals(report.body.feature, "microphone"); + assert_equals(report.body.sourceFile, document.location.href); + assert_equals(typeof report.body.message, "string"); + assert_equals(typeof report.body.lineNumber, "number"); + assert_equals(typeof report.body.columnNumber, "number"); +}; + +new ReportingObserver(t.step_func_done(check_report_format), + {types: ['feature-policy']}).observe(); + +navigator.mediaDevices.getUserMedia({audio: true}).then( + t.unreached_func("UserMedia microphone access should not be allowed in this document.") +).catch(() => {}); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/microphone-reporting.https.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/microphone-reporting.https.html.headers new file mode 100644 index 00000000000..a86e0a07785 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/microphone-reporting.https.html.headers @@ -0,0 +1 @@ +Feature-Policy: microphone 'none' diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/midi-reporting.html b/tests/wpt/web-platform-tests/feature-policy/reporting/midi-reporting.html new file mode 100644 index 00000000000..8303b7adce4 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/midi-reporting.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<html> + <head> + <script src='/resources/testharness.js'></script> + <script src='/resources/testharnessreport.js'></script> + </head> + <body> + <script> +var check_report_format = (reports, observer) => { + let report = reports[0]; + assert_equals(report.type, "feature-policy"); + assert_equals(report.url, document.location.href); + assert_equals(report.body.feature, "midi"); + assert_equals(report.body.sourceFile, document.location.href); + assert_equals(typeof report.body.message, "string"); + assert_equals(typeof report.body.lineNumber, "number"); + assert_equals(typeof report.body.columnNumber, "number"); +}; + +promise_test(async (t) => { + const report = new Promise(resolve => { + new ReportingObserver((reports, observer) => resolve([reports, observer]), + {types: ['feature-policy']}).observe(); + }); + await promise_rejects(t, 'SecurityError', navigator.requestMIDIAccess(), + "MIDI device access should not be allowed in this document."); + const [reports, observer] = await report; + check_report_format(reports, observer); +}, "MIDI Report Format"); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/midi-reporting.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/midi-reporting.html.headers new file mode 100644 index 00000000000..0e145978a01 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/midi-reporting.html.headers @@ -0,0 +1 @@ +Feature-Policy: midi 'none' diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/payment-reporting.https.html b/tests/wpt/web-platform-tests/feature-policy/reporting/payment-reporting.https.html new file mode 100644 index 00000000000..03eaebea58f --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/payment-reporting.https.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html> + <head> + <script src='/resources/testharness.js'></script> + <script src='/resources/testharnessreport.js'></script> + </head> + <body> + <script> +var t = async_test("PaymentRequest Report Format"); + +var check_report_format = (reports, observer) => { + let report = reports[0]; + assert_equals(report.type, "feature-policy"); + assert_equals(report.url, document.location.href); + assert_equals(report.body.feature, "payment"); + assert_equals(report.body.sourceFile, document.location.href); + assert_equals(typeof report.body.message, "string"); + assert_equals(typeof report.body.lineNumber, "number"); + assert_equals(typeof report.body.columnNumber, "number"); +}; + +new ReportingObserver(t.step_func_done(check_report_format), + {types: ['feature-policy']}).observe(); + +t.step_func(() => { + assert_throws('SecurityError', + () => new PaymentRequest( + [{ supportedMethods: 'basic-card' }], + { total: { label: 'Total', amount: { currency: 'USD', value: 0 }}}, + {}).show(), + "PaymentRequest API should not be allowed in this document."); +})(); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/payment-reporting.https.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/payment-reporting.https.html.headers new file mode 100644 index 00000000000..a2836778bc5 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/payment-reporting.https.html.headers @@ -0,0 +1 @@ +Feature-Policy: payment 'none' diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/sync-xhr-reporting.html b/tests/wpt/web-platform-tests/feature-policy/reporting/sync-xhr-reporting.html new file mode 100644 index 00000000000..2c76390847b --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/sync-xhr-reporting.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html> + <head> + <script src='/resources/testharness.js'></script> + <script src='/resources/testharnessreport.js'></script> + </head> + <body> + <script> +var t = async_test("Sync-xhr Report Format"); + +var check_report_format = (reports, observer) => { + let report = reports[0]; + assert_equals(report.type, "feature-policy"); + assert_equals(report.url, document.location.href); + assert_equals(report.body.feature, "sync-xhr"); + assert_equals(report.body.sourceFile, document.location.href); + assert_equals(typeof report.body.message, "string"); + assert_equals(typeof report.body.lineNumber, "number"); + assert_equals(typeof report.body.columnNumber, "number"); +}; + +new ReportingObserver(t.step_func_done(check_report_format), + {types: ['feature-policy']}).observe(); + +t.step_func(() => { + var xhr = new XMLHttpRequest(); + xhr.open("GET", document.location.href, false); + assert_throws('NetworkError', + () => xhr.send(), + "Synchronous XHR.send should throw an exception when disabled"); +})(); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/sync-xhr-reporting.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/sync-xhr-reporting.html.headers new file mode 100644 index 00000000000..21a909e1fb6 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/sync-xhr-reporting.html.headers @@ -0,0 +1 @@ +Feature-Policy: sync-xhr 'none' diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/unsized-media-reporting.html b/tests/wpt/web-platform-tests/feature-policy/reporting/unsized-media-reporting.html new file mode 100644 index 00000000000..8bd79318950 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/unsized-media-reporting.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<html> + <head> + <script src='/resources/testharness.js'></script> + <script src='/resources/testharnessreport.js'></script> + </head> + <body> + <img src="image.jpg"> + <script> +var check_report_format = (reports, observer) => { + let report = reports[0]; + assert_equals(report.type, "feature-policy"); + assert_equals(report.url, document.location.href); + assert_equals(report.body.feature, "unsized-media"); + assert_equals(typeof report.body.message, "string"); +}; + +async_test(t => { + new ReportingObserver(t.step_func_done(check_report_format), + {types: ['feature-policy'], buffered: true}).observe(); +}, "Unsized-media Report Format"); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/unsized-media-reporting.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/unsized-media-reporting.html.headers new file mode 100644 index 00000000000..db2dcbc1929 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/unsized-media-reporting.html.headers @@ -0,0 +1 @@ +Feature-Policy: unsized-media 'none' diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/usb-reporting.https.html b/tests/wpt/web-platform-tests/feature-policy/reporting/usb-reporting.https.html new file mode 100644 index 00000000000..f90c602e449 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/usb-reporting.https.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> + <head> + <script src='/resources/testharness.js'></script> + <script src='/resources/testharnessreport.js'></script> + </head> + <body> + <script> +var t = async_test("USB Report Format"); + +var check_report_format = (reports, observer) => { + let report = reports[0]; + assert_equals(report.type, "feature-policy"); + assert_equals(report.url, document.location.href); + assert_equals(report.body.feature, "usb"); + assert_equals(report.body.sourceFile, document.location.href); + assert_equals(typeof report.body.message, "string"); + assert_equals(typeof report.body.lineNumber, "number"); + assert_equals(typeof report.body.columnNumber, "number"); +}; + +new ReportingObserver(t.step_func_done(check_report_format), + {types: ['feature-policy']}).observe(); + +navigator.usb.getDevices().then( + t.unreached_func("USB device access should not be allowed in this document.") +).catch(() => {}); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/usb-reporting.https.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/usb-reporting.https.html.headers new file mode 100644 index 00000000000..4fd1e269362 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/usb-reporting.https.html.headers @@ -0,0 +1 @@ +Feature-Policy: usb 'none' diff --git a/tests/wpt/web-platform-tests/fetch/api/basic/header-value-null-byte.any.js b/tests/wpt/web-platform-tests/fetch/api/basic/header-value-null-byte.any.js new file mode 100644 index 00000000000..9c223740c78 --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/api/basic/header-value-null-byte.any.js @@ -0,0 +1,5 @@ +// META: global=window,worker + +promise_test(t => { + return promise_rejects(t, new TypeError(), fetch("../../../xhr/resources/parse-headers.py?my-custom-header="+encodeURIComponent("x\0x"))); +}, "Ensure fetch() rejects null bytes in headers"); diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/font.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/font.tentative.https.sub.html index 65432b5bacf..0a75531c405 100644 --- a/tests/wpt/web-platform-tests/fetch/sec-metadata/font.tentative.https.sub.html +++ b/tests/wpt/web-platform-tests/fetch/sec-metadata/font.tentative.https.sub.html @@ -1,5 +1,5 @@ <!DOCTYPE html> - +<html> <link rel="author" href="mtrzos@google.com" title="Maciek Trzos"> <script src=/resources/testharness.js></script> <script src=/resources/testharnessreport.js></script> @@ -43,62 +43,42 @@ </body> <script> document.fonts.ready.then(function () { - test_same_origin(); - test_same_site(); - test_cross_site(); - }); - - function test_same_origin(){ - var same_origin_test = async_test("Same-Origin font"); - same_origin_test.step(function () { - key = "font-same-origin"; - expected_same_origin = {"destination":"font", "site":"same-origin"}; - - // Requests from the server the saved value of the Sec-Metadata header - same_origin_xhr = new XMLHttpRequest(); - same_origin_xhr.open("PUT", "/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key); - - // Async test step triggered when the response is loaded - same_origin_xhr.onreadystatechange = same_origin_test.step_func(function () { - verify_response(same_origin_xhr, same_origin_test, expected_same_origin) + promise_test(t => { + return new Promise((resolve, reject) => { + let key = "font-same-origin"; + let expected = {"destination":"font", "site":"same-origin"}; + fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key) + .then(response => response.text()) + .then(text => assert_header_equals(text, expected)) + .then(_ => resolve()) + .catch(e => reject(e)); }); - same_origin_xhr.send(); - }); - } - - function test_same_site(){ - var same_site_test = async_test("Same-Site font"); - same_site_test.step(function () { - key = "font-same-site"; - expected_same_site = {"destination":"font", "site":"same-site"}; + }, "Same-Origin font"); - // Requests from the server the saved value of the Sec-Metadata header - same_site_xhr = new XMLHttpRequest(); - same_site_xhr.open("GET", "/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key); - - // Async test step triggered when the response is loaded - same_site_xhr.onreadystatechange = same_site_test.step_func(function () { - verify_response(same_site_xhr, same_site_test, expected_same_site) + promise_test(t => { + return new Promise((resolve, reject) => { + let key = "font-same-site"; + let expected = {"destination":"font", "site":"same-site"}; + fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key) + .then(response => response.text()) + .then(text => assert_header_equals(text, expected)) + .then(_ => resolve()) + .catch(e => reject(e)); }); - same_site_xhr.send(); - }); - } - - function test_cross_site(){ - var cross_site_test = async_test("Cross-Site font"); - cross_site_test.step(function () { - key = "font-cross-site"; - expected_cross_site = {"destination":"font", "site":"cross-site"}; - - // Requests from the server the saved value of the Sec-Metadata header - cross_site_xhr = new XMLHttpRequest(); - cross_site_xhr.open("GET", "/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key); + }, "Same-Site font"); - // Async test step triggered when the response is loaded - cross_site_xhr.onreadystatechange = cross_site_test.step_func(function () { - verify_response(cross_site_xhr, cross_site_test, expected_cross_site) + promise_test(t => { + return new Promise((resolve, reject) => { + let key = "font-cross-site"; + let expected = {"destination":"font", "site":"cross-site"}; + fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key) + .then(response => response.text()) + .then(text => assert_header_equals(text, expected)) + .then(_ => resolve()) + .catch(e => reject(e)); }); - cross_site_xhr.send(); - }); - } + }, "Cross-Site font"); + + }); </script> +</html> diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/cross-site-redirect.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/cross-site-redirect.tentative.https.sub.html new file mode 100644 index 00000000000..9f497a9b62b --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/cross-site-redirect.tentative.https.sub.html @@ -0,0 +1,86 @@ +<!DOCTYPE html> + +<link rel="author" href="mtrzos@google.com" title="Maciek Trzos"> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src=/fetch/sec-metadata/resources/helper.js></script> +<body></body> +<script> +promise_test(t => { + return new Promise((resolve, reject) => { + let key = "redirect-cross-site-same-origin"; + + let e = document.createElement('img'); + e.src = "https://{{hosts[alt][www]}}:{{ports[https][0]}}/xhr/resources/redirect.py?location=https://{{host}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=" + key; + let expected = {"destination":"image", "site":"cross-site"}; + e.onload = e => { + fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key) + .then(response => response.text()) + .then(text => assert_header_equals(text, expected)) + .then(_ => resolve()) + .catch(e => reject(e)); + }; + e.onerror = e => { + fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key) + .then(response => response.text()) + .then(text => assert_header_equals(text, expected)) + .then(_ => resolve()) + .catch(e => reject(e)); + }; + + document.body.appendChild(e); + }) + }, "Cross-Site -> Same-Origin redirect"); + + promise_test(t => { + return new Promise((resolve, reject) => { + let key = "redirect-cross-site-same-site"; + + let e = document.createElement('img'); + e.src = "https://{{hosts[alt][www]}}:{{ports[https][0]}}/xhr/resources/redirect.py?location=https://{{hosts[][www]}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=" + key; + let expected = {"destination":"image", "site":"cross-site"}; + e.onload = e => { + fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key) + .then(response => response.text()) + .then(text => assert_header_equals(text, expected)) + .then(_ => resolve()) + .catch(e => reject(e)); + }; + e.onerror = e => { + fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key) + .then(response => response.text()) + .then(text => assert_header_equals(text, expected)) + .then(_ => resolve()) + .catch(e => reject(e)); + }; + + document.body.appendChild(e); + }) + }, "Cross-Site -> Same-Site redirect"); + + promise_test(t => { + return new Promise((resolve, reject) => { + let key = "redirect-cross-site-cross-site"; + + let e = document.createElement('img'); + e.src = "https://{{hosts[alt][www]}}:{{ports[https][0]}}/xhr/resources/redirect.py?location=https://{{hosts[alt][www]}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=" + key; + let expected = {"destination":"image", "site":"cross-site"}; + e.onload = e => { + fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key) + .then(response => response.text()) + .then(text => assert_header_equals(text, expected)) + .then(_ => resolve()) + .catch(e => reject(e)); + }; + e.onerror = e => { + fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key) + .then(response => response.text()) + .then(text => assert_header_equals(text, expected)) + .then(_ => resolve()) + .catch(e => reject(e)); + }; + + document.body.appendChild(e); + }) + }, "Cross-Site -> Cross-Site redirect"); +</script> diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/cross-site/cross-site.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/cross-site/cross-site.tentative.https.sub.html deleted file mode 100644 index e25fd3f61d5..00000000000 --- a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/cross-site/cross-site.tentative.https.sub.html +++ /dev/null @@ -1,30 +0,0 @@ -<!DOCTYPE html> - -<link rel="author" href="mtrzos@google.com" title="Maciek Trzos"> -<script src=/resources/testharness.js></script> -<script src=/resources/testharnessreport.js></script> -<script src=/fetch/sec-metadata/resources/helper.js></script> -<body> - <!-- redirect Cross-Site -> Cross-Site --> - <img onload="test_cross_site()" onerror="test_cross_site()" src="https://{{hosts[alt][www]}}:{{ports[https][0]}}/xhr/resources/redirect.py?location=https://{{hosts[alt][www]}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=redirect-cross-site-cross-site"></img> -</body> - -<script> - function test_cross_site(){ - var cross_site_test = async_test("Cross-Site -> Cross-Site redirect"); - cross_site_test.step(function () { - filename = "redirect-cross-site-cross-site"; - expected_cross_site = {"destination":"image", "site":"cross-site"}; - - // Requests from the server the saved value of the Sec-Metadata header - cross_site_xhr = new XMLHttpRequest(); - cross_site_xhr.open("GET", "/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + filename); - - // Async test step triggered when the response is loaded - cross_site_xhr.onreadystatechange = cross_site_test.step_func(function () { - verify_response(cross_site_xhr, cross_site_test, expected_cross_site) - }); - cross_site_xhr.send(); - }); - } -</script> diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/cross-site/same-origin.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/cross-site/same-origin.tentative.https.sub.html deleted file mode 100644 index ac5982d8956..00000000000 --- a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/cross-site/same-origin.tentative.https.sub.html +++ /dev/null @@ -1,31 +0,0 @@ -<!DOCTYPE html> - -<link rel="author" href="mtrzos@google.com" title="Maciek Trzos"> -<script src=/resources/testharness.js></script> -<script src=/resources/testharnessreport.js></script> -<script src=/fetch/sec-metadata/resources/helper.js></script> -<body> - - <!-- redirect Cross-Site -> Same-Origin --> - <img onload="test_same_origin()" onerror="test_same_origin()" src="https://{{hosts[alt][www]}}:{{ports[https][0]}}/xhr/resources/redirect.py?location=https://{{host}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=redirect-cross-site-same-origin"></img> -</body> - -<script> - function test_same_origin(){ - var same_origin_test = async_test("Cross-Site -> Same-Origin redirect"); - same_origin_test.step(function () { - filename = "redirect-cross-site-same-origin"; - expected_same_origin = {"destination":"image", "site":"cross-site"}; - - // Requests from the server the saved value of the Sec-Metadata header - same_origin_xhr = new XMLHttpRequest(); - same_origin_xhr.open("GET", "/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + filename); - - // Async test step triggered when the response is loaded - same_origin_xhr.onreadystatechange = same_origin_test.step_func(function () { - verify_response(same_origin_xhr, same_origin_test, expected_same_origin) - }); - same_origin_xhr.send(); - }); - } -</script> diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/cross-site/same-site.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/cross-site/same-site.tentative.https.sub.html deleted file mode 100644 index 5b3b965f5e9..00000000000 --- a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/cross-site/same-site.tentative.https.sub.html +++ /dev/null @@ -1,30 +0,0 @@ -<!DOCTYPE html> - -<link rel="author" href="mtrzos@google.com" title="Maciek Trzos"> -<script src=/resources/testharness.js></script> -<script src=/resources/testharnessreport.js></script> -<script src=/fetch/sec-metadata/resources/helper.js></script> -<body> - <!-- redirect Cross-Site -> Same-Site --> - <img onload="test_same_site()" onerror="test_same_site()" src="https://{{hosts[alt][www]}}:{{ports[https][0]}}/xhr/resources/redirect.py?location=https://{{hosts[][www]}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=redirect-cross-site-same-site"></img> -</body> - -<script> - function test_same_site(){ - var same_site_test = async_test("Cross-Site -> Same-Site redirect"); - same_site_test.step(function () { - filename = "redirect-cross-site-same-site"; - expected_same_site = {"destination":"image", "site":"cross-site"}; - - // Requests from the server the saved value of the Sec-Metadata header - same_site_xhr = new XMLHttpRequest(); - same_site_xhr.open("GET", "/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + filename); - - // Async test step triggered when the response is loaded - same_site_xhr.onreadystatechange = same_site_test.step_func(function () { - verify_response(same_site_xhr, same_site_test, expected_same_site) - }); - same_site_xhr.send(); - }); - } -</script> diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/multiple-redirect-cross-site.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/multiple-redirect-cross-site.tentative.https.sub.html new file mode 100644 index 00000000000..fdd8733ba6d --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/multiple-redirect-cross-site.tentative.https.sub.html @@ -0,0 +1,37 @@ +<!DOCTYPE html> + +<link rel="author" href="mtrzos@google.com" title="Maciek Trzos"> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src=/fetch/sec-metadata/resources/helper.js></script> +<body></body> +<script> +promise_test(t => { + return new Promise((resolve, reject) => { + let key = "redirect-multiple-cross-site"; + + let e = document.createElement('img'); + e.src = "https://{{host}}:{{ports[https][0]}}/xhr/resources/redirect.py?location=" +// same-origin + "https://{{hosts[alt][www]}}:{{ports[https][0]}}/xhr/resources/redirect.py?location=" +// cross-site + "https://{{host}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=" + key;// same-origin + let expected = {"destination":"image", "site":"cross-site"}; + + e.onload = e => { + fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key) + .then(response => response.text()) + .then(text => assert_header_equals(text, expected)) + .then(_ => resolve()) + .catch(e => reject(e)); + }; + e.onerror = e => { + fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key) + .then(response => response.text()) + .then(text => assert_header_equals(text, expected)) + .then(_ => resolve()) + .catch(e => reject(e)); + }; + + document.body.appendChild(e); + }) + }, "Same-Origin -> Cross-Site -> Same-Origin redirect"); +</script> diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/multiple-redirect-same-site.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/multiple-redirect-same-site.tentative.https.sub.html new file mode 100644 index 00000000000..8fdc943f4c9 --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/multiple-redirect-same-site.tentative.https.sub.html @@ -0,0 +1,37 @@ +<!DOCTYPE html> + +<link rel="author" href="mtrzos@google.com" title="Maciek Trzos"> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src=/fetch/sec-metadata/resources/helper.js></script> +<body></body> +<script> +promise_test(t => { + return new Promise((resolve, reject) => { + let key = "redirect-multiple-same-site"; + + let e = document.createElement('img'); + e.src = "https://{{host}}:{{ports[https][0]}}/xhr/resources/redirect.py?location=" +// same-origin + "https://{{hosts[][www]}}:{{ports[https][0]}}/xhr/resources/redirect.py?location=" +// same-site + "https://{{host}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=" + key;// same-origin + let expected = {"destination":"image", "site":"same-site"}; + + e.onload = e => { + fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key) + .then(response => response.text()) + .then(text => assert_header_equals(text, expected)) + .then(_ => resolve()) + .catch(e => reject(e)); + }; + e.onerror = e => { + fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key) + .then(response => response.text()) + .then(text => assert_header_equals(text, expected)) + .then(_ => resolve()) + .catch(e => reject(e)); + }; + + document.body.appendChild(e); + }) + }, "Same-Origin -> Same-Site -> Same-Origin redirect"); +</script> diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-origin-redirect.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-origin-redirect.tentative.https.sub.html new file mode 100644 index 00000000000..dea71c3f67d --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-origin-redirect.tentative.https.sub.html @@ -0,0 +1,89 @@ +<!DOCTYPE html> + +<link rel="author" href="mtrzos@google.com" title="Maciek Trzos"> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src=/fetch/sec-metadata/resources/helper.js></script> +<body></body> +<script> +promise_test(t => { + return new Promise((resolve, reject) => { + let key = "redirect-same-origin-same-origin"; + + let e = document.createElement('img'); + e.src = "/xhr/resources/redirect.py?location=https://{{host}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=" + key; + let expected = {"destination":"image", "site":"same-origin"}; + + e.onload = e => { + fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key) + .then(response => response.text()) + .then(text => assert_header_equals(text, expected)) + .then(_ => resolve()) + .catch(e => reject(e)); + }; + e.onerror = e => { + fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key) + .then(response => response.text()) + .then(text => assert_header_equals(text, expected)) + .then(_ => resolve()) + .catch(e => reject(e)); + }; + + document.body.appendChild(e); + }) + }, "Same-Origin -> Same-Origin redirect"); + +promise_test(t => { + return new Promise((resolve, reject) => { + let key = "redirect-same-origin-same-site"; + + let e = document.createElement('img'); + e.src = "/xhr/resources/redirect.py?location=https://{{hosts[][www]}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=" + key; + let expected = {"destination":"image", "site":"same-site"}; + + e.onload = e => { + fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key) + .then(response => response.text()) + .then(text => assert_header_equals(text, expected)) + .then(_ => resolve()) + .catch(e => reject(e)); + }; + e.onerror = e => { + fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key) + .then(response => response.text()) + .then(text => assert_header_equals(text, expected)) + .then(_ => resolve()) + .catch(e => reject(e)); + }; + + document.body.appendChild(e); + }) + }, "Same-Origin -> Same-Site redirect"); + +promise_test(t => { + return new Promise((resolve, reject) => { + let key = "redirect-same-origin-cross-site"; + + let e = document.createElement('img'); + e.src = "/xhr/resources/redirect.py?location=https://{{hosts[alt][www]}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=" + key; + let expected = {"destination":"image", "site":"cross-site"}; + + e.onload = e => { + fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key) + .then(response => response.text()) + .then(text => assert_header_equals(text, expected)) + .then(_ => resolve()) + .catch(e => reject(e)); + }; + e.onerror = e => { + fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key) + .then(response => response.text()) + .then(text => assert_header_equals(text, expected)) + .then(_ => resolve()) + .catch(e => reject(e)); + }; + + document.body.appendChild(e); + }) + }, "Same-Origin -> Cross-Site redirect"); +</script> diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-origin/cross-site.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-origin/cross-site.tentative.https.sub.html deleted file mode 100644 index ea6b167673f..00000000000 --- a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-origin/cross-site.tentative.https.sub.html +++ /dev/null @@ -1,30 +0,0 @@ -<!DOCTYPE html> - -<link rel="author" href="mtrzos@google.com" title="Maciek Trzos"> -<script src=/resources/testharness.js></script> -<script src=/resources/testharnessreport.js></script> -<script src=/fetch/sec-metadata/resources/helper.js></script> -<body> - <!-- redirect Same-Origin -> Cross-Site --> - <img onload="test_cross_site()" onerror="test_cross_site()" src="https://{{host}}:{{ports[https][0]}}/xhr/resources/redirect.py?location=https://{{hosts[alt][www]}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=redirect-same-origin-cross-site"></img> -</body> - -<script> - function test_cross_site(){ - var cross_site_test = async_test("Same-Origin -> Cross-Site redirect"); - cross_site_test.step(function () { - filename = "redirect-same-origin-cross-site"; - expected_cross_site = {"destination":"image", "site":"same-origin"}; - - // Requests from the server the saved value of the Sec-Metadata header - cross_site_xhr = new XMLHttpRequest(); - cross_site_xhr.open("GET", "/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + filename); - - // Async test step triggered when the response is loaded - cross_site_xhr.onreadystatechange = cross_site_test.step_func(function () { - verify_response(cross_site_xhr, cross_site_test, expected_cross_site) - }); - cross_site_xhr.send(); - }); - } -</script> diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-origin/same-origin.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-origin/same-origin.tentative.https.sub.html deleted file mode 100644 index 430990a57c4..00000000000 --- a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-origin/same-origin.tentative.https.sub.html +++ /dev/null @@ -1,31 +0,0 @@ -<!DOCTYPE html> - -<link rel="author" href="mtrzos@google.com" title="Maciek Trzos"> -<script src=/resources/testharness.js></script> -<script src=/resources/testharnessreport.js></script> -<script src=/fetch/sec-metadata/resources/helper.js></script> -<body> - - <!-- redirect Same-Origin -> Same-Origin --> - <img onload="test_same_origin()" onerror="test_same_origin()" src="https://{{host}}:{{ports[https][0]}}/xhr/resources/redirect.py?location=https://{{host}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=redirect-same-origin-same-origin"></img> -</body> - -<script> - function test_same_origin(){ - var same_origin_test = async_test("Same-Origin -> Same-Origin redirect"); - same_origin_test.step(function () { - filename = "redirect-same-origin-same-origin"; - expected_same_origin = {"destination":"image", "site":"same-origin"}; - - // Requests from the server the saved value of the Sec-Metadata header - same_origin_xhr = new XMLHttpRequest(); - same_origin_xhr.open("GET", "/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + filename); - - // Async test step triggered when the response is loaded - same_origin_xhr.onreadystatechange = same_origin_test.step_func(function () { - verify_response(same_origin_xhr, same_origin_test, expected_same_origin) - }); - same_origin_xhr.send(); - }); - } -</script> diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-origin/same-site.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-origin/same-site.tentative.https.sub.html deleted file mode 100644 index 591cf67d181..00000000000 --- a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-origin/same-site.tentative.https.sub.html +++ /dev/null @@ -1,31 +0,0 @@ -<!DOCTYPE html> - -<link rel="author" href="mtrzos@google.com" title="Maciek Trzos"> -<script src=/resources/testharness.js></script> -<script src=/resources/testharnessreport.js></script> -<script src=/fetch/sec-metadata/resources/helper.js></script> -<body> - - <!-- redirect Same-Origin -> Same-Site --> - <img onload="test_same_site()" onerror="test_same_site()" src="https://{{host}}:{{ports[https][0]}}/xhr/resources/redirect.py?location=https://{{hosts[][www]}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=redirect-same-origin-same-site"></img> -</body> - -<script> - function test_same_site(){ - var same_site_test = async_test("Same-Origin -> Same-Site redirect"); - same_site_test.step(function () { - filename = "redirect-same-origin-same-site"; - expected_same_site = {"destination":"image", "site":"same-origin"}; - - // Requests from the server the saved value of the Sec-Metadata header - same_site_xhr = new XMLHttpRequest(); - same_site_xhr.open("GET", "/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + filename); - - // Async test step triggered when the response is loaded - same_site_xhr.onreadystatechange = same_site_test.step_func(function () { - verify_response(same_site_xhr, same_site_test, expected_same_site) - }); - same_site_xhr.send(); - }); - } -</script> diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-site-redirect.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-site-redirect.tentative.https.sub.html new file mode 100644 index 00000000000..a71163a1bfc --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-site-redirect.tentative.https.sub.html @@ -0,0 +1,89 @@ +<!DOCTYPE html> + +<link rel="author" href="mtrzos@google.com" title="Maciek Trzos"> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src=/fetch/sec-metadata/resources/helper.js></script> +<body></body> +<script> +promise_test(t => { + return new Promise((resolve, reject) => { + let key = "redirect-same-site-same-origin"; + + let e = document.createElement('img'); + e.src = "https://{{hosts[][www]}}:{{ports[https][0]}}/xhr/resources/redirect.py?location=https://{{host}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=" + key; + let expected = {"destination":"image", "site":"same-site"}; + + e.onload = e => { + fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key) + .then(response => response.text()) + .then(text => assert_header_equals(text, expected)) + .then(_ => resolve()) + .catch(e => reject(e)); + }; + e.onerror = e => { + fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key) + .then(response => response.text()) + .then(text => assert_header_equals(text, expected)) + .then(_ => resolve()) + .catch(e => reject(e)); + }; + + document.body.appendChild(e); + }) + }, "Same-Site -> Same-Origin redirect"); + +promise_test(t => { + return new Promise((resolve, reject) => { + let key = "redirect-same-site-same-site"; + + let e = document.createElement('img'); + e.src = "https://{{hosts[][www]}}:{{ports[https][0]}}/xhr/resources/redirect.py?location=https://{{host}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=" + key; + let expected = {"destination":"image", "site":"same-site"}; + + e.onload = e => { + fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key) + .then(response => response.text()) + .then(text => assert_header_equals(text, expected)) + .then(_ => resolve()) + .catch(e => reject(e)); + }; + e.onerror = e => { + fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key) + .then(response => response.text()) + .then(text => assert_header_equals(text, expected)) + .then(_ => resolve()) + .catch(e => reject(e)); + }; + + document.body.appendChild(e); + }) + }, "Same-Site -> Same-Site redirect"); + +promise_test(t => { + return new Promise((resolve, reject) => { + let key = "redirect-same-site-cross-site"; + + let e = document.createElement('img'); + e.src = "https://{{hosts[][www]}}:{{ports[https][0]}}/xhr/resources/redirect.py?location=https://{{hosts[alt][www]}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=" + key; + let expected = {"destination":"image", "site":"cross-site"}; + + e.onload = e => { + fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key) + .then(response => response.text()) + .then(text => assert_header_equals(text, expected)) + .then(_ => resolve()) + .catch(e => reject(e)); + }; + e.onerror = e => { + fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key) + .then(response => response.text()) + .then(text => assert_header_equals(text, expected)) + .then(_ => resolve()) + .catch(e => reject(e)); + }; + + document.body.appendChild(e); + }) + }, "Same-Site -> Cross-Site redirect"); +</script> diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-site/cross-site.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-site/cross-site.tentative.https.sub.html deleted file mode 100644 index 8592d02c269..00000000000 --- a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-site/cross-site.tentative.https.sub.html +++ /dev/null @@ -1,31 +0,0 @@ -<!DOCTYPE html> - -<link rel="author" href="mtrzos@google.com" title="Maciek Trzos"> -<script src=/resources/testharness.js></script> -<script src=/resources/testharnessreport.js></script> -<script src=/fetch/sec-metadata/resources/helper.js></script> -<body> - - <!-- redirect Same-Site -> Cross-Site --> - <img onload="test_cross_site()" onerror="test_cross_site()" src="https://{{hosts[][www]}}:{{ports[https][0]}}/xhr/resources/redirect.py?location=https://{{hosts[alt][www]}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=redirect-same-site-cross-site"></img> -</body> - -<script> - function test_cross_site(){ - var cross_site_test = async_test("Same-Site -> Cross-Site redirect"); - cross_site_test.step(function () { - key = "redirect-same-site-cross-site"; - expected_cross_site = {"destination":"image", "site":"same-site"}; - - // Requests from the server the saved value of the Sec-Metadata header - cross_site_xhr = new XMLHttpRequest(); - cross_site_xhr.open("GET", "/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key); - - // Async test step triggered when the response is loaded - cross_site_xhr.onreadystatechange = cross_site_test.step_func(function () { - verify_response(cross_site_xhr, cross_site_test, expected_cross_site) - }); - cross_site_xhr.send(); - }); - } -</script> diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-site/same-origin.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-site/same-origin.tentative.https.sub.html deleted file mode 100644 index 191dbaa7f77..00000000000 --- a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-site/same-origin.tentative.https.sub.html +++ /dev/null @@ -1,31 +0,0 @@ -<!DOCTYPE html> - -<link rel="author" href="mtrzos@google.com" title="Maciek Trzos"> -<script src=/resources/testharness.js></script> -<script src=/resources/testharnessreport.js></script> -<script src=/fetch/sec-metadata/resources/helper.js></script> -<body> - - <!-- redirect Same-Site -> Same-Origin --> - <img onload="test_same_origin()" onerror="test_same_origin()" src="https://{{hosts[][www]}}:{{ports[https][0]}}/xhr/resources/redirect.py?location=https://{{host}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=redirect-same-site-same-origin"></img> -</body> - -<script> - function test_same_origin(){ - var same_origin_test = async_test("Same-Site -> Same-Origin redirect"); - same_origin_test.step(function () { - key = "redirect-same-site-same-origin"; - expected_same_origin = {"destination":"image", "site":"same-site"}; - - // Requests from the server the saved value of the Sec-Metadata header - same_origin_xhr = new XMLHttpRequest(); - same_origin_xhr.open("GET", "/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key); - - // Async test step triggered when the response is loaded - same_origin_xhr.onreadystatechange = same_origin_test.step_func(function () { - verify_response(same_origin_xhr, same_origin_test, expected_same_origin) - }); - same_origin_xhr.send(); - }); - } -</script> diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-site/same-site.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-site/same-site.tentative.https.sub.html deleted file mode 100644 index 11d60473981..00000000000 --- a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-site/same-site.tentative.https.sub.html +++ /dev/null @@ -1,31 +0,0 @@ -<!DOCTYPE html> - -<link rel="author" href="mtrzos@google.com" title="Maciek Trzos"> -<script src=/resources/testharness.js></script> -<script src=/resources/testharnessreport.js></script> -<script src=/fetch/sec-metadata/resources/helper.js></script> -<body> - - <!-- redirect Same-Site -> Same-Site --> - <img onload="test_same_site()" onerror="test_same_site()" src="https://{{hosts[][www]}}:{{ports[https][0]}}/xhr/resources/redirect.py?location=https://{{hosts[][www]}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=redirect-same-site-same-site"></img> -</body> - -<script> - function test_same_site(){ - var same_site_test = async_test("Same-Site -> Same-Site redirect"); - same_site_test.step(function () { - key = "redirect-same-site-same-site"; - expected_same_site = {"destination":"image", "site":"same-site"}; - - // Requests from the server the saved value of the Sec-Metadata header - same_site_xhr = new XMLHttpRequest(); - same_site_xhr.open("GET", "/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key); - - // Async test step triggered when the response is loaded - same_site_xhr.onreadystatechange = same_site_test.step_func(function () { - verify_response(same_site_xhr, same_site_test, expected_same_site) - }); - same_site_xhr.send(); - }); - } -</script> diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/resources/helper.js b/tests/wpt/web-platform-tests/fetch/sec-metadata/resources/helper.js index cbd96d06863..55e36d49fac 100644 --- a/tests/wpt/web-platform-tests/fetch/sec-metadata/resources/helper.js +++ b/tests/wpt/web-platform-tests/fetch/sec-metadata/resources/helper.js @@ -17,10 +17,3 @@ function assert_header_equals(value, expected) { assert_equals(result.target, expected.target, "target"); assert_equals(result.site, expected.site, "site"); } - -function verify_response(xhr, test, expected){ - if (xhr.readyState === 4) { - assert_header_equals(xhr.responseText, expected); - test.done(); - } -} diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/resources/post-to-owner.py b/tests/wpt/web-platform-tests/fetch/sec-metadata/resources/post-to-owner.py index fe08cd1cbca..5472aa5b47e 100644 --- a/tests/wpt/web-platform-tests/fetch/sec-metadata/resources/post-to-owner.py +++ b/tests/wpt/web-platform-tests/fetch/sec-metadata/resources/post-to-owner.py @@ -12,5 +12,5 @@ def main(request, response): if (window.top != window) window.top.postMessage(data, "*"); </script> - """ % json.dumps(request.headers["sec-metadata"]) + """ % json.dumps(request.headers.get("Sec-Metadata", "")) return headers, body diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/resources/record-header.py b/tests/wpt/web-platform-tests/fetch/sec-metadata/resources/record-header.py index 06157e4cd8b..4c30d1e52ac 100644 --- a/tests/wpt/web-platform-tests/fetch/sec-metadata/resources/record-header.py +++ b/tests/wpt/web-platform-tests/fetch/sec-metadata/resources/record-header.py @@ -21,20 +21,23 @@ def main(request, response): if 'retrieve' in request.GET: response.writer.write_status(200) response.writer.end_headers() - header_value = request.server.stash.take(testId) - if header_value != None: + try: + header_value = request.server.stash.take(testId) response.writer.write(header_value) + except (KeyError, ValueError) as e: + response.writer.write("No header has been recorded") + pass response.close_connection = True ## Record incoming Sec-Metadata header value else: - ## Return empty string as a default value ## - header = request.headers.get("Sec-Metadata", "") try: + ## Return empty string as a default value ## + header = request.headers.get("Sec-Metadata", "") request.server.stash.put(testId, header) except KeyError: - ## The header is already recorded + ## The header is already recorded or it doesn't exist pass ## Prevent the browser from caching returned responses and allow CORS ## @@ -61,6 +64,7 @@ def main(request, response): ## Return a valid font content and Content-Type ## if key.startswith("font"): + response.headers.set("Content-Type", "application/x-font-ttf") file = open("fonts/Ahem.ttf", "r") font = file.read() file.close() diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/serviceworker.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/serviceworker.tentative.https.sub.html index 9d1fe2a3449..cefabb20aaa 100644 --- a/tests/wpt/web-platform-tests/fetch/sec-metadata/serviceworker.tentative.https.sub.html +++ b/tests/wpt/web-platform-tests/fetch/sec-metadata/serviceworker.tentative.https.sub.html @@ -8,7 +8,7 @@ <script> if ('serviceWorker' in navigator) { window.addEventListener('load', function() { - navigator.serviceWorker.register('/fetch/sec-metadata/resources/record-header.py?file=serviceworker-same-origin').then(function(registration) { + navigator.serviceWorker.register('https://{{host}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=serviceworker-same-origin').then(function(registration) { test_same_origin(); // uninstall the serviceworker after the test @@ -32,20 +32,16 @@ <script> function test_same_origin(){ - var same_origin_test = async_test("Same-Origin serviceworker"); - same_origin_test.step(function () { - key = "serviceworker-same-origin"; - expected_same_origin = {"destination":"serviceworker", "site":"same-origin"}; - - // Requests from the server the saved value of the Sec-Metadata header - same_origin_xhr = new XMLHttpRequest(); - same_origin_xhr.open("GET", "/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key); - - // Async test step triggered when the response is loaded - same_origin_xhr.onreadystatechange = same_origin_test.step_func(function () { - verify_response(same_origin_xhr, same_origin_test, expected_same_origin) - }); - same_origin_xhr.send(); - }); + promise_test(t => { + return new Promise((resolve, reject) => { + let key = "serviceworker-same-origin"; + let expected = {"destination":"serviceworker", "site":"same-origin"}; + fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key) + .then(response => response.text()) + .then(text => assert_header_equals(text, expected)) + .then(_ => resolve()) + .catch(e => reject(e)); + }) + }) } </script> diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/sharedworker.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/sharedworker.tentative.https.sub.html index aa118e04239..09017ccbb3a 100644 --- a/tests/wpt/web-platform-tests/fetch/sec-metadata/sharedworker.tentative.https.sub.html +++ b/tests/wpt/web-platform-tests/fetch/sec-metadata/sharedworker.tentative.https.sub.html @@ -23,22 +23,18 @@ } function test_same_origin(){ - var same_origin_test = async_test("Same-Origin sharedworker"); - same_origin_test.step(function () { - key = "sharedworker-same-origin"; - expected_same_origin = {"destination":"sharedworker", "site":"same-origin"}; - - // Requests from the server the saved value of the Sec-Metadata header - same_origin_xhr = new XMLHttpRequest(); - same_origin_xhr.open("GET", "/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key); - - // Async test step triggered when the response is loaded - same_origin_xhr.onreadystatechange = same_origin_test.step_func(function () { - verify_response(same_origin_xhr, same_origin_test, expected_same_origin) - }); - same_origin_xhr.send(); - }); + promise_test(t => { + return new Promise((resolve, reject) => { + let key = "sharedworker-same-origin"; + let expected = {"destination":"sharedworker", "site":"same-origin"}; + + fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key) + .then(response => response.text()) + .then(text => assert_header_equals(text, expected)) + .then(_ => resolve()) + .catch(e => reject(e)); + }) + }, "Same-Origin sharedworker") } </script> <body></body> - diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/style.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/style.tentative.https.sub.html index 78fac567b43..609d5764f08 100644 --- a/tests/wpt/web-platform-tests/fetch/sec-metadata/style.tentative.https.sub.html +++ b/tests/wpt/web-platform-tests/fetch/sec-metadata/style.tentative.https.sub.html @@ -1,75 +1,70 @@ <!DOCTYPE html> - +<html> <link rel="author" href="mtrzos@google.com" title="Maciek Trzos"> <script src=/resources/testharness.js></script> <script src=/resources/testharnessreport.js></script> <script src=/fetch/sec-metadata/resources/helper.js></script> +<body></body> <script> - function test_same_origin() { - var same_origin_test = async_test("Same-Origin style"); - same_origin_test.step(function () { - key = "style-same-origin"; - expected_same_origin = {"destination":"style", "site":"same-origin"}; + promise_test(t => { + return new Promise((resolve, reject) => { + let key = "style-same-origin"; - // Requests from the server the saved value of the Sec-Metadata header - same_origin_xhr = new XMLHttpRequest(); - same_origin_xhr.open("GET", "/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key); + let e = document.createElement('link'); + e.rel = "stylesheet"; + e.href = "https://{{host}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=" + key; + e.onload = e => { + let expected = {"destination":"style", "site":"same-origin"}; + fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key) + .then(response => response.text()) + .then(text => assert_header_equals(text, expected)) + .then(_ => resolve()) + .catch(e => reject(e)); + }; - // Async test step triggered when the response is loaded - same_origin_xhr.onreadystatechange = same_origin_test.step_func(function () { - verify_response(same_origin_xhr, same_origin_test, expected_same_origin) - }); - same_origin_xhr.send(); - }); - } + document.body.appendChild(e); + }) + }, "Same-Origin style"); - function test_same_site() { - var same_site_test = async_test("Same-Site style"); - same_site_test.step(function () { - key = "style-same-site"; - expected_same_site = {"destination":"style", "site":"same-site"}; + promise_test(t => { + return new Promise((resolve, reject) => { + let key = "style-same-site"; - // Requests from the server the saved value of the Sec-Metadata header - same_site_xhr = new XMLHttpRequest(); - same_site_xhr.open("GET", "/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key); + let e = document.createElement('link'); + e.rel = "stylesheet"; + e.href = "https://{{hosts[][www]}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=" + key; + e.onload = e => { + let expected = {"destination":"style", "site":"same-site"}; + fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key) + .then(response => response.text()) + .then(text => assert_header_equals(text, expected)) + .then(_ => resolve()) + .catch(e => reject(e)); + }; - // Async test step triggered when the response is loaded - same_site_xhr.onreadystatechange = same_site_test.step_func(function () { - verify_response(same_site_xhr, same_site_test, expected_same_site) - }); - same_site_xhr.send(); - }); - } + document.body.appendChild(e); + }) + }, "Same-Site style"); - function test_cross_site() { - var cross_site_test = async_test("Cross-Site style"); - cross_site_test.step(function () { - key = "style-cross-site"; - expected_cross_site = {"destination":"style", "site":"cross-site"}; + promise_test(t => { + return new Promise((resolve, reject) => { + let key = "style-cross-site"; - // Requests from the server the saved value of the Sec-Metadata header - cross_site_xhr = new XMLHttpRequest(); - cross_site_xhr.open("GET", "/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key); + let e = document.createElement('link'); + e.rel = "stylesheet"; + e.href = "https://{{hosts[alt][www]}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=" + key; + e.onload = e => { + let expected = {"destination":"style", "site":"cross-site"}; + fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key) + .then(response => response.text()) + .then(text => assert_header_equals(text, expected)) + .then(_ => resolve()) + .catch(e => reject(e)); + }; - // Async test step triggered when the response is loaded - cross_site_xhr.onreadystatechange = cross_site_test.step_func(function () { - verify_response(cross_site_xhr, cross_site_test, expected_cross_site) - }); - cross_site_xhr.send(); - }); - } + document.body.appendChild(e); + }) + }, "Cross-Site style"); </script> -<body> - <!-- Same-Origin request --> - <link href="https://{{host}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=style-same-origin" - rel="stylesheet" onload="test_same_origin()" onerror="test_same_origin()"> - - <!-- Same-Site request --> - <link href="https://{{hosts[][www]}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=style-same-site" - rel="stylesheet" onload="test_same_site()" onerror="test_same_site()"> - - <!-- Cross-Site request --> - <link href="https://{{hosts[alt][www]}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=style-cross-site" - rel="stylesheet" onload="test_cross_site()" onerror="test_cross_site()"> -</body> +</html> diff --git a/tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-containing-iframe-manual.html b/tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-containing-iframe-manual.html index 66f99688f14..8ba2ab71b15 100644 --- a/tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-containing-iframe-manual.html +++ b/tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-containing-iframe-manual.html @@ -13,9 +13,12 @@ async_test(function(t) trusted_request(t, iframes[0].contentDocument.body, document.body); iframes[0].contentDocument.onfullscreenchange = t.step_func(function() { + assert_equals(document.fullscreenElement, iframes[0]); trusted_request(t, iframes[1].contentDocument.body, iframes[0].contentDocument.body); - iframes[1].contentDocument.onfullscreenchange = t.unreached_func("fullscreenchange event"); - iframes[1].contentDocument.onfullscreenerror = t.step_func_done(); + iframes[1].contentDocument.onfullscreenchange = t.step_func_done(function() { + assert_equals(document.fullscreenElement, iframes[1]); + }); + iframes[1].contentDocument.onfullscreenerror = t.unreached_func("fullscreenchange error"); }); }); </script> diff --git a/tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-fullscreen-element-sibling-manual.html b/tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-fullscreen-element-sibling-manual.html index dc0c28c78e1..f800093ec8e 100644 --- a/tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-fullscreen-element-sibling-manual.html +++ b/tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-fullscreen-element-sibling-manual.html @@ -13,10 +13,12 @@ async_test(function(t) var b = document.getElementById("b"); document.onfullscreenchange = t.step_func(function() { - assert_equals(document.fullscreenElement, a, "fullscreen element"); + assert_equals(document.fullscreenElement, a, "fullscreen element is a"); trusted_request(t, b, a); - document.onfullscreenchange = t.unreached_func("second fullscreenchange event"); - document.onfullscreenerror = t.step_func_done(); + document.onfullscreenchange = t.step_func_done(function() { + assert_equals(document.fullscreenElement, b, "fullscreen element is b"); + }); + document.onfullscreenerror = t.unreached_func("second fullscreenchange event"); }); trusted_request(t, a); }); diff --git a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-non-top-manual.html b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-non-top-manual.html index 06c4c1b0367..0764e9c8423 100644 --- a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-non-top-manual.html +++ b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-non-top-manual.html @@ -21,7 +21,9 @@ async_test(function(t) { assert_equals(document.fullscreenElement, last); trusted_request(t, first, last); - document.onfullscreenerror = t.step_func_done(); + document.onfullscreenchange = t.step_func_done(function() { + assert_equals(document.fullscreenElement, first); + }); }); }); }); diff --git a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-two-elements-manual.html b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-two-elements-manual.html index 9611c816566..3291664c63a 100644 --- a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-two-elements-manual.html +++ b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-two-elements-manual.html @@ -19,8 +19,11 @@ async_test(t => { assert_in_array(document.fullscreenElement, [a, b]); order.push(document.fullscreenElement.id); if (order.length == 2) { - assert_array_equals(order, ['b', 'a'], - 'fullscreenElement IDs in fullscreenchange events'); + // Since fullscreenchange event occurs at animation frame timing we might + // have not seen the transition from null -> 'b' but just see the + // resulting 'a' transition twice. + assert_true(order[0] == 'a' || order[0] == 'b', 'first id seen is a or b'); + assert_true(order[1] == 'a', 'second id seen is b'); t.done(); } }); diff --git a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-two-iframes-manual.html b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-two-iframes-manual.html index 99a7672e71c..94b38c0302a 100644 --- a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-two-iframes-manual.html +++ b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-two-iframes-manual.html @@ -21,8 +21,11 @@ async_test(t => { assert_in_array(document.fullscreenElement, [a, b]); order.push(document.fullscreenElement.id); if (order.length == 2) { - assert_array_equals(order, ['b', 'a'], - 'fullscreenElement IDs in fullscreenchange events'); + // Since fullscreenchange event occurs at animation frame timing we might + // have not seen the transition from null -> 'b' but just see the + // resulting 'a' transition twice. + assert_true(order[0] == 'a' || order[0] == 'b', 'first id seen is a or b'); + assert_true(order[1] == 'a', 'second id seen is b'); t.done(); } }); diff --git a/tests/wpt/web-platform-tests/fullscreen/rendering/fullscreen-root-block-scroll-manual.html b/tests/wpt/web-platform-tests/fullscreen/rendering/fullscreen-root-block-scroll-manual.html new file mode 100644 index 00000000000..ae57d8a9f23 --- /dev/null +++ b/tests/wpt/web-platform-tests/fullscreen/rendering/fullscreen-root-block-scroll-manual.html @@ -0,0 +1,26 @@ +<!DOCTYPE html> +<style> + body { + height: 10000px; + background: grey; + } +</style> +<title>fullscreen root block scrolling</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<div>This page tests that entering fullscreen doesn't adjust the scroll offset</div> +<script> +async_test(t => { + document.scrollingElement.scrollTop = 300; + document.onfullscreenchange = t.step_func_done(() => { + assert_equals(document.fullscreenElement, document.documentElement); + assert_not_equals(document.scrollingElement.scrollTop, 0); + }); + document.documentElement.addEventListener('click', e => { + document.documentElement.requestFullscreen(); + }, {once: true}); + test_driver.click(document.documentElement); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/META.yml b/tests/wpt/web-platform-tests/html/META.yml index d491c94e30c..636b42b68c1 100644 --- a/tests/wpt/web-platform-tests/html/META.yml +++ b/tests/wpt/web-platform-tests/html/META.yml @@ -5,6 +5,5 @@ suggested_reviewers: - foolip - jdm - jgraham - - sideshowbarker - zcorpan - zqzhang diff --git a/tests/wpt/web-platform-tests/html/editing/focus/inert/inert-does-not-match-disabled-selector.html b/tests/wpt/web-platform-tests/html/editing/focus/inert/inert-does-not-match-disabled-selector.html deleted file mode 100644 index defc7cd6c49..00000000000 --- a/tests/wpt/web-platform-tests/html/editing/focus/inert/inert-does-not-match-disabled-selector.html +++ /dev/null @@ -1,29 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <meta charset="utf-8" /> - <title>inert does not match :disabled selector</title> - <link rel="author" title="Alice Boxhall" href="aboxhall@chromium.org"> - <script src="/resources/testharness.js"></script> - <script src="/resources/testharnessreport.js"></script> - <style> - button { - color: green; - } - - button:disabled { - color: red; - } - </style> - </head> - <body> - <button inert>The test passes if this is in green.</button> - <script> - test(function() { - button = document.querySelector('button'); - var color = document.defaultView.getComputedStyle(button).getPropertyValue('color'); - assert_equals(color, 'rgb(0, 128, 0)'); - }, 'Tests that inert elements do not match the :disabled selector.'); - </script> - </body> -</html> diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/sharedworker-failure.js b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/sharedworker-failure.js index a11ccbc1f30..8472318abd5 100644 --- a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/sharedworker-failure.js +++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/sharedworker-failure.js @@ -1,16 +1,17 @@ let state = "send-sw-failure" onconnect = initialE => { - initialE.source.postMessage(state) - initialE.source.onmessage = e => { + let port = initialE.source; + port.postMessage(state) + port.onmessage = e => { if(state === "" && e.data === "send-window-failure") { - e.postMessage(new SharedArrayBuffer()) + port.postMessage(new SharedArrayBuffer()) } else { - e.postMessage("failure") + port.postMessage("failure") } } - initialE.source.onmessageerror = e => { + port.onmessageerror = e => { if(state === "send-sw-failure") { - e.postMessage("send-sw-failure-success") + port.postMessage("send-sw-failure-success") state = "" } } diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/META.yml b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/META.yml new file mode 100644 index 00000000000..f5b533c3771 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/META.yml @@ -0,0 +1,4 @@ +suggested_reviewers: + - emilio + - mstensho + - zcorpan diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-block-formatting-context.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-block-formatting-context.html index c38944ae795..c38944ae795 100644 --- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-block-formatting-context.html +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-block-formatting-context.html diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap-ref.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-gap-ref.html index 95e2347121e..95e2347121e 100644 --- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap-ref.html +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-gap-ref.html diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-gap.html index 4d2269632c0..4d2269632c0 100644 --- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap.html +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-gap.html diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-radius-hittest.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-radius-hittest.html new file mode 100644 index 00000000000..9ab10159d8c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-radius-hittest.html @@ -0,0 +1,14 @@ +<!doctype html> +<title>fieldset, border-radius and hit testing</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<style> +fieldset { width: 80px; height: 80px; border-radius: 100px; border: 10px solid; background: lime; } +</style> +<fieldset> +</fieldset> +<script> +test(() => { + assert_equals(document.elementFromPoint(20, 20), document.body); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block-ref.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-containing-block-ref.html index ccb755b347c..ccb755b347c 100644 --- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block-ref.html +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-containing-block-ref.html diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-containing-block.html index e7529946a49..e7529946a49 100644 --- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block.html +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-containing-block.html diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-default-style.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-default-style.html index f07c84f406c..f07c84f406c 100644 --- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-default-style.html +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-default-style.html diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-display.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-display.html index 95332898203..95332898203 100644 --- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-display.html +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-display.html diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-div-display-contents.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-div-display-contents.html index 5d17b91290f..5d17b91290f 100644 --- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-div-display-contents.html +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-div-display-contents.html diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-flexbox.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-flexbox.html index d2b1d30d8cc..07c73554e59 100644 --- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-flexbox.html +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-flexbox.html @@ -11,9 +11,13 @@ border: none } #test-inline, #ref-inline { display: inline-flex } +legend { + float: left; /* Makes it not the "rendered legend" */ + padding: 0; +} </style> <fieldset id=test> - <div>1</div> + <legend>1</legend> <div>2</div> <div>3</div> <div>4</div> @@ -25,7 +29,7 @@ </fieldset> <hr> <div id=ref> - <div>1</div> + <legend>1</legend> <div>2</div> <div>3</div> <div>4</div> @@ -37,7 +41,7 @@ </div> <hr> <fieldset id=test-inline> - <div>1</div> + <legend>1</legend> <div>2</div> <div>3</div> <div>4</div> @@ -60,12 +64,21 @@ </div> <script> test(() => { - assert_equals(getComputedStyle(document.getElementById('test')).height, - getComputedStyle(document.getElementById('ref')).height); + const testElm = document.getElementById('test'); + const refElm = document.getElementById('ref'); + assert_equals(getComputedStyle(testElm).height, + getComputedStyle(refElm).height, 'height'); + assert_equals(testElm.querySelector('legend').offsetTop, + testElm.querySelector('div').offsetTop, 'offsetTop') }, "Flex"); test(() => { - assert_equals(getComputedStyle(document.getElementById('test-inline')).height, - getComputedStyle(document.getElementById('ref-inline')).height); + const testElm = document.getElementById('test-inline'); + const refElm = document.getElementById('ref-inline'); + assert_equals(getComputedStyle(testElm).height, + getComputedStyle(refElm).height, 'height'); + assert_equals(testElm.querySelector('legend').offsetTop, + testElm.querySelector('div').offsetTop, 'offsetTop') + }, "Inline flex"); </script> diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-foo-ref.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-foo-ref.html index cace814a8ce..cace814a8ce 100644 --- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-foo-ref.html +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-foo-ref.html diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-grid.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-grid.html index 7e9cf3643d0..bbb71dfa702 100644 --- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-grid.html +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-grid.html @@ -12,9 +12,13 @@ border: none } #test-inline, #ref-inline { display: inline-grid } +legend { + float: left; /* Makes it not the "rendered legend" */ + padding: 0; +} </style> <fieldset id=test> - <div>1</div> + <legend>1</legend> <div>2</div> <div>3</div> <div>4</div> @@ -38,7 +42,7 @@ </div> <hr> <fieldset id=test-inline> - <div>1</div> + <legend>1</legend> <div>2</div> <div>3</div> <div>4</div> @@ -61,12 +65,21 @@ </div> <script> test(() => { - assert_equals(getComputedStyle(document.getElementById('test')).height, - getComputedStyle(document.getElementById('ref')).height); + const testElm = document.getElementById('test'); + const refElm = document.getElementById('ref'); + assert_equals(getComputedStyle(testElm).height, + getComputedStyle(refElm).height, 'height'); + assert_equals(testElm.querySelector('legend').offsetTop, + testElm.querySelector('div').offsetTop, 'offsetTop') }, "Grid"); test(() => { - assert_equals(getComputedStyle(document.getElementById('test-inline')).height, - getComputedStyle(document.getElementById('ref-inline')).height); + const testElm = document.getElementById('test-inline'); + const refElm = document.getElementById('ref-inline'); + assert_equals(getComputedStyle(testElm).height, + getComputedStyle(refElm).height, 'height'); + assert_equals(testElm.querySelector('legend').offsetTop, + testElm.querySelector('div').offsetTop, 'offsetTop') + }, "Inline grid"); </script> diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-list-item-ref.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-list-item-ref.html new file mode 100644 index 00000000000..05b8ca4770b --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-list-item-ref.html @@ -0,0 +1,9 @@ +<!doctype html> +<title>Reference for fieldset and dipslay: list-item</title> +<style> + fieldset { margin: 0 40px; } +</style> +<p>There should be no bullet points below.</p> +<fieldset> + <legend>X</legend> +</fieldset> diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-list-item.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-list-item.html new file mode 100644 index 00000000000..7726947beca --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-list-item.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>fieldset and dipslay: list-item</title> +<link rel=match href=fieldset-list-item-ref.html> +<style> + fieldset { margin: 0 40px; display: list-item; } +</style> +<p>There should be no bullet points below.</p> +<fieldset> + <legend>X</legend> +</fieldset> diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-multicol.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-multicol.html index bdb2c2fd946..bdb2c2fd946 100644 --- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-multicol.html +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-multicol.html diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-overflow-hidden-ref.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-overflow-hidden-ref.html index 9fe632f7c20..9fe632f7c20 100644 --- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-overflow-hidden-ref.html +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-overflow-hidden-ref.html diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-overflow-hidden.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-overflow-hidden.html index cacbdbae00d..cacbdbae00d 100644 --- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-overflow-hidden.html +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-overflow-hidden.html diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-painting-order-ref.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-painting-order-ref.html index 13b262a804a..13b262a804a 100644 --- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-painting-order-ref.html +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-painting-order-ref.html diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-painting-order.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-painting-order.html index 7bd2cedb1b6..7bd2cedb1b6 100644 --- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-painting-order.html +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-painting-order.html diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-shadow-dom.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-shadow-dom.html index 3b46eb03c6c..3b46eb03c6c 100644 --- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-shadow-dom.html +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-shadow-dom.html diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-transform-translatez-ref.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-transform-translatez-ref.html index 8200e671944..8200e671944 100644 --- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-transform-translatez-ref.html +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-transform-translatez-ref.html diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-transform-translatez.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-transform-translatez.html index df30468b004..df30468b004 100644 --- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-transform-translatez.html +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-transform-translatez.html diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-vertical-ref.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-vertical-ref.html new file mode 100644 index 00000000000..29c28ea5f89 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-vertical-ref.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<title>Reference for fieldset vertical</title> +<link rel=stylesheet href=resources/fieldset-vertical.css> +<p>vertical-lr +<div style="writing-mode: vertical-lr"> + <div class=fieldset><div class="legend top">foo bar</div>normal</div> + <div class="fieldset rtl"><div class="legend bottom">foo bar</div>dir=rtl</div> + <div class="fieldset rtl"><div class="legend top">foo bar</div>dir=rtl align=left</div> + <div class="fieldset rtl"><div class="legend center">foo bar</div>dir=rtl align=center</div> + <div class="fieldset rtl"><div class="legend bottom">foo bar</div>dir=rtl align=right</div> + <div class=fieldset><div class="legend top">foo bar</div>align=left</div> + <div class=fieldset><div class="legend center">foo bar</div>align=center</div> + <div class=fieldset><div class="legend bottom">foo bar</div>align=right</div> +</div> +<hr> +<p>vertical-rl +<div style="writing-mode: vertical-rl"> + <div class=fieldset><div class="legend top">foo bar</div>normal</div> + <div class="fieldset rtl"><div class="legend bottom">foo bar</div>dir=rtl</div> + <div class="fieldset rtl"><div class="legend top">foo bar</div>dir=rtl align=left</div> + <div class="fieldset rtl"><div class="legend center">foo bar</div>dir=rtl align=center</div> + <div class="fieldset rtl"><div class="legend bottom">foo bar</div>dir=rtl align=right</div> + <div class=fieldset><div class="legend top">foo bar</div>align=left</div> + <div class=fieldset><div class="legend center">foo bar</div>align=center</div> + <div class=fieldset><div class="legend bottom">foo bar</div>align=right</div></div> diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-vertical.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-vertical.html new file mode 100644 index 00000000000..c11b4666696 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-vertical.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<title>fieldset vertical</title> +<link rel=stylesheet href=resources/fieldset-vertical.css> +<link rel=match href=fieldset-vertical-ref.html> +<p>vertical-lr +<div style="writing-mode: vertical-lr"> + <fieldset><legend>foo bar</legend>normal</fieldset> + <fieldset dir=rtl><legend>foo bar</legend>dir=rtl</fieldset> + <fieldset dir=rtl><legend align=left>foo bar</legend>dir=rtl align=left</fieldset> + <fieldset dir=rtl><legend align=center>foo bar</legend>dir=rtl align=center</fieldset> + <fieldset dir=rtl><legend align=right>foo bar</legend>dir=rtl align=right</fieldset> + <fieldset><legend align=left>foo bar</legend>align=left</fieldset> + <fieldset><legend align=center>foo bar</legend>align=center</fieldset> + <fieldset><legend align=right>foo bar</legend>align=right</fieldset> +</div> +<hr> +<p>vertical-rl +<div style="writing-mode: vertical-rl"> + <fieldset><legend>foo bar</legend>normal</fieldset> + <fieldset dir=rtl><legend>foo bar</legend>dir=rtl</fieldset> + <fieldset dir=rtl><legend align=left>foo bar</legend>dir=rtl align=left</fieldset> + <fieldset dir=rtl><legend align=center>foo bar</legend>dir=rtl align=center</fieldset> + <fieldset dir=rtl><legend align=right>foo bar</legend>dir=rtl align=right</fieldset> + <fieldset><legend align=left>foo bar</legend>align=left</fieldset> + <fieldset><legend align=center>foo bar</legend>align=center</fieldset> + <fieldset><legend align=right>foo bar</legend>align=right</fieldset> +</div> diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-align.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-align.html index f7511c9e4c9..f7511c9e4c9 100644 --- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-align.html +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-align.html diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-block-formatting-context.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-block-formatting-context.html index 4e953917973..4e953917973 100644 --- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-block-formatting-context.html +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-block-formatting-context.html diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display-none-rendering-ref.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display-none-rendering-ref.html new file mode 100644 index 00000000000..e6eff47e53c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display-none-rendering-ref.html @@ -0,0 +1,7 @@ +<!doctype html> +<title>Reference for Rendering of display: none legend</title> +<style> + div { border: 2em solid lime; width: 0; } +</style> +<p>There should be a green box below.</p> +<div></div> diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display-none-rendering.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display-none-rendering.html new file mode 100644 index 00000000000..abf3c45df71 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display-none-rendering.html @@ -0,0 +1,11 @@ +<!doctype html> +<title>Rendering of display: none legend</title> +<link rel=match href=legend-display-none-rendering-ref.html> +<style> + fieldset { border: 2em solid lime; width: 0; margin: 0; padding: 0; } + legend { display: none; background: red; } +</style> +<p>There should be a green box below.</p> +<fieldset> + <legend>FAIL</legend> +</fieldset> diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display-none.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display-none.html new file mode 100644 index 00000000000..689454ac493 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display-none.html @@ -0,0 +1,16 @@ +<!doctype html> +<title>legend display: none</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<style> + legend { display: none; } +</style> +<fieldset> + <legend>Foo</legend> +</fieldset> +<script> + test(() => { + const display = getComputedStyle(document.querySelector('legend')).display; + assert_equals(display, 'none'); + }); +</script> diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-display.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display.html index 914547fc6cd..914547fc6cd 100644 --- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-display.html +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display.html diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-dynamic-update.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-dynamic-update.html index 5dc68244fe0..5dc68244fe0 100644 --- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-dynamic-update.html +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-dynamic-update.html diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float-abspos.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float-abspos.html index 7979e1d03ec..7979e1d03ec 100644 --- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float-abspos.html +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float-abspos.html diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float-ref.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float-ref.html index c51bca231e1..c51bca231e1 100644 --- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float-ref.html +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float-ref.html diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float.html index f70e952ed06..f70e952ed06 100644 --- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float.html +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float.html diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-grid-flex-multicol.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-grid-flex-multicol.html index edd2600d4a0..edd2600d4a0 100644 --- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-grid-flex-multicol.html +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-grid-flex-multicol.html diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item-ref.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item-ref.html new file mode 100644 index 00000000000..ee76e93b64e --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item-ref.html @@ -0,0 +1,7 @@ +<!doctype html> +<title>Reference for legend and dipslay: list-item</title> +<style> + div { margin: 0 40px; display: list-item; } +</style> +<p>There should be a bullet point below.</p> +<div>X</div> diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item.html new file mode 100644 index 00000000000..c26b50ce662 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item.html @@ -0,0 +1,11 @@ +<!doctype html> +<title>legend and dipslay: list-item</title> +<link rel=match href=fieldset-list-item-ref.html> +<style> + fieldset { margin: 0; padding: 0; border: none; } + legend { margin: 0 40px; padding: 0; display: list-item; } +</style> +<p>There should be a bullet point below.</p> +<fieldset> + <legend>X</legend> +</fieldset> diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-position-relative-ref.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-position-relative-ref.html index fd6c11a0056..fd6c11a0056 100644 --- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-position-relative-ref.html +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-position-relative-ref.html diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-position-relative.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-position-relative.html index 99383612614..99383612614 100644 --- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-position-relative.html +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-position-relative.html diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-sans-fieldset-display.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-sans-fieldset-display.html index 5f27ca5c299..5f27ca5c299 100644 --- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-sans-fieldset-display.html +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-sans-fieldset-display.html diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend.html index 1cda91f32ba..1cda91f32ba 100644 --- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend.html +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend.html diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/min-inline-size.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/min-inline-size.html index 92c33029701..92c33029701 100644 --- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/min-inline-size.html +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/min-inline-size.html diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/resources/fieldset-vertical.css b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/resources/fieldset-vertical.css new file mode 100644 index 00000000000..b358d925a76 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/resources/fieldset-vertical.css @@ -0,0 +1,18 @@ +body > div { display: inline-block } +fieldset, .fieldset { padding: 0; height:10em; width:2em; border:1em groove; margin: 0em; line-height:1 } +legend, .legend { padding: 0; width: 1em } +.legend { + background: white; /* overlap the border to emulate the border not being painted */ + display: table; /* shrink-wrap */ +} + +[style="writing-mode: vertical-lr"] .legend { + margin-left: -1em; +} +[style="writing-mode: vertical-rl"] .legend { + margin-right: -1em; +} +.top { margin-bottom: auto } +.center { margin-top: auto; margin-bottom: auto } +.bottom { margin-top: auto } +.rtl { direction: rtl } diff --git a/tests/wpt/web-platform-tests/feature-policy/autoplay-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html index 6f11f8995b1..6f11f8995b1 100644 --- a/tests/wpt/web-platform-tests/feature-policy/autoplay-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html diff --git a/tests/wpt/web-platform-tests/feature-policy/autoplay-allowed-by-feature-policy-attribute.https.sub.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy-attribute.https.sub.html index 59b33d7c4d2..59b33d7c4d2 100644 --- a/tests/wpt/web-platform-tests/feature-policy/autoplay-allowed-by-feature-policy-attribute.https.sub.html +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy-attribute.https.sub.html diff --git a/tests/wpt/web-platform-tests/feature-policy/autoplay-allowed-by-feature-policy.https.sub.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy.https.sub.html index 63479c0cb6f..63479c0cb6f 100644 --- a/tests/wpt/web-platform-tests/feature-policy/autoplay-allowed-by-feature-policy.https.sub.html +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy.https.sub.html diff --git a/tests/wpt/web-platform-tests/feature-policy/autoplay-allowed-by-feature-policy.https.sub.html.headers b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy.https.sub.html.headers index 08461fadc28..08461fadc28 100644 --- a/tests/wpt/web-platform-tests/feature-policy/autoplay-allowed-by-feature-policy.https.sub.html.headers +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy.https.sub.html.headers diff --git a/tests/wpt/web-platform-tests/feature-policy/autoplay-default-feature-policy.https.sub.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-default-feature-policy.https.sub.html index 763073e437d..763073e437d 100644 --- a/tests/wpt/web-platform-tests/feature-policy/autoplay-default-feature-policy.https.sub.html +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-default-feature-policy.https.sub.html diff --git a/tests/wpt/web-platform-tests/feature-policy/autoplay-disabled-by-feature-policy.https.sub.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-disabled-by-feature-policy.https.sub.html index 3dd3afbf771..3dd3afbf771 100644 --- a/tests/wpt/web-platform-tests/feature-policy/autoplay-disabled-by-feature-policy.https.sub.html +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-disabled-by-feature-policy.https.sub.html diff --git a/tests/wpt/web-platform-tests/feature-policy/autoplay-disabled-by-feature-policy.https.sub.html.headers b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-disabled-by-feature-policy.https.sub.html.headers index 69ce436270a..69ce436270a 100644 --- a/tests/wpt/web-platform-tests/feature-policy/autoplay-disabled-by-feature-policy.https.sub.html.headers +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-disabled-by-feature-policy.https.sub.html.headers diff --git a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/010-1.html b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/010-1.html deleted file mode 100644 index 317e13691d4..00000000000 --- a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/010-1.html +++ /dev/null @@ -1,2 +0,0 @@ -<!doctype html> -010-1 diff --git a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/010-2.html b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/010-2.html deleted file mode 100644 index ea537fcd601..00000000000 --- a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/010-2.html +++ /dev/null @@ -1,5 +0,0 @@ -<!doctype html> -010-2 -<script> -onload = function() {history.back()} -</script> diff --git a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/010.html b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/010.html deleted file mode 100644 index d83d24f2414..00000000000 --- a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/010.html +++ /dev/null @@ -1,22 +0,0 @@ -<!doctype html> -<title>Salvagability of document.opened document</title> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<div id="log"></div> -<iframe src="010-1.html"></iframe> -<script> -var iframe; -var t = async_test(); -onload = t.step_func(function() { - iframe = document.getElementsByTagName("iframe")[0]; - assert_equals(iframe.contentDocument.open(), iframe.contentDocument); - iframe.contentDocument.close(); - - iframe.contentWindow.setTimeout(t.step_func(function() {t.done();}), 500); - - onload = null; - - iframe.src = "010-2.html" - setTimeout(t.step_func(function() {assert_unreached()}), 1000) -}) -</script> diff --git a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/history.window.js b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/history.window.js new file mode 100644 index 00000000000..0134da24f07 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/history.window.js @@ -0,0 +1,29 @@ +// Historically, document.open() created an entry in the session history so +// that the original page could be seen by going back. Test that this behavior +// no longer occurs. +// +// This test uses window.open() for variety, as most other tests in this +// directory use document.open(). An <iframe> would probably work also. We can +// always add an <iframe>-based test later if it is deemed necessary. + +const t = async_test("document.open should not add an entry to the session history"); + +const frameURL = new URL("resources/history-frame.html", document.URL).href; + +let origLength; +window.onFrameLoaded = t.step_func(() => { + window.onFrameLoaded = t.unreached_func("onFrameLoaded should only be called once"); + assert_equals(win.document.URL, frameURL); + assert_true(win.document.body.textContent.includes("Old")); + origLength = win.history.length; +}); +window.onDocumentOpen = t.step_func_done(() => { + window.onDocumentOpen = t.unreached_func("onDocumentOpen should only be called once"); + assert_equals(win.document.URL, frameURL); + assert_true(win.document.body.textContent.includes("New")); + assert_not_equals(origLength, undefined); + assert_equals(win.history.length, origLength); +}); + +const win = window.open(frameURL); +t.add_cleanup(() => win.close()); diff --git a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/quirks.window.js b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/quirks.window.js new file mode 100644 index 00000000000..0ff0bb99443 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/quirks.window.js @@ -0,0 +1,74 @@ +test(t => { + const frame = document.body.appendChild(document.createElement("iframe")); + t.add_cleanup(() => frame.contentDocument.close()); + assert_equals(frame.contentDocument.compatMode, "BackCompat"); + frame.contentDocument.open(); + assert_equals(frame.contentDocument.compatMode, "CSS1Compat"); + frame.contentDocument.close(); + assert_equals(frame.contentDocument.compatMode, "BackCompat"); +}, "document.open() sets document to no-quirks mode (write no doctype)"); + +test(t => { + const frame = document.body.appendChild(document.createElement("iframe")); + t.add_cleanup(() => frame.contentDocument.close()); + assert_equals(frame.contentDocument.compatMode, "BackCompat"); + frame.contentDocument.open(); + assert_equals(frame.contentDocument.compatMode, "CSS1Compat"); + frame.contentDocument.write("<!doctype html public"); + assert_equals(frame.contentDocument.compatMode, "CSS1Compat"); + frame.contentDocument.write(" \"-//IETF//DTD HTML 3//\""); + assert_equals(frame.contentDocument.compatMode, "CSS1Compat"); + frame.contentDocument.write(">"); + assert_equals(frame.contentDocument.compatMode, "BackCompat"); + frame.contentDocument.close(); + assert_equals(frame.contentDocument.compatMode, "BackCompat"); +}, "document.open() sets document to no-quirks mode (write old doctype)"); + +test(t => { + const frame = document.body.appendChild(document.createElement("iframe")); + t.add_cleanup(() => frame.contentDocument.close()); + assert_equals(frame.contentDocument.compatMode, "BackCompat"); + frame.contentDocument.open(); + assert_equals(frame.contentDocument.compatMode, "CSS1Compat"); + frame.contentDocument.write("<!doctype html"); + assert_equals(frame.contentDocument.compatMode, "CSS1Compat"); + frame.contentDocument.write(">"); + assert_equals(frame.contentDocument.compatMode, "CSS1Compat"); + frame.contentDocument.close(); + assert_equals(frame.contentDocument.compatMode, "CSS1Compat"); +}, "document.open() sets document to no-quirks mode (write new doctype)"); + +// This tests the document.open() call in fact sets the document to no-quirks +// mode, not limited-quirks mode. It is derived from +// quirks/blocks-ignore-line-height.html in WPT, as there is no direct way to +// distinguish between a no-quirks document and a limited-quirks document. It +// assumes that the user agent passes the linked test, which at the time of +// writing is all major web browsers. +test(t => { + const frame = document.body.appendChild(document.createElement("iframe")); + t.add_cleanup(() => frame.contentDocument.close()); + assert_equals(frame.contentDocument.compatMode, "BackCompat"); + frame.contentDocument.open(); + assert_equals(frame.contentDocument.compatMode, "CSS1Compat"); + + // Create the DOM tree manually rather than going through document.write() to + // bypass the parser, which resets the document mode. + const html = frame.contentDocument.appendChild(frame.contentDocument.createElement("html")); + const body = html.appendChild(frame.contentDocument.createElement("body")); + assert_equals(frame.contentDocument.body, body); + body.innerHTML = ` + <style>#ref { display:block }</style> + <div id=test><font size=1>x</font></div> + <font id=ref size=1>x</font> + <div id=s_ref>x</div> + `; + assert_equals(frame.contentDocument.compatMode, "CSS1Compat"); + + const idTest = frame.contentDocument.getElementById("test"); + const idRef = frame.contentDocument.getElementById("ref"); + const idSRef = frame.contentDocument.getElementById("s_ref"); + assert_equals(frame.contentWindow.getComputedStyle(idTest).height, + frame.contentWindow.getComputedStyle(idSRef).height); + assert_not_equals(frame.contentWindow.getComputedStyle(idTest).height, + frame.contentWindow.getComputedStyle(idRef).height); +}, "document.open() sets document to no-quirks mode, not limited-quirks mode"); diff --git a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/readiness.window.js b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/readiness.window.js new file mode 100644 index 00000000000..729a958700b --- /dev/null +++ b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/readiness.window.js @@ -0,0 +1,25 @@ +// This tests the behavior of dynamic markup insertion APIs with a document's +// readiness. + +async_test(t => { + const frame = document.body.appendChild(document.createElement("iframe")); + t.add_cleanup(() => { frame.remove(); }); + frame.src = "/common/blank.html"; + frame.onload = t.step_func_done(() => { + const states = []; + frame.contentDocument.onreadystatechange = t.step_func(() => { + states.push(frame.contentDocument.readyState); + }); + assert_equals(frame.contentDocument.readyState, "complete"); + assert_array_equals(states, []); + + // When open() is called, it first removes the event listeners and handlers + // from all nodes in the DOM tree. Then, after a new parser is created and + // initialized, it changes the current document readiness to "loading". + // However, because all event listeners are removed, we cannot observe the + // readystatechange event fired for "loading" inside open(). + frame.contentDocument.open(); + assert_equals(frame.contentDocument.readyState, "loading"); + assert_array_equals(states, []); + }); +}, "document.open() and readiness"); diff --git a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/history-frame.html b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/history-frame.html new file mode 100644 index 00000000000..2404105b09a --- /dev/null +++ b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/history-frame.html @@ -0,0 +1,20 @@ +<script> +function queueTest() { + // The timeout is necessary to avoid the parser still being active when + // `document.open()` is called and becoming a no-op. + // + // We also cannot use setTimeout(..., 0), as the parser is terminated in a + // task with DOM manipulation task source while the timeout is run in a task + // on the timer task source. The order is therefore not guaranteed. Let's + // play it safer and use some actual timeout. + setTimeout(() => { + document.open(); + document.write("<p>New content</p>"); + document.close(); + opener.onDocumentOpen(); + }, 200); +} +</script> +<body onload="opener.onFrameLoaded(); queueTest();"> +<p>Old content</p> +</body> diff --git a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/url-frame.html b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/url-frame.html new file mode 100644 index 00000000000..be483ff0aea --- /dev/null +++ b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/url-frame.html @@ -0,0 +1,9 @@ +<script> +onload = () => { + const beforeURL = document.URL; + document.open(); + const afterURL = document.URL; + document.close(); + parent.testDone(beforeURL, afterURL); +} +</script> diff --git a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/url-fragment.window.js b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/url-fragment.window.js new file mode 100644 index 00000000000..0c528935b52 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/url-fragment.window.js @@ -0,0 +1,26 @@ +async_test(t => { + const frame = document.body.appendChild(document.createElement("iframe")), + urlSansHash = document.URL; + t.add_cleanup(() => { frame.remove(); }); + assert_equals(frame.contentDocument.URL, "about:blank"); + assert_equals(frame.contentWindow.location.href, "about:blank"); + self.onhashchange = t.step_func_done(() => { + frame.contentDocument.open(); + assert_equals(frame.contentDocument.URL, urlSansHash); + assert_equals(frame.contentWindow.location.href, urlSansHash); + }); + self.location.hash = "heya"; +}, "document.open() and document's URL containing a fragment (entry is not relevant)"); + +window.testDone = undefined; +async_test(t => { + const frame = document.body.appendChild(document.createElement("iframe")) + t.add_cleanup(() => { frame.remove(); }); + frame.src = "resources/url-frame.html#heya"; + window.testDone = t.step_func_done((beforeURL, afterURL) => { + assert_equals(beforeURL, frame.src); + assert_equals(afterURL, frame.src); + assert_equals(frame.contentDocument.URL, frame.src); + assert_equals(frame.contentWindow.location.href, frame.src); + }); +}, "document.open() and document's URL containing a fragment (entry is relevant)"); diff --git a/tests/wpt/web-platform-tests/dom/inert/inert-does-not-match-disabled-selector.html b/tests/wpt/web-platform-tests/inert/inert-does-not-match-disabled-selector.tentative.html index 74b8ac3f7dd..74b8ac3f7dd 100644 --- a/tests/wpt/web-platform-tests/dom/inert/inert-does-not-match-disabled-selector.html +++ b/tests/wpt/web-platform-tests/inert/inert-does-not-match-disabled-selector.tentative.html diff --git a/tests/wpt/web-platform-tests/html/editing/focus/inert/inert-in-shadow-dom.html b/tests/wpt/web-platform-tests/inert/inert-in-shadow-dom.tentative.html index 36c962b1fc7..36c962b1fc7 100644 --- a/tests/wpt/web-platform-tests/html/editing/focus/inert/inert-in-shadow-dom.html +++ b/tests/wpt/web-platform-tests/inert/inert-in-shadow-dom.tentative.html diff --git a/tests/wpt/web-platform-tests/html/editing/focus/inert/inert-inlines.html b/tests/wpt/web-platform-tests/inert/inert-inlines.tentative.html index b056c6495d2..b056c6495d2 100644 --- a/tests/wpt/web-platform-tests/html/editing/focus/inert/inert-inlines.html +++ b/tests/wpt/web-platform-tests/inert/inert-inlines.tentative.html diff --git a/tests/wpt/web-platform-tests/html/editing/focus/inert/inert-label-focus.html b/tests/wpt/web-platform-tests/inert/inert-label-focus.tentative.html index 8bbe1eca15c..8bbe1eca15c 100644 --- a/tests/wpt/web-platform-tests/html/editing/focus/inert/inert-label-focus.html +++ b/tests/wpt/web-platform-tests/inert/inert-label-focus.tentative.html diff --git a/tests/wpt/web-platform-tests/html/editing/focus/inert/inert-node-is-uneditable.html b/tests/wpt/web-platform-tests/inert/inert-node-is-uneditable.tentative.html index b18d9912eb2..b18d9912eb2 100644 --- a/tests/wpt/web-platform-tests/html/editing/focus/inert/inert-node-is-uneditable.html +++ b/tests/wpt/web-platform-tests/inert/inert-node-is-uneditable.tentative.html diff --git a/tests/wpt/web-platform-tests/html/editing/focus/inert/inert-node-is-unfocusable.html b/tests/wpt/web-platform-tests/inert/inert-node-is-unfocusable.tentative.html index 8b5de37fdca..8b5de37fdca 100644 --- a/tests/wpt/web-platform-tests/html/editing/focus/inert/inert-node-is-unfocusable.html +++ b/tests/wpt/web-platform-tests/inert/inert-node-is-unfocusable.tentative.html diff --git a/tests/wpt/web-platform-tests/html/editing/focus/inert/inert-node-is-unselectable.html b/tests/wpt/web-platform-tests/inert/inert-node-is-unselectable.tentative.html index 7d5e90821bb..7d5e90821bb 100644 --- a/tests/wpt/web-platform-tests/html/editing/focus/inert/inert-node-is-unselectable.html +++ b/tests/wpt/web-platform-tests/inert/inert-node-is-unselectable.tentative.html diff --git a/tests/wpt/web-platform-tests/infrastructure/reftest/reftest_and_mismatch.html b/tests/wpt/web-platform-tests/infrastructure/reftest/reftest_and_mismatch.html new file mode 100644 index 00000000000..b6b4847473d --- /dev/null +++ b/tests/wpt/web-platform-tests/infrastructure/reftest/reftest_and_mismatch.html @@ -0,0 +1,5 @@ +<title>Reftest chain with mismatch and mismatch</title> +<link rel=mismatch href=reftest_and_mismatch_0.html> +<style> +:root {background-color:green} +</style> diff --git a/tests/wpt/web-platform-tests/infrastructure/reftest/reftest_and_mismatch_0.html b/tests/wpt/web-platform-tests/infrastructure/reftest/reftest_and_mismatch_0.html new file mode 100644 index 00000000000..f84ce6a13aa --- /dev/null +++ b/tests/wpt/web-platform-tests/infrastructure/reftest/reftest_and_mismatch_0.html @@ -0,0 +1,5 @@ +<title>Reftest chain with mismatch and mismatch</title> +<link rel=mismatch href=reftest_and_mismatch_1.html> +<style> +:root {background-color:blue} +</style> diff --git a/tests/wpt/web-platform-tests/infrastructure/reftest/reftest_and_mismatch_1.html b/tests/wpt/web-platform-tests/infrastructure/reftest/reftest_and_mismatch_1.html new file mode 100644 index 00000000000..05e905adafc --- /dev/null +++ b/tests/wpt/web-platform-tests/infrastructure/reftest/reftest_and_mismatch_1.html @@ -0,0 +1,4 @@ +<title>Reftest chain with match and mismatch</title> +<style> +:root {background-color:green} +</style> diff --git a/tests/wpt/web-platform-tests/input-device-capabilities/idlharness.window.js b/tests/wpt/web-platform-tests/input-device-capabilities/idlharness.window.js new file mode 100644 index 00000000000..a57ae829936 --- /dev/null +++ b/tests/wpt/web-platform-tests/input-device-capabilities/idlharness.window.js @@ -0,0 +1,14 @@ +// META: script=/resources/WebIDLParser.js +// META: script=/resources/idlharness.js + +'use strict'; + +idl_test( + ['InputDeviceCapabilities'], + ['uievents', 'dom'], + idl_array => { + idl_array.add_objects({ + InputDeviceCapabilities: ["new InputDeviceCapabilities"], + }); + } +); diff --git a/tests/wpt/web-platform-tests/input-device-capabilities/interfaces.html b/tests/wpt/web-platform-tests/input-device-capabilities/interfaces.html deleted file mode 100644 index 178ce5aa892..00000000000 --- a/tests/wpt/web-platform-tests/input-device-capabilities/interfaces.html +++ /dev/null @@ -1,24 +0,0 @@ -<!doctype html> -<title>Input Device Capabilities IDL tests</title> -<link rel="help" href="https://wicg.github.io/InputDeviceCapabilities/"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="/resources/WebIDLParser.js"></script> -<script src="/resources/idlharness.js"></script> -<script> - "use strict"; - - promise_test(async () => { - const idl_array = new IdlArray(); - const idl = await (await fetch("/interfaces/InputDeviceCapabilities.idl")).text(); - const uievents = await (await fetch("/interfaces/uievents.idl")).text(); - const dom = await (await fetch("/interfaces/dom.idl")).text(); - idl_array.add_idls(idl); - idl_array.add_dependency_idls(uievents); - idl_array.add_dependency_idls(dom); - idl_array.add_objects({ - InputDeviceCapabilities: ["new InputDeviceCapabilities"], - }); - idl_array.test(); - }, "Test driver"); -</script> diff --git a/tests/wpt/web-platform-tests/interfaces/background-fetch.idl b/tests/wpt/web-platform-tests/interfaces/background-fetch.idl index 6957604e7df..92b6026f8b6 100644 --- a/tests/wpt/web-platform-tests/interfaces/background-fetch.idl +++ b/tests/wpt/web-platform-tests/interfaces/background-fetch.idl @@ -19,11 +19,10 @@ interface BackgroundFetchManager { Promise<BackgroundFetchRegistration> fetch(DOMString id, (RequestInfo or sequence<RequestInfo>) requests, optional BackgroundFetchOptions options); Promise<BackgroundFetchRegistration?> get(DOMString id); Promise<sequence<DOMString>> getIds(); - // TODO: in future this should become an async iterator for BackgroundFetchRegistration objects }; dictionary BackgroundFetchUIOptions { - sequence<IconDefinition> icons = []; + sequence<ImageResource> icons = []; DOMString title = ""; }; @@ -31,14 +30,6 @@ dictionary BackgroundFetchOptions : BackgroundFetchUIOptions { unsigned long long downloadTotal = 0; }; -// This is taken from https://w3c.github.io/manifest/#icons-member. -// This definition should probably be moved somewhere more general. -dictionary IconDefinition { - DOMString src; - DOMString sizes = ""; - DOMString type = ""; -}; - [Exposed=(Window,Worker)] interface BackgroundFetchRegistration : EventTarget { readonly attribute DOMString id; @@ -77,7 +68,6 @@ enum BackgroundFetchFailureReason { interface BackgroundFetchRecord { readonly attribute Request request; readonly attribute Promise<Response> responseReady; - // TODO: In future this will include a fetch observer }; [Constructor(DOMString type, BackgroundFetchEventInit init), Exposed=ServiceWorker] diff --git a/tests/wpt/web-platform-tests/interfaces/encoding.idl b/tests/wpt/web-platform-tests/interfaces/encoding.idl index 7d55ce7e190..b805363c534 100644 --- a/tests/wpt/web-platform-tests/interfaces/encoding.idl +++ b/tests/wpt/web-platform-tests/interfaces/encoding.idl @@ -3,6 +3,12 @@ // (https://github.com/tidoust/reffy-reports) // Source: Encoding Standard (https://encoding.spec.whatwg.org/) +interface mixin TextDecoderCommon { + readonly attribute DOMString encoding; + readonly attribute boolean fatal; + readonly attribute boolean ignoreBOM; +}; + dictionary TextDecoderOptions { boolean fatal = false; boolean ignoreBOM = false; @@ -15,14 +21,36 @@ dictionary TextDecodeOptions { [Constructor(optional DOMString label = "utf-8", optional TextDecoderOptions options), Exposed=(Window,Worker)] interface TextDecoder { - readonly attribute DOMString encoding; - readonly attribute boolean fatal; - readonly attribute boolean ignoreBOM; USVString decode(optional BufferSource input, optional TextDecodeOptions options); }; +TextDecoder includes TextDecoderCommon; + +interface mixin TextEncoderCommon { + readonly attribute DOMString encoding; +}; + [Constructor, Exposed=(Window,Worker)] interface TextEncoder { - readonly attribute DOMString encoding; [NewObject] Uint8Array encode(optional USVString input = ""); }; +TextEncoder includes TextEncoderCommon; + +interface mixin GenericTransformStream { + readonly attribute ReadableStream readable; + readonly attribute WritableStream writable; +}; + +[Constructor(optional DOMString label = "utf-8", optional TextDecoderOptions options), + Exposed=(Window,Worker)] +interface TextDecoderStream { +}; +TextDecoderStream includes TextDecoderCommon; +TextDecoderStream includes GenericTransformStream; + +[Constructor, + Exposed=(Window,Worker)] +interface TextEncoderStream { +}; +TextEncoderStream includes TextEncoderCommon; +TextEncoderStream includes GenericTransformStream; diff --git a/tests/wpt/web-platform-tests/interfaces/payment-request.idl b/tests/wpt/web-platform-tests/interfaces/payment-request.idl index 3717d79476d..7bd2ae13efd 100644 --- a/tests/wpt/web-platform-tests/interfaces/payment-request.idl +++ b/tests/wpt/web-platform-tests/interfaces/payment-request.idl @@ -89,6 +89,7 @@ interface PaymentAddress { readonly attribute DOMString city; readonly attribute DOMString country; readonly attribute DOMString dependentLocality; + // "languageCode" is a feature at risk readonly attribute DOMString languageCode; readonly attribute DOMString organization; readonly attribute DOMString phone; diff --git a/tests/wpt/web-platform-tests/interfaces/pointerevents.idl b/tests/wpt/web-platform-tests/interfaces/pointerevents.idl index da822bba0e5..63d39a28523 100644 --- a/tests/wpt/web-platform-tests/interfaces/pointerevents.idl +++ b/tests/wpt/web-platform-tests/interfaces/pointerevents.idl @@ -41,6 +41,7 @@ partial interface GlobalEventHandlers { attribute EventHandler onlostpointercapture; attribute EventHandler onpointerdown; attribute EventHandler onpointermove; + [RuntimeEnabled=PointerRawMove] attribute EventHandler onpointerrawmove; attribute EventHandler onpointerup; attribute EventHandler onpointercancel; attribute EventHandler onpointerover; diff --git a/tests/wpt/web-platform-tests/interfaces/webxr.idl b/tests/wpt/web-platform-tests/interfaces/webxr.idl index 00839eed1a2..ffa9ed4e91a 100644 --- a/tests/wpt/web-platform-tests/interfaces/webxr.idl +++ b/tests/wpt/web-platform-tests/interfaces/webxr.idl @@ -162,7 +162,7 @@ typedef (WebGLRenderingContext or dictionary XRWebGLLayerInit { boolean antialias = true; - boolean depth = false; + boolean depth = true; boolean stencil = false; boolean alpha = true; boolean multiview = false; diff --git a/tests/wpt/web-platform-tests/lint.whitelist b/tests/wpt/web-platform-tests/lint.whitelist index 8c6bb2d8fbd..7d579b6b343 100644 --- a/tests/wpt/web-platform-tests/lint.whitelist +++ b/tests/wpt/web-platform-tests/lint.whitelist @@ -162,6 +162,7 @@ SET TIMEOUT: html/semantics/embedded-content/the-iframe-element/* SET TIMEOUT: html/semantics/embedded-content/the-img-element/* SET TIMEOUT: html/semantics/scripting-1/the-script-element/* SET TIMEOUT: html/webappapis/dynamic-markup-insertion/opening-the-input-stream/0* +SET TIMEOUT: html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/history-frame.html SET TIMEOUT: html/webappapis/dynamic-markup-insertion/opening-the-input-stream/tasks.window.js SET TIMEOUT: html/webappapis/scripting/event-loops/* SET TIMEOUT: html/webappapis/scripting/events/event-handler-processing-algorithm-error/* @@ -264,6 +265,9 @@ GENERATE_TESTS: dom/traversal/TreeWalker.html GENERATE_TESTS: domparsing/createContextualFragment.html GENERATE_TESTS: domxpath/001.html GENERATE_TESTS: domxpath/002.html +GENERATE_TESTS: mediacapture-image/MediaStreamTrack-applyConstraints-reject.html +GENERATE_TESTS: mediacapture-image/MediaStreamTrack-getConstraints-fast.html +GENERATE_TESTS: mediacapture-image/setOptions-reject.html GENERATE_TESTS: html/semantics/scripting-1/the-template-element/template-element/template-as-a-descendant.html GENERATE_TESTS: html/syntax/parsing/Document.getElementsByTagName-foreign-01.html GENERATE_TESTS: html/syntax/parsing/template/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-body-context.html diff --git a/tests/wpt/web-platform-tests/mediacapture-image/ImageCapture-MediaTrackSupportedConstraints.html b/tests/wpt/web-platform-tests/mediacapture-image/ImageCapture-MediaTrackSupportedConstraints.html new file mode 100644 index 00000000000..aae75b7e8c9 --- /dev/null +++ b/tests/wpt/web-platform-tests/mediacapture-image/ImageCapture-MediaTrackSupportedConstraints.html @@ -0,0 +1,25 @@ +<!DOCTYPE HTML> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + +// Tests that getSupportedConstraints() returns what it should. +test(function() { + supported_constraints = navigator.mediaDevices.getSupportedConstraints(); + + assert_true(supported_constraints.whiteBalanceMode); + assert_true(supported_constraints.exposureMode); + assert_true(supported_constraints.focusMode); + assert_true(supported_constraints.pointsOfInterest); + assert_true(supported_constraints.exposureCompensation); + assert_true(supported_constraints.colorTemperature); + assert_true(supported_constraints.iso); + assert_true(supported_constraints.brightness); + assert_true(supported_constraints.contrast); + assert_true(supported_constraints.saturation); + assert_true(supported_constraints.sharpness); + assert_true(supported_constraints.zoom); + assert_true(supported_constraints.torch); +}, 'Image Capture supported constraints'); + +</script> diff --git a/tests/wpt/web-platform-tests/mediacapture-image/ImageCapture-creation.https.html b/tests/wpt/web-platform-tests/mediacapture-image/ImageCapture-creation.https.html new file mode 100644 index 00000000000..9e8b5feeeb5 --- /dev/null +++ b/tests/wpt/web-platform-tests/mediacapture-image/ImageCapture-creation.https.html @@ -0,0 +1,76 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + +// This test verifies that ImageCapture can be created (or not) with different +// Media Stream Track types (audio, video). + +function makeAsyncTest(modifyTrack, message) { + async_test(function(test) { + + const gotStream = test.step_func(function(stream) { + assert_equals(stream.getAudioTracks().length, 0); + assert_equals(stream.getVideoTracks().length, 1); + + var videoTrack = stream.getVideoTracks()[0]; + assert_equals(videoTrack.readyState, 'live'); + assert_true(videoTrack.enabled); + assert_false(videoTrack.muted); + + var capturer = new ImageCapture(videoTrack); + assert_equals(capturer.track, videoTrack); + + modifyTrack(videoTrack); + + promise_rejects(test, + 'InvalidStateError', + capturer.grabFrame(), + 'Should throw InvalidStateError.') + .then(() => test.done()); + }); + + const onError = test.unreached_func('Error creating MediaStream.'); + navigator.mediaDevices.getUserMedia({video: true}) + .then(gotStream) + .catch(onError); + + }, message); +} + +var disableTrack = function(videoTrack) { + // grabFrame() is rejected if the associated video track is disabled. + videoTrack.enabled = false; +}; + +var stopTrack = function(videoTrack) { + // grabFrame() is rejected if the associated video track is ended. + videoTrack.stop(); + assert_equals(videoTrack.readyState, 'ended'); +}; + +// Create the rejection tests. Note that grabFrame() would also be rejected if +// the video Track was muted but that's a read-only property of the Track. +makeAsyncTest(disableTrack, 'grabFrame() of a disabled Track'); +makeAsyncTest(stopTrack, 'grabFrame() of an ended Track'); + + +var testAudio = async_test(function() { + navigator.mediaDevices.getUserMedia({audio:true}) + .then( + this.step_func(function(stream) { + assert_equals(stream.getAudioTracks().length, 1); + assert_equals(stream.getVideoTracks().length, 0); + assert_throws("NotSupportedError", + function() { + var capturer = new ImageCapture(stream.getAudioTracks()[0]); + }, + 'an ImageCapturer can only be created from a video track'); + + this.done(); + })) + .catch( + this.unreached_func('Error creating MediaStream.')); +}, 'verifies that an ImageCapture cannot be created out of an Audio Track'); + +</script> diff --git a/tests/wpt/web-platform-tests/mediacapture-image/ImageCapture-grabFrame.html b/tests/wpt/web-platform-tests/mediacapture-image/ImageCapture-grabFrame.html new file mode 100644 index 00000000000..bf5e9400a03 --- /dev/null +++ b/tests/wpt/web-platform-tests/mediacapture-image/ImageCapture-grabFrame.html @@ -0,0 +1,46 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<body> +<canvas id='canvas0' width=10 height=10/> +<canvas id='canvas1' width=10 height=10/> +</body> +<script> + +// This test verifies that ImageCapture can grabFrame()s. + +var test = async_test(function() { + var canvas0 = document.getElementById('canvas0'); + var context0 = canvas0.getContext("2d"); + context0.fillStyle = "red"; + context0.fillRect(0, 0, 10, 10); + + var stream = canvas0.captureStream(); + + var capturer = new ImageCapture(stream.getVideoTracks()[0]); + + capturer.grabFrame() + .then(bitmap => { + assert_equals(canvas0.width, bitmap.width); + assert_equals(canvas0.height, bitmap.height); + + var context1 = document.getElementById('canvas1').getContext("2d"); + context1.drawImage(bitmap, 0, 0); + + var imageData0 = context0.getImageData(0, 0, 10, 10); + var imageData1 = context1.getImageData(0, 0, 10, 10); + + assert_equals(imageData0.width, imageData1.width); + assert_equals(imageData0.height, imageData1.height); + assert_equals(imageData0.data.length, imageData1.data.length); + for (var i = 0; i < imageData0.data.length; i++) + assert_approx_equals(imageData0.data[i], imageData1.data[i], 5); + + this.done(); + }) + .catch(error => { + assert_unreached('Error during grabFrame(): '+ error); + }); +}, 'exercises the ImageCapture API creation and grabFrame().'); + +</script> diff --git a/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-applyConstraints-fast.html b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-applyConstraints-fast.html new file mode 100644 index 00000000000..75ed17a9e33 --- /dev/null +++ b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-applyConstraints-fast.html @@ -0,0 +1,85 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<body> +<canvas id='canvas' width=10 height=10/> +</body> +<script> + +// This test verifies that MediaStreamTrack.applyConstraints() exists and that, +// when called with no parameters, returns a Promise that is resolved. This +// might not make sense: https://github.com/w3c/mediacapture-main/issues/438 . +// Other tests go deeper. +promise_test(function(t) { + var canvas = document.getElementById('canvas'); + var context = canvas.getContext("2d"); + context.fillStyle = "red"; + context.fillRect(0, 0, 10, 10); + + var stream = canvas.captureStream(); + assert_equals(stream.getAudioTracks().length, 0); + assert_equals(stream.getVideoTracks().length, 1); + + var videoTrack = stream.getVideoTracks()[0]; + return videoTrack.applyConstraints(); +}, 'MediaStreamTrack.applyConstraints()'); + +// This test verifies that MediaStreamTrack.applyConstraints() exists and that, +// when called with an empty advanced constraint set, returns a Promise that is +// resolved. +promise_test(function(t) { +var canvas = document.getElementById('canvas'); +var context = canvas.getContext("2d"); +context.fillStyle = "red"; +context.fillRect(0, 0, 10, 10); + +var stream = canvas.captureStream(); +assert_equals(stream.getAudioTracks().length, 0); +assert_equals(stream.getVideoTracks().length, 1); + +var videoTrack = stream.getVideoTracks()[0]; +return videoTrack.applyConstraints({advanced: []}); +}, 'MediaStreamTrack.applyConstraints({advanced: []})'); + +// This test verifies that applyConstraints() rejects the returned Promise if +// passed a non-supported image-capture constraint (https://crbug.com/711694). +promise_test(function(t) { + var canvas = document.getElementById('canvas'); + var context = canvas.getContext("2d"); + context.fillStyle = "red"; + context.fillRect(0, 0, 10, 10); + + var stream = canvas.captureStream(); + var videoTrack = stream.getVideoTracks()[0]; + + var expectedError = + new DOMException('Unsupported constraint(s)', 'NotSupportedError'); + + // Use e.g. |torch| as an example of unsupported constraint. + assert_false("torch" in videoTrack.getCapabilities()); + return promise_rejects( + t, expectedError, + videoTrack.applyConstraints({advanced : [ {torch : true} ]})); +}, 'MediaStreamTrack.applyConstraints() with unsupported constraint'); + +// This test verifies that applyConstraints() rejects the returned Promise if +// passed mixed ImageCapture and non-ImageCapture constraints. +// TODO(mcasas): remove entirely after https://crbug.com/338503. +promise_test(function(t) { + var canvas = document.getElementById('canvas'); + var context = canvas.getContext("2d"); + context.fillStyle = "red"; + context.fillRect(0, 0, 10, 10); + + var stream = canvas.captureStream(); + var videoTrack = stream.getVideoTracks()[0]; + + var expectedError = new OverconstrainedError( + '', 'Mixing ImageCapture and non-ImageCapture constraints is not currently supported'); + + return promise_rejects( + t, expectedError, + videoTrack.applyConstraints({advanced : [ {width : 640, torch: true} ]})); +}, 'MediaStreamTrack.applyConstraints() with non Image-Capture constraint'); + +</script> diff --git a/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-applyConstraints-getSettings.html b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-applyConstraints-getSettings.html new file mode 100644 index 00000000000..6241d599dc3 --- /dev/null +++ b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-applyConstraints-getSettings.html @@ -0,0 +1,91 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/mediacapture-image/resources/imagecapture-helpers.js"></script> +<body> +<canvas id='canvas' width=10 height=10/> +</body> +<script> + +// This test verifies that the |constraints| configured in the mock Mojo +// service implementation, are returned by MediaStreamTrack.getSettings(). + +image_capture_test(async t => { + let canvas = document.getElementById('canvas'); + let context = canvas.getContext('2d'); + context.fillStyle = 'red'; + context.fillRect(0, 0, 10, 10); + + const constraints = { advanced : [{ whiteBalanceMode : 'single-shot', + exposureMode : 'continuous', + focusMode : 'single-shot', + + pointsOfInterest : [{x : 0.1, y : 0.2}, + {x : 0.3, y : 0.4}], + + exposureCompensation : 133.77, + colorTemperature : 6000, + iso : 120.0, + + brightness : 3, + contrast : 4, + saturation : 5, + sharpness : 6, + + zoom : 3.141592, + + torch : true + }]}; + + let stream = canvas.captureStream(); + let videoTrack = stream.getVideoTracks()[0]; + + // |videoTrack|'s capabilities gathering, just like the actual capture, is + // a process kicked off right after creation, we introduce a small delay + // to allow for those to be collected, since they are needed to understand + // which constraints are supported in applyConstraints(). + // TODO(mcasas): this shouldn't be needed, https://crbug.com/711524. + await new Promise(resolve => step_timeout(resolve, 100)); + + try { + await videoTrack.applyConstraints(constraints); + } catch (error) { + assert_unreached('Error applying constraints: ' + error.message); + } + + let settings = videoTrack.getSettings(); + assert_equals(typeof settings, 'object'); + + assert_equals(constraints.advanced[0].whiteBalanceMode, + settings.whiteBalanceMode, 'whiteBalanceMode'); + assert_equals(constraints.advanced[0].exposureMode, settings.exposureMode, + 'exposureMode'); + assert_equals(constraints.advanced[0].focusMode, settings.focusMode, + 'focusMode'); + + assert_point2d_array_approx_equals( + constraints.advanced[0].pointsOfInterest, settings.pointsOfInterest, + 0.01); + + assert_equals(constraints.advanced[0].exposureCompensation, + settings.exposureCompensation, 'exposureCompensation'); + assert_equals(constraints.advanced[0].colorTemperature, + settings.colorTemperature, 'colorTemperature'); + assert_equals(constraints.advanced[0].iso, settings.iso, 'iso'); + + assert_equals(constraints.advanced[0].brightness, settings.brightness, + 'brightness'); + assert_equals(constraints.advanced[0].contrast, settings.contrast, + 'contrast'); + assert_equals(constraints.advanced[0].saturation, settings.saturation, + 'saturation'); + assert_equals(constraints.advanced[0].sharpness, settings.sharpness, + 'sharpness'); + + assert_equals(constraints.advanced[0].zoom, settings.zoom, 'zoom'); + + assert_equals(constraints.advanced[0].torch, settings.torch, 'torch'); + +}, 'exercises an applyConstraints() - getSettings() cycle'); + +</script> diff --git a/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-applyConstraints-reject.html b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-applyConstraints-reject.html new file mode 100644 index 00000000000..8f08d250fd1 --- /dev/null +++ b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-applyConstraints-reject.html @@ -0,0 +1,84 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/mediacapture-image/resources/imagecapture-helpers.js"></script> +<body> +<canvas id='canvas' width=10 height=10/> +</body> +<script> + +var canvas = document.getElementById('canvas'); +var context = canvas.getContext('2d'); +context.fillStyle = 'red'; +context.fillRect(0, 0, 10, 10); + +// This test verifies that MediaStreamTrack.applyConstraints() rejects if any +// passed constraint is unsupported or outside its allowed range. +var makePromiseTest = function(getConstraint) { + image_capture_test(async (t, imageCaptureTest) => { + imageCaptureTest.mockImageCapture().state().supportsTorch = false; + + let stream = canvas.captureStream(); + let videoTrack = stream.getVideoTracks()[0]; + + // |videoTrack|'s capabilities gathering, just like the actual capture, + // is a process kicked off right after creation, we introduce a small + // delay to allow for those to be collected, since they are needed to + // understand which constraints are supported in applyConstraints(). + // TODO(mcasas): this shouldn't be needed, https://crbug.com/711524. + await new Promise(resolve => step_timeout(resolve, 100)); + + try { + const constraints = { + advanced : [ getConstraint(imageCaptureTest.mockImageCapture().state()) ] + }; + + await videoTrack.applyConstraints(constraints); + assert_unreached('expected applyConstraints to reject'); + } catch (error) { + assert_equals(error.name, 'NotSupportedError'); + } + }); +}; + +const constraintGenerators = [ + capabilities => ({ whiteBalanceMode: 'manual' }), + capabilities => ({ exposureMode: 'manual' }), + capabilities => ({ focusMode: 'continuous' }), + capabilities => ({ + exposureCompensation: capabilities.exposureCompensation.max + 1 + }), + capabilities => ({ + exposureCompensation: capabilities.exposureCompensation.min - 1 + }), + capabilities => ({ + colorTemperature: capabilities.colorTemperature.max + 1 + }), + capabilities => ({ + colorTemperature: capabilities.colorTemperature.min - 1 + }), + capabilities => ({ iso: capabilities.iso.max + 1 }), + capabilities => ({ iso: capabilities.iso.min - 1 }), + capabilities => ({ brightness: capabilities.brightness.max + 1 }), + capabilities => ({ brightness: capabilities.brightness.min - 1 }), + capabilities => ({ contrast: capabilities.contrast.max + 1 }), + capabilities => ({ contrast: capabilities.contrast.min - 1 }), + capabilities => ({ saturation: capabilities.saturation.max + 1 }), + capabilities => ({ saturation: capabilities.saturation.min - 1 }), + capabilities => ({ sharpness: capabilities.sharpness.max + 1 }), + capabilities => ({ sharpness: capabilities.sharpness.min - 1 }), + capabilities => ({ zoom: capabilities.zoom.max + 1 }), + capabilities => ({ zoom: capabilities.zoom.min - 1 }), + capabilities => ({ torch: true }), +]; + +for (key in constraintGenerators) { + generate_tests( + makePromiseTest, [[ + 'MediaStreamTrack.applyConstraints(constraints) rejects with bad' + + ' constraints, #' + key, + constraintGenerators[key] + ]]); +} + +</script> diff --git a/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-applyConstraints.html b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-applyConstraints.html new file mode 100644 index 00000000000..431646eb53f --- /dev/null +++ b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-applyConstraints.html @@ -0,0 +1,109 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/mediacapture-image/resources/imagecapture-helpers.js"></script> +<body> +<canvas id='canvas' width=10 height=10/> +</body> +<script> + +const meteringModeNames = ['none', 'manual', 'single-shot', 'continuous']; + +// This test verifies that we can all MediaStreamTrack.applyConstraints(), with +// a mock Mojo service implementation. + +image_capture_test(async (t, imageCaptureTest) => { + let canvas = document.getElementById('canvas'); + let context = canvas.getContext('2d'); + context.fillStyle = 'red'; + context.fillRect(0, 0, 10, 10); + + const constraints = { advanced : [{ whiteBalanceMode : 'single-shot', + exposureMode : 'continuous', + focusMode : 'single-shot', + + pointsOfInterest : [{x : 0.1, y : 0.2}, + {x : 0.3, y : 0.4}], + + exposureCompensation : 133.77, + colorTemperature : 6000, + iso : 120.0, + + brightness : 3, + contrast : 4, + saturation : 5, + sharpness : 6, + + zoom : 3.141592, + + torch : true + }]}; + + let stream = canvas.captureStream(); + let videoTrack = stream.getVideoTracks()[0]; + + // |videoTrack|'s capabilities gathering, just like the actual capture, is + // a process kicked off right after creation, we introduce a small delay + // to allow for those to be collected, since they are needed to understand + // which constraints are supported in applyConstraints(). + // TODO(mcasas): this shouldn't be needed, https://crbug.com/711524. + await new Promise(resolve => step_timeout(resolve, 100)); + + try { + await videoTrack.applyConstraints(constraints); + } catch (error) { + assert_unreached('applyConstraints(): ' + error.message); + } + + const constraintsDict = constraints.advanced[0]; + let appliedConstraints = videoTrack.getConstraints(); + const appliedConstraintsDict = appliedConstraints.advanced[0]; + + // Check that |appliedConstraints| and |constraints| are equal. + assert_equals(constraintsDict.length, appliedConstraintsDict.length); + Object.keys(appliedConstraintsDict).forEach((key, value) => { + assert_not_equals(constraintsDict[key], undefined, 'key ' + key); + if (key != 'pointsOfInterest') { + assert_equals(constraintsDict[key], appliedConstraintsDict[key], key); + } else { + assert_point2d_array_approx_equals(constraintsDict[key], + appliedConstraintsDict[key], 0.01); + } + }); + + let theMock = imageCaptureTest.mockImageCapture(); + assert_equals(constraintsDict.whiteBalanceMode, + meteringModeNames[theMock.options().whiteBalanceMode], + 'whiteBalanceMode'); + assert_equals(constraintsDict.exposureMode, + meteringModeNames[theMock.options().exposureMode], + 'exposureMode'); + assert_equals(constraintsDict.focusMode, + meteringModeNames[theMock.options().focusMode], + 'focusMode'); + + assert_point2d_array_approx_equals(constraintsDict.pointsOfInterest, + theMock.options().pointsOfInterest, + 0.01); + + assert_equals(constraintsDict.exposureCompensation, + theMock.options().exposureCompensation, + 'exposureCompensation'); + assert_equals(constraintsDict.colorTemperature, + theMock.options().colorTemperature, 'colorTemperature'); + assert_equals(constraintsDict.iso, theMock.options().iso, 'iso'); + + assert_equals(constraintsDict.brightness, theMock.options().brightness, + 'brightness'); + assert_equals(constraintsDict.contrast, theMock.options().contrast, + 'constrast'); + assert_equals(constraintsDict.saturation, theMock.options().saturation, + 'saturation'); + assert_equals(constraintsDict.sharpness, theMock.options().sharpness, + 'sharpness'); + + assert_equals(constraintsDict.torch, theMock.options().torch, 'torch'); + +}, 'exercises MediaStreamTrack.applyConstraints(constraints)'); + +</script> diff --git a/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getCapabilities-fast.html b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getCapabilities-fast.html new file mode 100644 index 00000000000..55272d14995 --- /dev/null +++ b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getCapabilities-fast.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<body> +<canvas id='canvas' width=10 height=10/> +</body> +<script> + +// This test verifies that MediaStreamTrack.getCapabilities() exists and that it +// returns something. Other tests go deeper. +test(function() { + var canvas = document.getElementById('canvas'); + var context = canvas.getContext("2d"); + context.fillStyle = "red"; + context.fillRect(0, 0, 10, 10); + + var stream = canvas.captureStream(); + assert_equals(stream.getAudioTracks().length, 0); + assert_equals(stream.getVideoTracks().length, 1); + + var videoTrack = stream.getVideoTracks()[0]; + + assert_equals(typeof videoTrack.getCapabilities, 'function'); + + capabilities = videoTrack.getCapabilities(); + assert_equals(typeof capabilities, 'object'); +}, 'MediaStreamTrack.getCapabilities()'); + +</script> diff --git a/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getCapabilities.html b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getCapabilities.html new file mode 100644 index 00000000000..452b223a1b0 --- /dev/null +++ b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getCapabilities.html @@ -0,0 +1,137 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/mediacapture-image/resources/imagecapture-helpers.js"></script> +<body> +<canvas id='canvas' width=10 height=10/> +</body> +<script> + +const meteringModeNames = ['none', 'manual', 'single-shot', 'continuous']; + +// This test verifies that MediaTrackCapabilities are returned upon +// MediaStreamTrack.getCapabilities(), with a mock Mojo service implementation. + +image_capture_test(async (t, imageCaptureTest) => { + let canvas = document.getElementById('canvas'); + let context = canvas.getContext('2d'); + context.fillStyle = 'red'; + context.fillRect(0, 0, 10, 10); + + let mockCapabilities = imageCaptureTest.mockImageCapture().state(); + + // |stream| must be created _after_ |mock| is constructed to give the + // latter time to override the bindings. + let stream = canvas.captureStream(); + assert_equals(stream.getAudioTracks().length, 0); + assert_equals(stream.getVideoTracks().length, 1); + + let videoTrack = stream.getVideoTracks()[0]; + assert_equals(typeof videoTrack.getCapabilities, 'function'); + + // |videoTrack|'s capabilities gathering, just like the actual capture, is + // a process kicked off right after creation, we introduce a small delay + // to allow for those to be collected. + // TODO(mcasas): this shouldn't be needed, https://crbug.com/711524. + await new Promise(resolve => step_timeout(resolve, 100)); + + let capabilities = videoTrack.getCapabilities(); + assert_equals(typeof capabilities, 'object'); + + assert_equals(capabilities.whiteBalanceMode.length, + mockCapabilities.supportedWhiteBalanceModes.length, + 'whiteBalanceMode'); + for (i = 0; i < capabilities.whiteBalanceMode.length; ++i) { + assert_equals( + capabilities.whiteBalanceMode[i], + meteringModeNames[mockCapabilities + .supportedWhiteBalanceModes[i]], + 'whiteBalanceMode'); + } + + assert_equals(capabilities.exposureMode.length, + mockCapabilities.supportedExposureModes.length, + 'exposureMode'); + for (i = 0; i < capabilities.exposureMode.length; ++i) { + assert_equals( + capabilities.exposureMode[i], + meteringModeNames[mockCapabilities.supportedExposureModes[i]], + 'exposureMode'); + } + + assert_equals(capabilities.focusMode.length, + mockCapabilities.supportedFocusModes.length, + 'focusMode'); + for (i = 0; i < capabilities.focusMode.length; ++i) { + assert_equals( + capabilities.focusMode[i], + meteringModeNames[mockCapabilities.supportedFocusModes[i]], + 'focusMode'); + } + + assert_true(capabilities.exposureCompensation instanceof + MediaSettingsRange); + assert_equals(capabilities.exposureCompensation.max, + mockCapabilities.exposureCompensation.max); + assert_equals(capabilities.exposureCompensation.min, + mockCapabilities.exposureCompensation.min); + assert_equals(capabilities.exposureCompensation.step, + mockCapabilities.exposureCompensation.step); + + assert_true(capabilities.colorTemperature instanceof + MediaSettingsRange); + assert_equals(capabilities.colorTemperature.max, + mockCapabilities.colorTemperature.max); + assert_equals(capabilities.colorTemperature.min, + mockCapabilities.colorTemperature.min); + assert_equals(capabilities.colorTemperature.step, + mockCapabilities.colorTemperature.step); + + assert_true(capabilities.iso instanceof MediaSettingsRange); + assert_equals(capabilities.iso.max, mockCapabilities.iso.max); + assert_equals(capabilities.iso.min, mockCapabilities.iso.min); + assert_equals(capabilities.iso.step, mockCapabilities.iso.step); + + assert_true(capabilities.brightness instanceof MediaSettingsRange); + assert_equals(capabilities.brightness.max, + mockCapabilities.brightness.max); + assert_equals(capabilities.brightness.min, + mockCapabilities.brightness.min); + assert_equals(capabilities.brightness.step, + mockCapabilities.brightness.step); + + assert_true(capabilities.contrast instanceof MediaSettingsRange); + assert_equals(capabilities.contrast.max, + mockCapabilities.contrast.max); + assert_equals(capabilities.contrast.min, + mockCapabilities.contrast.min); + assert_equals(capabilities.contrast.step, + mockCapabilities.contrast.step); + + assert_true(capabilities.saturation instanceof MediaSettingsRange); + assert_equals(capabilities.saturation.max, + mockCapabilities.saturation.max); + assert_equals(capabilities.saturation.min, + mockCapabilities.saturation.min); + assert_equals(capabilities.saturation.step, + mockCapabilities.saturation.step); + + assert_true(capabilities.sharpness instanceof MediaSettingsRange); + assert_equals(capabilities.sharpness.max, + mockCapabilities.sharpness.max); + assert_equals(capabilities.sharpness.min, + mockCapabilities.sharpness.min); + assert_equals(capabilities.sharpness.step, + mockCapabilities.sharpness.step); + + assert_true(capabilities.zoom instanceof MediaSettingsRange); + assert_equals(capabilities.zoom.max, mockCapabilities.zoom.max); + assert_equals(capabilities.zoom.min, mockCapabilities.zoom.min); + assert_equals(capabilities.zoom.step, mockCapabilities.zoom.step); + + assert_equals(capabilities.torch, mockCapabilities.supportsTorch, + 'torch'); + +}, 'exercises MediaStreamTrack.getCapabilities()'); + +</script> diff --git a/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getConstraints-fast.html b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getConstraints-fast.html new file mode 100644 index 00000000000..8cae4331318 --- /dev/null +++ b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getConstraints-fast.html @@ -0,0 +1,74 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<body> +<canvas id='canvas' width=10 height=10/> +</body> +<script> + +const constraints = { whiteBalanceMode : "manual", + exposureMode : "continuous", + focusMode : "single-shot", + + exposureCompensation : 133.77, + colorTemperature : 6000, + iso : 120.0, + + brightness : 3, + contrast : 4, + saturation : 5, + sharpness : 6, + + zoom : 3.141592 + // TODO: torch https://crbug.com/700607. + }; + +var canvas = document.getElementById('canvas'); +var context = canvas.getContext("2d"); +context.fillStyle = "red"; +context.fillRect(0, 0, 10, 10); + +// These tests verify that MediaStreamTrack.getConstraints() exists and that, +// returns the constraints passed beforehand with applyConstraints. +var makeAsyncTest = function(c) { + async_test(function(t) { + var stream = canvas.captureStream(); + var videoTrack = stream.getVideoTracks()[0]; + + const constraintsIn = { advanced : [ c ]}; + + // Method applyConstraints() will fail since there is no Image Capture + // service in this Layout Test, but |constraintsIn| should be cached. + videoTrack.applyConstraints(constraintsIn) + .then(() => { /* ignore */ }) + .catch((e) => { /* ignore */ }) + .then(() => { + const constraintsOut = videoTrack.getConstraints(); + assert_object_equals(constraintsOut, constraintsIn, "constraints"); + t.done(); + }); + + // Clear constraints by sending an empty constraint set. + videoTrack.applyConstraints({}) + .then(() => { + const constraintsOut = videoTrack.getConstraints(); + assert_object_equals(constraintsOut, {}, "constraints"); + t.done(); + }); + }); +}; + +// Send each line of |constraints| in turn and then the whole dictionary. +for (key in constraints) { + var one_constraint = {}; + one_constraint[key] = constraints[key]; + generate_tests( + makeAsyncTest, + [[ 'MediaStreamTrack.getConstraints(), key: ' + key, one_constraint ]]); +} + +generate_tests(makeAsyncTest, [[ + 'MediaStreamTrack.getConstraints(), complete ', constraints + ]]); + +</script> diff --git a/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getSettings-fast.html b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getSettings-fast.html new file mode 100644 index 00000000000..a4ecbe61181 --- /dev/null +++ b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getSettings-fast.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<body> +<canvas id='canvas' width=10 height=10/> +</body> +<script> + +// This test verifies that MediaStreamTrack.getSettings() exists and that it +// returns something. Other tests go deeper. +test(function() { + var canvas = document.getElementById('canvas'); + var context = canvas.getContext("2d"); + context.fillStyle = "red"; + context.fillRect(0, 0, 10, 10); + + var stream = canvas.captureStream(); + assert_equals(stream.getAudioTracks().length, 0); + assert_equals(stream.getVideoTracks().length, 1); + + var videoTrack = stream.getVideoTracks()[0]; + + assert_equals(typeof videoTrack.getSettings, 'function'); + + settings = videoTrack.getSettings(); + assert_equals(typeof settings, 'object'); +}, 'MediaStreamTrack.getSettings()'); + +</script> diff --git a/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getSettings.html b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getSettings.html new file mode 100644 index 00000000000..04fbfbfb613 --- /dev/null +++ b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getSettings.html @@ -0,0 +1,67 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/mediacapture-image/resources/imagecapture-helpers.js"></script> +<body> +<canvas id='canvas' width=10 height=10/> +</body> +<script> + +const meteringModeNames = ['none', 'manual', 'single-shot', 'continuous']; + +// This test verifies that the settings defined in the mock Mojo service +// implementation are the same as those returned by the corresponding +// MediaStreamTrack.getSettings(). + +image_capture_test(async (t, imageCaptureTest) => { + let canvas = document.getElementById('canvas'); + let context = canvas.getContext('2d'); + context.fillStyle = 'red'; + context.fillRect(0, 0, 10, 10); + + let mockSettings = imageCaptureTest.mockImageCapture().state(); + + // |stream| must be created _after_ |mock| is constructed to give the + // latter time to override the bindings. + let stream = canvas.captureStream(); + let videoTrack = stream.getVideoTracks()[0]; + + // |videoTrack|s settings retrieval, just like the actual capture, is a + // process kicked right after creation, we introduce a small delay to + // allow for those to be collected. + await new Promise(resolve => step_timeout(resolve, 100)); + + let settings = videoTrack.getSettings(); + assert_equals(typeof settings, 'object'); + + assert_equals(settings.whiteBalanceMode, + meteringModeNames[mockSettings.currentWhiteBalanceMode], + 'whiteBalanceMode'); + assert_equals(settings.exposureMode, + meteringModeNames[mockSettings.currentExposureMode], + 'exposureMode;'); + assert_equals(settings.focusMode, + meteringModeNames[mockSettings.currentFocusMode], + 'focusMode'); + + assert_point2d_array_approx_equals( + settings.pointsOfInterest, mockSettings.pointsOfInterest, 0.01); + + assert_equals(settings.exposureCompensation, + mockSettings.exposureCompensation.current); + assert_equals(settings.colorTemperature, + mockSettings.colorTemperature.current); + assert_equals(settings.iso, mockSettings.iso.current); + + assert_equals(settings.brightness, mockSettings.brightness.current); + assert_equals(settings.contrast, mockSettings.contrast.current); + assert_equals(settings.saturation, mockSettings.saturation.current); + assert_equals(settings.sharpness, mockSettings.sharpness.current); + + assert_equals(settings.zoom, mockSettings.zoom.current); + + assert_equals(settings.torch, mockSettings.torch, 'torch'); + +}, 'exercises MediaStreamTrack.getSettings()'); + +</script> diff --git a/tests/wpt/web-platform-tests/mediacapture-image/detached-HTMLCanvasElement.html b/tests/wpt/web-platform-tests/mediacapture-image/detached-HTMLCanvasElement.html new file mode 100644 index 00000000000..e27950fc5ed --- /dev/null +++ b/tests/wpt/web-platform-tests/mediacapture-image/detached-HTMLCanvasElement.html @@ -0,0 +1,26 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<body> +<script> + +async_test(t => { + let iframe = document.createElement('iframe'); + let html = "<canvas id='canvas' width=10 height=10 />"; + iframe.srcdoc = html; + iframe.onload = t.step_func_done(() => { + // This detaches the frame while retaining a reference to an + // HTMLCanvasElement from it. + let canvas = iframe.contentWindow.document.getElementById('canvas'); + document.body.removeChild(iframe); + + // Creation of the ImageCapture object (as part of the MediaStreamTrack) + // should be safe even if the frame is detached. + canvas.captureStream(); + }); + + document.body.appendChild(iframe); +}, 'MediaStreamTrack can be obtained from a detached frame'); + +</script> +</body> diff --git a/tests/wpt/web-platform-tests/mediacapture-image/getPhotoCapabilities.html b/tests/wpt/web-platform-tests/mediacapture-image/getPhotoCapabilities.html new file mode 100644 index 00000000000..83329fcac4a --- /dev/null +++ b/tests/wpt/web-platform-tests/mediacapture-image/getPhotoCapabilities.html @@ -0,0 +1,45 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/mediacapture-image/resources/imagecapture-helpers.js"></script> +<body> +<canvas id='canvas' width=10 height=10/> +</body> +<script> + +// This test verifies that ImageCapture can get PhotoCapabilities(), with a mock +// Mojo interface implementation. + +image_capture_test(async (t, imageCaptureTest) => { + let canvas = document.getElementById('canvas'); + let context = canvas.getContext('2d'); + context.fillStyle = 'red'; + context.fillRect(0, 0, 10, 10); + let stream = canvas.captureStream(); + + let mockCapabilities = imageCaptureTest.mockImageCapture().state(); + let capturer = new ImageCapture(stream.getVideoTracks()[0]); + assert_true(typeof capturer.getPhotoCapabilities == 'function'); + + let capabilities = await capturer.getPhotoCapabilities(); + assert_true(capabilities instanceof PhotoCapabilities); + + assert_equals(capabilities.redEyeReduction, 'controllable', + 'redEyeReduction'); + + assert_true(capabilities.imageHeight instanceof MediaSettingsRange); + assert_equals(capabilities.imageHeight.max, mockCapabilities.height.max); + assert_equals(capabilities.imageHeight.min, mockCapabilities.height.min); + assert_equals(capabilities.imageHeight.step, mockCapabilities.height.step); + + assert_true(capabilities.imageWidth instanceof MediaSettingsRange); + assert_equals(capabilities.imageWidth.max, mockCapabilities.width.max); + assert_equals(capabilities.imageWidth.min, mockCapabilities.width.min); + assert_equals(capabilities.imageWidth.step, mockCapabilities.width.step); + + assert_array_equals(capabilities.fillLightMode, [ 'auto', 'flash' ], + 'fillLightMode'); + +}, 'exercises ImageCapture.getPhotoCapabilities()'); + +</script> diff --git a/tests/wpt/web-platform-tests/mediacapture-image/getPhotoSettings.html b/tests/wpt/web-platform-tests/mediacapture-image/getPhotoSettings.html new file mode 100644 index 00000000000..6a6184f17cb --- /dev/null +++ b/tests/wpt/web-platform-tests/mediacapture-image/getPhotoSettings.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/mediacapture-image/resources/imagecapture-helpers.js"></script> +<body> +<canvas id='canvas' width=10 height=10/> +</body> +<script> + +const fillLightModeNames = ['off', 'auto', 'flash']; + +// This test verifies that ImageCapture can call getPhotoSettings(), with a +// mock Mojo interface implementation. +image_capture_test(async (t, imageCaptureTest) => { + let canvas = document.getElementById('canvas'); + let context = canvas.getContext('2d'); + context.fillStyle = 'red'; + context.fillRect(0, 0, 10, 10); + let stream = canvas.captureStream(); + + let mockState = imageCaptureTest.mockImageCapture().state(); + let capturer = new ImageCapture(stream.getVideoTracks()[0]); + let settings = await capturer.getPhotoSettings(); + assert_equals(settings.imageWidth, mockState.width.current, 'width'); + assert_equals(settings.imageHeight, mockState.height.current, 'height'); + // TODO(mcasas): check the remaining two entries https://crbug.com/732521. + +}, 'exercises ImageCapture.getPhotoSettings()'); + +</script> diff --git a/tests/wpt/web-platform-tests/mediacapture-image/resources/imagecapture-helpers.js b/tests/wpt/web-platform-tests/mediacapture-image/resources/imagecapture-helpers.js new file mode 100644 index 00000000000..6d5ffa1695d --- /dev/null +++ b/tests/wpt/web-platform-tests/mediacapture-image/resources/imagecapture-helpers.js @@ -0,0 +1,69 @@ +'use strict'; + +// These tests rely on the User Agent providing an implementation of +// platform image capture backends. +// +// In Chromium-based browsers this implementation is provided by a polyfill +// in order to reduce the amount of test-only code shipped to users. To enable +// these tests the browser must be run with these options: +// +// --enable-blink-features=MojoJS,MojoJSTest + +let loadChromiumResources = Promise.resolve().then(() => { + if (!MojoInterfaceInterceptor) { + // Do nothing on non-Chromium-based browsers or when the Mojo bindings are + // not present in the global namespace. + return; + } + + let chain = Promise.resolve(); + [ + '/resources/chromium/mojo_bindings.js', + '/resources/chromium/image_capture.mojom.js', + '/resources/chromium/mock-imagecapture.js', + ].forEach(path => { + // Use importScripts for workers. + if (typeof document === 'undefined') { + chain = chain.then(() => importScripts(path)); + return; + } + let script = document.createElement('script'); + script.src = path; + script.async = false; + chain = chain.then(() => new Promise(resolve => { + script.onload = () => resolve(); + })); + document.head.appendChild(script); + }); + + return chain; +}); + +async function initialize_image_capture_tests() { + if (typeof ImageCaptureTest === 'undefined') { + await loadChromiumResources; + } + assert_true(typeof ImageCaptureTest !== 'undefined'); + let imageCaptureTest = new ImageCaptureTest(); + await imageCaptureTest.initialize(); + return imageCaptureTest; +} + +function image_capture_test(func, name, properties) { + promise_test(async (t) => { + let imageCaptureTest = await initialize_image_capture_tests(); + try { + await func(t, imageCaptureTest); + } finally { + await imageCaptureTest.reset(); + }; + }, name, properties); +} + +function assert_point2d_array_approx_equals(actual, expected, epsilon) { + assert_equals(actual.length, expected.length, 'length'); + for (var i = 0; i < actual.length; ++i) { + assert_approx_equals(actual[i].x, expected[i].x, epsilon, 'x'); + assert_approx_equals(actual[i].y, expected[i].y, epsilon, 'y'); + } +} diff --git a/tests/wpt/web-platform-tests/mediacapture-image/setOptions-reject.html b/tests/wpt/web-platform-tests/mediacapture-image/setOptions-reject.html new file mode 100644 index 00000000000..4deee97d7bc --- /dev/null +++ b/tests/wpt/web-platform-tests/mediacapture-image/setOptions-reject.html @@ -0,0 +1,51 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/mediacapture-image/resources/imagecapture-helpers.js"></script> +<body> +<canvas id='canvas' width=10 height=10/> +</body> +<script> + +let canvas = document.getElementById('canvas'); +let context = canvas.getContext('2d'); +context.fillStyle = 'red'; +context.fillRect(0, 0, 10, 10); + +// This test verifies that ImageCapture.takePhoto() rejects if any passed +// option is unsupported or outside its allowed range. +function makePromiseTest(getOption) { + image_capture_test(async (t, imageCaptureTest) => { + imageCaptureTest.mockImageCapture().state().redEyeReduction = 0; + + let stream = canvas.captureStream(); + let capturer = new ImageCapture(stream.getVideoTracks()[0]); + await capturer.getPhotoCapabilities(); + const options = getOption(imageCaptureTest.mockImageCapture().state()); + + try { + await capturer.takePhoto(options); + assert_unreached('expected takePhoto to reject'); + } catch (error) { + assert_equals(error.name, 'NotSupportedError'); + } + }); +} + +const optionsGenerators = [ + capabilities => ({ redEyeReduction: true }), + capabilities => ({ imageHeight: capabilities.height.max + 1 }), + capabilities => ({ imageHeight: capabilities.height.min - 1 }), + capabilities => ({ imageWidth: capabilities.width.max + 1 }), + capabilities => ({ imageWidth: capabilities.width.min - 1 }), + capabilities => ({ fillLightMode: 'off' }), +]; + +for (key in optionsGenerators) { + generate_tests( + makePromiseTest, + [[ 'ImageCapture.takePhoto(options) rejects with bad options, #' + key, + optionsGenerators[key] ]]); +} + +</script> diff --git a/tests/wpt/web-platform-tests/mediacapture-image/takePhoto-with-PhotoSettings.html b/tests/wpt/web-platform-tests/mediacapture-image/takePhoto-with-PhotoSettings.html new file mode 100644 index 00000000000..58708612456 --- /dev/null +++ b/tests/wpt/web-platform-tests/mediacapture-image/takePhoto-with-PhotoSettings.html @@ -0,0 +1,63 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/mediacapture-image/resources/imagecapture-helpers.js"></script> +<body> +<canvas id='canvas' width=10 height=10/> +</body> +<script> + +const fillLightModeNames = ['off', 'auto', 'flash']; + +// This test verifies that ImageCapture can call takePhoto with a PhotoSettings +// argument, with a mock Mojo interface implementation. + +image_capture_test(async (t, imageCaptureTest) => { + let canvas = document.getElementById('canvas'); + let context = canvas.getContext('2d'); + context.fillStyle = 'red'; + context.fillRect(0, 0, 10, 10); + let stream = canvas.captureStream(); + + const optionsDict = { imageWidth : 1080, + imageHeight : 100, + redEyeReduction : true, + fillLightMode : 'flash' + }; + + let capturer = new ImageCapture(stream.getVideoTracks()[0]); + let blob = await capturer.takePhoto(optionsDict); + + // JS Blob is almost-opaque, can only check |type| and |size|. + assert_equals(blob.type, 'image/cat'); + assert_equals(blob.size, 2); + + + assert_equals(true, imageCaptureTest.mockImageCapture().options().hasWidth, + 'hasWidth'); + assert_equals(optionsDict.imageWidth, + imageCaptureTest.mockImageCapture().options().width,'width'); + assert_equals(true, imageCaptureTest.mockImageCapture().options().hasHeight, + 'hasHeight'); + assert_equals(optionsDict.imageHeight, + imageCaptureTest.mockImageCapture().options().height, + 'height'); + + // Depending on how mojo boolean packing in integers is arranged, this can + // be a number instead of a boolean, compare directly. + // TODO(mcasas): Revert to assert_equals() when yzshen@ has sorted it out. + assert_true( + optionsDict.redEyeReduction == imageCaptureTest.mockImageCapture(). + options().redEyeReduction, 'redEyeReduction'); + + assert_equals(true, + imageCaptureTest.mockImageCapture().options().hasFillLightMode, + 'hasFillLightMode'); + assert_equals(optionsDict.fillLightMode, + fillLightModeNames[ + imageCaptureTest.mockImageCapture().options().fillLightMode], + 'fillLightMode'); + +}, 'exercises ImageCapture.takePhoto(PhotoSettings dictionary)'); + +</script> diff --git a/tests/wpt/web-platform-tests/mediacapture-image/takePhoto.html b/tests/wpt/web-platform-tests/mediacapture-image/takePhoto.html new file mode 100644 index 00000000000..49926db1cde --- /dev/null +++ b/tests/wpt/web-platform-tests/mediacapture-image/takePhoto.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/mediacapture-image/resources/imagecapture-helpers.js"></script> +<body> +<canvas id='canvas' width=10 height=10/> +</body> +<script> + +// This test verifies that ImageCapture can takePhoto()s, with a mock Mojo +// interface implementation. + +image_capture_test(async t => { + let canvas = document.getElementById('canvas'); + let context = canvas.getContext('2d'); + context.fillStyle = 'red'; + context.fillRect(0, 0, 10, 10); + let stream = canvas.captureStream(); + + let capturer = new ImageCapture(stream.getVideoTracks()[0]); + let blob = await capturer.takePhoto(); + + // JS Blob is almost-opaque, can only check |type| and |size|. + assert_equals(blob.type, 'image/cat'); + assert_equals(blob.size, 2); + +}, 'exercises ImageCapture.takePhoto()'); + +</script> diff --git a/tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-default-feature-policy.https.html b/tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-default-feature-policy.https.html index f0f07da2122..0b45ac6f594 100644 --- a/tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-default-feature-policy.https.html +++ b/tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-default-feature-policy.https.html @@ -13,7 +13,7 @@ // mic/camera has been explicitly allowed by feature policy. function promise_factory(allowed_features) { return new Promise((resolve, reject) => { - navigator.getUserMedia({video: true, audio: true}, + navigator.getUserMedia({video: true, audio: true}).then( function(stream) { // If microphone is allowed, there should be at least one microphone // in the result. If camera is allowed, there should be at least one diff --git a/tests/wpt/web-platform-tests/network-error-logging/support/lock.py b/tests/wpt/web-platform-tests/network-error-logging/support/lock.py index 8c88250bde0..d87b3aef0fb 100644 --- a/tests/wpt/web-platform-tests/network-error-logging/support/lock.py +++ b/tests/wpt/web-platform-tests/network-error-logging/support/lock.py @@ -1,4 +1,14 @@ -_LOCK_KEY = "network-error-logging:lock" +# This file implements a shared lock that lets us ensure that the test cases in +# this directory run serially. Each test case obtains this lock as its first +# step, and releases it as its last. (The nel_test helper function in +# nel.sub.js automates this process.) Because the lock needs to be shared +# across all of the test cases, we use a hard-coded stash key. This hard-coded +# key is a random UUID, which should not conflict with any other auto-generated +# stash keys. + +import time + +_LOCK_KEY = "67966d2e-a847-41d8-b7c3-5f6aee3375ba" _TIMEOUT = 5 # seconds def wait_for_lock(request): diff --git a/tests/wpt/web-platform-tests/payment-request/MerchantValidationEvent/complete-method-manual.https.html b/tests/wpt/web-platform-tests/payment-request/MerchantValidationEvent/complete-method-manual.https.html new file mode 100644 index 00000000000..99a10e9dc79 --- /dev/null +++ b/tests/wpt/web-platform-tests/payment-request/MerchantValidationEvent/complete-method-manual.https.html @@ -0,0 +1,15 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<link rel="help" href="https://w3c.github.io/browser-payment-api/#dom-merchantvalidationevent-complete"> +<title>Test for the MerchantValidationEvent's complete() method.</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<body> +<script> +test(() => { + const event = new MerchantValidationEvent("test"); + assert_throws(() => { + event.complete(""); + }) +}, "If event's isTrusted attribute is false, then then throw an InvalidStateError DOMException."); +</script> diff --git a/tests/wpt/web-platform-tests/payment-request/MerchantValidationEvent/constructor.http.html b/tests/wpt/web-platform-tests/payment-request/MerchantValidationEvent/constructor.http.html new file mode 100644 index 00000000000..8368c79a3b1 --- /dev/null +++ b/tests/wpt/web-platform-tests/payment-request/MerchantValidationEvent/constructor.http.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Test for MerchantValidationEvent Constructor (insecure)</title> +<link rel="help" href="https://w3c.github.io/browser-payment-api/#merchantvalidationevent-interface"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +test(() => { + assert_false("MerchantValidationEvent" in Window); +}, "MerchantValidationEvent constructor must not be exposed in insecure context"); +</script> diff --git a/tests/wpt/web-platform-tests/payment-request/MerchantValidationEvent/constructor.https.html b/tests/wpt/web-platform-tests/payment-request/MerchantValidationEvent/constructor.https.html new file mode 100644 index 00000000000..952c0f734a3 --- /dev/null +++ b/tests/wpt/web-platform-tests/payment-request/MerchantValidationEvent/constructor.https.html @@ -0,0 +1,76 @@ +<!DOCTYPE html> +<!-- Copyright © 2017 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). --> +<meta charset="utf-8"> +<title>Test for MerchantValidationEvent Constructor</title> +<link rel="help" href="https://w3c.github.io/browser-payment-api/#merchantvalidationevent-constructor"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +const applePay = Object.freeze({ supportedMethods: "https://apple.com/apple-pay"}); +const basicCard = Object.freeze({ supportedMethods: "basic-card" }); +const defaultMethods = Object.freeze([basicCard, applePay]); +const defaultDetails = Object.freeze({ + total: { + label: "Total", + amount: { + currency: "USD", + value: "1.00", + }, + }, +}); + +test(() => { + new MerchantValidationEvent("test"); +}, "MerchantValidationEvent can be constructed in secure-context."); + +test(() => { + const ev = new MerchantValidationEvent("test", { + bubbles: true, + cancelable: true, + composed: true, + }); + assert_false(ev.isTrusted, "constructed in script, so not trusted"); + assert_true(ev.bubbles, "set by EventInitDict"); + assert_true(ev.cancelable, "set by EventInitDict"); + assert_true(ev.composed, "set by EventInitDict"); + assert_equals(ev.target, null, "initially null"); + assert_equals(ev.type, "test"); +}, "MerchantValidationEvent can be constructed with an EventInitDict, even if not trusted."); + +test(() => { + const request = new PaymentRequest(defaultMethods, defaultDetails); + const ev = new MerchantValidationEvent("test"); + request.addEventListener("test", evt => { + assert_equals(ev, evt); + }); + request.dispatchEvent(ev); +}, "MerchantValidationEvent can be dispatched, even if not trusted."); + +test(() => { + const validationURL = "https://pass.com"; + const event = new MerchantValidationEvent("test", { validationURL }); + assert_idl_attribute(event, "validationURL"); + assert_equals(event.validationURL, "https://pass.com/"); +}, "Must have a validationURL IDL attribute, which is initialized with to the validationURL dictionary value."); + +test(() => { + const validationURL = "http://\u005B"; // invalid URL + assert_throws(new TypeError(), () => { + new MerchantValidationEvent("test", { validationURL }) + }); +}, "Must throw TypeError if initialized with an invalid URL."); + +test(() => { + const validationURL = ""; + const relativePaths = [ + "", + ".", + "/test", + ] + for(const path of relativePaths ) { + const event = new MerchantValidationEvent("test", { validationURL: path }); + const expected = new URL(path, document.location.href).href; + assert_equals(event.validationURL, expected); + } +}, "Relative validationURLs use the document as the base."); +</script> diff --git a/tests/wpt/web-platform-tests/payment-request/allowpaymentrequest/common.sub.js b/tests/wpt/web-platform-tests/payment-request/allowpaymentrequest/common.sub.js index 85a08461fcb..a94bac064c9 100644 --- a/tests/wpt/web-platform-tests/payment-request/allowpaymentrequest/common.sub.js +++ b/tests/wpt/web-platform-tests/payment-request/allowpaymentrequest/common.sub.js @@ -5,41 +5,57 @@ const tests = {}; -window.onmessage = (e) => { +window.onmessage = e => { const result = e.data; const tagName = result.urlQuery; const t = tests[tagName]; t.step(() => { if (expectSuccess[tagName]) { - assert_equals(result.message, 'Success'); + assert_equals(result.message, "Success"); + if (result.message === "Exception") { + const [, code, name, stack] = result.details; + assert_unreached(`Unexpected exception "${name}" (${code}) ${stack}`); + } } else { - assert_equals(result.message, 'Exception'); - assert_array_equals(result.details, [true /*ex instanceof DOMException*/, - DOMException.SECURITY_ERR /*ex.code*/, - 'SecurityError' /*ex.name*/]); + assert_equals(result.message, "Exception"); + const detailsArray = result.details.slice(0,3); + assert_array_equals(detailsArray, [ + true /*ex instanceof DOMException*/, + DOMException.SECURITY_ERR /*ex.code*/, + "SecurityError" /*ex.name*/, + ]); } t.done(); }); }; -['iframe', 'frame', 'object', 'embed'].forEach((tagName, i) => { - tests[tagName] = async_test((t) => { +["iframe", "frame", "object", "embed"].forEach((tagName, i) => { + tests[tagName] = async_test(t => { const elm = document.createElement(tagName); if (setAllowPaymentRequest) { - elm.setAttribute('allowpaymentrequest', ''); + elm.setAttribute("allowpaymentrequest", ""); } - const path = location.pathname.substring(0, location.pathname.lastIndexOf('/') + 1); - const url = (testCrossOrigin ? "https://{{domains[www1]}}:{{ports[https][0]}}" : "") + - path + "echo-PaymentRequest.html?" + tagName; - if (tagName === 'object') { + const path = location.pathname.substring( + 0, + location.pathname.lastIndexOf("/") + 1 + ); + const url = + (testCrossOrigin ? "https://{{domains[www1]}}:{{ports[https][0]}}" : "") + + path + + "echo-PaymentRequest.html?" + + tagName; + if (tagName === "object") { elm.data = url; } else { elm.src = url; } elm.onload = t.step_func(() => { - window[i].postMessage('What is the result of new PaymentRequest(...)?', '*'); + window[i].postMessage( + "What is the result of new PaymentRequest(...)?", + "*" + ); }); - elm.onerror = t.unreached_func('elm.onerror'); + elm.onerror = t.unreached_func("elm.onerror"); document.body.appendChild(elm); }, tagName); }); diff --git a/tests/wpt/web-platform-tests/payment-request/allowpaymentrequest/echo-PaymentRequest.html b/tests/wpt/web-platform-tests/payment-request/allowpaymentrequest/echo-PaymentRequest.html index f18b16ee31b..5211c7e5ce7 100644 --- a/tests/wpt/web-platform-tests/payment-request/allowpaymentrequest/echo-PaymentRequest.html +++ b/tests/wpt/web-platform-tests/payment-request/allowpaymentrequest/echo-PaymentRequest.html @@ -11,7 +11,9 @@ window.onmessage = (e) => { e.source.postMessage(result, '*'); } catch(ex) { result.message = 'Exception'; - result.details = [ex instanceof DOMException, ex.code, ex.name]; + const isDomException = ex instanceof DOMException; + const stack = "stack" in ex ? ex.stack : ""; + result.details = [ isDomException, ex.code, ex.name, stack ]; e.source.postMessage(result, '*'); } } else { diff --git a/tests/wpt/web-platform-tests/payment-request/onmerchantvalidation-attribute.https.html b/tests/wpt/web-platform-tests/payment-request/onmerchantvalidation-attribute.https.html new file mode 100644 index 00000000000..c0ed23167ed --- /dev/null +++ b/tests/wpt/web-platform-tests/payment-request/onmerchantvalidation-attribute.https.html @@ -0,0 +1,69 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Test for PaymentRequest's onmerchantvalidation attribute</title> +<link rel="help" href="https://w3c.github.io/browser-payment-api/#dom-paymentrequest-onmerchantvalidation"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +"use strict"; +const testMethod = Object.freeze({ supportedMethods: "not-a-real-method" }); +const applePay = Object.freeze({ supportedMethods: "https://apple.com/apple-pay" }); +const defaultMethods = Object.freeze([testMethod, applePay]); +const defaultDetails = Object.freeze({ + total: { + label: "Total", + amount: { + currency: "USD", + value: "1.00", + }, + }, +}); +const validationURL = "https://example.com"; + +test(() => { + const request = new PaymentRequest(defaultMethods, defaultDetails); + assert_idl_attribute(request, "onmerchantvalidation"); +}, "Must have a onmerchantvalidation IDL attribute"); + +test(() => { + const request = new PaymentRequest(defaultMethods, defaultDetails); + const ev = new Event("merchantvalidation"); + let didHandle = false; + request.onmerchantvalidation = evt => { + assert_equals(ev, evt, "must be same event"); + didHandle = true; + }; + request.dispatchEvent(ev); + assert_true(didHandle, "event did not fire"); +}, `onmerchantvalidation attribute is a generic handler for "merchantvalidation"`); + +test(() => { + const request = new PaymentRequest(defaultMethods, defaultDetails); + const ev = new MerchantValidationEvent("merchantvalidation", { validationURL }); + let didHandle = false; + request.onmerchantvalidation = evt => { + assert_equals(ev, evt, "must be same event"); + didHandle = true; + }; + request.dispatchEvent(ev); + assert_true(didHandle, "event did not fire"); +}, `onmerchantvalidation attribute is a handler for MerchantValidationEvent`); + +test(() => { + const request = new PaymentRequest(defaultMethods, defaultDetails); + const ev = new MerchantValidationEvent("merchantvalidation", { validationURL }); + let didHandle = false; + let didListen = false; + request.onmerchantvalidation = evt => { + assert_equals(ev, evt, "must be same event"); + didHandle = true; + }; + request.addEventListener("merchantvalidation", evt => { + assert_equals(ev, evt, "must be same event"); + didListen = true; + }); + request.dispatchEvent(ev); + assert_true(didHandle, "onmerchantvalidation must receive the event"); + assert_true(didListen, "addEventListener must receive the event"); +}, `onmerchantvalidation attribute and listeners both work`); +</script> diff --git a/tests/wpt/web-platform-tests/pointerevents/extension/pointerevent_pointerrawmove-manual.html b/tests/wpt/web-platform-tests/pointerevents/extension/pointerevent_pointerrawmove-manual.html new file mode 100644 index 00000000000..0c4ccf9ad48 --- /dev/null +++ b/tests/wpt/web-platform-tests/pointerevents/extension/pointerevent_pointerrawmove-manual.html @@ -0,0 +1,55 @@ +<!doctype html> +<html> + <head> + <title>pointerrawmove</title> + <meta name="viewport" content="width=device-width"> + <link rel="stylesheet" type="text/css" href="../pointerevent_styles.css"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <!-- Additional helper script for common checks across event types --> + <script type="text/javascript" src="../pointerevent_support.js"></script> + </head> + <body onload="run()"> + <h2>pointerrawmove</h2> + <h4>Test Description: This test checks if pointerrawmove is dispatched correctly. </h4> + <p>Move your mouse within the black box.</p> + <p>Press left button down and then press middle button while holding down left button. Then release the buttons</p> + <div id="target0"></div> + <script> + var test_pointerrawmove = async_test("pointerrawmove event received"); + + var pointerrawmoveReceived = false; + var pointerdownReceived = false; + var pointerrawmoveFromButtonChangeReceived = false; + + function run() { + var target0 = document.getElementById("target0"); + + on_event(target0, "pointerrawmove", function (event) { + pointerrawmoveReceived = true; + if (pointerdownReceived && event.button != -1) + pointerrawmoveFromButtonChangeReceived = true; + }); + on_event(target0, "pointermove", function (event) { + test_pointerrawmove.step(function() { + assert_true(pointerrawmoveReceived, + "Pointerrawmove event should have been received before pointermove."); + }, "Pointerrawmove event should have been received before pointermove."); + }); + on_event(target0, "pointerdown", function (event) { + pointerdownReceived = true; + }); + on_event(target0, "pointerup", function (event) { + test_pointerrawmove.step(function() { + assert_true(pointerrawmoveFromButtonChangeReceived, + "Pointerrawmove event should have been received from chorded button changes."); + }, "Pointerrawmove event should have been received from chorded button changes."); + test_pointerrawmove.done(); + }); + } + + </script> + <div id="complete-notice"> + </div> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/quirks/unitless-length/excluded-properties.html b/tests/wpt/web-platform-tests/quirks/unitless-length/excluded-properties-001.html index a1de182770a..2e33cec0b33 100644 --- a/tests/wpt/web-platform-tests/quirks/unitless-length/excluded-properties.html +++ b/tests/wpt/web-platform-tests/quirks/unitless-length/excluded-properties-001.html @@ -14,7 +14,21 @@ 'use strict'; var properties = [ + 'background-position-x', + 'background-position-y', 'block-size', + 'border-bottom-left-radius', + 'border-bottom-right-radius', + 'border-top-left-radius', + 'border-top-right-radius', + 'column-gap', + 'column-rule-width', + 'column-width', + 'flex-basis', + 'grid-auto-columns', + 'grid-auto-rows', + 'grid-template-columns', + 'grid-template-rows', 'inline-size', 'margin-block-end', 'margin-block-start', @@ -23,10 +37,14 @@ var properties = [ 'min-block-size', 'min-inline-size', 'offset-distance', + 'outline-offset', + 'outline-width', 'padding-block-end', 'padding-block-start', 'padding-inline-end', 'padding-inline-start', + 'perspective', + 'row-gap', 'scroll-margin-block-end', 'scroll-margin-block-start', 'scroll-margin-bottom', diff --git a/tests/wpt/web-platform-tests/quirks/unitless-length/excluded-properties-002.html b/tests/wpt/web-platform-tests/quirks/unitless-length/excluded-properties-002.html new file mode 100644 index 00000000000..5f98bc283eb --- /dev/null +++ b/tests/wpt/web-platform-tests/quirks/unitless-length/excluded-properties-002.html @@ -0,0 +1,42 @@ +<html> +<head> +<meta charset="utf-8"> +<title>Many properties do not support quirky-length</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://quirks.spec.whatwg.org/#the-unitless-length-quirk"> +<meta name="assert" content="quirky-length is not supported by properties not listed."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +</head> +<body> +<div id="target"></div> +<script> +'use strict'; + +var properties = [ + 'background-blend-mode', + 'background-size', + 'box-shadow', + 'clip-path', + 'column-span', + 'filter', + 'mask', + 'object-position', + 'perspective-origin', + 'text-shadow', + 'transform-origin' +]; + +for (let property of properties) { + test(() => { + if (!getComputedStyle(target)[property]) { + assert_unreached('Property ' + property + ' not supported'); + } + target.style[property] = '1234'; + assert_not_equals(target.style[property], '1234'); + assert_not_equals(target.style[property], '1234px'); + }, 'Property ' + property + ' does not support quirky length'); +} +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/resources/chromium/image_capture-mojom.js.headers b/tests/wpt/web-platform-tests/resources/chromium/image_capture-mojom.js.headers new file mode 100644 index 00000000000..6c61a34a4ec --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/chromium/image_capture-mojom.js.headers @@ -0,0 +1 @@ +Content-Type: text/javascript; charset=utf-8
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/resources/chromium/image_capture.mojom.js b/tests/wpt/web-platform-tests/resources/chromium/image_capture.mojom.js new file mode 100644 index 00000000000..1d01581e023 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/chromium/image_capture.mojom.js @@ -0,0 +1,1329 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +'use strict'; + +(function() { + var mojomId = 'media/capture/mojom/image_capture.mojom'; + if (mojo.internal.isMojomLoaded(mojomId)) { + console.warn('The following mojom is loaded multiple times: ' + mojomId); + return; + } + mojo.internal.markMojomLoaded(mojomId); + var bindings = mojo; + var associatedBindings = mojo; + var codec = mojo.internal; + var validator = mojo.internal; + + var exports = mojo.internal.exposeNamespace('media.mojom'); + + + var MeteringMode = {}; + MeteringMode.NONE = 0; + MeteringMode.MANUAL = MeteringMode.NONE + 1; + MeteringMode.SINGLE_SHOT = MeteringMode.MANUAL + 1; + MeteringMode.CONTINUOUS = MeteringMode.SINGLE_SHOT + 1; + + MeteringMode.isKnownEnumValue = function(value) { + switch (value) { + case 0: + case 1: + case 2: + case 3: + return true; + } + return false; + }; + + MeteringMode.validate = function(enumValue) { + var isExtensible = false; + if (isExtensible || this.isKnownEnumValue(enumValue)) + return validator.validationError.NONE; + + return validator.validationError.UNKNOWN_ENUM_VALUE; + }; + var RedEyeReduction = {}; + RedEyeReduction.NEVER = 0; + RedEyeReduction.ALWAYS = RedEyeReduction.NEVER + 1; + RedEyeReduction.CONTROLLABLE = RedEyeReduction.ALWAYS + 1; + + RedEyeReduction.isKnownEnumValue = function(value) { + switch (value) { + case 0: + case 1: + case 2: + return true; + } + return false; + }; + + RedEyeReduction.validate = function(enumValue) { + var isExtensible = false; + if (isExtensible || this.isKnownEnumValue(enumValue)) + return validator.validationError.NONE; + + return validator.validationError.UNKNOWN_ENUM_VALUE; + }; + var FillLightMode = {}; + FillLightMode.OFF = 0; + FillLightMode.AUTO = FillLightMode.OFF + 1; + FillLightMode.FLASH = FillLightMode.AUTO + 1; + + FillLightMode.isKnownEnumValue = function(value) { + switch (value) { + case 0: + case 1: + case 2: + return true; + } + return false; + }; + + FillLightMode.validate = function(enumValue) { + var isExtensible = false; + if (isExtensible || this.isKnownEnumValue(enumValue)) + return validator.validationError.NONE; + + return validator.validationError.UNKNOWN_ENUM_VALUE; + }; + + function Range(values) { + this.initDefaults_(); + this.initFields_(values); + } + + + Range.prototype.initDefaults_ = function() { + this.max = 0; + this.min = 0; + this.current = 0; + this.step = 0; + }; + Range.prototype.initFields_ = function(fields) { + for(var field in fields) { + if (this.hasOwnProperty(field)) + this[field] = fields[field]; + } + }; + + Range.validate = function(messageValidator, offset) { + var err; + err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize); + if (err !== validator.validationError.NONE) + return err; + + var kVersionSizes = [ + {version: 0, numBytes: 40} + ]; + err = messageValidator.validateStructVersion(offset, kVersionSizes); + if (err !== validator.validationError.NONE) + return err; + + + + + + return validator.validationError.NONE; + }; + + Range.encodedSize = codec.kStructHeaderSize + 32; + + Range.decode = function(decoder) { + var packed; + var val = new Range(); + var numberOfBytes = decoder.readUint32(); + var version = decoder.readUint32(); + val.max = decoder.decodeStruct(codec.Double); + val.min = decoder.decodeStruct(codec.Double); + val.current = decoder.decodeStruct(codec.Double); + val.step = decoder.decodeStruct(codec.Double); + return val; + }; + + Range.encode = function(encoder, val) { + var packed; + encoder.writeUint32(Range.encodedSize); + encoder.writeUint32(0); + encoder.encodeStruct(codec.Double, val.max); + encoder.encodeStruct(codec.Double, val.min); + encoder.encodeStruct(codec.Double, val.current); + encoder.encodeStruct(codec.Double, val.step); + }; + function PhotoState(values) { + this.initDefaults_(); + this.initFields_(values); + } + + + PhotoState.prototype.initDefaults_ = function() { + this.supportedWhiteBalanceModes = null; + this.currentWhiteBalanceMode = 0; + this.currentExposureMode = 0; + this.supportedExposureModes = null; + this.supportedFocusModes = null; + this.currentFocusMode = 0; + this.supportsTorch = false; + this.torch = false; + this.pointsOfInterest = null; + this.exposureCompensation = null; + this.colorTemperature = null; + this.iso = null; + this.brightness = null; + this.contrast = null; + this.saturation = null; + this.sharpness = null; + this.zoom = null; + this.redEyeReduction = 0; + this.height = null; + this.width = null; + this.fillLightMode = null; + }; + PhotoState.prototype.initFields_ = function(fields) { + for(var field in fields) { + if (this.hasOwnProperty(field)) + this[field] = fields[field]; + } + }; + + PhotoState.validate = function(messageValidator, offset) { + var err; + err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize); + if (err !== validator.validationError.NONE) + return err; + + var kVersionSizes = [ + {version: 0, numBytes: 152} + ]; + err = messageValidator.validateStructVersion(offset, kVersionSizes); + if (err !== validator.validationError.NONE) + return err; + + + // validate PhotoState.supportedWhiteBalanceModes + err = messageValidator.validateArrayPointer(offset + codec.kStructHeaderSize + 0, 4, new codec.Enum(MeteringMode), false, [0], 0); + if (err !== validator.validationError.NONE) + return err; + + + // validate PhotoState.currentWhiteBalanceMode + err = messageValidator.validateEnum(offset + codec.kStructHeaderSize + 8, MeteringMode); + if (err !== validator.validationError.NONE) + return err; + + + // validate PhotoState.supportedExposureModes + err = messageValidator.validateArrayPointer(offset + codec.kStructHeaderSize + 16, 4, new codec.Enum(MeteringMode), false, [0], 0); + if (err !== validator.validationError.NONE) + return err; + + + // validate PhotoState.currentExposureMode + err = messageValidator.validateEnum(offset + codec.kStructHeaderSize + 12, MeteringMode); + if (err !== validator.validationError.NONE) + return err; + + + // validate PhotoState.supportedFocusModes + err = messageValidator.validateArrayPointer(offset + codec.kStructHeaderSize + 24, 4, new codec.Enum(MeteringMode), false, [0], 0); + if (err !== validator.validationError.NONE) + return err; + + + // validate PhotoState.currentFocusMode + err = messageValidator.validateEnum(offset + codec.kStructHeaderSize + 32, MeteringMode); + if (err !== validator.validationError.NONE) + return err; + + + // validate PhotoState.pointsOfInterest + err = messageValidator.validateArrayPointer(offset + codec.kStructHeaderSize + 40, 8, new codec.PointerTo(Point2D), false, [0], 0); + if (err !== validator.validationError.NONE) + return err; + + + // validate PhotoState.exposureCompensation + err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 48, Range, false); + if (err !== validator.validationError.NONE) + return err; + + + // validate PhotoState.colorTemperature + err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 56, Range, false); + if (err !== validator.validationError.NONE) + return err; + + + // validate PhotoState.iso + err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 64, Range, false); + if (err !== validator.validationError.NONE) + return err; + + + // validate PhotoState.brightness + err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 72, Range, false); + if (err !== validator.validationError.NONE) + return err; + + + // validate PhotoState.contrast + err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 80, Range, false); + if (err !== validator.validationError.NONE) + return err; + + + // validate PhotoState.saturation + err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 88, Range, false); + if (err !== validator.validationError.NONE) + return err; + + + // validate PhotoState.sharpness + err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 96, Range, false); + if (err !== validator.validationError.NONE) + return err; + + + // validate PhotoState.zoom + err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 104, Range, false); + if (err !== validator.validationError.NONE) + return err; + + + + + // validate PhotoState.redEyeReduction + err = messageValidator.validateEnum(offset + codec.kStructHeaderSize + 112, RedEyeReduction); + if (err !== validator.validationError.NONE) + return err; + + + // validate PhotoState.height + err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 120, Range, false); + if (err !== validator.validationError.NONE) + return err; + + + // validate PhotoState.width + err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 128, Range, false); + if (err !== validator.validationError.NONE) + return err; + + + // validate PhotoState.fillLightMode + err = messageValidator.validateArrayPointer(offset + codec.kStructHeaderSize + 136, 4, new codec.Enum(FillLightMode), false, [0], 0); + if (err !== validator.validationError.NONE) + return err; + + return validator.validationError.NONE; + }; + + PhotoState.encodedSize = codec.kStructHeaderSize + 144; + + PhotoState.decode = function(decoder) { + var packed; + var val = new PhotoState(); + var numberOfBytes = decoder.readUint32(); + var version = decoder.readUint32(); + val.supportedWhiteBalanceModes = decoder.decodeArrayPointer(new codec.Enum(MeteringMode)); + val.currentWhiteBalanceMode = decoder.decodeStruct(codec.Int32); + val.currentExposureMode = decoder.decodeStruct(codec.Int32); + val.supportedExposureModes = decoder.decodeArrayPointer(new codec.Enum(MeteringMode)); + val.supportedFocusModes = decoder.decodeArrayPointer(new codec.Enum(MeteringMode)); + val.currentFocusMode = decoder.decodeStruct(codec.Int32); + packed = decoder.readUint8(); + val.supportsTorch = (packed >> 0) & 1 ? true : false; + val.torch = (packed >> 1) & 1 ? true : false; + decoder.skip(1); + decoder.skip(1); + decoder.skip(1); + val.pointsOfInterest = decoder.decodeArrayPointer(new codec.PointerTo(Point2D)); + val.exposureCompensation = decoder.decodeStructPointer(Range); + val.colorTemperature = decoder.decodeStructPointer(Range); + val.iso = decoder.decodeStructPointer(Range); + val.brightness = decoder.decodeStructPointer(Range); + val.contrast = decoder.decodeStructPointer(Range); + val.saturation = decoder.decodeStructPointer(Range); + val.sharpness = decoder.decodeStructPointer(Range); + val.zoom = decoder.decodeStructPointer(Range); + val.redEyeReduction = decoder.decodeStruct(codec.Int32); + decoder.skip(1); + decoder.skip(1); + decoder.skip(1); + decoder.skip(1); + val.height = decoder.decodeStructPointer(Range); + val.width = decoder.decodeStructPointer(Range); + val.fillLightMode = decoder.decodeArrayPointer(new codec.Enum(FillLightMode)); + return val; + }; + + PhotoState.encode = function(encoder, val) { + var packed; + encoder.writeUint32(PhotoState.encodedSize); + encoder.writeUint32(0); + encoder.encodeArrayPointer(new codec.Enum(MeteringMode), val.supportedWhiteBalanceModes); + encoder.encodeStruct(codec.Int32, val.currentWhiteBalanceMode); + encoder.encodeStruct(codec.Int32, val.currentExposureMode); + encoder.encodeArrayPointer(new codec.Enum(MeteringMode), val.supportedExposureModes); + encoder.encodeArrayPointer(new codec.Enum(MeteringMode), val.supportedFocusModes); + encoder.encodeStruct(codec.Int32, val.currentFocusMode); + packed = 0; + packed |= (val.supportsTorch & 1) << 0 + packed |= (val.torch & 1) << 1 + encoder.writeUint8(packed); + encoder.skip(1); + encoder.skip(1); + encoder.skip(1); + encoder.encodeArrayPointer(new codec.PointerTo(Point2D), val.pointsOfInterest); + encoder.encodeStructPointer(Range, val.exposureCompensation); + encoder.encodeStructPointer(Range, val.colorTemperature); + encoder.encodeStructPointer(Range, val.iso); + encoder.encodeStructPointer(Range, val.brightness); + encoder.encodeStructPointer(Range, val.contrast); + encoder.encodeStructPointer(Range, val.saturation); + encoder.encodeStructPointer(Range, val.sharpness); + encoder.encodeStructPointer(Range, val.zoom); + encoder.encodeStruct(codec.Int32, val.redEyeReduction); + encoder.skip(1); + encoder.skip(1); + encoder.skip(1); + encoder.skip(1); + encoder.encodeStructPointer(Range, val.height); + encoder.encodeStructPointer(Range, val.width); + encoder.encodeArrayPointer(new codec.Enum(FillLightMode), val.fillLightMode); + }; + function Point2D(values) { + this.initDefaults_(); + this.initFields_(values); + } + + + Point2D.prototype.initDefaults_ = function() { + this.x = 0; + this.y = 0; + }; + Point2D.prototype.initFields_ = function(fields) { + for(var field in fields) { + if (this.hasOwnProperty(field)) + this[field] = fields[field]; + } + }; + + Point2D.validate = function(messageValidator, offset) { + var err; + err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize); + if (err !== validator.validationError.NONE) + return err; + + var kVersionSizes = [ + {version: 0, numBytes: 16} + ]; + err = messageValidator.validateStructVersion(offset, kVersionSizes); + if (err !== validator.validationError.NONE) + return err; + + + + return validator.validationError.NONE; + }; + + Point2D.encodedSize = codec.kStructHeaderSize + 8; + + Point2D.decode = function(decoder) { + var packed; + var val = new Point2D(); + var numberOfBytes = decoder.readUint32(); + var version = decoder.readUint32(); + val.x = decoder.decodeStruct(codec.Float); + val.y = decoder.decodeStruct(codec.Float); + return val; + }; + + Point2D.encode = function(encoder, val) { + var packed; + encoder.writeUint32(Point2D.encodedSize); + encoder.writeUint32(0); + encoder.encodeStruct(codec.Float, val.x); + encoder.encodeStruct(codec.Float, val.y); + }; + function PhotoSettings(values) { + this.initDefaults_(); + this.initFields_(values); + } + + + PhotoSettings.prototype.initDefaults_ = function() { + this.hasWhiteBalanceMode = false; + this.hasExposureMode = false; + this.hasFocusMode = false; + this.hasExposureCompensation = false; + this.hasColorTemperature = false; + this.hasIso = false; + this.hasBrightness = false; + this.hasContrast = false; + this.hasSaturation = false; + this.hasSharpness = false; + this.hasZoom = false; + this.hasTorch = false; + this.torch = false; + this.hasFillLightMode = false; + this.hasWidth = false; + this.hasHeight = false; + this.hasRedEyeReduction = false; + this.redEyeReduction = false; + this.whiteBalanceMode = 0; + this.exposureMode = 0; + this.focusMode = 0; + this.pointsOfInterest = null; + this.exposureCompensation = 0; + this.colorTemperature = 0; + this.iso = 0; + this.brightness = 0; + this.contrast = 0; + this.saturation = 0; + this.sharpness = 0; + this.zoom = 0; + this.fillLightMode = 0; + this.width = 0; + this.height = 0; + }; + PhotoSettings.prototype.initFields_ = function(fields) { + for(var field in fields) { + if (this.hasOwnProperty(field)) + this[field] = fields[field]; + } + }; + + PhotoSettings.validate = function(messageValidator, offset) { + var err; + err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize); + if (err !== validator.validationError.NONE) + return err; + + var kVersionSizes = [ + {version: 0, numBytes: 120} + ]; + err = messageValidator.validateStructVersion(offset, kVersionSizes); + if (err !== validator.validationError.NONE) + return err; + + + + // validate PhotoSettings.whiteBalanceMode + err = messageValidator.validateEnum(offset + codec.kStructHeaderSize + 4, MeteringMode); + if (err !== validator.validationError.NONE) + return err; + + + + // validate PhotoSettings.exposureMode + err = messageValidator.validateEnum(offset + codec.kStructHeaderSize + 8, MeteringMode); + if (err !== validator.validationError.NONE) + return err; + + + + // validate PhotoSettings.focusMode + err = messageValidator.validateEnum(offset + codec.kStructHeaderSize + 12, MeteringMode); + if (err !== validator.validationError.NONE) + return err; + + + // validate PhotoSettings.pointsOfInterest + err = messageValidator.validateArrayPointer(offset + codec.kStructHeaderSize + 16, 8, new codec.PointerTo(Point2D), false, [0], 0); + if (err !== validator.validationError.NONE) + return err; + + + + + + + + + + + + + + + + + + + + + + // validate PhotoSettings.fillLightMode + err = messageValidator.validateEnum(offset + codec.kStructHeaderSize + 88, FillLightMode); + if (err !== validator.validationError.NONE) + return err; + + + + + + + + return validator.validationError.NONE; + }; + + PhotoSettings.encodedSize = codec.kStructHeaderSize + 112; + + PhotoSettings.decode = function(decoder) { + var packed; + var val = new PhotoSettings(); + var numberOfBytes = decoder.readUint32(); + var version = decoder.readUint32(); + packed = decoder.readUint8(); + val.hasWhiteBalanceMode = (packed >> 0) & 1 ? true : false; + val.hasExposureMode = (packed >> 1) & 1 ? true : false; + val.hasFocusMode = (packed >> 2) & 1 ? true : false; + val.hasExposureCompensation = (packed >> 3) & 1 ? true : false; + val.hasColorTemperature = (packed >> 4) & 1 ? true : false; + val.hasIso = (packed >> 5) & 1 ? true : false; + val.hasBrightness = (packed >> 6) & 1 ? true : false; + val.hasContrast = (packed >> 7) & 1 ? true : false; + packed = decoder.readUint8(); + val.hasSaturation = (packed >> 0) & 1 ? true : false; + val.hasSharpness = (packed >> 1) & 1 ? true : false; + val.hasZoom = (packed >> 2) & 1 ? true : false; + val.hasTorch = (packed >> 3) & 1 ? true : false; + val.torch = (packed >> 4) & 1 ? true : false; + val.hasFillLightMode = (packed >> 5) & 1 ? true : false; + val.hasWidth = (packed >> 6) & 1 ? true : false; + val.hasHeight = (packed >> 7) & 1 ? true : false; + packed = decoder.readUint8(); + val.hasRedEyeReduction = (packed >> 0) & 1 ? true : false; + val.redEyeReduction = (packed >> 1) & 1 ? true : false; + decoder.skip(1); + val.whiteBalanceMode = decoder.decodeStruct(codec.Int32); + val.exposureMode = decoder.decodeStruct(codec.Int32); + val.focusMode = decoder.decodeStruct(codec.Int32); + val.pointsOfInterest = decoder.decodeArrayPointer(new codec.PointerTo(Point2D)); + val.exposureCompensation = decoder.decodeStruct(codec.Double); + val.colorTemperature = decoder.decodeStruct(codec.Double); + val.iso = decoder.decodeStruct(codec.Double); + val.brightness = decoder.decodeStruct(codec.Double); + val.contrast = decoder.decodeStruct(codec.Double); + val.saturation = decoder.decodeStruct(codec.Double); + val.sharpness = decoder.decodeStruct(codec.Double); + val.zoom = decoder.decodeStruct(codec.Double); + val.fillLightMode = decoder.decodeStruct(codec.Int32); + decoder.skip(1); + decoder.skip(1); + decoder.skip(1); + decoder.skip(1); + val.width = decoder.decodeStruct(codec.Double); + val.height = decoder.decodeStruct(codec.Double); + return val; + }; + + PhotoSettings.encode = function(encoder, val) { + var packed; + encoder.writeUint32(PhotoSettings.encodedSize); + encoder.writeUint32(0); + packed = 0; + packed |= (val.hasWhiteBalanceMode & 1) << 0 + packed |= (val.hasExposureMode & 1) << 1 + packed |= (val.hasFocusMode & 1) << 2 + packed |= (val.hasExposureCompensation & 1) << 3 + packed |= (val.hasColorTemperature & 1) << 4 + packed |= (val.hasIso & 1) << 5 + packed |= (val.hasBrightness & 1) << 6 + packed |= (val.hasContrast & 1) << 7 + encoder.writeUint8(packed); + packed = 0; + packed |= (val.hasSaturation & 1) << 0 + packed |= (val.hasSharpness & 1) << 1 + packed |= (val.hasZoom & 1) << 2 + packed |= (val.hasTorch & 1) << 3 + packed |= (val.torch & 1) << 4 + packed |= (val.hasFillLightMode & 1) << 5 + packed |= (val.hasWidth & 1) << 6 + packed |= (val.hasHeight & 1) << 7 + encoder.writeUint8(packed); + packed = 0; + packed |= (val.hasRedEyeReduction & 1) << 0 + packed |= (val.redEyeReduction & 1) << 1 + encoder.writeUint8(packed); + encoder.skip(1); + encoder.encodeStruct(codec.Int32, val.whiteBalanceMode); + encoder.encodeStruct(codec.Int32, val.exposureMode); + encoder.encodeStruct(codec.Int32, val.focusMode); + encoder.encodeArrayPointer(new codec.PointerTo(Point2D), val.pointsOfInterest); + encoder.encodeStruct(codec.Double, val.exposureCompensation); + encoder.encodeStruct(codec.Double, val.colorTemperature); + encoder.encodeStruct(codec.Double, val.iso); + encoder.encodeStruct(codec.Double, val.brightness); + encoder.encodeStruct(codec.Double, val.contrast); + encoder.encodeStruct(codec.Double, val.saturation); + encoder.encodeStruct(codec.Double, val.sharpness); + encoder.encodeStruct(codec.Double, val.zoom); + encoder.encodeStruct(codec.Int32, val.fillLightMode); + encoder.skip(1); + encoder.skip(1); + encoder.skip(1); + encoder.skip(1); + encoder.encodeStruct(codec.Double, val.width); + encoder.encodeStruct(codec.Double, val.height); + }; + function Blob(values) { + this.initDefaults_(); + this.initFields_(values); + } + + + Blob.prototype.initDefaults_ = function() { + this.mimeType = null; + this.data = null; + }; + Blob.prototype.initFields_ = function(fields) { + for(var field in fields) { + if (this.hasOwnProperty(field)) + this[field] = fields[field]; + } + }; + + Blob.validate = function(messageValidator, offset) { + var err; + err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize); + if (err !== validator.validationError.NONE) + return err; + + var kVersionSizes = [ + {version: 0, numBytes: 24} + ]; + err = messageValidator.validateStructVersion(offset, kVersionSizes); + if (err !== validator.validationError.NONE) + return err; + + + // validate Blob.mimeType + err = messageValidator.validateStringPointer(offset + codec.kStructHeaderSize + 0, false) + if (err !== validator.validationError.NONE) + return err; + + + // validate Blob.data + err = messageValidator.validateArrayPointer(offset + codec.kStructHeaderSize + 8, 1, codec.Uint8, false, [0], 0); + if (err !== validator.validationError.NONE) + return err; + + return validator.validationError.NONE; + }; + + Blob.encodedSize = codec.kStructHeaderSize + 16; + + Blob.decode = function(decoder) { + var packed; + var val = new Blob(); + var numberOfBytes = decoder.readUint32(); + var version = decoder.readUint32(); + val.mimeType = decoder.decodeStruct(codec.String); + val.data = decoder.decodeArrayPointer(codec.Uint8); + return val; + }; + + Blob.encode = function(encoder, val) { + var packed; + encoder.writeUint32(Blob.encodedSize); + encoder.writeUint32(0); + encoder.encodeStruct(codec.String, val.mimeType); + encoder.encodeArrayPointer(codec.Uint8, val.data); + }; + function ImageCapture_GetPhotoState_Params(values) { + this.initDefaults_(); + this.initFields_(values); + } + + + ImageCapture_GetPhotoState_Params.prototype.initDefaults_ = function() { + this.sourceId = null; + }; + ImageCapture_GetPhotoState_Params.prototype.initFields_ = function(fields) { + for(var field in fields) { + if (this.hasOwnProperty(field)) + this[field] = fields[field]; + } + }; + + ImageCapture_GetPhotoState_Params.validate = function(messageValidator, offset) { + var err; + err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize); + if (err !== validator.validationError.NONE) + return err; + + var kVersionSizes = [ + {version: 0, numBytes: 16} + ]; + err = messageValidator.validateStructVersion(offset, kVersionSizes); + if (err !== validator.validationError.NONE) + return err; + + + // validate ImageCapture_GetPhotoState_Params.sourceId + err = messageValidator.validateStringPointer(offset + codec.kStructHeaderSize + 0, false) + if (err !== validator.validationError.NONE) + return err; + + return validator.validationError.NONE; + }; + + ImageCapture_GetPhotoState_Params.encodedSize = codec.kStructHeaderSize + 8; + + ImageCapture_GetPhotoState_Params.decode = function(decoder) { + var packed; + var val = new ImageCapture_GetPhotoState_Params(); + var numberOfBytes = decoder.readUint32(); + var version = decoder.readUint32(); + val.sourceId = decoder.decodeStruct(codec.String); + return val; + }; + + ImageCapture_GetPhotoState_Params.encode = function(encoder, val) { + var packed; + encoder.writeUint32(ImageCapture_GetPhotoState_Params.encodedSize); + encoder.writeUint32(0); + encoder.encodeStruct(codec.String, val.sourceId); + }; + function ImageCapture_GetPhotoState_ResponseParams(values) { + this.initDefaults_(); + this.initFields_(values); + } + + + ImageCapture_GetPhotoState_ResponseParams.prototype.initDefaults_ = function() { + this.state = null; + }; + ImageCapture_GetPhotoState_ResponseParams.prototype.initFields_ = function(fields) { + for(var field in fields) { + if (this.hasOwnProperty(field)) + this[field] = fields[field]; + } + }; + + ImageCapture_GetPhotoState_ResponseParams.validate = function(messageValidator, offset) { + var err; + err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize); + if (err !== validator.validationError.NONE) + return err; + + var kVersionSizes = [ + {version: 0, numBytes: 16} + ]; + err = messageValidator.validateStructVersion(offset, kVersionSizes); + if (err !== validator.validationError.NONE) + return err; + + + // validate ImageCapture_GetPhotoState_ResponseParams.state + err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 0, PhotoState, false); + if (err !== validator.validationError.NONE) + return err; + + return validator.validationError.NONE; + }; + + ImageCapture_GetPhotoState_ResponseParams.encodedSize = codec.kStructHeaderSize + 8; + + ImageCapture_GetPhotoState_ResponseParams.decode = function(decoder) { + var packed; + var val = new ImageCapture_GetPhotoState_ResponseParams(); + var numberOfBytes = decoder.readUint32(); + var version = decoder.readUint32(); + val.state = decoder.decodeStructPointer(PhotoState); + return val; + }; + + ImageCapture_GetPhotoState_ResponseParams.encode = function(encoder, val) { + var packed; + encoder.writeUint32(ImageCapture_GetPhotoState_ResponseParams.encodedSize); + encoder.writeUint32(0); + encoder.encodeStructPointer(PhotoState, val.state); + }; + function ImageCapture_SetOptions_Params(values) { + this.initDefaults_(); + this.initFields_(values); + } + + + ImageCapture_SetOptions_Params.prototype.initDefaults_ = function() { + this.sourceId = null; + this.settings = null; + }; + ImageCapture_SetOptions_Params.prototype.initFields_ = function(fields) { + for(var field in fields) { + if (this.hasOwnProperty(field)) + this[field] = fields[field]; + } + }; + + ImageCapture_SetOptions_Params.validate = function(messageValidator, offset) { + var err; + err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize); + if (err !== validator.validationError.NONE) + return err; + + var kVersionSizes = [ + {version: 0, numBytes: 24} + ]; + err = messageValidator.validateStructVersion(offset, kVersionSizes); + if (err !== validator.validationError.NONE) + return err; + + + // validate ImageCapture_SetOptions_Params.sourceId + err = messageValidator.validateStringPointer(offset + codec.kStructHeaderSize + 0, false) + if (err !== validator.validationError.NONE) + return err; + + + // validate ImageCapture_SetOptions_Params.settings + err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 8, PhotoSettings, false); + if (err !== validator.validationError.NONE) + return err; + + return validator.validationError.NONE; + }; + + ImageCapture_SetOptions_Params.encodedSize = codec.kStructHeaderSize + 16; + + ImageCapture_SetOptions_Params.decode = function(decoder) { + var packed; + var val = new ImageCapture_SetOptions_Params(); + var numberOfBytes = decoder.readUint32(); + var version = decoder.readUint32(); + val.sourceId = decoder.decodeStruct(codec.String); + val.settings = decoder.decodeStructPointer(PhotoSettings); + return val; + }; + + ImageCapture_SetOptions_Params.encode = function(encoder, val) { + var packed; + encoder.writeUint32(ImageCapture_SetOptions_Params.encodedSize); + encoder.writeUint32(0); + encoder.encodeStruct(codec.String, val.sourceId); + encoder.encodeStructPointer(PhotoSettings, val.settings); + }; + function ImageCapture_SetOptions_ResponseParams(values) { + this.initDefaults_(); + this.initFields_(values); + } + + + ImageCapture_SetOptions_ResponseParams.prototype.initDefaults_ = function() { + this.success = false; + }; + ImageCapture_SetOptions_ResponseParams.prototype.initFields_ = function(fields) { + for(var field in fields) { + if (this.hasOwnProperty(field)) + this[field] = fields[field]; + } + }; + + ImageCapture_SetOptions_ResponseParams.validate = function(messageValidator, offset) { + var err; + err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize); + if (err !== validator.validationError.NONE) + return err; + + var kVersionSizes = [ + {version: 0, numBytes: 16} + ]; + err = messageValidator.validateStructVersion(offset, kVersionSizes); + if (err !== validator.validationError.NONE) + return err; + + + return validator.validationError.NONE; + }; + + ImageCapture_SetOptions_ResponseParams.encodedSize = codec.kStructHeaderSize + 8; + + ImageCapture_SetOptions_ResponseParams.decode = function(decoder) { + var packed; + var val = new ImageCapture_SetOptions_ResponseParams(); + var numberOfBytes = decoder.readUint32(); + var version = decoder.readUint32(); + packed = decoder.readUint8(); + val.success = (packed >> 0) & 1 ? true : false; + decoder.skip(1); + decoder.skip(1); + decoder.skip(1); + decoder.skip(1); + decoder.skip(1); + decoder.skip(1); + decoder.skip(1); + return val; + }; + + ImageCapture_SetOptions_ResponseParams.encode = function(encoder, val) { + var packed; + encoder.writeUint32(ImageCapture_SetOptions_ResponseParams.encodedSize); + encoder.writeUint32(0); + packed = 0; + packed |= (val.success & 1) << 0 + encoder.writeUint8(packed); + encoder.skip(1); + encoder.skip(1); + encoder.skip(1); + encoder.skip(1); + encoder.skip(1); + encoder.skip(1); + encoder.skip(1); + }; + function ImageCapture_TakePhoto_Params(values) { + this.initDefaults_(); + this.initFields_(values); + } + + + ImageCapture_TakePhoto_Params.prototype.initDefaults_ = function() { + this.sourceId = null; + }; + ImageCapture_TakePhoto_Params.prototype.initFields_ = function(fields) { + for(var field in fields) { + if (this.hasOwnProperty(field)) + this[field] = fields[field]; + } + }; + + ImageCapture_TakePhoto_Params.validate = function(messageValidator, offset) { + var err; + err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize); + if (err !== validator.validationError.NONE) + return err; + + var kVersionSizes = [ + {version: 0, numBytes: 16} + ]; + err = messageValidator.validateStructVersion(offset, kVersionSizes); + if (err !== validator.validationError.NONE) + return err; + + + // validate ImageCapture_TakePhoto_Params.sourceId + err = messageValidator.validateStringPointer(offset + codec.kStructHeaderSize + 0, false) + if (err !== validator.validationError.NONE) + return err; + + return validator.validationError.NONE; + }; + + ImageCapture_TakePhoto_Params.encodedSize = codec.kStructHeaderSize + 8; + + ImageCapture_TakePhoto_Params.decode = function(decoder) { + var packed; + var val = new ImageCapture_TakePhoto_Params(); + var numberOfBytes = decoder.readUint32(); + var version = decoder.readUint32(); + val.sourceId = decoder.decodeStruct(codec.String); + return val; + }; + + ImageCapture_TakePhoto_Params.encode = function(encoder, val) { + var packed; + encoder.writeUint32(ImageCapture_TakePhoto_Params.encodedSize); + encoder.writeUint32(0); + encoder.encodeStruct(codec.String, val.sourceId); + }; + function ImageCapture_TakePhoto_ResponseParams(values) { + this.initDefaults_(); + this.initFields_(values); + } + + + ImageCapture_TakePhoto_ResponseParams.prototype.initDefaults_ = function() { + this.blob = null; + }; + ImageCapture_TakePhoto_ResponseParams.prototype.initFields_ = function(fields) { + for(var field in fields) { + if (this.hasOwnProperty(field)) + this[field] = fields[field]; + } + }; + + ImageCapture_TakePhoto_ResponseParams.validate = function(messageValidator, offset) { + var err; + err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize); + if (err !== validator.validationError.NONE) + return err; + + var kVersionSizes = [ + {version: 0, numBytes: 16} + ]; + err = messageValidator.validateStructVersion(offset, kVersionSizes); + if (err !== validator.validationError.NONE) + return err; + + + // validate ImageCapture_TakePhoto_ResponseParams.blob + err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 0, Blob, false); + if (err !== validator.validationError.NONE) + return err; + + return validator.validationError.NONE; + }; + + ImageCapture_TakePhoto_ResponseParams.encodedSize = codec.kStructHeaderSize + 8; + + ImageCapture_TakePhoto_ResponseParams.decode = function(decoder) { + var packed; + var val = new ImageCapture_TakePhoto_ResponseParams(); + var numberOfBytes = decoder.readUint32(); + var version = decoder.readUint32(); + val.blob = decoder.decodeStructPointer(Blob); + return val; + }; + + ImageCapture_TakePhoto_ResponseParams.encode = function(encoder, val) { + var packed; + encoder.writeUint32(ImageCapture_TakePhoto_ResponseParams.encodedSize); + encoder.writeUint32(0); + encoder.encodeStructPointer(Blob, val.blob); + }; + var kImageCapture_GetPhotoState_Name = 0; + var kImageCapture_SetOptions_Name = 1; + var kImageCapture_TakePhoto_Name = 2; + + function ImageCapturePtr(handleOrPtrInfo) { + this.ptr = new bindings.InterfacePtrController(ImageCapture, + handleOrPtrInfo); + } + + function ImageCaptureAssociatedPtr(associatedInterfacePtrInfo) { + this.ptr = new associatedBindings.AssociatedInterfacePtrController( + ImageCapture, associatedInterfacePtrInfo); + } + + ImageCaptureAssociatedPtr.prototype = + Object.create(ImageCapturePtr.prototype); + ImageCaptureAssociatedPtr.prototype.constructor = + ImageCaptureAssociatedPtr; + + function ImageCaptureProxy(receiver) { + this.receiver_ = receiver; + } + ImageCapturePtr.prototype.getPhotoState = function() { + return ImageCaptureProxy.prototype.getPhotoState + .apply(this.ptr.getProxy(), arguments); + }; + + ImageCaptureProxy.prototype.getPhotoState = function(sourceId) { + var params_ = new ImageCapture_GetPhotoState_Params(); + params_.sourceId = sourceId; + return new Promise(function(resolve, reject) { + var builder = new codec.MessageV1Builder( + kImageCapture_GetPhotoState_Name, + codec.align(ImageCapture_GetPhotoState_Params.encodedSize), + codec.kMessageExpectsResponse, 0); + builder.encodeStruct(ImageCapture_GetPhotoState_Params, params_); + var message = builder.finish(); + this.receiver_.acceptAndExpectResponse(message).then(function(message) { + var reader = new codec.MessageReader(message); + var responseParams = + reader.decodeStruct(ImageCapture_GetPhotoState_ResponseParams); + resolve(responseParams); + }).catch(function(result) { + reject(Error("Connection error: " + result)); + }); + }.bind(this)); + }; + ImageCapturePtr.prototype.setOptions = function() { + return ImageCaptureProxy.prototype.setOptions + .apply(this.ptr.getProxy(), arguments); + }; + + ImageCaptureProxy.prototype.setOptions = function(sourceId, settings) { + var params_ = new ImageCapture_SetOptions_Params(); + params_.sourceId = sourceId; + params_.settings = settings; + return new Promise(function(resolve, reject) { + var builder = new codec.MessageV1Builder( + kImageCapture_SetOptions_Name, + codec.align(ImageCapture_SetOptions_Params.encodedSize), + codec.kMessageExpectsResponse, 0); + builder.encodeStruct(ImageCapture_SetOptions_Params, params_); + var message = builder.finish(); + this.receiver_.acceptAndExpectResponse(message).then(function(message) { + var reader = new codec.MessageReader(message); + var responseParams = + reader.decodeStruct(ImageCapture_SetOptions_ResponseParams); + resolve(responseParams); + }).catch(function(result) { + reject(Error("Connection error: " + result)); + }); + }.bind(this)); + }; + ImageCapturePtr.prototype.takePhoto = function() { + return ImageCaptureProxy.prototype.takePhoto + .apply(this.ptr.getProxy(), arguments); + }; + + ImageCaptureProxy.prototype.takePhoto = function(sourceId) { + var params_ = new ImageCapture_TakePhoto_Params(); + params_.sourceId = sourceId; + return new Promise(function(resolve, reject) { + var builder = new codec.MessageV1Builder( + kImageCapture_TakePhoto_Name, + codec.align(ImageCapture_TakePhoto_Params.encodedSize), + codec.kMessageExpectsResponse, 0); + builder.encodeStruct(ImageCapture_TakePhoto_Params, params_); + var message = builder.finish(); + this.receiver_.acceptAndExpectResponse(message).then(function(message) { + var reader = new codec.MessageReader(message); + var responseParams = + reader.decodeStruct(ImageCapture_TakePhoto_ResponseParams); + resolve(responseParams); + }).catch(function(result) { + reject(Error("Connection error: " + result)); + }); + }.bind(this)); + }; + + function ImageCaptureStub(delegate) { + this.delegate_ = delegate; + } + ImageCaptureStub.prototype.getPhotoState = function(sourceId) { + return this.delegate_ && this.delegate_.getPhotoState && this.delegate_.getPhotoState(sourceId); + } + ImageCaptureStub.prototype.setOptions = function(sourceId, settings) { + return this.delegate_ && this.delegate_.setOptions && this.delegate_.setOptions(sourceId, settings); + } + ImageCaptureStub.prototype.takePhoto = function(sourceId) { + return this.delegate_ && this.delegate_.takePhoto && this.delegate_.takePhoto(sourceId); + } + + ImageCaptureStub.prototype.accept = function(message) { + var reader = new codec.MessageReader(message); + switch (reader.messageName) { + default: + return false; + } + }; + + ImageCaptureStub.prototype.acceptWithResponder = + function(message, responder) { + var reader = new codec.MessageReader(message); + switch (reader.messageName) { + case kImageCapture_GetPhotoState_Name: + var params = reader.decodeStruct(ImageCapture_GetPhotoState_Params); + this.getPhotoState(params.sourceId).then(function(response) { + var responseParams = + new ImageCapture_GetPhotoState_ResponseParams(); + responseParams.state = response.state; + var builder = new codec.MessageV1Builder( + kImageCapture_GetPhotoState_Name, + codec.align(ImageCapture_GetPhotoState_ResponseParams.encodedSize), + codec.kMessageIsResponse, reader.requestID); + builder.encodeStruct(ImageCapture_GetPhotoState_ResponseParams, + responseParams); + var message = builder.finish(); + responder.accept(message); + }); + return true; + case kImageCapture_SetOptions_Name: + var params = reader.decodeStruct(ImageCapture_SetOptions_Params); + this.setOptions(params.sourceId, params.settings).then(function(response) { + var responseParams = + new ImageCapture_SetOptions_ResponseParams(); + responseParams.success = response.success; + var builder = new codec.MessageV1Builder( + kImageCapture_SetOptions_Name, + codec.align(ImageCapture_SetOptions_ResponseParams.encodedSize), + codec.kMessageIsResponse, reader.requestID); + builder.encodeStruct(ImageCapture_SetOptions_ResponseParams, + responseParams); + var message = builder.finish(); + responder.accept(message); + }); + return true; + case kImageCapture_TakePhoto_Name: + var params = reader.decodeStruct(ImageCapture_TakePhoto_Params); + this.takePhoto(params.sourceId).then(function(response) { + var responseParams = + new ImageCapture_TakePhoto_ResponseParams(); + responseParams.blob = response.blob; + var builder = new codec.MessageV1Builder( + kImageCapture_TakePhoto_Name, + codec.align(ImageCapture_TakePhoto_ResponseParams.encodedSize), + codec.kMessageIsResponse, reader.requestID); + builder.encodeStruct(ImageCapture_TakePhoto_ResponseParams, + responseParams); + var message = builder.finish(); + responder.accept(message); + }); + return true; + default: + return false; + } + }; + + function validateImageCaptureRequest(messageValidator) { + var message = messageValidator.message; + var paramsClass = null; + switch (message.getName()) { + case kImageCapture_GetPhotoState_Name: + if (message.expectsResponse()) + paramsClass = ImageCapture_GetPhotoState_Params; + break; + case kImageCapture_SetOptions_Name: + if (message.expectsResponse()) + paramsClass = ImageCapture_SetOptions_Params; + break; + case kImageCapture_TakePhoto_Name: + if (message.expectsResponse()) + paramsClass = ImageCapture_TakePhoto_Params; + break; + } + if (paramsClass === null) + return validator.validationError.NONE; + return paramsClass.validate(messageValidator, messageValidator.message.getHeaderNumBytes()); + } + + function validateImageCaptureResponse(messageValidator) { + var message = messageValidator.message; + var paramsClass = null; + switch (message.getName()) { + case kImageCapture_GetPhotoState_Name: + if (message.isResponse()) + paramsClass = ImageCapture_GetPhotoState_ResponseParams; + break; + case kImageCapture_SetOptions_Name: + if (message.isResponse()) + paramsClass = ImageCapture_SetOptions_ResponseParams; + break; + case kImageCapture_TakePhoto_Name: + if (message.isResponse()) + paramsClass = ImageCapture_TakePhoto_ResponseParams; + break; + } + if (paramsClass === null) + return validator.validationError.NONE; + return paramsClass.validate(messageValidator, messageValidator.message.getHeaderNumBytes()); + } + + var ImageCapture = { + name: 'media.mojom.ImageCapture', + kVersion: 0, + ptrClass: ImageCapturePtr, + proxyClass: ImageCaptureProxy, + stubClass: ImageCaptureStub, + validateRequest: validateImageCaptureRequest, + validateResponse: validateImageCaptureResponse, + }; + ImageCaptureStub.prototype.validator = validateImageCaptureRequest; + ImageCaptureProxy.prototype.validator = validateImageCaptureResponse; + exports.MeteringMode = MeteringMode; + exports.RedEyeReduction = RedEyeReduction; + exports.FillLightMode = FillLightMode; + exports.Range = Range; + exports.PhotoState = PhotoState; + exports.Point2D = Point2D; + exports.PhotoSettings = PhotoSettings; + exports.Blob = Blob; + exports.ImageCapture = ImageCapture; + exports.ImageCapturePtr = ImageCapturePtr; + exports.ImageCaptureAssociatedPtr = ImageCaptureAssociatedPtr; +})();
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/resources/chromium/mock-imagecapture.js b/tests/wpt/web-platform-tests/resources/chromium/mock-imagecapture.js new file mode 100644 index 00000000000..a700bc97b3e --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/chromium/mock-imagecapture.js @@ -0,0 +1,227 @@ +"use strict"; + +var ImageCaptureTest = (() => { + // Class that mocks ImageCapture interface defined in + // https://cs.chromium.org/chromium/src/media/capture/mojom/image_capture.mojom + class MockImageCapture { + constructor() { + this.interceptor_ = new MojoInterfaceInterceptor( + media.mojom.ImageCapture.name); + this.interceptor_.oninterfacerequest = + e => this.bindingSet_.addBinding(this, e.handle); + this.interceptor_.start(); + + this.state_ = { + state: { + supportedWhiteBalanceModes: [ + media.mojom.MeteringMode.SINGLE_SHOT, + media.mojom.MeteringMode.CONTINUOUS + ], + currentWhiteBalanceMode: media.mojom.MeteringMode.CONTINUOUS, + supportedExposureModes: [ + media.mojom.MeteringMode.SINGLE_SHOT, + media.mojom.MeteringMode.CONTINUOUS + ], + currentExposureMode: media.mojom.MeteringMode.SINGLE_SHOT, + supportedFocusModes: [ + media.mojom.MeteringMode.MANUAL, + media.mojom.MeteringMode.SINGLE_SHOT + ], + currentFocusMode: media.mojom.MeteringMode.MANUAL, + pointsOfInterest: [{ + x: 0.4, + y: 0.6 + }], + + exposureCompensation: { + min: -200.0, + max: 200.0, + current: 33.0, + step: 33.0 + }, + colorTemperature: { + min: 2500.0, + max: 6500.0, + current: 6000.0, + step: 1000.0 + }, + iso: { + min: 100.0, + max: 12000.0, + current: 400.0, + step: 1.0 + }, + + brightness: { + min: 1.0, + max: 10.0, + current: 5.0, + step: 1.0 + }, + contrast: { + min: 2.0, + max: 9.0, + current: 5.0, + step: 1.0 + }, + saturation: { + min: 3.0, + max: 8.0, + current: 6.0, + step: 1.0 + }, + sharpness: { + min: 4.0, + max: 7.0, + current: 7.0, + step: 1.0 + }, + + zoom: { + min: 0.0, + max: 10.0, + current: 5.0, + step: 5.0 + }, + + supportsTorch: true, + torch: false, + + redEyeReduction: media.mojom.RedEyeReduction.CONTROLLABLE, + height: { + min: 240.0, + max: 2448.0, + current: 240.0, + step: 2.0 + }, + width: { + min: 320.0, + max: 3264.0, + current: 320.0, + step: 3.0 + }, + fillLightMode: [ + media.mojom.FillLightMode.AUTO, media.mojom.FillLightMode.FLASH + ], + } + }; + this.settings_ = null; + this.bindingSet_ = new mojo.BindingSet(media.mojom.ImageCapture); + } + + reset() { + this.bindingSet_.closeAllBindings(); + this.interceptor_.stop(); + } + + getPhotoState(source_id) { + return Promise.resolve(this.state_); + } + + setOptions(source_id, settings) { + this.settings_ = settings; + if (settings.hasIso) + this.state_.state.iso.current = settings.iso; + if (settings.hasHeight) + this.state_.state.height.current = settings.height; + if (settings.hasWidth) + this.state_.state.width.current = settings.width; + if (settings.hasZoom) + this.state_.state.zoom.current = settings.zoom; + if (settings.hasFocusMode) + this.state_.state.currentFocusMode = settings.focusMode; + + if (settings.pointsOfInterest.length > 0) { + this.state_.state.pointsOfInterest = + settings.pointsOfInterest; + } + + if (settings.hasExposureMode) + this.state_.state.currentExposureMode = settings.exposureMode; + + if (settings.hasExposureCompensation) { + this.state_.state.exposureCompensation.current = + settings.exposureCompensation; + } + if (settings.hasWhiteBalanceMode) { + this.state_.state.currentWhiteBalanceMode = + settings.whiteBalanceMode; + } + if (settings.hasFillLightMode) + this.state_.state.fillLightMode = [settings.fillLightMode]; + if (settings.hasRedEyeReduction) + this.state_.state.redEyeReduction = settings.redEyeReduction; + if (settings.hasColorTemperature) { + this.state_.state.colorTemperature.current = + settings.colorTemperature; + } + if (settings.hasBrightness) + this.state_.state.brightness.current = settings.brightness; + if (settings.hasContrast) + this.state_.state.contrast.current = settings.contrast; + if (settings.hasSaturation) + this.state_.state.saturation.current = settings.saturation; + if (settings.hasSharpness) + this.state_.state.sharpness.current = settings.sharpness; + + if (settings.hasTorch) + this.state_.state.torch = settings.torch; + + return Promise.resolve({ + success: true + }); + } + + takePhoto(source_id) { + return Promise.resolve({ + blob: { + mimeType: 'image/cat', + data: new Array(2) + } + }); + } + + state() { + return this.state_.state; + } + + options() { + return this.settings_; + } + } + + let testInternal = { + initialized: false, + mockImageCapture: null + } + + class ImageCaptureTestChromium { + + constructor() { + Object.freeze(this); // Make it immutable. + } + + initialize() { + if (testInternal.initialized) + throw new Error('Call reset() before initialize().'); + + testInternal.mockImageCapture = new MockImageCapture; + testInternal.initialized = true; + } + // Resets state of image capture mocks between test runs. + async reset() { + if (!testInternal.initialized) + throw new Error('Call initialize() before reset().'); + testInternal.mockImageCapture.reset(); + testInternal.mockImageCapture = null; + testInternal.initialized = false; + + await new Promise(resolve => setTimeout(resolve, 0)); + } + mockImageCapture() { + return testInternal.mockImageCapture; + } + } + + return ImageCaptureTestChromium; +})();
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/resources/chromium/webusb-child-test.js b/tests/wpt/web-platform-tests/resources/chromium/webusb-child-test.js new file mode 100644 index 00000000000..add04fa5825 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/chromium/webusb-child-test.js @@ -0,0 +1,40 @@ +'use strict'; + +// This polyfill prepares a child context to be attached to a parent context. +// The parent must call navigator.usb.test.attachToContext() to attach to the +// child context. +(() => { + if (this.constructor.name === 'DedicatedWorkerGlobalScope' || + this !== window.top) { + + // Run Chromium specific set up code. + if (typeof MojoInterfaceInterceptor !== 'undefined') { + let messageChannel = new MessageChannel(); + messageChannel.port1.onmessage = async (messageEvent) => { + if (messageEvent.data.type === 'Attach') { + messageEvent.data.interfaces.forEach(interfaceName => { + let interfaceInterceptor = + new MojoInterfaceInterceptor(interfaceName); + interfaceInterceptor.oninterfacerequest = + e => messageChannel.port1.postMessage({ + type: interfaceName, + handle: e.handle + }, [e.handle]); + interfaceInterceptor.start(); + }); + + // Wait for a call to GetDevices() to ensure that the interface + // handles are forwarded to the parent context. + await navigator.usb.getDevices(); + messageChannel.port1.postMessage({ type: 'Complete' }); + } + }; + + let message = { type: 'ReadyForAttachment', port: messageChannel.port2 }; + if (typeof Window !== 'undefined') + parent.postMessage(message, '*', [messageChannel.port2]); + else + postMessage(message, [messageChannel.port2]); + } + } +})(); diff --git a/tests/wpt/web-platform-tests/resources/chromium/webusb-child-test.js.headers b/tests/wpt/web-platform-tests/resources/chromium/webusb-child-test.js.headers new file mode 100644 index 00000000000..6805c323df5 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/chromium/webusb-child-test.js.headers @@ -0,0 +1 @@ +Content-Type: text/javascript; charset=utf-8 diff --git a/tests/wpt/web-platform-tests/resources/chromium/webusb-test.js b/tests/wpt/web-platform-tests/resources/chromium/webusb-test.js index 9037a109c91..5f9262655f3 100644 --- a/tests/wpt/web-platform-tests/resources/chromium/webusb-test.js +++ b/tests/wpt/web-platform-tests/resources/chromium/webusb-test.js @@ -12,9 +12,23 @@ let internal = { webUsbService: null, webUsbServiceInterceptor: null, - webUsbServiceCrossFrameProxy: null, + + messagePort: null, }; +function getMessagePort(target) { + return new Promise(resolve => { + target.addEventListener('message', messageEvent => { + if (messageEvent.data.type === 'ReadyForAttachment') { + if (internal.messagePort === null) { + internal.messagePort = messageEvent.data.port; + } + resolve(); + } + }, {once: true}); + }); +} + // Converts an ECMAScript String object to an instance of // mojo_base.mojom.String16. function mojoString16ToString(string16) { @@ -421,25 +435,6 @@ class FakeUSBDevice { } } -// A helper for forwarding MojoHandle instances from one frame to another. -class CrossFrameHandleProxy { - constructor(callback) { - let {handle0, handle1} = Mojo.createMessagePipe(); - this.sender_ = handle0; - this.receiver_ = handle1; - this.receiver_.watch({readable: true}, () => { - let message = this.receiver_.readMessage(); - assert_equals(message.buffer.byteLength, 0); - assert_equals(message.handles.length, 1); - callback(message.handles[0]); - }); - } - - forwardHandle(handle) { - this.sender_.writeMessage(new ArrayBuffer, [handle]); - } -} - class USBTest { constructor() { this.onrequestdevice = undefined; @@ -449,14 +444,17 @@ class USBTest { if (internal.initialized) return; + // Be ready to handle 'ReadyForAttachment' message from child iframes. + if ('window' in self) { + getMessagePort(window); + } + internal.webUsbService = new FakeWebUsbService(); internal.webUsbServiceInterceptor = new MojoInterfaceInterceptor(blink.mojom.WebUsbService.name); internal.webUsbServiceInterceptor.oninterfacerequest = e => internal.webUsbService.addBinding(e.handle); internal.webUsbServiceInterceptor.start(); - internal.webUsbServiceCrossFrameProxy = new CrossFrameHandleProxy( - handle => internal.webUsbService.addBinding(handle)); // Wait for a call to GetDevices() to pass between the renderer and the // mock in order to establish that everything is set up. @@ -464,20 +462,32 @@ class USBTest { internal.initialized = true; } - async attachToWindow(otherWindow) { + // Returns a promise that is resolved when the implementation of |usb| in the + // global scope for |context| is controlled by the current context. + attachToContext(context) { if (!internal.initialized) - throw new Error('Call initialize() before attachToWindow().'); - - otherWindow.webUsbServiceInterceptor = - new otherWindow.MojoInterfaceInterceptor( - blink.mojom.WebUsbService.name); - otherWindow.webUsbServiceInterceptor.oninterfacerequest = - e => internal.webUsbServiceCrossFrameProxy.forwardHandle(e.handle); - otherWindow.webUsbServiceInterceptor.start(); - - // Wait for a call to GetDevices() to pass between the renderer and the - // mock in order to establish that everything is set up. - await otherWindow.navigator.usb.getDevices(); + throw new Error('Call initialize() before attachToContext()'); + + let target = context.constructor.name === 'Worker' ? context : window; + return getMessagePort(target).then(() => { + return new Promise(resolve => { + internal.messagePort.onmessage = channelEvent => { + switch (channelEvent.data.type) { + case blink.mojom.WebUsbService.name: + internal.webUsbService.addBinding(channelEvent.data.handle); + break; + case 'Complete': + resolve(); + break; + } + }; + internal.messagePort.postMessage({ + type: 'Attach' , + interfaces: [ + blink.mojom.WebUsbService.name, + ]}); + }); + }); } addFakeDevice(deviceInit) { @@ -501,6 +511,9 @@ class USBTest { // the fact that this polyfill can do this synchronously. return new Promise(resolve => { setTimeout(() => { + if (internal.messagePort !== null) + internal.messagePort.close(); + internal.messagePort = null; internal.webUsbService.removeAllDevices(); resolve(); }, 0); diff --git a/tests/wpt/web-platform-tests/screen-capture/getdisplaymedia.https.html b/tests/wpt/web-platform-tests/screen-capture/getdisplaymedia.https.html index 3a0444733b5..9b66419cb0a 100644 --- a/tests/wpt/web-platform-tests/screen-capture/getdisplaymedia.https.html +++ b/tests/wpt/web-platform-tests/screen-capture/getdisplaymedia.https.html @@ -74,4 +74,18 @@ promise_test(function() { }); }, 'getDisplayMedia() call with non-bool constraint'); +// Content shell picks a fake desktop device by default. +promise_test(function() { + assert_idl_attribute(navigator, 'getDisplayMedia'); + + return navigator.getDisplayMedia({video: true}).then(function(s) { + assert_equals(s.getVideoTracks().length, 1); + assert_equals(s.getAudioTracks().length, 0); + var settings = s.getVideoTracks()[0].getSettings(); + assert_equals(settings.displaySurface, "monitor"); + assert_equals(settings.logicalSurface, true); + assert_equals(settings.cursor, "never"); + }); +}, 'getDisplayMedia() with getSettings'); + </script> diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/update-top-level-worker.py b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/update-top-level-worker.py deleted file mode 100644 index f77ef284ac0..00000000000 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/update-top-level-worker.py +++ /dev/null @@ -1,18 +0,0 @@ -import time - -def main(request, response): - # no-cache itself to ensure the user agent finds a new version for each update. - headers = [('Cache-Control', 'no-cache, must-revalidate'), - ('Pragma', 'no-cache')] - content_type = 'application/javascript' - - headers.append(('Content-Type', content_type)) - - body = ''' -let promise = self.registration.update() -onmessage = (evt) => { - promise.then(r => { - evt.source.postMessage(self.registration === r ? 'PASS' : 'FAIL'); - }); -};''' - return headers, '/* %s %s */ %s' % (time.time(), time.clock(), body) diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/update-top-level.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/update-top-level.https.html deleted file mode 100644 index e382028b44a..00000000000 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/update-top-level.https.html +++ /dev/null @@ -1,32 +0,0 @@ -<!DOCTYPE html> -<title>Service Worker: Registration update()</title> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="resources/test-helpers.sub.js"></script> -<script> -'use strict'; - -function wait_for_message() { - return new Promise(resolve => { - navigator.serviceWorker.addEventListener("message", - e => { - resolve(e.data); - }, { once: true }); - }); -} - -promise_test(async t => { - const script = './resources/update-top-level-worker.py'; - const scope = './resources/empty.html?update-result'; - - let reg = await navigator.serviceWorker.register(script, { scope }); - t.add_cleanup(async _ => await reg.unregister()); - await wait_for_state(t, reg.installing, 'activated'); - - reg.addEventListener("updatefound", - () => assert_unreached("shouldn't find an update")); - - reg.active.postMessage("ping"); - assert_equals(await wait_for_message(), 'PASS', 'did not hang'); -}, 'A serviceworker with a top-level update should not hang'); -</script> diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/webvtt-cross-origin.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/webvtt-cross-origin.https.html index 637f494e4c1..9394ff75c4a 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/webvtt-cross-origin.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/webvtt-cross-origin.https.html @@ -7,11 +7,14 @@ <script src="resources/test-helpers.sub.js?pipe=sub"></script> <body> <script> -// This file tests opaque responses for WebVTT text track. It creates -// an iframe with a <track> element, controlled by a service worker. +// This file tests responses for WebVTT text track from a service worker. It +// creates an iframe with a <track> element, controlled by a service worker. // Each test tries to load a text track, the service worker intercepts the -// requests and responds with opaque or non-opaque responses. The opaque -// responses should result in load errors. +// requests and responds with opaque or non-opaque responses. As the +// crossorigin attribute is not set, request's mode is always "same-origin", +// and as specified in https://fetch.spec.whatwg.org/#http-fetch, +// a response from a service worker whose type is neither "basic" nor +// "default" is rejected. const host_info = get_host_info(); const kScript = 'resources/fetch-rewrite-worker.js'; @@ -100,9 +103,9 @@ promise_test(t => { url += '&credentials=same-origin'; return load_track(url) .then(result => { - assert_equals(result, 'load event'); + assert_equals(result, 'error event'); }); - }, 'cross-origin text track with approved cors request should load'); + }, 'cross-origin text track with approved cors request should not load'); // Redirect tests. @@ -165,8 +168,8 @@ promise_test(t => { url += '&credentials=same-origin'; return load_track(url) .then(result => { - assert_equals(result, 'load event'); + assert_equals(result, 'error event'); }); - }, 'same-origin text track that redirects to a cross-origin text track with approved cors should load'); + }, 'same-origin text track that redirects to a cross-origin text track with approved cors should not load'); </script> </body> diff --git a/tests/wpt/web-platform-tests/storage/estimate-indexeddb-worker.https.html b/tests/wpt/web-platform-tests/storage/estimate-indexeddb-worker.https.html deleted file mode 100644 index 2366760bdbe..00000000000 --- a/tests/wpt/web-platform-tests/storage/estimate-indexeddb-worker.https.html +++ /dev/null @@ -1,16 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <meta charset="utf-8"> - <title>StorageManager: estimate() for indexeddb from worker</title> - <meta name="help" href="https://storage.spec.whatwg.org/#dom-storagemanager-estimate"> - <meta name="author" title="Mozilla" href="https://www.mozilla.org"> - <script src="/resources/testharness.js"></script> - <script src="/resources/testharnessreport.js"></script> - </head> - <body> - <script> - fetch_tests_from_worker(new Worker("storage-estimate-indexeddb.js")); - </script> - </body> -</html> diff --git a/tests/wpt/web-platform-tests/storage/storage-estimate-indexeddb.js b/tests/wpt/web-platform-tests/storage/estimate-indexeddb.https.any.js index 5f7895350ef..3e34ad19bab 100644 --- a/tests/wpt/web-platform-tests/storage/storage-estimate-indexeddb.js +++ b/tests/wpt/web-platform-tests/storage/estimate-indexeddb.https.any.js @@ -1,15 +1,13 @@ -if (this.document === undefined) { - importScripts("/resources/testharness.js"); -} +// META: title=StorageManager: estimate() for indexeddb -test(function(t) { +test(t => { assert_true('estimate' in navigator.storage); assert_equals(typeof navigator.storage.estimate, 'function'); assert_true(navigator.storage.estimate() instanceof Promise); }, 'estimate() method exists and returns a Promise'); -promise_test(function(t) { - return navigator.storage.estimate().then(function(result) { +promise_test(t => { + return navigator.storage.estimate().then(result => { assert_true(typeof result === 'object'); assert_true('usage' in result); assert_equals(typeof result.usage, 'number'); @@ -18,20 +16,20 @@ promise_test(function(t) { }); }, 'estimate() resolves to dictionary with members'); -promise_test(function(t) { +promise_test(t => { const arraySize = 1e6; const objectStoreName = "storageManager"; const dbname = this.window ? window.location.pathname : - "estimate-worker.https.html"; + "estimate-worker.https.html"; let db; let usageBeforeCreate, usageAfterCreate, usageAfterPut; function deleteDB(name) { - return new Promise(function(resolve, reject) { + return new Promise((resolve, reject) => { let deleteRequest = indexedDB.deleteDatabase(name); - deleteRequest.onerror = function() { reject(deleteRequest.error); }; - deleteRequest.onsuccess = function() { resolve(); }; + deleteRequest.onerror = () => { reject(deleteRequest.error); }; + deleteRequest.onsuccess = () => { resolve(); }; }); } @@ -41,13 +39,13 @@ promise_test(function(t) { }) .then(estimate => { usageBeforeCreate = estimate.usage; - return new Promise(function(resolve, reject) { + return new Promise((resolve, reject) => { let openRequest = indexedDB.open(dbname); - openRequest.onerror = function() { reject(openRequest.error); }; - openRequest.onupgradeneeded = function(event) { + openRequest.onerror = () => { reject(openRequest.error); }; + openRequest.onupgradeneeded = event => { openRequest.result.createObjectStore(objectStoreName); }; - openRequest.onsuccess = function() { resolve(openRequest.result); }; + openRequest.onsuccess = () => { resolve(openRequest.result); }; }); }) .then(connection => { @@ -56,8 +54,9 @@ promise_test(function(t) { }) .then(estimate => { usageAfterCreate = estimate.usage; - assert_greater_than(usageAfterCreate, usageBeforeCreate, - 'estimated usage should increase after object store is created'); + assert_greater_than( + usageAfterCreate, usageBeforeCreate, + 'estimated usage should increase after object store is created'); let txn = db.transaction(objectStoreName, 'readwrite'); let buffer = new ArrayBuffer(arraySize); @@ -70,9 +69,9 @@ promise_test(function(t) { let testBlob = new Blob([buffer], {type: "binary/random"}); txn.objectStore(objectStoreName).add(testBlob, 1); - return new Promise(function(resolve, reject) { - txn.onabort = function() { reject(txn.error); }; - txn.oncomplete = function() { resolve(); }; + return new Promise((resolve, reject) => { + txn.onabort = () => { reject(txn.error); }; + txn.oncomplete = () => { resolve(); }; }); }) .then(() => { @@ -80,15 +79,14 @@ promise_test(function(t) { }) .then(estimate => { usageAfterPut = estimate.usage; - assert_greater_than(usageAfterPut, usageAfterCreate, - 'estimated usage should increase after large value is stored'); + assert_greater_than( + usageAfterPut, usageAfterCreate, + 'estimated usage should increase after large value is stored'); db.close(); - return deleteDB(dbname) + return deleteDB(dbname); }) .then(() => { t.done(); - }) + }); }, 'estimate() shows usage increase after large value is stored'); - -done(); diff --git a/tests/wpt/web-platform-tests/storage/estimate-indexeddb.https.html b/tests/wpt/web-platform-tests/storage/estimate-indexeddb.https.html deleted file mode 100644 index 3f5e1589d34..00000000000 --- a/tests/wpt/web-platform-tests/storage/estimate-indexeddb.https.html +++ /dev/null @@ -1,14 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <meta charset="utf-8"> - <title>StorageManager: estimate() for indexeddb</title> - <meta name="help" href="https://storage.spec.whatwg.org/#dom-storagemanager-estimate"> - <meta name="author" title="Mozilla" href="https://www.mozilla.org"> - <script src="/resources/testharness.js"></script> - <script src="/resources/testharnessreport.js"></script> - </head> - <body> - <script src="storage-estimate-indexeddb.js"></script> - </body> -</html> diff --git a/tests/wpt/web-platform-tests/storage/estimate-parallel.https.html b/tests/wpt/web-platform-tests/storage/estimate-parallel.https.any.js index 571b08cd5e2..090f004b851 100644 --- a/tests/wpt/web-platform-tests/storage/estimate-parallel.https.html +++ b/tests/wpt/web-platform-tests/storage/estimate-parallel.https.any.js @@ -1,10 +1,5 @@ -<!DOCTYPE html> -<meta charset="utf-8"> -<title>StorageManager: multiple estimate() calls in parallel</title> -<meta name="help" href="https://storage.spec.whatwg.org/#dom-storagemanager-estimate"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script> +// META: title=StorageManager: multiple estimate() calls in parallel + promise_test(async t => { let r1, r2; await Promise.all([ @@ -16,4 +11,3 @@ promise_test(async t => { assert_true(('usage' in r2) && ('quota' in r2), 'second response should have expected fields'); }, 'Multiple estimate() calls in parallel should complete'); -</script> diff --git a/tests/wpt/web-platform-tests/storage/opaque-origin.https.html b/tests/wpt/web-platform-tests/storage/opaque-origin.https.window.js index 563f2fea3c5..3e101dde675 100644 --- a/tests/wpt/web-platform-tests/storage/opaque-origin.https.html +++ b/tests/wpt/web-platform-tests/storage/opaque-origin.https.window.js @@ -1,9 +1,4 @@ -<!DOCTYPE html> -<meta charset=utf-8> -<title>StorageManager API and opaque origins</title> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script> +// META: title=StorageManager API and opaque origins function load_iframe(src, sandbox) { return new Promise(resolve => { @@ -76,4 +71,3 @@ function make_script(snippet) { }); }, `${snippet} in sandboxed iframe should reject with TypeError`); }); -</script> diff --git a/tests/wpt/web-platform-tests/storage/permission-query.https.any.js b/tests/wpt/web-platform-tests/storage/permission-query.https.any.js new file mode 100644 index 00000000000..9984bdab793 --- /dev/null +++ b/tests/wpt/web-platform-tests/storage/permission-query.https.any.js @@ -0,0 +1,10 @@ +// META: title=The Permission API registration for "persistent-storage" + +promise_test(async t => { + const status = + await navigator.permissions.query({name: 'persistent-storage'}); + assert_equals(status.constructor, PermissionStatus, + 'query() result should resolve to a PermissionStatus'); + assert_true(['granted','denied', 'prompt'].includes(status.state), + 'state should be a PermissionState'); +}, 'The "persistent-storage" permission is recognized'); diff --git a/tests/wpt/web-platform-tests/storage/persisted-worker.https.html b/tests/wpt/web-platform-tests/storage/persisted-worker.https.html deleted file mode 100644 index 21f5c8bd92d..00000000000 --- a/tests/wpt/web-platform-tests/storage/persisted-worker.https.html +++ /dev/null @@ -1,16 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <meta charset="utf-8"> - <title>StorageManager: persisted() from worker</title> - <meta name="help" href="https://storage.spec.whatwg.org/#dom-storagemanager-persisted"> - <meta name="author" title="Mozilla" href="https://www.mozilla.org"> - <script src="/resources/testharness.js"></script> - <script src="/resources/testharnessreport.js"></script> - </head> - <body> - <script> - fetch_tests_from_worker(new Worker("storage-persisted.js")); - </script> - </body> -</html> diff --git a/tests/wpt/web-platform-tests/storage/storage-persisted.js b/tests/wpt/web-platform-tests/storage/persisted.https.any.js index 5bc86fea951..57e15f0e811 100644 --- a/tests/wpt/web-platform-tests/storage/storage-persisted.js +++ b/tests/wpt/web-platform-tests/storage/persisted.https.any.js @@ -1,6 +1,4 @@ -if (this.document === undefined) { - importScripts("/resources/testharness.js"); -} +// META: title=StorageManager: persisted() test(function(t) { assert_true('persisted' in navigator.storage); @@ -14,5 +12,3 @@ promise_test(function(t) { assert_equals(result, false); }); }, 'persisted() returns a promise and resolves as boolean with false'); - -done(); diff --git a/tests/wpt/web-platform-tests/storage/persisted.https.html b/tests/wpt/web-platform-tests/storage/persisted.https.html deleted file mode 100644 index a5a91ff0b26..00000000000 --- a/tests/wpt/web-platform-tests/storage/persisted.https.html +++ /dev/null @@ -1,14 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <meta charset="utf-8"> - <title>StorageManager: persisted()</title> - <meta name="help" href="https://storage.spec.whatwg.org/#dom-storagemanager-persisted"> - <meta name="author" title="Mozilla" href="https://www.mozilla.org"> - <script src="/resources/testharness.js"></script> - <script src="/resources/testharnessreport.js"></script> - </head> - <body> - <script src="storage-persisted.js"></script> - </body> -</html> diff --git a/tests/wpt/web-platform-tests/storage/resources/storagemanager-persisted-worker.js b/tests/wpt/web-platform-tests/storage/resources/storagemanager-persisted-worker.js deleted file mode 100644 index 979c8be3cd3..00000000000 --- a/tests/wpt/web-platform-tests/storage/resources/storagemanager-persisted-worker.js +++ /dev/null @@ -1,13 +0,0 @@ -importScripts('/resources/testharness.js'); - -promise_test(function() { - var promise = navigator.storage.persisted(); - assert_true(promise instanceof Promise, - 'navigator.storage.persisted() returned a Promise.'); - return promise.then(function (result) { - assert_equals(typeof result, 'boolean', - result + ' should be a boolean'); - }); -}, 'navigator.storage.persisted returns a promise that resolves.'); - -done(); diff --git a/tests/wpt/web-platform-tests/storage/storagemanager-estimate.https.html b/tests/wpt/web-platform-tests/storage/storagemanager-estimate.https.any.js index 08a699adfb0..d1d2e21924c 100644 --- a/tests/wpt/web-platform-tests/storage/storagemanager-estimate.https.html +++ b/tests/wpt/web-platform-tests/storage/storagemanager-estimate.https.any.js @@ -1,10 +1,4 @@ -<!DOCTYPE html> -<meta charset=utf-8> -<title>StorageManager: estimate()</title> -<meta name="help" href="https://storage.spec.whatwg.org/#dom-storagemanager-estimate"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script> +// META: title=StorageManager: estimate() test(function(t) { assert_true(navigator.storage.estimate() instanceof Promise); @@ -64,5 +58,3 @@ promise_test(function(t) { 'estimated usage should increase'); }); }, 'estimate() shows usage increase after 1MB IndexedDB record is stored'); - -</script> diff --git a/tests/wpt/web-platform-tests/storage/storagemanager-persist-worker.https.html b/tests/wpt/web-platform-tests/storage/storagemanager-persist-worker.https.html deleted file mode 100644 index 9c89a2f6712..00000000000 --- a/tests/wpt/web-platform-tests/storage/storagemanager-persist-worker.https.html +++ /dev/null @@ -1,10 +0,0 @@ -<!DOCTYPE html> -<meta charset=utf-8> -<title>StorageManager: persist() (worker)</title> -<meta name="help" href="https://storage.spec.whatwg.org/#dom-storagemanager-persist"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script> -var worker = new Worker('resources/storagemanager-persist-worker.js'); -fetch_tests_from_worker(worker); -</script> diff --git a/tests/wpt/web-platform-tests/storage/storagemanager-persist.https.html b/tests/wpt/web-platform-tests/storage/storagemanager-persist.https.window.js index 61624fe272a..13e17a16e14 100644 --- a/tests/wpt/web-platform-tests/storage/storagemanager-persist.https.html +++ b/tests/wpt/web-platform-tests/storage/storagemanager-persist.https.window.js @@ -1,10 +1,4 @@ -<!DOCTYPE html> -<meta charset=utf-8> -<title>StorageManager: persist()</title> -<meta name="help" href="https://storage.spec.whatwg.org/#dom-storagemanager-persist"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script> +// META: title=StorageManager: persist() promise_test(function() { var promise = navigator.storage.persist(); @@ -14,5 +8,3 @@ promise_test(function() { assert_equals(typeof result, 'boolean', result + ' should be boolean'); }); }, 'navigator.storage.persist() returns a promise that resolves.'); - -</script> diff --git a/tests/wpt/web-platform-tests/storage/resources/storagemanager-persist-worker.js b/tests/wpt/web-platform-tests/storage/storagemanager-persist.https.worker.js index 1152e4ec734..fcf8175f706 100644 --- a/tests/wpt/web-platform-tests/storage/resources/storagemanager-persist-worker.js +++ b/tests/wpt/web-platform-tests/storage/storagemanager-persist.https.worker.js @@ -1,4 +1,5 @@ -importScripts('/resources/testharness.js'); +// META: title=StorageManager: persist() (worker) +importScripts("/resources/testharness.js"); test(function() { assert_false('persist' in navigator.storage); diff --git a/tests/wpt/web-platform-tests/storage/storagemanager-persisted-worker.https.html b/tests/wpt/web-platform-tests/storage/storagemanager-persisted-worker.https.html deleted file mode 100644 index 75004946164..00000000000 --- a/tests/wpt/web-platform-tests/storage/storagemanager-persisted-worker.https.html +++ /dev/null @@ -1,10 +0,0 @@ -<!DOCTYPE html> -<meta charset=utf-8> -<title>StorageManager: persisted() (worker)</title> -<meta name="help" href="https://storage.spec.whatwg.org/#dom-storagemanager-persisted"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script> -var worker = new Worker('resources/storagemanager-persisted-worker.js'); -fetch_tests_from_worker(worker); -</script> diff --git a/tests/wpt/web-platform-tests/storage/storagemanager-persisted.https.html b/tests/wpt/web-platform-tests/storage/storagemanager-persisted.https.any.js index 1d88c11bd8a..70999406690 100644 --- a/tests/wpt/web-platform-tests/storage/storagemanager-persisted.https.html +++ b/tests/wpt/web-platform-tests/storage/storagemanager-persisted.https.any.js @@ -1,10 +1,4 @@ -<!DOCTYPE html> -<meta charset=utf-8> -<title>StorageManager: persist()</title> -<meta name="help" href="https://storage.spec.whatwg.org/#dom-storagemanager-persist"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script> +// META: title=StorageManager: persisted() promise_test(function() { var promise = navigator.storage.persisted(); @@ -14,5 +8,3 @@ promise_test(function() { assert_equals(typeof result, 'boolean', result + ' should be boolean'); }); }, 'navigator.storage.persisted() returns a promise that resolves.'); - -</script> diff --git a/tests/wpt/web-platform-tests/tools/manifest/item.py b/tests/wpt/web-platform-tests/tools/manifest/item.py index 61919fcc31e..ddf046a68fa 100644 --- a/tests/wpt/web-platform-tests/tools/manifest/item.py +++ b/tests/wpt/web-platform-tests/tools/manifest/item.py @@ -234,7 +234,7 @@ class Stub(URLManifestItem): item_type = "stub" -class WebdriverSpecTest(URLManifestItem): +class WebDriverSpecTest(URLManifestItem): item_type = "wdspec" def __init__(self, source_file, url, url_base="/", timeout=None, manifest=None): diff --git a/tests/wpt/web-platform-tests/tools/manifest/manifest.py b/tests/wpt/web-platform-tests/tools/manifest/manifest.py index 42a8e1ceb23..9b2f0a18a56 100644 --- a/tests/wpt/web-platform-tests/tools/manifest/manifest.py +++ b/tests/wpt/web-platform-tests/tools/manifest/manifest.py @@ -4,7 +4,7 @@ import os from collections import defaultdict from six import iteritems, itervalues, viewkeys, string_types -from .item import ManualTest, WebdriverSpecTest, Stub, RefTestNode, RefTest, TestharnessTest, SupportFile, ConformanceCheckerTest, VisualTest +from .item import ManualTest, WebDriverSpecTest, Stub, RefTestNode, RefTest, TestharnessTest, SupportFile, ConformanceCheckerTest, VisualTest from .log import get_logger from .utils import from_os_path, to_os_path @@ -193,7 +193,7 @@ class Manifest(object): "reftest_node": RefTestNode, "manual": ManualTest, "stub": Stub, - "wdspec": WebdriverSpecTest, + "wdspec": WebDriverSpecTest, "conformancechecker": ConformanceCheckerTest, "visual": VisualTest, "support": SupportFile} diff --git a/tests/wpt/web-platform-tests/tools/manifest/sourcefile.py b/tests/wpt/web-platform-tests/tools/manifest/sourcefile.py index 133f8b59828..9be0d8966ec 100644 --- a/tests/wpt/web-platform-tests/tools/manifest/sourcefile.py +++ b/tests/wpt/web-platform-tests/tools/manifest/sourcefile.py @@ -12,7 +12,7 @@ except ImportError: import html5lib from . import XMLParser -from .item import Stub, ManualTest, WebdriverSpecTest, RefTestNode, TestharnessTest, SupportFile, ConformanceCheckerTest, VisualTest +from .item import Stub, ManualTest, WebDriverSpecTest, RefTestNode, TestharnessTest, SupportFile, ConformanceCheckerTest, VisualTest from .utils import rel_path_to_url, ContextManagerBytesIO, cached_property wd_pattern = "*.py" @@ -645,7 +645,7 @@ class SourceFile(object): rv = TestharnessTest.item_type, tests elif self.name_is_webdriver: - rv = WebdriverSpecTest.item_type, [WebdriverSpecTest(self, self.url, + rv = WebDriverSpecTest.item_type, [WebDriverSpecTest(self, self.url, timeout=self.timeout)] elif self.content_is_css_manual and not self.name_is_reference: diff --git a/tests/wpt/web-platform-tests/tools/manifest/tests/test_manifest.py b/tests/wpt/web-platform-tests/tools/manifest/tests/test_manifest.py index 8bf7ef96c5f..f1241e04406 100644 --- a/tests/wpt/web-platform-tests/tools/manifest/tests/test_manifest.py +++ b/tests/wpt/web-platform-tests/tools/manifest/tests/test_manifest.py @@ -43,7 +43,7 @@ def rel_dir_file_path(draw): @hs.composite def sourcefile_strategy(draw): item_classes = [item.TestharnessTest, item.RefTest, item.RefTestNode, - item.ManualTest, item.Stub, item.WebdriverSpecTest, + item.ManualTest, item.Stub, item.WebDriverSpecTest, item.ConformanceCheckerTest, item.SupportFile] cls = draw(hs.sampled_from(item_classes)) diff --git a/tests/wpt/web-platform-tests/tools/serve/serve.py b/tests/wpt/web-platform-tests/tools/serve/serve.py index 97a5063c1b9..968b837979e 100644 --- a/tests/wpt/web-platform-tests/tools/serve/serve.py +++ b/tests/wpt/web-platform-tests/tools/serve/serve.py @@ -378,15 +378,17 @@ def build_routes(aliases): class ServerProc(object): - def __init__(self): + def __init__(self, scheme=None): self.proc = None self.daemon = None self.stop = Event() + self.scheme = scheme def start(self, init_func, host, port, paths, routes, bind_address, config, **kwargs): self.proc = Process(target=self.create_daemon, args=(init_func, host, port, paths, routes, bind_address, config), + name='%s on port %s' % (self.scheme, port), kwargs=kwargs) self.proc.daemon = True self.proc.start() @@ -507,7 +509,7 @@ def start_servers(host, ports, paths, routes, bind_address, config, **kwargs): "ws":start_ws_server, "wss":start_wss_server}[scheme] - server_proc = ServerProc() + server_proc = ServerProc(scheme=scheme) server_proc.start(init_func, host, port, paths, routes, bind_address, config, **kwargs) servers[scheme].append((port, server_proc)) @@ -828,9 +830,16 @@ def run(**kwargs): servers = start(config, build_routes(config["aliases"]), **kwargs) try: - while any(item.is_alive() for item in iter_procs(servers)): + while all(item.is_alive() for item in iter_procs(servers)): for item in iter_procs(servers): item.join(1) + exited = [item for item in iter_procs(servers) if not item.is_alive()] + subject = "subprocess" if len(exited) == 1 else "subprocesses" + + logger.info("%s %s exited:" % (len(exited), subject)) + + for item in iter_procs(servers): + logger.info("Status of %s:\t%s" % (item.name, "running" if item.is_alive() else "not running")) except KeyboardInterrupt: logger.info("Shutting down") diff --git a/tests/wpt/web-platform-tests/tools/serve/test_functional.py b/tests/wpt/web-platform-tests/tools/serve/test_functional.py new file mode 100644 index 00000000000..87268ffc00d --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/serve/test_functional.py @@ -0,0 +1,77 @@ +try: + from importlib import reload +except ImportError: + pass +import json +import os +try: + import Queue as queue +except ImportError: + import queue +import tempfile +import threading + +import pytest + +from . import serve +from wptserve import logger + + +class ServerProcSpy(serve.ServerProc): + instances = None + + def start(self, *args, **kwargs): + result = super(ServerProcSpy, self).start(*args, **kwargs) + + if ServerProcSpy.instances is not None: + ServerProcSpy.instances.put(self) + + return result + +serve.ServerProc = ServerProcSpy + +@pytest.fixture() +def server_subprocesses(): + ServerProcSpy.instances = queue.Queue() + yield ServerProcSpy.instances + ServerProcSpy.instances = None + +@pytest.fixture() +def tempfile_name(): + name = tempfile.mkstemp()[1] + yield name + os.remove(name) + + +def test_subprocess_exit(server_subprocesses, tempfile_name): + timeout = 30 + + def target(): + # By default, the server initially creates a child process to validate + # local system configuration. That process is unrelated to the behavior + # under test, but at the time of this writing, the parent uses the same + # constructor that is also used to create the long-running processes + # which are relevant to this functionality. Disable the check so that + # the constructor is only used to create relevant processes. + with open(tempfile_name, 'w') as handle: + json.dump({"check_subdomains": False}, handle) + + # The `logger` module from the wptserver package uses a singleton + # pattern which resists testing. In order to avoid conflicting with + # other tests which rely on that module, pre-existing state is + # discarded through an explicit "reload" operation. + reload(logger) + + serve.run(config_path=tempfile_name) + + thread = threading.Thread(target=target) + + thread.start() + + server_subprocesses.get(True, timeout) + subprocess = server_subprocesses.get(True, timeout) + subprocess.kill() + + thread.join(timeout) + + assert not thread.is_alive() diff --git a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/error.py b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/error.py index b2337ff3b38..e148e8fe800 100644 --- a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/error.py +++ b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/error.py @@ -113,7 +113,7 @@ class NoSuchWindowException(WebDriverException): class ScriptTimeoutException(WebDriverException): - http_status = 408 + http_status = 500 status_code = "script timeout" @@ -128,7 +128,7 @@ class StaleElementReferenceException(WebDriverException): class TimeoutException(WebDriverException): - http_status = 408 + http_status = 500 status_code = "timeout" diff --git a/tests/wpt/web-platform-tests/tools/wpt/run.py b/tests/wpt/web-platform-tests/tools/wpt/run.py index 6b098b41f70..aeeb22be961 100644 --- a/tests/wpt/web-platform-tests/tools/wpt/run.py +++ b/tests/wpt/web-platform-tests/tools/wpt/run.py @@ -105,7 +105,7 @@ def check_environ(product): missing_hosts = set(expected_hosts) if is_windows: - hosts_path = "C:\Windows\System32\drivers\etc\hosts" + hosts_path = "%s\System32\drivers\etc\hosts" % os.environ.get("SystemRoot", "C:\Windows") else: hosts_path = "/etc/hosts" @@ -120,7 +120,7 @@ def check_environ(product): if is_windows: message = """Missing hosts file configuration. Run -python wpt make-hosts-file | Out-File %SystemRoot%\System32\drivers\etc\hosts -Encoding ascii -Append +python wpt make-hosts-file | Out-File %s -Encoding ascii -Append in PowerShell with Administrator privileges.""" % hosts_path else: diff --git a/tests/wpt/web-platform-tests/tools/wpt/tests/test_run.py b/tests/wpt/web-platform-tests/tools/wpt/tests/test_run.py new file mode 100644 index 00000000000..097131d7ba5 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wpt/tests/test_run.py @@ -0,0 +1,18 @@ +import mock + +import pytest + +from tools.wpt import run + + +@pytest.mark.parametrize("platform", ["Windows", "Linux", "Darwin"]) +def test_check_environ_fail(platform): + m_open = mock.mock_open(read_data=b"") + + with mock.patch.object(run, "open", m_open): + with mock.patch.object(run.platform, "uname", + return_value=(platform, "", "", "", "", "")): + with pytest.raises(run.WptrunError) as excinfo: + run.check_environ("foo") + + assert "wpt make-hosts-file" in excinfo.value.message diff --git a/tests/wpt/web-platform-tests/tools/wpt/tox.ini b/tests/wpt/web-platform-tests/tools/wpt/tox.ini index e486bb221d7..cd45a76e179 100644 --- a/tests/wpt/web-platform-tests/tools/wpt/tox.ini +++ b/tests/wpt/web-platform-tests/tools/wpt/tox.ini @@ -7,6 +7,7 @@ deps = pytest pytest-cov hypothesis + mock -r{toxinidir}/../wptrunner/requirements.txt -r{toxinidir}/../wptrunner/requirements_chrome.txt -r{toxinidir}/../wptrunner/requirements_firefox.txt diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_update.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_update.py index 5c654c99a48..f8790815cf0 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_update.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_update.py @@ -32,7 +32,7 @@ item_classes = {"testharness": manifest_item.TestharnessTest, "reftest_node": manifest_item.RefTestNode, "manual": manifest_item.ManualTest, "stub": manifest_item.Stub, - "wdspec": manifest_item.WebdriverSpecTest, + "wdspec": manifest_item.WebDriverSpecTest, "conformancechecker": manifest_item.ConformanceCheckerTest, "visual": manifest_item.VisualTest, "support": manifest_item.SupportFile} diff --git a/tests/wpt/web-platform-tests/trusted-types/DOMParser-parseFromString.tentative.html b/tests/wpt/web-platform-tests/trusted-types/DOMParser-parseFromString.tentative.html index 2fe9b31b787..2dfc37686bc 100644 --- a/tests/wpt/web-platform-tests/trusted-types/DOMParser-parseFromString.tentative.html +++ b/tests/wpt/web-platform-tests/trusted-types/DOMParser-parseFromString.tentative.html @@ -4,14 +4,12 @@ <script src="support/helper.sub.js"></script> <body> <script> - async_test(t => { - createHTML_policy(window) - .then(t.step_func_done(p => { - let html = p.createHTML(INPUTS.HTML); - let parser = new DOMParser(); - let doc = parser.parseFromString(html, "text/html"); - assert_equals(doc.body.innerText, RESULTS.HTML); - })); + test(t => { + let p = createHTML_policy(window, 1); + let html = p.createHTML(INPUTS.HTML); + let parser = new DOMParser(); + let doc = parser.parseFromString(html, "text/html"); + assert_equals(doc.body.innerText, RESULTS.HTML); }, "document.innerText assigned via policy (successful HTML transformation)."); test(t => { diff --git a/tests/wpt/web-platform-tests/trusted-types/Document-write.tentative.html b/tests/wpt/web-platform-tests/trusted-types/Document-write.tentative.html index 3a63e923543..79247fb4d68 100644 --- a/tests/wpt/web-platform-tests/trusted-types/Document-write.tentative.html +++ b/tests/wpt/web-platform-tests/trusted-types/Document-write.tentative.html @@ -4,12 +4,10 @@ <script src="support/helper.sub.js"></script> <body> <script> - async_test(t => { - createHTML_policy(window) - .then(t.step_func_done(p => { - let html = p.createHTML(INPUTS.HTML); - document.write(html); - assert_equals(document.body.innerText, RESULTS.HTML); - })); + test(t => { + let p = createHTML_policy(window, 1); + let html = p.createHTML(INPUTS.HTML); + document.write(html); + assert_equals(document.body.innerText, RESULTS.HTML); }, "document.write with html assigned via policy (successful URL transformation)."); </script> diff --git a/tests/wpt/web-platform-tests/trusted-types/Element-insertAdjacentHTML.tentative.html b/tests/wpt/web-platform-tests/trusted-types/Element-insertAdjacentHTML.tentative.html index 599ade44ec1..d5db7936b1f 100644 --- a/tests/wpt/web-platform-tests/trusted-types/Element-insertAdjacentHTML.tentative.html +++ b/tests/wpt/web-platform-tests/trusted-types/Element-insertAdjacentHTML.tentative.html @@ -7,32 +7,30 @@ <script> var container = document.querySelector('#container'); - async_test(t => { - createHTML_policy(window) - .then(t.step_func_done(p => { - let html = p.createHTML(INPUTS.HTML); + test(t => { + let p = createHTML_policy(window, 1); + let html = p.createHTML(INPUTS.HTML); - var d = document.createElement('div'); - container.appendChild(d); + var d = document.createElement('div'); + container.appendChild(d); - d.insertAdjacentHTML('beforebegin', html); - assert_equals(d.previousSibling.nodeType, Node.TEXT_NODE); - assert_equals(d.previousSibling.data, RESULTS.HTML); + d.insertAdjacentHTML('beforebegin', html); + assert_equals(d.previousSibling.nodeType, Node.TEXT_NODE); + assert_equals(d.previousSibling.data, RESULTS.HTML); - d.insertAdjacentHTML('afterbegin', html); - assert_equals(d.firstChild.nodeType, Node.TEXT_NODE); - assert_equals(d.firstChild.data, RESULTS.HTML); + d.insertAdjacentHTML('afterbegin', html); + assert_equals(d.firstChild.nodeType, Node.TEXT_NODE); + assert_equals(d.firstChild.data, RESULTS.HTML); - d.insertAdjacentHTML('beforeend', html); - assert_equals(d.lastChild.nodeType, Node.TEXT_NODE); - assert_equals(d.lastChild.data, RESULTS.HTML); + d.insertAdjacentHTML('beforeend', html); + assert_equals(d.lastChild.nodeType, Node.TEXT_NODE); + assert_equals(d.lastChild.data, RESULTS.HTML); - d.insertAdjacentHTML('afterend', html); - assert_equals(d.nextSibling.nodeType, Node.TEXT_NODE); - assert_equals(d.nextSibling.data, RESULTS.HTML); + d.insertAdjacentHTML('afterend', html); + assert_equals(d.nextSibling.nodeType, Node.TEXT_NODE); + assert_equals(d.nextSibling.data, RESULTS.HTML); - while (container.firstChild) - container.firstChild.remove(); - })); + while (container.firstChild) + container.firstChild.remove(); }, "insertAdjacentHTML with html assigned via policy (successful HTML transformation)."); </script> diff --git a/tests/wpt/web-platform-tests/trusted-types/Element-outerHTML.tentative.html b/tests/wpt/web-platform-tests/trusted-types/Element-outerHTML.tentative.html index a0bb6c1a5e3..c8daddfe995 100644 --- a/tests/wpt/web-platform-tests/trusted-types/Element-outerHTML.tentative.html +++ b/tests/wpt/web-platform-tests/trusted-types/Element-outerHTML.tentative.html @@ -5,20 +5,18 @@ <body> <div id="container"></div> <script> - var container = document.querySelector('#container') + var container = document.querySelector('#container'); - async_test(t => { - createHTML_policy(window) - .then(t.step_func_done(p => { - let html = p.createHTML(INPUTS.HTML); + test(t => { + let p = createHTML_policy(window, 1); + let html = p.createHTML(INPUTS.HTML); - var d = document.createElement('div'); - document.querySelector('#container').appendChild(d); - d.outerHTML = html; - assert_equals(container.innerText, RESULTS.HTML); + var d = document.createElement('div'); + document.querySelector('#container').appendChild(d); + d.outerHTML = html; + assert_equals(container.innerText, RESULTS.HTML); - while (container.firstChild) - container.firstChild.remove(); - })); + while (container.firstChild) + container.firstChild.remove(); }, "outerHTML with html assigned via policy (successful HTML transformation)."); </script> diff --git a/tests/wpt/web-platform-tests/trusted-types/HTMLElement-generic.tentative.html b/tests/wpt/web-platform-tests/trusted-types/HTMLElement-generic.tentative.html index cea32a5a2df..08d165a75d4 100644 --- a/tests/wpt/web-platform-tests/trusted-types/HTMLElement-generic.tentative.html +++ b/tests/wpt/web-platform-tests/trusted-types/HTMLElement-generic.tentative.html @@ -24,8 +24,8 @@ ]; testCases.forEach(c => { - async_test(t => { - assert_element_accepts_trusted_url(window, t, c[0], c[1], RESULTS.URL); + test(t => { + assert_element_accepts_trusted_url(window, c, t, c[0], c[1], RESULTS.URL); }, c[0] + "." + c[1] + " assigned via policy (successful URL transformation)"); }); @@ -36,8 +36,8 @@ ]; scriptTestCases.forEach(c => { - async_test(t => { - assert_element_accepts_trusted_script_url(window, t, c[0], c[1], RESULTS.SCRIPTURL); + test(t => { + assert_element_accepts_trusted_script_url(window, c, t, c[0], c[1], RESULTS.SCRIPTURL); }, c[0] + "." + c[1] + " assigned via policy (successful ScriptURL transformation)"); }); @@ -48,8 +48,8 @@ ]; HTMLTestCases.forEach(c => { - async_test(t => { - assert_element_accepts_trusted_html(window, t, c[0], c[1], RESULTS.HTML); + test(t => { + assert_element_accepts_trusted_html(window, c, t, c[0], c[1], RESULTS.HTML); }, c[0] + "." + c[1] + " assigned via policy (successful HTML transformation)"); }); </script> diff --git a/tests/wpt/web-platform-tests/trusted-types/Location-assign.tentative.html b/tests/wpt/web-platform-tests/trusted-types/Location-assign.tentative.html index 13cca567948..62f98e96d7f 100644 --- a/tests/wpt/web-platform-tests/trusted-types/Location-assign.tentative.html +++ b/tests/wpt/web-platform-tests/trusted-types/Location-assign.tentative.html @@ -4,12 +4,10 @@ <script src="support/helper.sub.js"></script> <body> <script> - async_test(t => { - createURL_policy(window) - .then(t.step_func_done(p => { - let url = p.createURL(location.href + "#xxx"); - location.assign(url); - assert_equals("" + url, location.href, "location href"); - })); + test(t => { + let p = createURL_policy(window, 1); + let url = p.createURL(location.href + "#xxx"); + location.assign(url); + assert_equals("" + url, location.href, "location href"); }, "location.assign via policy (successful URL transformation)."); </script> diff --git a/tests/wpt/web-platform-tests/trusted-types/Location-href.tentative.html b/tests/wpt/web-platform-tests/trusted-types/Location-href.tentative.html index d759d28593e..bacadf6a91b 100644 --- a/tests/wpt/web-platform-tests/trusted-types/Location-href.tentative.html +++ b/tests/wpt/web-platform-tests/trusted-types/Location-href.tentative.html @@ -4,12 +4,10 @@ <script src="support/helper.sub.js"></script> <body> <script> - async_test(t => { - createURL_policy(window) - .then(t.step_func_done(p => { - let url = p.createURL(location.href + "#xxx"); - location.href = url; - assert_equals("" + url, location.href, "location href"); - })); + test(t => { + let p = createURL_policy(window, 1); + let url = p.createURL(location.href + "#xxx"); + location.href = url; + assert_equals("" + url, location.href, "location href"); }, "location.href assigned via policy (successful URL transformation)."); </script> diff --git a/tests/wpt/web-platform-tests/trusted-types/Location-replace.tentative.html b/tests/wpt/web-platform-tests/trusted-types/Location-replace.tentative.html index 7d84905d198..4fb53d02609 100644 --- a/tests/wpt/web-platform-tests/trusted-types/Location-replace.tentative.html +++ b/tests/wpt/web-platform-tests/trusted-types/Location-replace.tentative.html @@ -4,12 +4,10 @@ <script src="support/helper.sub.js"></script> <body> <script> - async_test(t => { - createURL_policy(window) - .then(t.step_func_done(p => { - let url = p.createURL(location.href + "#xxx"); - location.replace(url); - assert_equals("" + url, location.href, "location href"); - })); + test(t => { + let p = createURL_policy(window, 1); + let url = p.createURL(location.href + "#xxx"); + location.replace(url); + assert_equals("" + url, location.href, "location href"); }, "location.replace via policy (successful URL transformation)."); </script> diff --git a/tests/wpt/web-platform-tests/trusted-types/Range-createContextualFragment.tentative.html b/tests/wpt/web-platform-tests/trusted-types/Range-createContextualFragment.tentative.html index 3d45b33486d..3a880a53778 100644 --- a/tests/wpt/web-platform-tests/trusted-types/Range-createContextualFragment.tentative.html +++ b/tests/wpt/web-platform-tests/trusted-types/Range-createContextualFragment.tentative.html @@ -4,14 +4,12 @@ <script src="support/helper.sub.js"></script> <body> <script> - async_test(t => { - createHTML_policy(window) - .then(t.step_func_done(p => { - let html = p.createHTML(INPUTS.HTML); - var range = document.createRange(); - range.selectNodeContents(document.documentElement); - var result = range.createContextualFragment(html); - assert_equals(result.textContent, RESULTS.HTML); - })); + test(t => { + let p = createHTML_policy(window, 1); + let html = p.createHTML(INPUTS.HTML); + var range = document.createRange(); + range.selectNodeContents(document.documentElement); + var result = range.createContextualFragment(html); + assert_equals(result.textContent, RESULTS.HTML); }, "range.createContextualFragment assigned via policy (successful HTML transformation)."); </script> diff --git a/tests/wpt/web-platform-tests/trusted-types/TrustedTypePolicyFactory-createPolicy-createXYZTests.tentative.html b/tests/wpt/web-platform-tests/trusted-types/TrustedTypePolicyFactory-createPolicy-createXYZTests.tentative.html new file mode 100644 index 00000000000..b20fcf2436e --- /dev/null +++ b/tests/wpt/web-platform-tests/trusted-types/TrustedTypePolicyFactory-createPolicy-createXYZTests.tentative.html @@ -0,0 +1,294 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js" ></script> +<script src="/resources/testharnessreport.js"></script> +<script src="support/helper.sub.js"></script> +<body> +<script> + //HTML tests + function createHTMLTest(policyName, policy, expectedHTML, t) { + let p = window.TrustedTypes.createPolicy(policyName, policy); + assert_true(p.createHTML('whatever') instanceof TrustedHTML); + assert_equals(p.createHTML('whatever') + "", expectedHTML); + } + + test(t => { + createHTMLTest('TestPolicyHTML1', { createHTML: s => s }, 'whatever', t); + }, "html = identity function"); + + test(t => { + createHTMLTest('TestPolicyHTML2', { createHTML: s => null }, "null", t); + }, "html = null"); + + var HTMLstr = 'well, '; + test(t => { + createHTMLTest('TestPolicyHTML3', { createHTML: s => HTMLstr + s }, HTMLstr + 'whatever', t); + }, "html = string + global string"); + + var HTMLx = 'global'; + test(t => { + createHTMLTest('TestPolicyHTML4', { createHTML: s => { HTMLx = s; return s; } }, 'whatever', t); + assert_equals(HTMLx, 'whatever'); + }, "html = identity function, global string changed"); + + test(t => { + let p = window.TrustedTypes.createPolicy('TestPolicyHTML5', { createHTML: s => { throw new Error(); }}); + assert_throws(new Error(), _ => { + p.createHTML('whatever'); + }); + }, "html = callback that throws"); + + var obj = { + "foo": "well," + } + + function getHTML(s) { + return this.foo + " " + s; + } + + test(t => { + createHTMLTest('TestPolicyHTML6', { createHTML: getHTML.bind(obj) }, 'well, whatever', t); + }, "html = this bound to an object"); + + var foo = "well,"; + test(t => { + createHTMLTest('TestPolicyHTML7', { createHTML: s => getHTML(s) }, 'well, whatever', t); + }, "html = this without bind"); + + test(t => { + let p = window.TrustedTypes.createPolicy('TestPolicyHTML8', null); + assert_throws(new TypeError(), _ => { + p.createHTML('whatever'); + }); + }, "html - calling undefined callback throws"); + + test(t => { + let p = window.TrustedTypes.createPolicy('TestPolicyHTML9', { createHTML: createHTMLJS }); + assert_throws(new TypeError(), _ => { + p.createScript(INPUTS.SCRIPT); + }); + assert_throws(new TypeError(), _ => { + p.createScriptURL(INPUTS.SCRIPTURL); + }); + assert_throws(new TypeError(), _ => { + p.createURL(INPUTS.URL); + }); + }, "createHTML defined - calling undefined callbacks throws"); + + //Script tests + function createScriptTest(policyName, policy, expectedScript, t) { + let p = window.TrustedTypes.createPolicy(policyName, policy); + assert_true(p.createScript('whatever') instanceof TrustedScript); + assert_equals(p.createScript('whatever') + "", expectedScript); + } + + test(t => { + createScriptTest('TestPolicyScript1', { createScript: s => s }, 'whatever', t); + }, "script = identity function"); + + test(t => { + createScriptTest('TestPolicyScript2', { createScript: s => null }, "null", t); + }, "script = null"); + + var Scriptstr = 'well, '; + test(t => { + createScriptTest('TestPolicyScript3', { createScript: s => Scriptstr + s }, Scriptstr + 'whatever', t); + }, "script = string + global string"); + + var Scriptx = 'global'; + test(t => { + createScriptTest('TestPolicyScript4', { createScript: s => { Scriptx = s; return s; } }, 'whatever', t); + assert_equals(Scriptx, 'whatever'); + }, "script = identity function, global string changed"); + + test(t => { + let p = window.TrustedTypes.createPolicy('TestPolicyScript5', { + createScript: s => { throw new Error(); } + }); + assert_throws(new Error(), _ => { + p.createScript('whatever'); + }); + }, "script = callback that throws"); + + var obj = { + "foo": "well," + } + + function getScript(s) { + return this.foo + " " + s; + } + + test(t => { + createScriptTest('TestPolicyScript6', { createScript: getScript.bind(obj) }, 'well, whatever', t); + }, "script = this bound to an object"); + + var foo = "well,"; + test(t => { + createScriptTest('TestPolicyScript7', { createScript: s => getScript(s) }, 'well, whatever', t); + }, "script = this without bind"); + + test(t => { + let p = window.TrustedTypes.createPolicy('TestPolicyScript8', null); + assert_throws(new TypeError(), _ => { + p.createScript('whatever'); + }); + }, "script - calling undefined callback throws"); + + test(t => { + let p = window.TrustedTypes.createPolicy('TestPolicyScript9', { createScript: createScriptJS }); + assert_throws(new TypeError(), _ => { + p.createHTML(INPUTS.HTML); + }); + assert_throws(new TypeError(), _ => { + p.createScriptURL(INPUTS.SCRIPTURL); + }); + assert_throws(new TypeError(), _ => { + p.createURL(INPUTS.URL); + }); + }, "createScript defined - calling undefined callbacks throws"); + + + //ScriptURL tests + function createScriptURLTest(policyName, policy, expectedScriptURL, t) { + let p = window.TrustedTypes.createPolicy(policyName, policy); + assert_true(p.createScriptURL(INPUTS.SCRIPTURL) instanceof TrustedScriptURL); + assert_equals(p.createScriptURL(INPUTS.SCRIPTURL) + "", expectedScriptURL); + } + + test(t => { + createScriptURLTest('TestPolicyScriptURL1', { createScriptURL: s => s }, INPUTS.SCRIPTURL, t); + }, "script_url = identity function"); + + test(t => { + createScriptURLTest('TestPolicyScriptURL2', { createScriptURL: s => null }, "", t); + }, "script_url = null"); + + var scriptURLstr = '#duck'; + test(t => { + createScriptURLTest('TestPolicyScriptURL3', { createScriptURL: s => s + scriptURLstr }, INPUTS.SCRIPTURL + scriptURLstr, t); + }, "script_url = string + global string"); + + var scriptURLx = 'global'; + test(t => { + createScriptURLTest('TestPolicyScriptURL4', { createScriptURL: s => { ScriptURLx = s; return s; } }, INPUTS.SCRIPTURL, t); + assert_equals(ScriptURLx, INPUTS.SCRIPTURL); + }, "script_url = identity function, global string changed"); + + test(t => { + let p = window.TrustedTypes.createPolicy('TestPolicyScriptURL5', { + createScriptURL: s => { throw new Error(); } + }); + assert_throws(new Error(), _ => { + p.createScriptURL(INPUTS.SCRIPTURL); + }); + }, "script_url = callback that throws"); + + function getScriptURL(s) { + return s + this.baz; + } + + var obj = { + "baz": "#duck" + } + + test(t => { + createScriptURLTest('TestPolicyScriptURL6', { createScriptURL: getScriptURL.bind(obj) }, INPUTS.SCRIPTURL + "#duck", t); + }, "script_url = this bound to an object"); + + var baz = "#duck"; + test(t => { + createScriptURLTest('TestPolicyScriptURL7', { createScriptURL: s => getScriptURL(s) }, INPUTS.SCRIPTURL + baz, t); + }, "script_url = this without bind"); + + test(t => { + let p = window.TrustedTypes.createPolicy('TestPolicyScriptURL8', null); + assert_throws(new TypeError(), _ => { + p.createScriptURL(INPUTS.SCRIPTURL); + }); + }, "script_url - calling undefined callback throws"); + + test(t => { + let p = window.TrustedTypes.createPolicy('TestPolicyScriptURL9', { createScriptURL: createScriptURLJS }); + assert_throws(new TypeError(), _ => { + p.createHTML(INPUTS.HTML); + }); + assert_throws(new TypeError(), _ => { + p.createScript(INPUTS.SCRIPT); + }); + assert_throws(new TypeError(), _ => { + p.createURL(INPUTS.URL); + }); + }, "createScriptURL defined - calling undefined callbacks throws"); + + + //URL tests + function createURLTest(policyName, policy, expectedURL, t) { + let p = window.TrustedTypes.createPolicy(policyName, policy); + assert_true(p.createURL(INPUTS.URL) instanceof TrustedURL); + assert_equals(p.createURL(INPUTS.URL) + "", expectedURL); + } + + test(t => { + createURLTest('TestPolicyURL1', { createURL: s => s }, INPUTS.URL, t); + }, "url = identity function"); + + test(t => { + createURLTest('TestPolicyURL2', { createURL: s => null }, "", t); + }, "url = null"); + + var URLstr = '#x'; + test(t => { + createURLTest('TestPolicyURL3', { createURL: s => s + URLstr }, INPUTS.URL + URLstr, t); + }, "url = string + global string"); + + var URLx = 'global'; + test(t => { + createURLTest('TestPolicyURL4', { createURL: s => { URLx = s; return s; } }, INPUTS.URL, t); + assert_equals(URLx, INPUTS.URL); + }, "url = identity function, global string changed"); + + test(t => { + let p = window.TrustedTypes.createPolicy('TestPolicyURL5', { + createURL: s => { throw new Error(); } + }); + assert_throws(new Error(), _ => { + p.createURL(INPUTS.URL); + }); + }, "url = callback that throws"); + + function getURL(s) { + return s + this.bar; + } + + var obj = { + "bar": "#x" + } + + test(t => { + createURLTest('TestPolicyURL6', { createURL: getURL.bind(obj) }, INPUTS.URL + "#x", t); + }, "url = this bound to an object"); + + var bar = "#x"; + test(t => { + createURLTest('TestPolicyURL7', { createURL: s => getURL(s) }, INPUTS.URL + bar, t); + }, "url = this without bind"); + + test(t => { + let p = window.TrustedTypes.createPolicy('TestPolicyURL8', null); + assert_throws(new TypeError(), _ => { + p.createURL(INPUTS.URL); + }); + }, "url - calling undefined callback throws"); + + test(t => { + let p = window.TrustedTypes.createPolicy('TestPolicyURL9', { createURL: createURLJS }); + assert_throws(new TypeError(), _ => { + p.createHTML(INPUTS.HTML); + }); + assert_throws(new TypeError(), _ => { + p.createScript(INPUTS.SCRIPT); + }); + assert_throws(new TypeError(), _ => { + p.createScriptURL(INPUTS.SCRIPTURL); + }); + }, "createURL defined - calling undefined callbacks throws"); +</script> diff --git a/tests/wpt/web-platform-tests/trusted-types/TrustedTypePolicyFactory-createPolicy-exposedTests.tentative.html b/tests/wpt/web-platform-tests/trusted-types/TrustedTypePolicyFactory-createPolicy-exposedTests.tentative.html new file mode 100644 index 00000000000..af6e04941c3 --- /dev/null +++ b/tests/wpt/web-platform-tests/trusted-types/TrustedTypePolicyFactory-createPolicy-exposedTests.tentative.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js" ></script> +<script src="/resources/testharnessreport.js"></script> +<script src="support/helper.sub.js"></script> +<body> +<script> + //Not exposed policy test + test(t => { + let policy = window.TrustedTypes.createPolicy('SomeName', { createHTML: s => s } ); + assert_equals(window.TrustedTypes.getExposedPolicy('SomeName'), null); + }, "Null is returned when policy is not exposed"); + + //Non-existent policy test + test(t => { + let policy = window.TrustedTypes.createPolicy('SomeOtherName', { createHTML: s => s } ); + assert_equals(window.TrustedTypes.getExposedPolicy('JustAName'), null); + }, "Null is returned when policy is non-existent"); + + //Exposed policy test + test(t => { + let policy = window.TrustedTypes.createPolicy('EvenSomeOtherName', { createHTML: s => s }, true ); + assert_equals(window.TrustedTypes.getExposedPolicy('EvenSomeOtherName'), policy); + }, "Policy is returned when exposed == true"); +</script> diff --git a/tests/wpt/web-platform-tests/trusted-types/TrustedTypePolicyFactory-createPolicy-nameTests.tentative.html b/tests/wpt/web-platform-tests/trusted-types/TrustedTypePolicyFactory-createPolicy-nameTests.tentative.html new file mode 100644 index 00000000000..6d43e0bafc6 --- /dev/null +++ b/tests/wpt/web-platform-tests/trusted-types/TrustedTypePolicyFactory-createPolicy-nameTests.tentative.html @@ -0,0 +1,28 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js" ></script> +<script src="/resources/testharnessreport.js"></script> +<script src="support/helper.sub.js"></script> +<body> +<script> + //Policy name test + test(t => { + let policy = window.TrustedTypes.createPolicy('SomeName', { createHTML: s => s } ); + assert_true(policy instanceof TrustedTypePolicy); + assert_equals(policy.name, 'SomeName'); + }, "policy.name = name"); + + //Duplicate names test + test(t => { + assert_throws(new TypeError(), _ => { + window.TrustedTypes.createPolicy('SomeName', { createURL: s => s } ); + }); + }, "duplicate policy name attempt throws"); + + //Retrieve policy names tests + test(t => { + let policy = window.TrustedTypes.createPolicy('SomeOtherName', { createURL: s => s } ); + let names = window.TrustedTypes.getPolicyNames(); + assert_true(names.includes('SomeName')); + assert_true(names.includes('SomeOtherName')); + }, "Retrieving policy names"); +</script> diff --git a/tests/wpt/web-platform-tests/trusted-types/TrustedTypePolicyFactory-createPolicy.tentative.html b/tests/wpt/web-platform-tests/trusted-types/TrustedTypePolicyFactory-createPolicy.tentative.html deleted file mode 100644 index 76e6d130b05..00000000000 --- a/tests/wpt/web-platform-tests/trusted-types/TrustedTypePolicyFactory-createPolicy.tentative.html +++ /dev/null @@ -1,299 +0,0 @@ -<!DOCTYPE html> -<script src="/resources/testharness.js" ></script> -<script src="/resources/testharnessreport.js"></script> -<script src="support/helper.sub.js"></script> -<body> -<script> - //Policy name test - async_test(t => { - window.trustedTypes.createPolicy('SomeName', { createHTML: s => s } ) - .then(t.step_func_done(policy => { - assert_true(policy instanceof TrustedTypePolicy); - assert_equals(policy.name, 'SomeName'); - })); - }, "policy.name = name"); - - //HTML tests - function createHTMLTest(policy, expectedHTML, t) { - window.trustedTypes.createPolicy('SomeName', policy) - .then(t.step_func_done(p => { - assert_true(p.createHTML('whatever') instanceof TrustedHTML); - assert_equals(p.createHTML('whatever') + "", expectedHTML); - })); - } - - async_test(t => { - createHTMLTest( { createHTML: s => s }, 'whatever', t); - }, "html = identity function"); - - async_test(t => { - createHTMLTest( { createHTML: s => null }, "null", t); - }, "html = null"); - - var HTMLstr = 'well, '; - async_test(t => { - createHTMLTest( { createHTML: s => HTMLstr + s }, HTMLstr + 'whatever', t); - }, "html = string + global string"); - - var HTMLx = 'global'; - async_test(t => { - window.trustedTypes.createPolicy('SomeName', { - createHTML: s => { HTMLx = s; return s; } - }) - .then(t.step_func_done(p => { - assert_true(p.createHTML('whatever') instanceof TrustedHTML); - assert_equals(p.createHTML('whatever') + "", 'whatever'); - assert_equals(HTMLx, 'whatever'); - })); - }, "html = identity function, global string changed"); - - async_test(t => { - window.trustedTypes.createPolicy('SomeName', { - createHTML: s => { throw new Error(); } - }) - .then(t.step_func_done(p => { - assert_throws(new Error(), _ => { - p.createHTML('whatever'); - }); - })); - }, "html = callback that throws"); - - var obj = { - "foo": "well," - } - - function getHTML(s) { - return this.foo + " " + s; - } - - async_test(t => { - createHTMLTest( { - createHTML: getHTML.bind(obj)}, - 'well, whatever', t); - }, "html = this bound to an object"); - - var foo = "well,"; - async_test(t => { - createHTMLTest( { createHTML: s => getHTML(s) }, 'well, whatever', t); - }, "html = this without bind"); - - async_test(t => { - window.trustedTypes.createPolicy('SomeName', null) - .then(t.step_func_done(p => { - assert_equals(p.createHTML('whatever'), null); - })); - }, "html - calling undefined callback"); - - //Script tests - function createScriptTest(policy, expectedScript, t) { - let p = window.trustedTypes.createPolicy('SomeName', policy) - .then(t.step_func_done(p => { - assert_true(p.createScript('whatever') instanceof TrustedScript); - assert_equals(p.createScript('whatever') + "", expectedScript); - })); - } - - async_test(t => { - createScriptTest( { createScript: s => s }, 'whatever', t); - }, "script = identity function"); - - async_test(t => { - createScriptTest( { createScript: s => null }, "null", t); - }, "script = null"); - - var Scriptstr = 'well, '; - async_test(t => { - createScriptTest( { createScript: s => Scriptstr + s }, Scriptstr + 'whatever', t); - }, "script = string + global string"); - - var Scriptx = 'global'; - async_test(t => { - let p = window.trustedTypes.createPolicy('SomeName', { - createScript: s => { Scriptx = s; return s; } - }) - .then(t.step_func_done(p => { - assert_true(p.createScript('whatever') instanceof TrustedScript); - assert_equals(p.createScript('whatever') + "", 'whatever'); - assert_equals(Scriptx, 'whatever'); - })); - }, "script = identity function, global string changed"); - - async_test(t => { - let p = window.trustedTypes.createPolicy('SomeName', { - createScript: s => { throw new Error(); } - }) - .then(t.step_func_done(p => { - assert_throws(new Error(), _ => { - p.createScript('whatever'); - }); - })); - }, "script = callback that throws"); - - var obj = { - "foo": "well," - } - - function getScript(s) { - return this.foo + " " + s; - } - - async_test(t => { - createScriptTest( { - createScript: getScript.bind(obj)}, - 'well, whatever', t); - }, "script = this bound to an object"); - - var foo = "well,"; - async_test(t => { - createScriptTest( { createScript: s => getScript(s) }, 'well, whatever', t); - }, "script = this without bind"); - - async_test(t => { - let p = window.trustedTypes.createPolicy('SomeName', null) - .then(t.step_func_done(p => { - assert_equals(p.createScript('whatever'), null); - })); - }, "script - calling undefined callback"); - - //ScriptURL tests - function createScriptURLTest(policy, expectedScriptURL, t) { - window.trustedTypes.createPolicy('SomeName', policy) - .then(t.step_func_done(p => { - assert_true(p.createScriptURL(INPUTS.SCRIPTURL) instanceof TrustedScriptURL); - assert_equals(p.createScriptURL(INPUTS.SCRIPTURL) + "", expectedScriptURL); - })); - } - - async_test(t => { - createScriptURLTest( { createScriptURL: s => s }, INPUTS.SCRIPTURL, t); - }, "script_url = identity function"); - - async_test(t => { - createScriptURLTest( { createScriptURL: s => null }, "", t); - }, "script_url = null"); - - var scriptURLstr = '#duck'; - async_test(t => { - createScriptURLTest( { createScriptURL: s => s + scriptURLstr }, INPUTS.SCRIPTURL + scriptURLstr, t); - }, "script_url = string + global string"); - - var scriptURLx = 'global'; - async_test(t => { - window.trustedTypes.createPolicy('SomeName', { - createScriptURL: s => { ScriptURLx = s; return s; } - }) - .then(t.step_func_done(p => { - assert_true(p.createScriptURL(INPUTS.SCRIPTURL) instanceof TrustedScriptURL); - assert_equals(p.createScriptURL(INPUTS.SCRIPTURL) + "", INPUTS.SCRIPTURL); - assert_equals(ScriptURLx, INPUTS.SCRIPTURL); - })); - }, "script_url = identity function, global string changed"); - - async_test(t => { - window.trustedTypes.createPolicy('SomeName', { - createScriptURL: s => { throw new Error(); } - }) - .then(t.step_func_done(p => { - assert_throws(new Error(), _ => { - p.createScriptURL(INPUTS.SCRIPTURL); - }); - })); - }, "script_url = callback that throws"); - - function getScriptURL(s) { - return s + this.baz; - } - - var obj = { - "baz": "#duck" - } - - async_test(t => { - createScriptURLTest( { - createScriptURL: getScriptURL.bind(obj)}, - INPUTS.SCRIPTURL + "#duck", t); - }, "script_url = this bound to an object"); - - var baz = "#duck"; - async_test(t => { - createScriptURLTest( { createScriptURL: s => getScriptURL(s) }, INPUTS.SCRIPTURL + baz, t); - }, "script_url = this without bind"); - - async_test(t => { - window.trustedTypes.createPolicy('SomeName', null) - .then(t.step_func_done(p => { - assert_equals(p.createScriptURL(INPUTS.SCRIPTURL), null); - })); - }, "script_url - calling undefined callback"); - - //URL tests - function createURLTest(policy, expectedURL, t) { - window.trustedTypes.createPolicy('SomeName', policy) - .then(t.step_func_done(p => { - assert_true(p.createURL(INPUTS.URL) instanceof TrustedURL); - assert_equals(p.createURL(INPUTS.URL) + "", expectedURL); - })); - } - - async_test(t => { - createURLTest( { createURL: s => s }, INPUTS.URL, t); - }, "url = identity function"); - - async_test(t => { - createURLTest( { createURL: s => null }, "", t); - }, "url = null"); - - var URLstr = '#x'; - async_test(t => { - createURLTest( { createURL: s => s + URLstr }, INPUTS.URL + URLstr, t); - }, "url = string + global string"); - - var URLx = 'global'; - async_test(t => { - window.trustedTypes.createPolicy('SomeName', { - createURL: s => { URLx = s; return s; } - }) - .then(t.step_func_done(p => { - assert_true(p.createURL(INPUTS.URL) instanceof TrustedURL); - assert_equals(p.createURL(INPUTS.URL) + "", INPUTS.URL); - assert_equals(URLx, INPUTS.URL); - })); - }, "url = identity function, global string changed"); - - async_test(t => { - window.trustedTypes.createPolicy('SomeName', { - createURL: s => { throw new Error(); } - }) - .then(t.step_func_done(p => { - assert_throws(new Error(), _ => { - p.createURL(INPUTS.URL); - }); - })); - }, "url = callback that throws"); - - function getURL(s) { - return s + this.bar; - } - - var obj = { - "bar": "#x" - } - - async_test(t => { - createURLTest( { - createURL: getURL.bind(obj)}, - INPUTS.URL + "#x", t); - }, "url = this bound to an object"); - - var bar = "#x"; - async_test(t => { - createURLTest( { createURL: s => getURL(s) }, INPUTS.URL + bar, t); - }, "url = this without bind"); - - async_test(t => { - window.trustedTypes.createPolicy('SomeName', null) - .then(t.step_func_done(p => { - assert_equals(p.createURL(INPUTS.URL), null); - })); - }, "url - calling undefined callback"); -</script> diff --git a/tests/wpt/web-platform-tests/trusted-types/Window-trustedTypes.tentative.html b/tests/wpt/web-platform-tests/trusted-types/Window-TrustedTypes.tentative.html index ef4487749dd..8e20e492e6a 100644 --- a/tests/wpt/web-platform-tests/trusted-types/Window-trustedTypes.tentative.html +++ b/tests/wpt/web-platform-tests/trusted-types/Window-TrustedTypes.tentative.html @@ -5,7 +5,7 @@ <body> <script> test(t => { - let factory = window.trustedTypes; + let factory = window.TrustedTypes; assert_true(factory instanceof TrustedTypePolicyFactory); - }, "factory = window.trustedTypes"); + }, "factory = window.TrustedTypes"); </script> diff --git a/tests/wpt/web-platform-tests/trusted-types/Window-open.tentative.html b/tests/wpt/web-platform-tests/trusted-types/Window-open.tentative.html index c005fbba143..172d566e57f 100644 --- a/tests/wpt/web-platform-tests/trusted-types/Window-open.tentative.html +++ b/tests/wpt/web-platform-tests/trusted-types/Window-open.tentative.html @@ -5,23 +5,21 @@ <body> <script> // helper functions for the tests - function testWindowOpen(t, win) { - createURL_policy(window) - .then(t.step_func_done(p => { - let url = p.createURL(INPUTS.URL); - let child_window = win.open(url, "", ""); - child_window.onload = t.step_func_done(_ => { - assert_equals(child_window.location.href, "" + url); - child_window.close(); - }); - })); + function testWindowOpen(t, win, testNumber) { + let p = createURL_policy(window, testNumber); + let url = p.createURL(INPUTS.URL); + let child_window = win.open(url, "", ""); + child_window.onload = t.step_func_done(_ => { + assert_equals(child_window.location.href, "" + url); + child_window.close(); + }); } - async_test(t => { - testWindowOpen(t, window); + test(t => { + testWindowOpen(t, window, 1); }, "window.open via policy (successful URL transformation)."); - async_test(t => { - testWindowOpen(t, document); + test(t => { + testWindowOpen(t, document, 2); }, "document.open via policy (successful URL transformation)."); </script> diff --git a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-DOMParser-parseFromString.tentative.html b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-DOMParser-parseFromString.tentative.html index cc575dc0085..e5959a425a2 100644 --- a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-DOMParser-parseFromString.tentative.html +++ b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-DOMParser-parseFromString.tentative.html @@ -7,14 +7,12 @@ <body> <script> // Trusted HTML assignments do not throw. - async_test(t => { - createHTML_policy(window) - .then(t.step_func_done(p => { - let html = p.createHTML(INPUTS.HTML); - let parser = new DOMParser(); - let doc = parser.parseFromString(html, "text/html"); - assert_equals(doc.body.innerText, RESULTS.HTML); - })); + test(t => { + let p = createHTML_policy(window, 1); + let html = p.createHTML(INPUTS.HTML); + let parser = new DOMParser(); + let doc = parser.parseFromString(html, "text/html"); + assert_equals(doc.body.innerText, RESULTS.HTML); }, "document.innerText assigned via policy (successful HTML transformation)."); // String assignments throw. diff --git a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Document-write.tentative.html b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Document-write.tentative.html index 28813d72e0e..06532c3b479 100644 --- a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Document-write.tentative.html +++ b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Document-write.tentative.html @@ -10,13 +10,11 @@ <body> <script> // TrustedURL assignments do not throw. - async_test(t => { - createHTML_policy(window) - .then(t.step_func_done(p => { - let html = p.createHTML(INPUTS.HTML); - document.write(html); - assert_equals(document.body.innerText, RESULTS.HTML); - })); + test(t => { + let p = createHTML_policy(window, 1); + let html = p.createHTML(INPUTS.HTML); + document.write(html); + assert_equals(document.body.innerText, RESULTS.HTML); }, "document.write with html assigned via policy (successful URL transformation)."); // String assignments throw. diff --git a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Element-insertAdjacentHTML.tentative.html b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Element-insertAdjacentHTML.tentative.html index ad94b44e8fb..1fb3bbd994a 100644 --- a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Element-insertAdjacentHTML.tentative.html +++ b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Element-insertAdjacentHTML.tentative.html @@ -13,33 +13,31 @@ var container = document.querySelector('#container'); // Trusted HTML assignments do not throw. - async_test(t => { - createHTML_policy(window) - .then(t.step_func_done(p => { - let html = p.createHTML(INPUTS.HTML); + test(t => { + let p = createHTML_policy(window, 1); + let html = p.createHTML(INPUTS.HTML); - var d = document.createElement('div'); - container.appendChild(d); + var d = document.createElement('div'); + container.appendChild(d); - d.insertAdjacentHTML('beforebegin', html); - assert_equals(d.previousSibling.nodeType, Node.TEXT_NODE); - assert_equals(d.previousSibling.data, RESULTS.HTML); + d.insertAdjacentHTML('beforebegin', html); + assert_equals(d.previousSibling.nodeType, Node.TEXT_NODE); + assert_equals(d.previousSibling.data, RESULTS.HTML); - d.insertAdjacentHTML('afterbegin', html); - assert_equals(d.firstChild.nodeType, Node.TEXT_NODE); - assert_equals(d.firstChild.data, RESULTS.HTML); + d.insertAdjacentHTML('afterbegin', html); + assert_equals(d.firstChild.nodeType, Node.TEXT_NODE); + assert_equals(d.firstChild.data, RESULTS.HTML); - d.insertAdjacentHTML('beforeend', html); - assert_equals(d.lastChild.nodeType, Node.TEXT_NODE); - assert_equals(d.lastChild.data, RESULTS.HTML); + d.insertAdjacentHTML('beforeend', html); + assert_equals(d.lastChild.nodeType, Node.TEXT_NODE); + assert_equals(d.lastChild.data, RESULTS.HTML); - d.insertAdjacentHTML('afterend', html); - assert_equals(d.nextSibling.nodeType, Node.TEXT_NODE); - assert_equals(d.nextSibling.data, RESULTS.HTML); + d.insertAdjacentHTML('afterend', html); + assert_equals(d.nextSibling.nodeType, Node.TEXT_NODE); + assert_equals(d.nextSibling.data, RESULTS.HTML); - while (container.firstChild) - container.firstChild.remove(); - })); + while (container.firstChild) + container.firstChild.remove(); }, "insertAdjacentHTML with html assigned via policy (successful HTML transformation)."); // String assignments throw. diff --git a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Element-outerHTML.tentative.html b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Element-outerHTML.tentative.html index 47f1165b1a6..abb595222ba 100644 --- a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Element-outerHTML.tentative.html +++ b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Element-outerHTML.tentative.html @@ -13,19 +13,17 @@ var container = document.querySelector('#container') // TrustedHTML assignments do not throw. - async_test(t => { - createHTML_policy(window) - .then(t.step_func_done(p => { - let html = p.createHTML(INPUTS.HTML); + test(t => { + let p = createHTML_policy(window, 1); + let html = p.createHTML(INPUTS.HTML); - var d = document.createElement('div'); - document.querySelector('#container').appendChild(d); - d.outerHTML = html; - assert_equals(container.innerText, RESULTS.HTML); + var d = document.createElement('div'); + document.querySelector('#container').appendChild(d); + d.outerHTML = html; + assert_equals(container.innerText, RESULTS.HTML); - while (container.firstChild) - container.firstChild.remove(); - })); + while (container.firstChild) + container.firstChild.remove(); }, "outerHTML with html assigned via policy (successful HTML transformation)."); // String assignments throw. diff --git a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-HTMLElement-generic.tentative.html b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-HTMLElement-generic.tentative.html index eae52626190..7b1a5795d7c 100644 --- a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-HTMLElement-generic.tentative.html +++ b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-HTMLElement-generic.tentative.html @@ -27,8 +27,8 @@ ]; testCases.forEach(c => { - async_test(t => { - assert_element_accepts_trusted_url(window, t, c[0], c[1], RESULTS.URL); + test(t => { + assert_element_accepts_trusted_url(window, c, t, c[0], c[1], RESULTS.URL); assert_throws_no_trusted_type(c[0], c[1], 'A string'); assert_throws_no_trusted_type(c[0], c[1], null); }, c[0] + "." + c[1] + " accepts only TrustedURL"); @@ -41,8 +41,8 @@ ]; scriptTestCases.forEach(c => { - async_test(t => { - assert_element_accepts_trusted_script_url(window, t, c[0], c[1], RESULTS.SCRIPTURL); + test(t => { + assert_element_accepts_trusted_script_url(window, c, t, c[0], c[1], RESULTS.SCRIPTURL); assert_throws_no_trusted_type(c[0], c[1], 'A string'); assert_throws_no_trusted_type(c[0], c[1], null); }, c[0] + "." + c[1] + " accepts only TrustedScriptURL"); @@ -55,8 +55,8 @@ ]; HTMLTestCases.forEach(c => { - async_test(t => { - assert_element_accepts_trusted_html(window, t, c[0], c[1], RESULTS.HTML); + test(t => { + assert_element_accepts_trusted_html(window, c, t, c[0], c[1], RESULTS.HTML); assert_throws_no_trusted_type(c[0], c[1], 'A string'); assert_throws_no_trusted_type(c[0], c[1], null); }, c[0] + "." + c[1] + " accepts only TrustedHTML"); diff --git a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Location-assign.tentative.html b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Location-assign.tentative.html index 8079335bc58..cd375b9d016 100644 --- a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Location-assign.tentative.html +++ b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Location-assign.tentative.html @@ -10,13 +10,11 @@ <body> <script> // TrustedURL assignments do not throw. - async_test(t => { - createURL_policy(window) - .then(t.step_func_done(p => { - let url = p.createURL(location.href + "#xxx"); - location.assign(url); - assert_equals("" + url, location.href, "location href"); - })); + test(t => { + let p = createURL_policy(window, 1); + let url = p.createURL(location.href + "#xxx"); + location.assign(url); + assert_equals("" + url, location.href, "location href"); }, "location.assign via policy (successful URL transformation)."); // String assignments throw. diff --git a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Location-href.tentative.html b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Location-href.tentative.html index 4e393f92506..14fbcb2fb3c 100644 --- a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Location-href.tentative.html +++ b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Location-href.tentative.html @@ -10,13 +10,11 @@ <body> <script> // TrustedURL assignments do not throw. - async_test(t => { - createURL_policy(window) - .then(t.step_func_done(p => { - let url = p.createURL(location.href + "#xxx"); - location.href = url; - assert_equals("" + url, location.href, "location href"); - })); + test(t => { + let p = createURL_policy(window, 1); + let url = p.createURL(location.href + "#xxx"); + location.href = url; + assert_equals("" + url, location.href, "location href"); }, "location.href assigned via policy (successful URL transformation)."); // String assignments throw. diff --git a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Location-replace.tentative.html b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Location-replace.tentative.html index 872f14e1448..9d00fcdeb35 100644 --- a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Location-replace.tentative.html +++ b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Location-replace.tentative.html @@ -10,13 +10,11 @@ <body> <script> // TrustedURL replacements do not throw. - async_test(t => { - createURL_policy(window) - .then(t.step_func_done(p => { - let url = p.createURL(location.href + "#xxx"); - location.replace(url); - assert_equals("" + url, location.href, "location href"); - })); + test(t => { + let p = createURL_policy(window, 1); + let url = p.createURL(location.href + "#xxx"); + location.replace(url); + assert_equals("" + url, location.href, "location href"); }, "location.replace via policy (successful URL transformation)."); // String replacements throw. diff --git a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Range-createContextualFragment.tentative.html b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Range-createContextualFragment.tentative.html index 2afa2572c35..ff9be06251d 100644 --- a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Range-createContextualFragment.tentative.html +++ b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Range-createContextualFragment.tentative.html @@ -7,15 +7,13 @@ <body> <script> // TrustedHTML assignments do not throw. - async_test(t => { - createHTML_policy(window) - .then(t.step_func_done(p => { - let html = p.createHTML(INPUTS.HTML); - var range = document.createRange(); - range.selectNodeContents(document.documentElement); - var result = range.createContextualFragment(html); - assert_equals(result.textContent, RESULTS.HTML); - })); + test(t => { + let p = createHTML_policy(window, 1); + let html = p.createHTML(INPUTS.HTML); + var range = document.createRange(); + range.selectNodeContents(document.documentElement); + var result = range.createContextualFragment(html); + assert_equals(result.textContent, RESULTS.HTML); }, "range.createContextualFragment assigned via policy (successful HTML transformation)."); // String assignments throw. diff --git a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Window-open.tentative.html b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Window-open.tentative.html index f5712295d30..ae4b038dc0c 100644 --- a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Window-open.tentative.html +++ b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Window-open.tentative.html @@ -9,54 +9,51 @@ </head> <body> <script> + var testnb = 0; // helper functions for the tests - function testWindowOpen(t, win) { - createURL_policy(window) - .then(t.step_func_done(p => { - let url = p.createURL(INPUTS.URL); - let child_window = win.open(url, "", ""); - child_window.onload = t.step_func_done(_ => { - assert_equals(child_window.location.href, "" + url); - child_window.close(); - }); - })); + function testWindowOpen(t, win, nb) { + let p = createURL_policy(window, nb); + let url = p.createURL(INPUTS.URL); + let child_window = win.open(url, "", ""); + child_window.onload = t.step_func_done(_ => { + assert_equals(child_window.location.href, "" + url); + child_window.close(); + }); } - function testWindowThrows(t, url, win) { - createURL_policy(window) - .then(t.step_func_done(p => { - assert_throws(new TypeError(), _ => { - let child_window = win.open(url, "", ""); - child_window.close(); - }); - })); + function testWindowThrows(t, url, win, nb) { + let p = createURL_policy(window, nb); + assert_throws(new TypeError(), _ => { + let child_window = win.open(url, "", ""); + child_window.close(); + }); } // TrustedURL assignments do not throw. - async_test(t => { - testWindowOpen(t, window); + test(t => { + testWindowOpen(t, window, ++testnb); }, "window.open via policy (successful URL transformation)."); - async_test(t => { - testWindowOpen(t, document); + test(t => { + testWindowOpen(t, document, ++testnb); }, "document.open via policy (successful URL transformation)."); // String assignments throw. - async_test(t => { - testWindowThrows(t, 'A string', window); + test(t => { + testWindowThrows(t, 'A string', window, ++testnb); }, "`window.open(string)` throws."); - async_test(t => { - testWindowThrows(t, 'A string', document); + test(t => { + testWindowThrows(t, 'A string', document, ++testnb); }, "`document.open(string)` throws."); // Null assignment throws. - async_test(t => { - testWindowThrows(t, null, window); + test(t => { + testWindowThrows(t, null, window, ++testnb); }, "`window.open(null)` throws."); - async_test(t => { - testWindowThrows(t, null, document); + test(t => { + testWindowThrows(t, null, document, ++testnb); }, "`document.open(null)` throws."); </script> </body> diff --git a/tests/wpt/web-platform-tests/trusted-types/support/helper.sub.js b/tests/wpt/web-platform-tests/trusted-types/support/helper.sub.js index b5435917bec..617e02aa6ba 100644 --- a/tests/wpt/web-platform-tests/trusted-types/support/helper.sub.js +++ b/tests/wpt/web-platform-tests/trusted-types/support/helper.sub.js @@ -31,52 +31,44 @@ function createURLJS(url) { .replace("an.url", "successfully.transformed"); } -function createHTML_policy(win) { - return win.trustedTypes.createPolicy('SomeName', { createHTML: createHTMLJS }); +function createHTML_policy(win, c) { + return win.TrustedTypes.createPolicy('SomeHTMLPolicyName' + c, { createHTML: createHTMLJS }); } -function createScript_policy(win) { - return win.trustedTypes.createPolicy('SomeName', { createScript: createScriptJS }); +function createScript_policy(win, c) { + return win.TrustedTypes.createPolicy('SomeScriptPolicyName' + c, { createScript: createScriptJS }); } -function createScriptURL_policy(win) { - return win.trustedTypes.createPolicy('SomeName', { createScriptURL: createScriptURLJS }); +function createScriptURL_policy(win, c) { + return win.TrustedTypes.createPolicy('SomeScriptURLPolicyName' + c, { createScriptURL: createScriptURLJS }); } -function createURL_policy(win) { - return win.trustedTypes.createPolicy('SomeName', { createURL: createURLJS }); +function createURL_policy(win, c) { + return win.TrustedTypes.createPolicy('SomeURLPolicyName' + c, { createURL: createURLJS }); } -function assert_element_accepts_trusted_html(win, t, tag, attribute, expected) { - createHTML_policy(win) - .then(t.step_func_done(p => { - let html = p.createHTML(INPUTS.HTML); - assert_element_accepts_trusted_type(tag, attribute, html, expected); - })); +function assert_element_accepts_trusted_html(win, c, t, tag, attribute, expected) { + let p = createHTML_policy(win, c); + let html = p.createHTML(INPUTS.HTML); + assert_element_accepts_trusted_type(tag, attribute, html, expected); } -function assert_element_accepts_trusted_script(win, t, tag, attribute, expected) { - createScript_policy(win) - .then(t.step_func_done(p => { - let script = p.createScript(INPUTS.SCRIPT); - assert_element_accepts_trusted_type(tag, attribute, script, expected); - })); +function assert_element_accepts_trusted_script(win, c, t, tag, attribute, expected) { + let p = createScript_policy(win, c); + let script = p.createScript(INPUTS.SCRIPT); + assert_element_accepts_trusted_type(tag, attribute, script, expected); } -function assert_element_accepts_trusted_script_url(win, t, tag, attribute, expected) { - createScriptURL_policy(win) - .then(t.step_func_done(p => { - let scripturl = p.createScriptURL(INPUTS.SCRIPTURL); - assert_element_accepts_trusted_type(tag, attribute, scripturl, expected); - })); +function assert_element_accepts_trusted_script_url(win, c, t, tag, attribute, expected) { + let p = createScriptURL_policy(win, c); + let scripturl = p.createScriptURL(INPUTS.SCRIPTURL); + assert_element_accepts_trusted_type(tag, attribute, scripturl, expected); } -function assert_element_accepts_trusted_url(win, t, tag, attribute, expected) { - createURL_policy(win) - .then(t.step_func_done(p => { - let url = p.createURL(INPUTS.URL); - assert_element_accepts_trusted_type(tag, attribute, url, expected); - })); +function assert_element_accepts_trusted_url(win, c, t, tag, attribute, expected) { + let p = createURL_policy(win, c); + let url = p.createURL(INPUTS.URL); + assert_element_accepts_trusted_type(tag, attribute, url, expected); } function assert_element_accepts_trusted_type(tag, attribute, value, expected) { diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/global/constructor.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/global/constructor.any.js new file mode 100644 index 00000000000..7a45cc4191c --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/jsapi/global/constructor.any.js @@ -0,0 +1,121 @@ +// META: global=jsshell +// META: script=/wasm/jsapi/assertions.js + +function assert_Global(actual, expected) { + assert_equals(Object.getPrototypeOf(actual), WebAssembly.Global.prototype, + "prototype"); + assert_true(Object.isExtensible(actual), "extensible"); + + assert_equals(actual.value, expected, "value"); + assert_equals(actual.valueOf(), expected, "valueOf"); +} + +test(() => { + assert_function_name(WebAssembly.Global, "Global", "WebAssembly.Global"); +}, "name"); + +test(() => { + assert_function_length(WebAssembly.Global, 1, "WebAssembly.Global"); +}, "length"); + +test(() => { + assert_throws(new TypeError(), () => new WebAssembly.Global()); +}, "No arguments"); + +test(() => { + const argument = { "value": "i32" }; + assert_throws(new TypeError(), () => WebAssembly.Global(argument)); +}, "Calling"); + +test(() => { + const order = []; + + new WebAssembly.Global({ + get value() { + order.push("descriptor value"); + return { + toString() { + order.push("descriptor value toString"); + return "f64"; + }, + }; + }, + + get mutable() { + order.push("descriptor mutable"); + return false; + }, + }, { + valueOf() { + order.push("value valueOf()"); + } + }); + + assert_array_equals(order, [ + "descriptor mutable", + "descriptor value", + "descriptor value toString", + "value valueOf()", + ]); +}, "Order of evaluation"); + +test(() => { + const invalidArguments = [ + undefined, + null, + false, + true, + "", + "test", + Symbol(), + 1, + NaN, + {}, + ]; + for (const invalidArgument of invalidArguments) { + assert_throws(new TypeError(), + () => new WebAssembly.Global(invalidArgument), + `new Global(${format_value(invalidArgument)})`); + } +}, "Invalid descriptor argument"); + +test(() => { + const invalidTypes = ["i16", "i128", "f16", "f128", "u32", "u64", "i32\0"]; + for (const value of invalidTypes) { + const argument = { value }; + assert_throws(new TypeError(), () => new WebAssembly.Global(argument)); + } +}, "Invalid type argument"); + +test(() => { + const argument = { "value": "i64" }; + const global = new WebAssembly.Global(argument); + assert_throws(new TypeError(), () => global.value); + assert_throws(new TypeError(), () => global.valueOf()); +}, "i64 with default"); + +for (const type of ["i32", "f32", "f64"]) { + test(() => { + const argument = { "value": type }; + const global = new WebAssembly.Global(argument); + assert_Global(global, 0); + }, `Default value for type ${type}`); + + const valueArguments = [ + [undefined, 0], + [null, 0], + [true, 1], + [false, 0], + [2, 2], + ["3", 3], + [{ toString() { return "5" } }, 5, "object with toString"], + [{ valueOf() { return "8" } }, 8, "object with valueOf"], + ]; + for (const [value, expected, name = format_value(value)] of valueArguments) { + test(() => { + const argument = { "value": type }; + const global = new WebAssembly.Global(argument, value); + assert_Global(global, expected); + }, `Explicit value ${name} for type ${type}`); + } +} diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/global/toString.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/global/toString.any.js new file mode 100644 index 00000000000..ca025576c2b --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/jsapi/global/toString.any.js @@ -0,0 +1,7 @@ +// META: global=jsshell + +test(() => { + const argument = { "value": "i32" }; + const global = new WebAssembly.Global(argument); + assert_class_string(global, "WebAssembly.Global"); +}, "Object.prototype.toString on an Global"); diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/global/value-set.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/global/value-set.any.js new file mode 100644 index 00000000000..b4e6770f10e --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/jsapi/global/value-set.any.js @@ -0,0 +1,94 @@ +// META: global=jsshell + +test(() => { + const thisValues = [ + undefined, + null, + true, + "", + Symbol(), + 1, + {}, + WebAssembly.Global, + WebAssembly.Global.prototype, + ]; + + const desc = Object.getOwnPropertyDescriptor(WebAssembly.Global.prototype, "value"); + assert_equals(typeof desc, "object"); + + const getter = desc.get; + assert_equals(typeof getter, "function"); + + const setter = desc.set; + assert_equals(typeof setter, "function"); + + for (const thisValue of thisValues) { + assert_throws(new TypeError(), () => getter.call(thisValue), `getter with this=${format_value(thisValue)}`); + assert_throws(new TypeError(), () => setter.call(thisValue, 1), `setter with this=${format_value(thisValue)}`); + } +}, "Branding"); + +for (const type of ["i32", "f32", "f64"]) { + const immutableOptions = [ + [{}, "missing"], + [{ "mutable": undefined }, "undefined"], + [{ "mutable": null }, "null"], + [{ "mutable": false }, "false"], + [{ "mutable": "" }, "empty string"], + [{ "mutable": 0 }, "zero"], + ]; + for (const [opts, name] of immutableOptions) { + test(() => { + opts.value = type; + const global = new WebAssembly.Global(opts); + assert_equals(global.value, 0, "initial value"); + assert_equals(global.valueOf(), 0, "initial valueOf"); + + assert_throws(new TypeError(), () => global.value = 1); + + assert_equals(global.value, 0, "post-set value"); + assert_equals(global.valueOf(), 0, "post-set valueOf"); + }, `Immutable ${type} (${name})`); + } + + const mutableOptions = [ + [{ "mutable": true }, "true"], + [{ "mutable": 1 }, "one"], + [{ "mutable": "x" }, "string"], + [Object.create({ "mutable": true }), "true on prototype"], + ]; + for (const [opts, name] of mutableOptions) { + test(() => { + opts.value = type; + const global = new WebAssembly.Global(opts); + assert_equals(global.value, 0, "initial value"); + assert_equals(global.valueOf(), 0, "initial valueOf"); + + global.value = 1; + + assert_equals(global.value, 1, "post-set value"); + assert_equals(global.valueOf(), 1, "post-set valueOf"); + }, `Mutable ${type} (${name})`); + } +} + +test(() => { + const argument = { "value": "i64", "mutable": true }; + const global = new WebAssembly.Global(argument); + assert_throws(new TypeError(), () => global.value); + assert_throws(new TypeError(), () => global.value = 0); + assert_throws(new TypeError(), () => global.valueOf()); +}, "i64 with default"); + + +test(() => { + const argument = { "value": "i32", "mutable": true }; + const global = new WebAssembly.Global(argument); + const desc = Object.getOwnPropertyDescriptor(WebAssembly.Global.prototype, "value"); + assert_equals(typeof desc, "object"); + + const setter = desc.set; + assert_equals(typeof setter, "function"); + + assert_throws(new TypeError(), () => setter.call(global)); +}, "Calling setter without argument"); diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/global/valueOf.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/global/valueOf.any.js new file mode 100644 index 00000000000..176c5a78469 --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/jsapi/global/valueOf.any.js @@ -0,0 +1,22 @@ +// META: global=jsshell + +test(() => { + const argument = { "value": "i32" }; + const thisValues = [ + undefined, + null, + true, + "", + Symbol(), + 1, + {}, + WebAssembly.Global, + WebAssembly.Global.prototype, + ]; + + const fn = WebAssembly.Global.prototype.valueOf; + + for (const thisValue of thisValues) { + assert_throws(new TypeError(), () => fn.call(thisValue), `this=${format_value(thisValue)}`); + } +}, "Branding"); diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/instance/constructor.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/instance/constructor.any.js index 93a3ffda033..61a8f53a014 100644 --- a/tests/wpt/web-platform-tests/wasm/jsapi/instance/constructor.any.js +++ b/tests/wpt/web-platform-tests/wasm/jsapi/instance/constructor.any.js @@ -28,6 +28,7 @@ function assert_Instance(instance, expected_exports) { assert_true(property.enumerable, `${key}: enumerable`); assert_false(property.configurable, `${key}: configurable`); const actual = property.value; + assert_true(Object.isExtensible(actual), `${key}: extensible`); switch (expected.kind) { case "function": @@ -76,6 +77,39 @@ test(() => { }, "No arguments"); test(() => { + const invalidArguments = [ + undefined, + null, + true, + "", + Symbol(), + 1, + {}, + WebAssembly.Module, + WebAssembly.Module.prototype, + ]; + for (const argument of invalidArguments) { + assert_throws(new TypeError(), () => new WebAssembly.Instance(argument), + `new Instance(${format_value(argument)})`); + } +}, "Non-Module arguments"); + +test(() => { + const module = new WebAssembly.Module(emptyModuleBinary); + const invalidArguments = [ + null, + true, + "", + Symbol(), + 1, + ]; + for (const argument of invalidArguments) { + assert_throws(new TypeError(), () => new WebAssembly.Instance(module, argument), + `new Instance(module, ${format_value(argument)})`); + } +}, "Non-object imports"); + +test(() => { const module = new WebAssembly.Module(emptyModuleBinary); assert_throws(new TypeError(), () => WebAssembly.Instance(module)); }, "Calling"); diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/instance/exports.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/instance/exports.any.js new file mode 100644 index 00000000000..31423918720 --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/jsapi/instance/exports.any.js @@ -0,0 +1,53 @@ +// META: global=jsshell +// META: script=/wasm/jsapi/wasm-constants.js +// META: script=/wasm/jsapi/wasm-module-builder.js + +let emptyModuleBinary; +setup(() => { + emptyModuleBinary = new WasmModuleBuilder().toBuffer(); +}); + +test(() => { + const thisValues = [ + undefined, + null, + true, + "", + Symbol(), + 1, + {}, + WebAssembly.Instance, + WebAssembly.Instance.prototype, + ]; + + const desc = Object.getOwnPropertyDescriptor(WebAssembly.Instance.prototype, "exports"); + assert_equals(typeof desc, "object"); + + const getter = desc.get; + assert_equals(typeof getter, "function"); + + assert_equals(typeof desc.set, "undefined"); + + for (const thisValue of thisValues) { + assert_throws(new TypeError(), () => getter.call(thisValue), `this=${format_value(thisValue)}`); + } +}, "Branding"); + +test(() => { + const module = new WebAssembly.Module(emptyModuleBinary); + const instance = new WebAssembly.Instance(module); + const exports = instance.exports; + instance.exports = {}; + assert_equals(instance.exports, exports, "Should not change the exports"); +}, "Setting (sloppy mode)"); + +test(() => { + const module = new WebAssembly.Module(emptyModuleBinary); + const instance = new WebAssembly.Instance(module); + const exports = instance.exports; + assert_throws(new TypeError(), () => { + "use strict"; + instance.exports = {}; + }); + assert_equals(instance.exports, exports, "Should not change the exports"); +}, "Setting (strict mode)"); diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/instance/toString.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/instance/toString.any.js new file mode 100644 index 00000000000..08dcb14a50d --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/jsapi/instance/toString.any.js @@ -0,0 +1,10 @@ +// META: global=jsshell +// META: script=/wasm/jsapi/wasm-constants.js +// META: script=/wasm/jsapi/wasm-module-builder.js + +test(() => { + const emptyModuleBinary = new WasmModuleBuilder().toBuffer(); + const module = new WebAssembly.Module(emptyModuleBinary); + const instance = new WebAssembly.Instance(module); + assert_class_string(instance, "WebAssembly.Instance"); +}, "Object.prototype.toString on an Instance"); diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/interface.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/interface.any.js index 64c1f60da1c..5d76ac56ec5 100644 --- a/tests/wpt/web-platform-tests/wasm/jsapi/interface.any.js +++ b/tests/wpt/web-platform-tests/wasm/jsapi/interface.any.js @@ -63,6 +63,10 @@ test(() => { }, "WebAssembly: property descriptor"); test(() => { + assert_throws(new TypeError(), () => WebAssembly()); +}, "WebAssembly: calling"); + +test(() => { assert_throws(new TypeError(), () => new WebAssembly()); }, "WebAssembly: constructing"); @@ -89,6 +93,15 @@ for (const name of interfaces) { test(() => { const interface_object = WebAssembly[name]; + const propdesc = Object.getOwnPropertyDescriptor(interface_object, "prototype"); + assert_equals(typeof propdesc, "object"); + assert_false(propdesc.writable, "writable"); + assert_false(propdesc.enumerable, "enumerable"); + assert_false(propdesc.configurable, "configurable"); + }, `WebAssembly.${name}: prototype`); + + test(() => { + const interface_object = WebAssembly[name]; const interface_prototype_object = interface_object.prototype; const propdesc = Object.getOwnPropertyDescriptor(interface_prototype_object, "constructor"); assert_equals(typeof propdesc, "object"); @@ -96,7 +109,7 @@ for (const name of interfaces) { assert_false(propdesc.enumerable, "enumerable"); assert_true(propdesc.configurable, "configurable"); assert_equals(propdesc.value, interface_object); - }, `WebAssembly.${name}: prototype`); + }, `WebAssembly.${name}: prototype.constructor`); } test_operations(WebAssembly, "WebAssembly", [ diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/memory/buffer.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/memory/buffer.any.js new file mode 100644 index 00000000000..b04460b6c5e --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/jsapi/memory/buffer.any.js @@ -0,0 +1,50 @@ +// META: global=jsshell + +test(() => { + const thisValues = [ + undefined, + null, + true, + "", + Symbol(), + 1, + {}, + WebAssembly.Memory, + WebAssembly.Memory.prototype, + ]; + + const desc = Object.getOwnPropertyDescriptor(WebAssembly.Memory.prototype, "buffer"); + assert_equals(typeof desc, "object"); + + const getter = desc.get; + assert_equals(typeof getter, "function"); + + assert_equals(typeof desc.set, "undefined"); + + for (const thisValue of thisValues) { + assert_throws(new TypeError(), () => getter.call(thisValue), `this=${format_value(thisValue)}`); + } +}, "Branding"); + +test(() => { + const argument = { "initial": 0 }; + const memory = new WebAssembly.Memory(argument); + const memory2 = new WebAssembly.Memory(argument); + const buffer = memory.buffer; + assert_not_equals(buffer, memory2.buffer, "Need two distinct buffers"); + memory.buffer = memory2.buffer; + assert_equals(memory.buffer, buffer, "Should not change the buffer"); +}, "Setting (sloppy mode)"); + +test(() => { + const argument = { "initial": 0 }; + const memory = new WebAssembly.Memory(argument); + const memory2 = new WebAssembly.Memory(argument); + const buffer = memory.buffer; + assert_not_equals(buffer, memory2.buffer, "Need two distinct buffers"); + assert_throws(new TypeError(), () => { + "use strict"; + memory.buffer = memory2.buffer; + }); + assert_equals(memory.buffer, buffer, "Should not change the buffer"); +}, "Setting (strict mode)"); diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/memory/constructor.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/memory/constructor.any.js index 33256f85e45..f9907ca6104 100644 --- a/tests/wpt/web-platform-tests/wasm/jsapi/memory/constructor.any.js +++ b/tests/wpt/web-platform-tests/wasm/jsapi/memory/constructor.any.js @@ -1,12 +1,23 @@ // META: global=jsshell -// META: script=/wasm/jsapi/wasm-constants.js -// META: script=/wasm/jsapi/wasm-module-builder.js // META: script=/wasm/jsapi/assertions.js -let emptyModuleBinary; -setup(() => { - emptyModuleBinary = new WasmModuleBuilder().toBuffer(); -}); +function assert_Memory(memory, expected) { + assert_equals(Object.getPrototypeOf(memory), WebAssembly.Memory.prototype, + "prototype"); + assert_true(Object.isExtensible(memory), "extensible"); + + // https://github.com/WebAssembly/spec/issues/840 + assert_equals(memory.buffer, memory.buffer, "buffer should be idempotent"); + assert_equals(Object.getPrototypeOf(memory.buffer), ArrayBuffer.prototype, + "prototype of buffer"); + assert_true(Object.isExtensible(memory.buffer), "buffer extensibility"); + assert_equals(memory.buffer.byteLength, 0x10000 * expected.size, "size of buffer"); + if (expected.size > 0) { + const array = new Uint8Array(memory.buffer); + assert_equals(array[0], 0, "first element of buffer"); + assert_equals(array[array.byteLength - 1], 0, "last element of buffer"); + } +} test(() => { assert_function_name(WebAssembly.Memory, "Memory", "WebAssembly.Memory"); @@ -26,8 +37,24 @@ test(() => { }, "Calling"); test(() => { - assert_throws(new TypeError(), () => new WebAssembly.Memory({})); -}, "Empty descriptor"); + const invalidArguments = [ + undefined, + null, + false, + true, + "", + "test", + Symbol(), + 1, + NaN, + {}, + ]; + for (const invalidArgument of invalidArguments) { + assert_throws(new TypeError(), + () => new WebAssembly.Memory(invalidArgument), + `new Memory(${format_value(invalidArgument)})`); + } +}, "Invalid descriptor argument"); test(() => { assert_throws(new TypeError(), () => new WebAssembly.Memory({ "initial": undefined })); @@ -65,7 +92,46 @@ test(() => { }, "Proxy descriptor"); test(() => { + const order = []; + + new WebAssembly.Memory({ + get maximum() { + order.push("maximum"); + return { + valueOf() { + order.push("maximum valueOf"); + return 1; + }, + }; + }, + + get initial() { + order.push("initial"); + return { + valueOf() { + order.push("initial valueOf"); + return 1; + }, + }; + }, + }); + + assert_array_equals(order, [ + "initial", + "initial valueOf", + "maximum", + "maximum valueOf", + ]); +}, "Order of evaluation for descriptor"); + +test(() => { const argument = { "initial": 0 }; const memory = new WebAssembly.Memory(argument); - assert_equals(Object.getPrototypeOf(memory), WebAssembly.Memory.prototype); -}, "Prototype"); + assert_Memory(memory, { "size": 0 }); +}, "Zero initial"); + +test(() => { + const argument = { "initial": 4 }; + const memory = new WebAssembly.Memory(argument); + assert_Memory(memory, { "size": 4 }); +}, "Non-zero initial"); diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/memory/grow.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/memory/grow.any.js new file mode 100644 index 00000000000..95300399f19 --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/jsapi/memory/grow.any.js @@ -0,0 +1,170 @@ +// META: global=jsshell + +function assert_ArrayBuffer(actual, expected, message) { + // https://github.com/WebAssembly/spec/issues/840 + assert_equals(Object.getPrototypeOf(actual), ArrayBuffer.prototype, + `${message}: prototype`); + if (expected.detached) { + // https://github.com/tc39/ecma262/issues/678 + let byteLength; + try { + byteLength = actual.byteLength; + } catch (e) { + byteLength = 0; + } + assert_equals(byteLength, 0, `${message}: detached size`); + } else { + assert_equals(actual.byteLength, 0x10000 * expected.size, `${message}: size`); + if (expected.size > 0) { + const array = new Uint8Array(actual); + assert_equals(array[0], 0, `${message}: first element`); + assert_equals(array[array.byteLength - 1], 0, `${message}: last element`); + } + } +} + +test(() => { + const argument = { "initial": 0 }; + const memory = new WebAssembly.Memory(argument); + assert_throws(new TypeError(), () => memory.grow()); +}, "Missing arguments"); + +test(t => { + const thisValues = [ + undefined, + null, + true, + "", + Symbol(), + 1, + {}, + WebAssembly.Memory, + WebAssembly.Memory.prototype, + ]; + + const argument = { + valueOf: t.unreached_func("Should not touch the argument (valueOf)"), + toString: t.unreached_func("Should not touch the argument (toString)"), + }; + + const fn = WebAssembly.Memory.prototype.grow; + + for (const thisValue of thisValues) { + assert_throws(new TypeError(), () => fn.call(thisValue, argument), `this=${format_value(thisValue)}`); + } +}, "Branding"); + +test(() => { + const argument = { "initial": 0 }; + const memory = new WebAssembly.Memory(argument); + const oldMemory = memory.buffer; + assert_ArrayBuffer(oldMemory, { "size": 0 }, "Buffer before growing"); + + const result = memory.grow(2); + assert_equals(result, 0); + + const newMemory = memory.buffer; + assert_not_equals(oldMemory, newMemory); + assert_ArrayBuffer(oldMemory, { "detached": true }, "Old buffer after growing"); + assert_ArrayBuffer(newMemory, { "size": 2 }, "New buffer after growing"); +}, "Zero initial"); + +test(() => { + const argument = { "initial": { valueOf() { return 0 } } }; + const memory = new WebAssembly.Memory(argument); + const oldMemory = memory.buffer; + assert_ArrayBuffer(oldMemory, { "size": 0 }, "Buffer before growing"); + + const result = memory.grow({ valueOf() { return 2 } }); + assert_equals(result, 0); + + const newMemory = memory.buffer; + assert_not_equals(oldMemory, newMemory); + assert_ArrayBuffer(oldMemory, { "detached": true }, "Old buffer after growing"); + assert_ArrayBuffer(newMemory, { "size": 2 }, "New buffer after growing"); +}, "Zero initial with valueOf"); + +test(() => { + const argument = { "initial": 3 }; + const memory = new WebAssembly.Memory(argument); + const oldMemory = memory.buffer; + assert_ArrayBuffer(oldMemory, { "size": 3 }, "Buffer before growing"); + + const result = memory.grow(2); + assert_equals(result, 3); + + const newMemory = memory.buffer; + assert_not_equals(oldMemory, newMemory); + assert_ArrayBuffer(oldMemory, { "detached": true }, "Old buffer after growing"); + assert_ArrayBuffer(newMemory, { "size": 5 }, "New buffer after growing"); +}, "Non-zero initial"); + +test(() => { + const argument = { "initial": 0, "maximum": 2 }; + const memory = new WebAssembly.Memory(argument); + const oldMemory = memory.buffer; + assert_ArrayBuffer(oldMemory, { "size": 0 }, "Buffer before growing"); + + const result = memory.grow(2); + assert_equals(result, 0); + + const newMemory = memory.buffer; + assert_not_equals(oldMemory, newMemory); + assert_ArrayBuffer(oldMemory, { "detached": true }, "Old buffer after growing"); + assert_ArrayBuffer(newMemory, { "size": 2 }, "New buffer after growing"); +}, "Zero initial with respected maximum"); + +test(() => { + const argument = { "initial": 0, "maximum": 2 }; + const memory = new WebAssembly.Memory(argument); + const oldMemory = memory.buffer; + assert_ArrayBuffer(oldMemory, { "size": 0 }, "Buffer before growing"); + + const result = memory.grow(1); + assert_equals(result, 0); + + const newMemory = memory.buffer; + assert_not_equals(oldMemory, newMemory); + assert_ArrayBuffer(oldMemory, { "detached": true }, "Old buffer after growing once"); + assert_ArrayBuffer(newMemory, { "size": 1 }, "New buffer after growing once"); + + const result2 = memory.grow(1); + assert_equals(result2, 1); + + const newestMemory = memory.buffer; + assert_not_equals(newMemory, newestMemory); + assert_ArrayBuffer(oldMemory, { "detached": true }, "New buffer after growing twice"); + assert_ArrayBuffer(newMemory, { "detached": true }, "New buffer after growing twice"); + assert_ArrayBuffer(newestMemory, { "size": 2 }, "Newest buffer after growing twice"); +}, "Zero initial with respected maximum grown twice"); + +test(() => { + const argument = { "initial": 1, "maximum": 2 }; + const memory = new WebAssembly.Memory(argument); + const oldMemory = memory.buffer; + assert_ArrayBuffer(oldMemory, { "size": 1 }, "Buffer before growing"); + + assert_throws(new RangeError(), () => memory.grow(2)); + assert_equals(memory.buffer, oldMemory); + assert_ArrayBuffer(memory.buffer, { "size": 1 }, "Buffer before trying to grow"); +}, "Zero initial growing too much"); + +const outOfRangeValues = [ + undefined, + NaN, + Infinity, + -Infinity, + -1, + 0x100000000, + 0x1000000000, + "0x100000000", + { valueOf() { return 0x100000000; } }, +]; + +for (const value of outOfRangeValues) { + test(() => { + const argument = { "initial": 0 }; + const memory = new WebAssembly.Memory(argument); + assert_throws(new TypeError(), () => memory.grow(value)); + }, `Out-of-range argument: ${format_value(value)}`); +} diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/memory/toString.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/memory/toString.any.js new file mode 100644 index 00000000000..4e15d75ea20 --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/jsapi/memory/toString.any.js @@ -0,0 +1,7 @@ +// META: global=jsshell + +test(() => { + const argument = { "initial": 0 }; + const memory = new WebAssembly.Memory(argument); + assert_class_string(memory, "WebAssembly.Memory"); +}, "Object.prototype.toString on an Memory"); diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/module/constructor.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/module/constructor.any.js index 0f5eecf957e..32f183fac87 100644 --- a/tests/wpt/web-platform-tests/wasm/jsapi/module/constructor.any.js +++ b/tests/wpt/web-platform-tests/wasm/jsapi/module/constructor.any.js @@ -25,6 +25,26 @@ test(() => { }, "Calling"); test(() => { + const invalidArguments = [ + undefined, + null, + true, + "test", + Symbol(), + 7, + NaN, + {}, + ArrayBuffer, + ArrayBuffer.prototype, + Array.from(emptyModuleBinary), + ]; + for (const argument of invalidArguments) { + assert_throws(new TypeError(), () => new WebAssembly.Module(argument), + `new Module(${format_value(argument)})`); + } +}, "Invalid arguments"); + +test(() => { const buffer = new Uint8Array(); assert_throws(new WebAssembly.CompileError(), () => new WebAssembly.Module(buffer)); }, "Empty buffer"); @@ -33,3 +53,8 @@ test(() => { const module = new WebAssembly.Module(emptyModuleBinary); assert_equals(Object.getPrototypeOf(module), WebAssembly.Module.prototype); }, "Prototype"); + +test(() => { + const module = new WebAssembly.Module(emptyModuleBinary); + assert_true(Object.isExtensible(module)); +}, "Extensibility"); diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/module/customSections.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/module/customSections.any.js index 146aa7fd332..58ac63b61c9 100644 --- a/tests/wpt/web-platform-tests/wasm/jsapi/module/customSections.any.js +++ b/tests/wpt/web-platform-tests/wasm/jsapi/module/customSections.any.js @@ -4,12 +4,14 @@ function assert_ArrayBuffer(buffer, expected) { assert_equals(Object.getPrototypeOf(buffer), ArrayBuffer.prototype, "Prototype"); + assert_true(Object.isExtensible(buffer), "isExtensible"); assert_array_equals(new Uint8Array(buffer), expected); } function assert_sections(sections, expected) { assert_true(Array.isArray(sections), "Should be array"); assert_equals(Object.getPrototypeOf(sections), Array.prototype, "Prototype"); + assert_true(Object.isExtensible(sections), "isExtensible"); assert_equals(sections.length, expected.length); for (let i = 0; i < expected.length; ++i) { @@ -29,10 +31,21 @@ test(() => { }, "Missing arguments"); test(() => { - assert_throws(new TypeError(), () => WebAssembly.Module.customSections({}, "")); - assert_throws(new TypeError(), () => WebAssembly.Module.customSections("", "")); - assert_throws(new TypeError(), () => WebAssembly.Module.customSections(undefined, "")); - assert_throws(new TypeError(), () => WebAssembly.Module.customSections(null, "")); + const invalidArguments = [ + undefined, + null, + true, + "", + Symbol(), + 1, + {}, + WebAssembly.Module, + WebAssembly.Module.prototype, + ]; + for (const argument of invalidArguments) { + assert_throws(new TypeError(), () => WebAssembly.Module.customSections(argument, ""), + `customSections(${format_value(argument)})`); + } }, "Non-Module arguments"); test(() => { @@ -102,3 +115,48 @@ test(() => { assert_sections(WebAssembly.Module.customSections(module, "name\0"), []) assert_sections(WebAssembly.Module.customSections(module, "foo\0"), []) }, "Custom sections"); + +test(() => { + const bytes = [87, 101, 98, 65, 115, 115, 101, 109, 98, 108, 121]; + const name = "yee\uD801\uDC37eey" + + const binary = new Binary; + binary.emit_section(kUnknownSectionCode, section => { + section.emit_string(name); + section.emit_bytes(bytes); + }); + + const builder = new WasmModuleBuilder(); + builder.addExplicitSection(binary); + const buffer = builder.toBuffer(); + const module = new WebAssembly.Module(buffer); + + assert_sections(WebAssembly.Module.customSections(module, name), [ + bytes, + ]); + assert_sections(WebAssembly.Module.customSections(module, "yee\uFFFDeey"), []); + assert_sections(WebAssembly.Module.customSections(module, "yee\uFFFD\uFFFDeey"), []); +}, "Custom sections with surrogate pairs"); + +test(() => { + const bytes = [87, 101, 98, 65, 115, 115, 101, 109, 98, 108, 121]; + + const binary = new Binary; + binary.emit_section(kUnknownSectionCode, section => { + section.emit_string("na\uFFFDme"); + section.emit_bytes(bytes); + }); + + const builder = new WasmModuleBuilder(); + builder.addExplicitSection(binary); + const buffer = builder.toBuffer(); + const module = new WebAssembly.Module(buffer); + + assert_sections(WebAssembly.Module.customSections(module, "name"), []); + assert_sections(WebAssembly.Module.customSections(module, "na\uFFFDme"), [ + bytes, + ]); + assert_sections(WebAssembly.Module.customSections(module, "na\uDC01me"), [ + bytes, + ]); +}, "Custom sections with U+FFFD"); diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/module/exports.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/module/exports.any.js index c7ecdcf6b61..e63a885a4c3 100644 --- a/tests/wpt/web-platform-tests/wasm/jsapi/module/exports.any.js +++ b/tests/wpt/web-platform-tests/wasm/jsapi/module/exports.any.js @@ -7,15 +7,54 @@ setup(() => { emptyModuleBinary = new WasmModuleBuilder().toBuffer(); }); +function assert_ModuleExportDescriptor(export_, expected) { + assert_equals(Object.getPrototypeOf(export_), Object.prototype, "Prototype"); + assert_true(Object.isExtensible(export_), "isExtensible"); + + const name = Object.getOwnPropertyDescriptor(export_, "name"); + assert_true(name.writable, "name: writable"); + assert_true(name.enumerable, "name: enumerable"); + assert_true(name.configurable, "name: configurable"); + assert_equals(name.value, expected.name); + + const kind = Object.getOwnPropertyDescriptor(export_, "kind"); + assert_true(kind.writable, "kind: writable"); + assert_true(kind.enumerable, "kind: enumerable"); + assert_true(kind.configurable, "kind: configurable"); + assert_equals(kind.value, expected.kind); +} + +function assert_exports(exports, expected) { + assert_true(Array.isArray(exports), "Should be array"); + assert_equals(Object.getPrototypeOf(exports), Array.prototype, "Prototype"); + assert_true(Object.isExtensible(exports), "isExtensible"); + + assert_equals(exports.length, expected.length); + for (let i = 0; i < expected.length; ++i) { + assert_ModuleExportDescriptor(exports[i], expected[i]); + } +} + test(() => { assert_throws(new TypeError(), () => WebAssembly.Module.exports()); }, "Missing arguments"); test(() => { - assert_throws(new TypeError(), () => WebAssembly.Module.exports({})); - assert_throws(new TypeError(), () => WebAssembly.Module.exports("")); - assert_throws(new TypeError(), () => WebAssembly.Module.exports(undefined)); - assert_throws(new TypeError(), () => WebAssembly.Module.exports(null)); + const invalidArguments = [ + undefined, + null, + true, + "", + Symbol(), + 1, + {}, + WebAssembly.Module, + WebAssembly.Module.prototype, + ]; + for (const argument of invalidArguments) { + assert_throws(new TypeError(), () => WebAssembly.Module.exports(argument), + `exports(${format_value(argument)})`); + } }, "Non-Module arguments"); test(() => { @@ -40,15 +79,7 @@ test(() => { test(() => { const module = new WebAssembly.Module(emptyModuleBinary); const exports = WebAssembly.Module.exports(module); - assert_true(Array.isArray(exports)); -}, "Return type"); - -test(() => { - const module = new WebAssembly.Module(emptyModuleBinary); - const exports = WebAssembly.Module.exports(module); - assert_true(Array.isArray(exports), "Should be array"); - assert_equals(Object.getPrototypeOf(exports), Array.prototype, "Prototype"); - assert_array_equals(exports, []); + assert_exports(exports, []); }, "Empty module"); test(() => { @@ -56,22 +87,6 @@ test(() => { assert_not_equals(WebAssembly.Module.exports(module), WebAssembly.Module.exports(module)); }, "Empty module: array caching"); -function assert_ModuleExportDescriptor(export_, expected) { - assert_equals(Object.getPrototypeOf(export_), Object.prototype, "Prototype"); - - const name = Object.getOwnPropertyDescriptor(export_, "name"); - assert_true(name.writable, "name: writable"); - assert_true(name.enumerable, "name: enumerable"); - assert_true(name.configurable, "name: configurable"); - assert_equals(name.value, expected.name); - - const kind = Object.getOwnPropertyDescriptor(export_, "kind"); - assert_true(kind.writable, "kind: writable"); - assert_true(kind.enumerable, "kind: enumerable"); - assert_true(kind.configurable, "kind: configurable"); - assert_equals(kind.value, expected.kind); -} - test(() => { const builder = new WasmModuleBuilder(); @@ -103,9 +118,6 @@ test(() => { const buffer = builder.toBuffer() const module = new WebAssembly.Module(buffer); const exports = WebAssembly.Module.exports(module); - assert_true(Array.isArray(exports), "Should be array"); - assert_equals(Object.getPrototypeOf(exports), Array.prototype, "Prototype"); - const expected = [ { "kind": "function", "name": "fn" }, { "kind": "function", "name": "fn2" }, @@ -114,8 +126,5 @@ test(() => { { "kind": "global", "name": "global2" }, { "kind": "memory", "name": "memory" }, ]; - assert_equals(exports.length, expected.length); - for (let i = 0; i < expected.length; ++i) { - assert_ModuleExportDescriptor(exports[i], expected[i]); - } + assert_exports(exports, expected); }, "exports"); diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/module/imports.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/module/imports.any.js index 522b262f549..640da591d21 100644 --- a/tests/wpt/web-platform-tests/wasm/jsapi/module/imports.any.js +++ b/tests/wpt/web-platform-tests/wasm/jsapi/module/imports.any.js @@ -2,6 +2,40 @@ // META: script=/wasm/jsapi/wasm-constants.js // META: script=/wasm/jsapi/wasm-module-builder.js +function assert_ModuleImportDescriptor(import_, expected) { + assert_equals(Object.getPrototypeOf(import_), Object.prototype, "Prototype"); + assert_true(Object.isExtensible(import_), "isExtensible"); + + const module = Object.getOwnPropertyDescriptor(import_, "module"); + assert_true(module.writable, "module: writable"); + assert_true(module.enumerable, "module: enumerable"); + assert_true(module.configurable, "module: configurable"); + assert_equals(module.value, expected.module); + + const name = Object.getOwnPropertyDescriptor(import_, "name"); + assert_true(name.writable, "name: writable"); + assert_true(name.enumerable, "name: enumerable"); + assert_true(name.configurable, "name: configurable"); + assert_equals(name.value, expected.name); + + const kind = Object.getOwnPropertyDescriptor(import_, "kind"); + assert_true(kind.writable, "kind: writable"); + assert_true(kind.enumerable, "kind: enumerable"); + assert_true(kind.configurable, "kind: configurable"); + assert_equals(kind.value, expected.kind); +} + +function assert_imports(imports, expected) { + assert_true(Array.isArray(imports), "Should be array"); + assert_equals(Object.getPrototypeOf(imports), Array.prototype, "Prototype"); + assert_true(Object.isExtensible(imports), "isExtensible"); + + assert_equals(imports.length, expected.length); + for (let i = 0; i < expected.length; ++i) { + assert_ModuleImportDescriptor(imports[i], expected[i]); + } +} + let emptyModuleBinary; setup(() => { emptyModuleBinary = new WasmModuleBuilder().toBuffer(); @@ -12,10 +46,21 @@ test(() => { }, "Missing arguments"); test(() => { - assert_throws(new TypeError(), () => WebAssembly.Module.imports({})); - assert_throws(new TypeError(), () => WebAssembly.Module.imports("")); - assert_throws(new TypeError(), () => WebAssembly.Module.imports(undefined)); - assert_throws(new TypeError(), () => WebAssembly.Module.imports(null)); + const invalidArguments = [ + undefined, + null, + true, + "", + Symbol(), + 1, + {}, + WebAssembly.Module, + WebAssembly.Module.prototype, + ]; + for (const argument of invalidArguments) { + assert_throws(new TypeError(), () => WebAssembly.Module.imports(argument), + `imports(${format_value(argument)})`); + } }, "Non-Module arguments"); test(() => { @@ -46,9 +91,7 @@ test(() => { test(() => { const module = new WebAssembly.Module(emptyModuleBinary); const imports = WebAssembly.Module.imports(module); - assert_true(Array.isArray(imports), "Should be array"); - assert_equals(Object.getPrototypeOf(imports), Array.prototype, "Prototype"); - assert_array_equals(imports, []); + assert_imports(imports, []); }, "Empty module"); test(() => { @@ -56,28 +99,6 @@ test(() => { assert_not_equals(WebAssembly.Module.imports(module), WebAssembly.Module.imports(module)); }, "Empty module: array caching"); -function assert_ModuleImportDescriptor(import_, expected) { - assert_equals(Object.getPrototypeOf(import_), Object.prototype, "Prototype"); - - const module = Object.getOwnPropertyDescriptor(import_, "module"); - assert_true(module.writable, "module: writable"); - assert_true(module.enumerable, "module: enumerable"); - assert_true(module.configurable, "module: configurable"); - assert_equals(module.value, expected.module); - - const name = Object.getOwnPropertyDescriptor(import_, "name"); - assert_true(name.writable, "name: writable"); - assert_true(name.enumerable, "name: enumerable"); - assert_true(name.configurable, "name: configurable"); - assert_equals(name.value, expected.name); - - const kind = Object.getOwnPropertyDescriptor(import_, "kind"); - assert_true(kind.writable, "kind: writable"); - assert_true(kind.enumerable, "kind: enumerable"); - assert_true(kind.configurable, "kind: configurable"); - assert_equals(kind.value, expected.kind); -} - test(() => { const builder = new WasmModuleBuilder(); @@ -89,17 +110,11 @@ test(() => { const buffer = builder.toBuffer() const module = new WebAssembly.Module(buffer); const imports = WebAssembly.Module.imports(module); - assert_true(Array.isArray(imports), "Should be array"); - assert_equals(Object.getPrototypeOf(imports), Array.prototype, "Prototype"); - const expected = [ { "module": "module", "kind": "function", "name": "fn" }, { "module": "module", "kind": "global", "name": "global" }, { "module": "module", "kind": "memory", "name": "memory" }, { "module": "module", "kind": "table", "name": "table" }, ]; - assert_equals(imports.length, expected.length); - for (let i = 0; i < expected.length; ++i) { - assert_ModuleImportDescriptor(imports[i], expected[i]); - } + assert_imports(imports, expected); }, "imports"); diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/module/toString.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/module/toString.any.js new file mode 100644 index 00000000000..d9231a132ca --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/jsapi/module/toString.any.js @@ -0,0 +1,9 @@ +// META: global=jsshell +// META: script=/wasm/jsapi/wasm-constants.js +// META: script=/wasm/jsapi/wasm-module-builder.js + +test(() => { + const emptyModuleBinary = new WasmModuleBuilder().toBuffer(); + const module = new WebAssembly.Module(emptyModuleBinary); + assert_class_string(module, "WebAssembly.Module"); +}, "Object.prototype.toString on an Module"); diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/table/assertions.js b/tests/wpt/web-platform-tests/wasm/jsapi/table/assertions.js new file mode 100644 index 00000000000..dde2fd77090 --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/jsapi/table/assertions.js @@ -0,0 +1,11 @@ +function assert_equal_to_array(table, expected, message) { + assert_equals(table.length, expected.length, `${message}: length`); + assert_throws(new RangeError(), () => table.get(-1), `${message}: table.get(-1)`); + for (let i = 0; i < expected.length; ++i) { + assert_equals(table.get(i), expected[i], `${message}: table.get(${i} of ${expected.length})`); + } + assert_throws(new RangeError(), () => table.get(expected.length), + `${message}: table.get(${expected.length} of ${expected.length})`); + assert_throws(new RangeError(), () => table.get(expected.length + 1), + `${message}: table.get(${expected.length + 1} of ${expected.length})`); +} diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/table/constructor.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/table/constructor.any.js index 4aeac10f7ad..e924bdb2ba4 100644 --- a/tests/wpt/web-platform-tests/wasm/jsapi/table/constructor.any.js +++ b/tests/wpt/web-platform-tests/wasm/jsapi/table/constructor.any.js @@ -1,12 +1,16 @@ // META: global=jsshell -// META: script=/wasm/jsapi/wasm-constants.js -// META: script=/wasm/jsapi/wasm-module-builder.js // META: script=/wasm/jsapi/assertions.js -let emptyModuleBinary; -setup(() => { - emptyModuleBinary = new WasmModuleBuilder().toBuffer(); -}); +function assert_Table(actual, expected) { + assert_equals(Object.getPrototypeOf(actual), WebAssembly.Table.prototype, + "prototype"); + assert_true(Object.isExtensible(actual), "extensible"); + + assert_equals(actual.length, expected.length, "length"); + for (let i = 0; i < expected.length; ++i) { + assert_equals(actual.get(i), null, `actual.get(${i})`); + } +} test(() => { assert_function_name(WebAssembly.Table, "Table", "WebAssembly.Table"); @@ -21,7 +25,7 @@ test(() => { }, "No arguments"); test(() => { - const argument = { "initial": 0 }; + const argument = { "element": "anyfunc", "initial": 0 }; assert_throws(new TypeError(), () => WebAssembly.Table(argument)); }, "Calling"); @@ -30,6 +34,26 @@ test(() => { }, "Empty descriptor"); test(() => { + const invalidArguments = [ + undefined, + null, + false, + true, + "", + "test", + Symbol(), + 1, + NaN, + {}, + ]; + for (const invalidArgument of invalidArguments) { + assert_throws(new TypeError(), + () => new WebAssembly.Table(invalidArgument), + `new Table(${format_value(invalidArgument)})`); + } +}, "Invalid descriptor argument"); + +test(() => { assert_throws(new TypeError(), () => new WebAssembly.Table({ "element": "anyfunc", "initial": undefined })); }, "Undefined initial value in descriptor"); @@ -57,6 +81,22 @@ for (const value of outOfRangeValues) { } test(() => { + assert_throws(new RangeError(), () => new WebAssembly.Table({ "element": "anyfunc", "initial": 10, "maximum": 9 })); +}, "Initial value exceeds maximum"); + +test(() => { + const argument = { "element": "anyfunc", "initial": 0 }; + const table = new WebAssembly.Table(argument); + assert_Table(table, { "length": 0 }); +}, "Basic (zero)"); + +test(() => { + const argument = { "element": "anyfunc", "initial": 5 }; + const table = new WebAssembly.Table(argument); + assert_Table(table, { "length": 5 }); +}, "Basic (non-zero)"); + +test(() => { const proxy = new Proxy({}, { has(o, x) { assert_unreached(`Should not call [[HasProperty]] with ${x}`); @@ -73,11 +113,61 @@ test(() => { } }, }); - new WebAssembly.Table(proxy); + const table = new WebAssembly.Table(proxy); + assert_Table(table, { "length": 0 }); }, "Proxy descriptor"); test(() => { - const argument = { "element": "anyfunc", "initial": 0 }; - const table = new WebAssembly.Table(argument); - assert_equals(Object.getPrototypeOf(table), WebAssembly.Table.prototype); -}, "Prototype"); + const table = new WebAssembly.Table({ + "element": { + toString() { return "anyfunc"; }, + }, + "initial": 1, + }); + assert_Table(table, { "length": 1 }); +}, "Type conversion for descriptor.element"); + +test(() => { + const order = []; + + new WebAssembly.Table({ + get maximum() { + order.push("maximum"); + return { + valueOf() { + order.push("maximum valueOf"); + return 1; + }, + }; + }, + + get initial() { + order.push("initial"); + return { + valueOf() { + order.push("initial valueOf"); + return 1; + }, + }; + }, + + get element() { + order.push("element"); + return { + toString() { + order.push("element toString"); + return "anyfunc"; + }, + }; + }, + }); + + assert_array_equals(order, [ + "element", + "element toString", + "initial", + "initial valueOf", + "maximum", + "maximum valueOf", + ]); +}, "Order of evaluation for descriptor"); diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/table/get-set.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/table/get-set.any.js new file mode 100644 index 00000000000..2bb43a9308d --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/jsapi/table/get-set.any.js @@ -0,0 +1,220 @@ +// META: global=jsshell +// META: script=/wasm/jsapi/wasm-constants.js +// META: script=/wasm/jsapi/wasm-module-builder.js +// META: script=assertions.js + +let functions; +setup(() => { + const builder = new WasmModuleBuilder(); + + builder + .addFunction("fn", kSig_v_d) + .addBody([ + kExprEnd + ]) + .exportFunc(); + builder + .addFunction("fn2", kSig_v_v) + .addBody([ + kExprEnd + ]) + .exportFunc(); + + const buffer = builder.toBuffer() + const module = new WebAssembly.Module(buffer); + const instance = new WebAssembly.Instance(module, {}); + functions = instance.exports; +}); + +test(() => { + const argument = { "element": "anyfunc", "initial": 5 }; + const table = new WebAssembly.Table(argument); + assert_throws(new TypeError(), () => table.get()); +}, "Missing arguments: get"); + +test(t => { + const thisValues = [ + undefined, + null, + true, + "", + Symbol(), + 1, + {}, + WebAssembly.Table, + WebAssembly.Table.prototype, + ]; + + const argument = { + valueOf: t.unreached_func("Should not touch the argument (valueOf)"), + toString: t.unreached_func("Should not touch the argument (toString)"), + }; + + const fn = WebAssembly.Table.prototype.get; + + for (const thisValue of thisValues) { + assert_throws(new TypeError(), () => fn.call(thisValue, argument), `this=${format_value(thisValue)}`); + } +}, "Branding: get"); + +test(() => { + const argument = { "element": "anyfunc", "initial": 5 }; + const table = new WebAssembly.Table(argument); + assert_throws(new TypeError(), () => table.set()); + assert_throws(new TypeError(), () => table.set(0)); +}, "Missing arguments: set"); + +test(t => { + const thisValues = [ + undefined, + null, + true, + "", + Symbol(), + 1, + {}, + WebAssembly.Table, + WebAssembly.Table.prototype, + ]; + + const argument = { + valueOf: t.unreached_func("Should not touch the argument (valueOf)"), + toString: t.unreached_func("Should not touch the argument (toString)"), + }; + + const fn = WebAssembly.Table.prototype.set; + + for (const thisValue of thisValues) { + assert_throws(new TypeError(), () => fn.call(thisValue, argument, null), `this=${format_value(thisValue)}`); + } +}, "Branding: set"); + +test(() => { + const argument = { "element": "anyfunc", "initial": 5 }; + const table = new WebAssembly.Table(argument); + assert_equal_to_array(table, [null, null, null, null, null]); + + const {fn, fn2} = functions; + + assert_equals(table.set(0, fn), undefined, "set() returns undefined."); + table.set(2, fn2); + table.set(4, fn); + + assert_equal_to_array(table, [fn, null, fn2, null, fn]); + + table.set(0, null); + assert_equal_to_array(table, [null, null, fn2, null, fn]); +}, "Basic"); + +test(() => { + const argument = { "element": "anyfunc", "initial": 5 }; + const table = new WebAssembly.Table(argument); + assert_equal_to_array(table, [null, null, null, null, null]); + + const {fn, fn2} = functions; + + table.set(0, fn); + table.set(2, fn2); + table.set(4, fn); + + assert_equal_to_array(table, [fn, null, fn2, null, fn]); + + table.grow(4); + + assert_equal_to_array(table, [fn, null, fn2, null, fn, null, null, null, null]); +}, "Growing"); + +test(() => { + const argument = { "element": "anyfunc", "initial": 5 }; + const table = new WebAssembly.Table(argument); + assert_equal_to_array(table, [null, null, null, null, null]); + + const {fn} = functions; + + assert_throws(new RangeError(), () => table.set(-1, fn)); + assert_throws(new RangeError(), () => table.set(5, fn)); + assert_equal_to_array(table, [null, null, null, null, null]); +}, "Setting out-of-bounds"); + +test(() => { + const argument = { "element": "anyfunc", "initial": 1 }; + const table = new WebAssembly.Table(argument); + assert_equal_to_array(table, [null]); + + const invalidArguments = [ + undefined, + true, + false, + "test", + Symbol(), + 7, + NaN, + {}, + ]; + for (const argument of invalidArguments) { + assert_throws(new TypeError(), () => table.set(0, argument), + `set(${format_value(argument)})`); + } + assert_equal_to_array(table, [null]); +}, "Setting non-function"); + +test(() => { + const argument = { "element": "anyfunc", "initial": 1 }; + const table = new WebAssembly.Table(argument); + assert_equal_to_array(table, [null]); + + const fn = function() {}; + assert_throws(new TypeError(), () => table.set(0, fn)); + assert_equal_to_array(table, [null]); +}, "Setting non-wasm function"); + +test(() => { + const argument = { "element": "anyfunc", "initial": 1 }; + const table = new WebAssembly.Table(argument); + assert_equal_to_array(table, [null]); + + const fn = () => {}; + assert_throws(new TypeError(), () => table.set(0, fn)); + assert_equal_to_array(table, [null]); +}, "Setting non-wasm arrow function"); + +const outOfRangeValues = [ + undefined, + NaN, + Infinity, + -Infinity, + -1, + 0x100000000, + 0x1000000000, + "0x100000000", + { valueOf() { return 0x100000000; } }, +]; + +for (const value of outOfRangeValues) { + test(() => { + const argument = { "element": "anyfunc", "initial": 1 }; + const table = new WebAssembly.Table(argument); + assert_throws(new TypeError(), () => table.get(value)); + }, `Getting out-of-range argument: ${format_value(value)}`); + + test(() => { + const argument = { "element": "anyfunc", "initial": 1 }; + const table = new WebAssembly.Table(argument); + assert_throws(new TypeError(), () => table.set(value, null)); + }, `Setting out-of-range argument: ${format_value(value)}`); +} + +test(() => { + const argument = { "element": "anyfunc", "initial": 1 }; + const table = new WebAssembly.Table(argument); + let called = 0; + const value = { + valueOf() { + called++; + return 0; + }, + }; + assert_throws(new TypeError(), () => table.set(value, {})); + assert_equals(called, 1); +}, "Order of argument conversion"); + diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/table/grow.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/table/grow.any.js new file mode 100644 index 00000000000..d3efb511e4b --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/jsapi/table/grow.any.js @@ -0,0 +1,86 @@ +// META: global=jsshell +// META: script=assertions.js + +function nulls(n) { + return Array(n).fill(null); +} + +test(() => { + const argument = { "element": "anyfunc", "initial": 5 }; + const table = new WebAssembly.Table(argument); + assert_throws(new TypeError(), () => table.grow()); +}, "Missing arguments"); + +test(t => { + const thisValues = [ + undefined, + null, + true, + "", + Symbol(), + 1, + {}, + WebAssembly.Table, + WebAssembly.Table.prototype, + ]; + + const argument = { + valueOf: t.unreached_func("Should not touch the argument (valueOf)"), + toString: t.unreached_func("Should not touch the argument (toString)"), + }; + + const fn = WebAssembly.Table.prototype.grow; + + for (const thisValue of thisValues) { + assert_throws(new TypeError(), () => fn.call(thisValue, argument), `this=${format_value(thisValue)}`); + } +}, "Branding"); + +test(() => { + const argument = { "element": "anyfunc", "initial": 5 }; + const table = new WebAssembly.Table(argument); + assert_equal_to_array(table, nulls(5), "before"); + + const result = table.grow(3); + assert_equals(result, 5); + assert_equal_to_array(table, nulls(8), "after"); +}, "Basic"); + +test(() => { + const argument = { "element": "anyfunc", "initial": 3, "maximum": 5 }; + const table = new WebAssembly.Table(argument); + assert_equal_to_array(table, nulls(3), "before"); + + const result = table.grow(2); + assert_equals(result, 3); + assert_equal_to_array(table, nulls(5), "after"); +}, "Reached maximum"); + +test(() => { + const argument = { "element": "anyfunc", "initial": 2, "maximum": 5 }; + const table = new WebAssembly.Table(argument); + assert_equal_to_array(table, nulls(2), "before"); + + assert_throws(new RangeError(), () => table.grow(4)); + assert_equal_to_array(table, nulls(2), "after"); +}, "Exceeded maximum"); + +const outOfRangeValues = [ + undefined, + NaN, + Infinity, + -Infinity, + -1, + 0x100000000, + 0x1000000000, + "0x100000000", + { valueOf() { return 0x100000000; } }, +]; + +for (const value of outOfRangeValues) { + test(() => { + const argument = { "element": "anyfunc", "initial": 1 }; + const table = new WebAssembly.Table(argument); + assert_throws(new TypeError(), () => table.grow(value)); + }, `Out-of-range argument: ${format_value(value)}`); +} diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/table/length.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/table/length.any.js new file mode 100644 index 00000000000..a6a9661dbad --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/jsapi/table/length.any.js @@ -0,0 +1,46 @@ +// META: global=jsshell + +test(() => { + const thisValues = [ + undefined, + null, + true, + "", + Symbol(), + 1, + {}, + WebAssembly.Table, + WebAssembly.Table.prototype, + ]; + + const desc = Object.getOwnPropertyDescriptor(WebAssembly.Table.prototype, "length"); + assert_equals(typeof desc, "object"); + + const getter = desc.get; + assert_equals(typeof getter, "function"); + + assert_equals(typeof desc.set, "undefined"); + + for (const thisValue of thisValues) { + assert_throws(new TypeError(), () => getter.call(thisValue), `this=${format_value(thisValue)}`); + } +}, "Branding"); + +test(() => { + const argument = { "element": "anyfunc", "initial": 2 }; + const table = new WebAssembly.Table(argument); + assert_equals(table.length, 2, "Initial length"); + table.length = 4; + assert_equals(table.length, 2, "Should not change the length"); +}, "Setting (sloppy mode)"); + +test(() => { + const argument = { "element": "anyfunc", "initial": 2 }; + const table = new WebAssembly.Table(argument); + assert_equals(table.length, 2, "Initial length"); + assert_throws(new TypeError(), () => { + "use strict"; + table.length = 4; + }); + assert_equals(table.length, 2, "Should not change the length"); +}, "Setting (strict mode)"); diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/table/toString.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/table/toString.any.js new file mode 100644 index 00000000000..e576477910a --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/jsapi/table/toString.any.js @@ -0,0 +1,7 @@ +// META: global=jsshell + +test(() => { + const argument = { "element": "anyfunc", "initial": 0 }; + const table = new WebAssembly.Table(argument); + assert_class_string(table, "WebAssembly.Table"); +}, "Object.prototype.toString on an Table"); diff --git a/tests/wpt/web-platform-tests/wasm/resources/frame.html b/tests/wpt/web-platform-tests/wasm/resources/frame.html deleted file mode 100644 index d1c83e114a0..00000000000 --- a/tests/wpt/web-platform-tests/wasm/resources/frame.html +++ /dev/null @@ -1,18 +0,0 @@ -<script> -function listener(event) { - var mod = event.data; - try { - var i = new WebAssembly.Instance(mod); - var ans = i.exports.increment(42); - event.source.postMessage(ans, event.origin); - } catch (e) { - event.source.postMessage(e, event.origin); - } -} - -if (window.addEventListener){ - addEventListener("message", listener, false) -} else { - attachEvent("onmessage", listener) -} -</script> diff --git a/tests/wpt/web-platform-tests/wasm/resources/service-worker.js b/tests/wpt/web-platform-tests/wasm/resources/service-worker.js deleted file mode 100644 index 684eaf64878..00000000000 --- a/tests/wpt/web-platform-tests/wasm/resources/service-worker.js +++ /dev/null @@ -1,30 +0,0 @@ -var port; - -importScripts('load_wasm.js'); - -self.onmessage = function(e) { - var message = e.data; - if ('port' in message) { - port = message.port; - } -}; - -// And an event listener: -self.addEventListener('message', function(e) { - var message = e.data; - if ("compile" in message) { - createWasmModule() - .then(m => { - try { - port.postMessage({type:"OK", module:m}); - } catch (e) { - port.postMessage({type:"SEND ERROR"}); - } - }) - .catch(e => port.postMessage({type:"OTHER ERROR"})); - } -}); - -self.addEventListener('messageerror', function(e) { - port.postMessage({type:"RECEIVE ERROR"}); -}); diff --git a/tests/wpt/web-platform-tests/wasm/serialization/broadcastchannel-success-and-failure.html b/tests/wpt/web-platform-tests/wasm/serialization/broadcastchannel-success-and-failure.html new file mode 100644 index 00000000000..0d11cc595be --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/serialization/broadcastchannel-success-and-failure.html @@ -0,0 +1,38 @@ +<!doctype html> +<!-- Based on similar tests in html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/ --> +<title>WebAssembly.Module cannot cross agent clusters, BroadcastChannel edition</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="./resources/test-incrementer.js"></script> +<script> +async_test(t => { + const channel = new BroadcastChannel("anne was here"), + dw = new Worker("resources/broadcastchannel-worker.js"), + sw = new SharedWorker("resources/broadcastchannel-sharedworker.js"); + let startCounter = 0, + dwStatus = "unknown", + swStatus = "unknown"; + + channel.onmessage = t.step_func(({ data }) => { + if(data === "hi") { + startCounter++; + if(startCounter === 2) { + createWasmModule().then(module => { + channel.postMessage(module); + }); + } else if(startCounter > 2) { + assert_unreached(); + } + } else if(data === "dw-success") { + dwStatus = "success"; + } else if(data === "sw-success") { + swStatus = "success"; + } else { + assert_unreached(); + } + if(dwStatus === "success" && swStatus === "success") { + t.done(); + } + }); +}); +</script> diff --git a/tests/wpt/web-platform-tests/wasm/serialization/broadcastchannel-success.html b/tests/wpt/web-platform-tests/wasm/serialization/broadcastchannel-success.html new file mode 100644 index 00000000000..cd5f8d0b56a --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/serialization/broadcastchannel-success.html @@ -0,0 +1,59 @@ +<!DOCTYPE html> +<!-- Based on similar tests in html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/ --> +<meta charset="utf-8"> +<title>Structured cloning of WebAssembly.Module: BroadcastChannel within the same agent cluster</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="./resources/test-incrementer.js"></script> + +<div id="log"></div> + +<script> +"use strict"; + +promise_test(t => { + return createWasmModule().then(module => { + let loadedIframes = 0; + return Promise.all([ + createIFrame("resources/broadcastchannel-iframe.html"), + createIFrame("resources/broadcastchannel-iframe.html"), + createIFrame("resources/broadcastchannel-iframe.html") + ]).then(() => { + const thisIframe = loadedIframes++; + const channel = new BroadcastChannel("channel name"); + + return new Promise(resolve => { + let soFar = 0; + channel.onmessage = t.step_func(msg => { + if (msg.module) { + // We only care about "broadcasts" from the workers. + return; + } + + let {i, result} = msg; + + assert_in_array(i, [0, 1, 2], "Any message events must come from expected sources"); + assert_equals(result, i + 1, `iframe ${i} must return ${i+1}`); + ++soFar; + + if (soFar === 3) { + resolve(); + } + }); + + channel.postMessage({ module, i: thisIframe }); + }); + }); + }); +}); + +function createIFrame(src) { + return new Promise((resolve, reject) => { + const iframe = document.createElement("iframe"); + iframe.src = src; + iframe.onload = () => resolve(iframe); + iframe.onerror = () => reject(`iframe with URL ${src} failed to load`); + document.body.appendChild(iframe); + }); +} +</script> diff --git a/tests/wpt/web-platform-tests/wasm/serialization/identity-not-preserved.html b/tests/wpt/web-platform-tests/wasm/serialization/identity-not-preserved.html new file mode 100644 index 00000000000..24bb3b16d8c --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/serialization/identity-not-preserved.html @@ -0,0 +1,66 @@ +<!DOCTYPE html> +<!-- Based on similar tests in html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/ --> +<meta charset="utf-8"> +<title>WebAssembly.Modules, when cloned, do not give back the same object</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="./resources/test-incrementer.js"></script> + +<div id="log"></div> + +<script> +"use strict"; + +async_test(t => { + createWasmModule().then(module => { + window.addEventListener("message", t.step_func(({ data }) => { + if (data.testId !== 1) { + return; + } + + assert_not_equals(data.module, module); + + t.done(); + })); + + window.postMessage({ module, testId: 1 }, "*"); + }); +}, "postMessaging to this window does not give back the same WebAssembly.Module"); + +async_test(t => { + createWasmModule().then(module => { + const worker = new Worker("resources/echo-worker.js"); + + worker.addEventListener("message", t.step_func(({ data }) => { + if (data.testId !== 2) { + return; + } + + assert_not_equals(data.module, module); + t.done(); + })); + + worker.postMessage({ testId: 2, module }); + }); +}, "postMessaging to a worker and back does not give back the same WebAssembly.Module"); + +async_test(t => { + createWasmModule().then(module => { + window.addEventListener("message", t.step_func(({ data }) => { + if (data.testId !== 3) { + return; + } + + assert_not_equals(data.module, module); + t.done(); + })); + + const iframe = document.createElement("iframe"); + iframe.onload = t.step_func(() => { + iframe.contentWindow.postMessage({ testId: 3, module }, "*"); + }); + iframe.src = "resources/echo-iframe.html"; + document.body.appendChild(iframe); + }); +}, "postMessaging to an iframe and back does not give back the same WebAssembly.Module"); +</script> diff --git a/tests/wpt/web-platform-tests/wasm/resources/incrementer.wasm b/tests/wpt/web-platform-tests/wasm/serialization/incrementer.wasm Binary files differindex 47afcdef2a2..47afcdef2a2 100644 --- a/tests/wpt/web-platform-tests/wasm/resources/incrementer.wasm +++ b/tests/wpt/web-platform-tests/wasm/serialization/incrementer.wasm diff --git a/tests/wpt/web-platform-tests/wasm/serialization/nested-worker-success.any.js b/tests/wpt/web-platform-tests/wasm/serialization/nested-worker-success.any.js new file mode 100644 index 00000000000..5388ebcc39b --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/serialization/nested-worker-success.any.js @@ -0,0 +1,9 @@ +// META: global=!default,dedicatedworker,sharedworker +// META: script=resources/test-incrementer.js +"use strict"; + +promise_test(t => { + const worker = new Worker("resources/incrementer-worker.js"); + + return testSharingViaIncrementerScript(t, worker, "parent worker", worker, "sub-worker"); +}, "postMessaging to a dedicated sub-worker allows them to see each others' modifications"); diff --git a/tests/wpt/web-platform-tests/wasm/serialization/no-transferring.html b/tests/wpt/web-platform-tests/wasm/serialization/no-transferring.html new file mode 100644 index 00000000000..a0bf11f01dd --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/serialization/no-transferring.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<!-- Based on similar tests in html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/ --> +<meta charset="utf-8"> +<title>WebAssembly.Modules cannot be transferred</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="./resources/create-empty-wasm-module.js"></script> + +<script> +"use strict"; + +test(() => { + const module = createEmptyWasmModule(); + assert_throws("DataCloneError", () => window.postMessage(module, "*", [module])); + assert_throws("DataCloneError", () => window.postMessage("test", "*", [module])); +}, "Trying to transfer a WebAssembly.Module to this window throws"); + +test(() => { + const module = createEmptyWasmModule(); + const worker = new Worker("resources/echo-worker.js"); + assert_throws("DataCloneError", () => worker.postMessage(module, [module])); + assert_throws("DataCloneError", () => worker.postMessage("test", [module])); +}, "Trying to transfer a WebAssembly.Module to a worker throws"); + +test(() => { + const module = createEmptyWasmModule(); + const channel = new MessageChannel(); + assert_throws("DataCloneError", () => channel.port1.postMessage(module, [module])); + assert_throws("DataCloneError", () => channel.port1.postMessage("test", [module])); +}, "Trying to transfer a WebAssembly.Module through a MessagePort throws"); +</script> diff --git a/tests/wpt/web-platform-tests/wasm/resources/blank.html b/tests/wpt/web-platform-tests/wasm/serialization/resources/blank.html index a3c3a4689a6..a3c3a4689a6 100644 --- a/tests/wpt/web-platform-tests/wasm/resources/blank.html +++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/blank.html diff --git a/tests/wpt/web-platform-tests/wasm/serialization/resources/broadcastchannel-iframe.html b/tests/wpt/web-platform-tests/wasm/serialization/resources/broadcastchannel-iframe.html new file mode 100644 index 00000000000..83e347b5cb3 --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/broadcastchannel-iframe.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>A test page that uses a given WebAssembly.Module sent from a BroadcastChannel</title> + +<script> +"use strict"; +const channel = new BroadcastChannel("channel name"); + +channel.onmessage = ({ data: { module, i }, source }) => { + if (!module) { + // We only care about "broadcasts" from the window + return; + } + + let instance = new WebAssembly.Instance(module); + let increment = instance.exports["increment"]; + let result = increment(i); + channel.postMessage({i, result}); +}; +</script> diff --git a/tests/wpt/web-platform-tests/wasm/serialization/resources/broadcastchannel-sharedworker.js b/tests/wpt/web-platform-tests/wasm/serialization/resources/broadcastchannel-sharedworker.js new file mode 100644 index 00000000000..310e0e93584 --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/broadcastchannel-sharedworker.js @@ -0,0 +1,7 @@ +const channel = new BroadcastChannel("anne was here"); +channel.onmessageerror = ({ data }) => { + if(data === null) { + channel.postMessage("sw-success"); + } +} +channel.postMessage("hi"); diff --git a/tests/wpt/web-platform-tests/wasm/serialization/resources/broadcastchannel-worker.js b/tests/wpt/web-platform-tests/wasm/serialization/resources/broadcastchannel-worker.js new file mode 100644 index 00000000000..76a81770604 --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/broadcastchannel-worker.js @@ -0,0 +1,9 @@ +const channel = new BroadcastChannel("anne was here"); +channel.onmessage = ({ data }) => { + if(data === "hi" || data === "sw-success") { + return; + } else if(data instanceof WebAssembly.Module) { + channel.postMessage("dw-success"); + } +} +channel.postMessage("hi"); diff --git a/tests/wpt/web-platform-tests/wasm/serialization/resources/create-empty-wasm-module.js b/tests/wpt/web-platform-tests/wasm/serialization/resources/create-empty-wasm-module.js new file mode 100644 index 00000000000..7326710c9e4 --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/create-empty-wasm-module.js @@ -0,0 +1,4 @@ +function createEmptyWasmModule() { + return new WebAssembly.Module( + new Uint8Array([0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00])); +} diff --git a/tests/wpt/web-platform-tests/wasm/serialization/resources/echo-iframe.html b/tests/wpt/web-platform-tests/wasm/serialization/resources/echo-iframe.html new file mode 100644 index 00000000000..c4fd5824a1c --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/echo-iframe.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>A test page that echos back anything postMessaged to it to its parent</title> + +<script> +"use strict"; + +window.onmessage = ({ data }) => { + parent.postMessage(data, "*"); +}; +</script> diff --git a/tests/wpt/web-platform-tests/wasm/serialization/resources/echo-worker.js b/tests/wpt/web-platform-tests/wasm/serialization/resources/echo-worker.js new file mode 100644 index 00000000000..cbbde8a73c8 --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/echo-worker.js @@ -0,0 +1,5 @@ +"use strict"; + +self.onmessage = ({ data }) => { + self.postMessage(data); +}; diff --git a/tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer-iframe-domain.sub.html b/tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer-iframe-domain.sub.html new file mode 100644 index 00000000000..d2d18de4995 --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer-iframe-domain.sub.html @@ -0,0 +1,12 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>A test page that is sent a WebAssembly Module</title> +<script src="/resources/testharness.js"></script> +<script src="test-incrementer.js"></script> + +<script> +"use strict"; + +document.domain = "{{host}}"; +setupDestinationIncrementer(self, parent, "*"); +</script> diff --git a/tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer-iframe.html b/tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer-iframe.html new file mode 100644 index 00000000000..5c8bc0735e2 --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer-iframe.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>A test page that is sent a WebAssembly Module</title> +<script src="/resources/testharness.js"></script> +<script src="test-incrementer.js"></script> + +<script> +"use strict"; + +setupDestinationIncrementer(self, parent, "*"); +</script> diff --git a/tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer-popup.html b/tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer-popup.html new file mode 100644 index 00000000000..660e472b27c --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer-popup.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>A test page that is sent a WebAssembly Module</title> +<script src="/resources/testharness.js"></script> +<script src="test-incrementer.js"></script> + +<script> +"use strict"; + +setupDestinationIncrementer(self, opener, "*"); +</script> diff --git a/tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer-worker-with-channel.js b/tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer-worker-with-channel.js new file mode 100644 index 00000000000..0323b3e52e7 --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer-worker-with-channel.js @@ -0,0 +1,8 @@ +"use strict"; +importScripts("/resources/testharness.js"); +importScripts("./test-incrementer.js"); + +self.onmessage = ({ data }) => { + // data will be a MessagePort + setupDestinationIncrementer(data, data); +}; diff --git a/tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer-worker.js b/tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer-worker.js new file mode 100644 index 00000000000..1779ceea520 --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer-worker.js @@ -0,0 +1,5 @@ +"use strict"; +importScripts("/resources/testharness.js"); +importScripts("./test-incrementer.js"); + +setupDestinationIncrementer(self, self); diff --git a/tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer.wasm b/tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer.wasm Binary files differnew file mode 100644 index 00000000000..47afcdef2a2 --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer.wasm diff --git a/tests/wpt/web-platform-tests/wasm/serialization/resources/nested-iframe-1.html b/tests/wpt/web-platform-tests/wasm/serialization/resources/nested-iframe-1.html new file mode 100644 index 00000000000..fe93cc0c4b0 --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/nested-iframe-1.html @@ -0,0 +1,5 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Nesting level 1</title> + +<iframe src="nested-iframe-2.html"></iframe> diff --git a/tests/wpt/web-platform-tests/wasm/serialization/resources/nested-iframe-2.html b/tests/wpt/web-platform-tests/wasm/serialization/resources/nested-iframe-2.html new file mode 100644 index 00000000000..fad52ce9de3 --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/nested-iframe-2.html @@ -0,0 +1,5 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Nesting level 2</title> + +<iframe src="nested-iframe-3.html"></iframe> diff --git a/tests/wpt/web-platform-tests/wasm/serialization/resources/nested-iframe-3.html b/tests/wpt/web-platform-tests/wasm/serialization/resources/nested-iframe-3.html new file mode 100644 index 00000000000..7971022b2cd --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/nested-iframe-3.html @@ -0,0 +1,5 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Nesting level 3</title> + +<iframe src="nested-iframe-4-incrementer.html"></iframe> diff --git a/tests/wpt/web-platform-tests/wasm/serialization/resources/nested-iframe-4-incrementer.html b/tests/wpt/web-platform-tests/wasm/serialization/resources/nested-iframe-4-incrementer.html new file mode 100644 index 00000000000..f419f4bc36c --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/nested-iframe-4-incrementer.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>A test page that is sent a WebAssembly Module, nested 4 levels deep in iframes</title> +<script src="/resources/testharness.js"></script> +<script src="test-incrementer.js"></script> + +<script> +"use strict"; + +setupDestinationIncrementer(self, parent.parent.parent.parent.parent, "*"); +</script> diff --git a/tests/wpt/web-platform-tests/wasm/serialization/resources/serviceworker-failure.js b/tests/wpt/web-platform-tests/wasm/serialization/resources/serviceworker-failure.js new file mode 100644 index 00000000000..39796f9d94a --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/serviceworker-failure.js @@ -0,0 +1,34 @@ +// Based on similar tests in html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/. +"use strict"; +self.importScripts("/resources/testharness.js"); +self.importScripts("./create-empty-wasm-module.js"); + +let state = "start in worker"; + +self.onmessage = e => { + if (e.data === "start in window") { + assert_equals(state, "start in worker"); + e.source.postMessage(state); + state = "we are expecting a messageerror due to the window sending us a WebAssembly.Module"; + } else if (e.data === "we are expecting a messageerror due to the worker sending us a WebAssembly.Module") { + assert_equals(state, "onmessageerror was received in worker"); + e.source.postMessage(createEmptyWasmModule()); + state = "done in worker"; + } else { + e.source.postMessage(`worker onmessage was reached when in state "${state}" and data ${e.data}`); + } +}; + +self.onmessageerror = e => { + if (state === "we are expecting a messageerror due to the window sending us a WebAssembly.Module") { + assert_equals(e.data, null, "data"); + assert_equals(e.origin, self.origin, "origin"); + assert_not_equals(e.source, null, "source"); + assert_equals(e.ports.length, 0, "ports length"); + + state = "onmessageerror was received in worker"; + e.source.postMessage(state); + } else { + e.source.postMessage(`worker onmessageerror was reached when in state "${state}" and data ${e.data}`); + } +}; diff --git a/tests/wpt/web-platform-tests/wasm/serialization/resources/sharedworker-failure.js b/tests/wpt/web-platform-tests/wasm/serialization/resources/sharedworker-failure.js new file mode 100644 index 00000000000..854c70b9e84 --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/sharedworker-failure.js @@ -0,0 +1,21 @@ +importScripts("./test-incrementer.js"); +importScripts("./create-empty-wasm-module.js"); + +let state = "send-sw-failure" +onconnect = initialE => { + let port = initialE.source; + port.postMessage(state) + port.onmessage = e => { + if(state === "" && e.data === "send-window-failure") { + port.postMessage(createEmptyWasmModule()) + } else { + port.postMessage("failure") + } + } + port.onmessageerror = e => { + if(state === "send-sw-failure") { + port.postMessage("send-sw-failure-success") + state = "" + } + } +} diff --git a/tests/wpt/web-platform-tests/wasm/serialization/resources/test-incrementer.js b/tests/wpt/web-platform-tests/wasm/serialization/resources/test-incrementer.js new file mode 100644 index 00000000000..65cb33227a3 --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/test-incrementer.js @@ -0,0 +1,57 @@ +// Based on similar tests in html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/. +// +// This file is simplified from the one there, because it only tests that the +// module can be passed and that functions can be run. The SharedArrayBuffer +// version also tests that the memory is shared between the agents. + +"use strict"; + +function createWasmModule() { + return fetch('incrementer.wasm') + .then(response => { + if (!response.ok) + throw new Error(response.statusText); + return response.arrayBuffer(); + }) + .then(WebAssembly.compile); +} + +function testModule(module) { + let instance = new WebAssembly.Instance(module); + let increment = instance.exports["increment"]; + assert_equals(typeof increment, "function", `The type of the increment export should be "function", got ${typeof increment}`); + let result = increment(42); + assert_equals(result, 43, `increment(42) should be 43, got ${result}`); +} + +self.testSharingViaIncrementerScript = (t, whereToListen, whereToListenLabel, whereToSend, whereToSendLabel, origin) => { + return createWasmModule().then(module => { + return new Promise(resolve => { + + whereToListen.onmessage = t.step_func(({ data }) => { + switch (data.message) { + case "module received": { + testModule(data.module); + resolve(); + break; + } + } + }); + + whereToSend.postMessage({ message: "send module", module }, origin); + }); + }); +}; + +self.setupDestinationIncrementer = (whereToListen, whereToSendBackTo, origin) => { + whereToListen.onmessage = ({ data }) => { + switch (data.message) { + case "send module": { + let module = data.module; + testModule(data.module); + whereToSendBackTo.postMessage({ message: "module received", module }, origin); + break; + } + } + }; +}; diff --git a/tests/wpt/web-platform-tests/wasm/serialization/serialization-via-history.html b/tests/wpt/web-platform-tests/wasm/serialization/serialization-via-history.html new file mode 100644 index 00000000000..35dc17b6701 --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/serialization/serialization-via-history.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<!-- Based on similar tests in html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/ --> +<meta charset="utf-8"> +<title>WebAssembly.Module cloning via history's methods invoking StructuredSerializeForStorage</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="./resources/create-empty-wasm-module.js"></script> + +<script> +"use strict"; + +for (const method of ["pushState", "replaceState"]) { + test(() => { + assert_throws("DataCloneError", () => { + history[method](createEmptyWasmModule(), "dummy title"); + }); + }, `history.${method}(): simple case`); + + test(() => { + let getter1Called = false; + let getter2Called = false; + assert_throws("DataCloneError", () => { + history[method]([ + { get x() { getter1Called = true; return 5; } }, + createEmptyWasmModule(), + { get x() { getter2Called = true; return 5; } } + ], "dummy title"); + }); + + assert_true(getter1Called, "The getter before the WebAssembly.Module must have been called"); + assert_false(getter2Called, "The getter after the WebAssembly.Module must not have been called"); + }, `history.${method}(): is interleaved correctly`); +} +</script> diff --git a/tests/wpt/web-platform-tests/wasm/serialization/serialization-via-idb.any.js b/tests/wpt/web-platform-tests/wasm/serialization/serialization-via-idb.any.js new file mode 100644 index 00000000000..1d861c3d3aa --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/serialization/serialization-via-idb.any.js @@ -0,0 +1,45 @@ +// META: script=/IndexedDB/support.js +"use strict"; + +function createEmptyWasmModule() { + return new WebAssembly.Module( + new Uint8Array([0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00])); +} + +async_test(t => { + const openReq = createdb(t); + + openReq.onupgradeneeded = e => { + const db = e.target.result; + const store = db.createObjectStore("store", { keyPath: "key" }); + + assert_throws("DataCloneError", () => { + store.put({ key: 1, property: createEmptyWasmModule() }); + }); + t.done(); + }; +}, "WebAssembly.Module cloning via IndexedDB: basic case"); + +async_test(t => { + const openReq = createdb(t); + + openReq.onupgradeneeded = e => { + const db = e.target.result; + const store = db.createObjectStore("store", { keyPath: "key" }); + + let getter1Called = false; + let getter2Called = false; + + assert_throws("DataCloneError", () => { + store.put({ key: 1, property: [ + { get x() { getter1Called = true; return 5; } }, + createEmptyWasmModule(), + { get x() { getter2Called = true; return 5; } } + ]}); + }); + + assert_true(getter1Called, "The getter before the WebAssembly.Module must have been called"); + assert_false(getter2Called, "The getter after the WebAssembly.Module must not have been called"); + t.done(); + }; +}, "WebAssembly.Module cloning via the IndexedDB: is interleaved correctly"); diff --git a/tests/wpt/web-platform-tests/wasm/serialization/serialization-via-notifications-api.any.js b/tests/wpt/web-platform-tests/wasm/serialization/serialization-via-notifications-api.any.js new file mode 100644 index 00000000000..84105651d3b --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/serialization/serialization-via-notifications-api.any.js @@ -0,0 +1,28 @@ +"use strict"; + +function createEmptyWasmModule() { + return new WebAssembly.Module( + new Uint8Array([0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00])); +} + +test(() => { + assert_throws("DataCloneError", () => { + new Notification("Bob: Hi", { data: createEmptyWasmModule() }); + }) +}, "WebAssembly.Module cloning via the Notifications API's data member: basic case"); + +test(() => { + let getter1Called = false; + let getter2Called = false; + + assert_throws("DataCloneError", () => { + new Notification("Bob: Hi", { data: [ + { get x() { getter1Called = true; return 5; } }, + createEmptyWasmModule(), + { get x() { getter2Called = true; return 5; } } + ]}); + }); + + assert_true(getter1Called, "The getter before the SAB must have been called"); + assert_false(getter2Called, "The getter after the SAB must not have been called"); +}, "WebAssembly.Module cloning via the Notifications API's data member: is interleaved correctly"); diff --git a/tests/wpt/web-platform-tests/wasm/serialization/window-domain-success.sub.html b/tests/wpt/web-platform-tests/wasm/serialization/window-domain-success.sub.html new file mode 100644 index 00000000000..51d4c5cb0ea --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/serialization/window-domain-success.sub.html @@ -0,0 +1,26 @@ +<!DOCTYPE html> +<!-- Based on similar tests in html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/ --> +<meta charset="utf-8"> +<title>Structured cloning of WebAssembly.Module into same-origin-domain windows</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="./resources/test-incrementer.js"></script> + +<div id="log"></div> + +<script> +"use strict"; +document.domain = "{{host}}"; + +promise_test(t => { + return new Promise(resolve => { + const iframe = document.createElement("iframe"); + iframe.onload = t.step_func(() => { + resolve(testSharingViaIncrementerScript(t, window, "window", iframe.contentWindow, "iframe", "*")); + }); + iframe.src = "//{{domains[www1]}}:{{location[port]}}/wasm/serialization/resources/incrementer-iframe-domain.sub.html"; + document.body.appendChild(iframe); + }); +}, "postMessaging to a same-origin-domain (but not same-origin) iframe allows them to instantiate"); + +</script> diff --git a/tests/wpt/web-platform-tests/wasm/serialization/window-messagechannel-success.html b/tests/wpt/web-platform-tests/wasm/serialization/window-messagechannel-success.html new file mode 100644 index 00000000000..e686c811356 --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/serialization/window-messagechannel-success.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<!-- Based on similar tests in html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/ --> +<meta charset="utf-8"> +<title>Structured cloning of WebAssembly.Module using MessageChannel</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="./resources/test-incrementer.js"></script> + +<div id="log"></div> + +<script> +"use strict"; + +promise_test(t => { + const worker = new Worker("resources/incrementer-worker-with-channel.js"); + const channel = new MessageChannel(); + worker.postMessage(channel.port2, [channel.port2]); + + return testSharingViaIncrementerScript(t, channel.port1, "window", channel.port1, "worker"); +}, "postMessaging to a dedicated worker via MessageChannel allows them to instantiate"); +</script> diff --git a/tests/wpt/web-platform-tests/wasm/serialization/window-serviceworker-failure.https.html b/tests/wpt/web-platform-tests/wasm/serialization/window-serviceworker-failure.https.html new file mode 100644 index 00000000000..97c5a1decdb --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/serialization/window-serviceworker-failure.https.html @@ -0,0 +1,54 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<!-- Based on similar tests in html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/ --> +<title>WebAssembly.Module cannot cross agent clusters, service worker edition</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script> +<script src="./resources/create-empty-wasm-module.js"></script> + +<script> +"use strict"; +promise_test(t => { + const scope = "resources/blank.html"; + return service_worker_unregister_and_register(t, "resources/serviceworker-failure.js", scope).then(reg => { + return wait_for_state(t, reg.installing, "activated"); + }) + .then(() => { + return with_iframe(scope); + }).then(iframe => { + const sw = iframe.contentWindow.navigator.serviceWorker; + let state = "start in window"; + + return new Promise(resolve => { + sw.onmessage = t.step_func(e => { + if (e.data === "start in worker") { + assert_equals(state, "start in window"); + sw.controller.postMessage(createEmptyWasmModule()); + state = "we are expecting confirmation of an onmessageerror in the worker"; + } else if (e.data === "onmessageerror was received in worker") { + assert_equals(state, "we are expecting confirmation of an onmessageerror in the worker"); + state = "we are expecting a messageerror due to the worker sending us a WebAssembly.Module"; + sw.controller.postMessage(state); + } else { + assert_unreached("Got an unexpected message from the service worker: " + e.data); + } + }); + + sw.onmessageerror = t.step_func(e => { + assert_equals(state, "we are expecting a messageerror due to the worker sending us a WebAssembly.Module"); + + assert_equals(e.data, null, "data"); + assert_equals(e.origin, self.origin, "origin"); + assert_equals(e.source, null, "source"); + assert_equals(e.ports.length, 0, "ports length"); + + state = "done in window"; + resolve(); + }); + + sw.controller.postMessage(state); + }); + }); +}); +</script> diff --git a/tests/wpt/web-platform-tests/wasm/serialization/window-sharedworker-failure.html b/tests/wpt/web-platform-tests/wasm/serialization/window-sharedworker-failure.html new file mode 100644 index 00000000000..667e985a30b --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/serialization/window-sharedworker-failure.html @@ -0,0 +1,33 @@ +<!doctype html> +<!-- Based on similar tests in html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/ --> +<title>WebAssembly.Modules cannot cross agent clusters, shared worker edition</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="./resources/create-empty-wasm-module.js"></script> +<script> +async_test(t => { + const sw = new SharedWorker("resources/sharedworker-failure.js") + let state = "" + sw.port.onmessage = t.step_func(e => { + if(e.data === "send-sw-failure") { + sw.port.postMessage(createEmptyWasmModule()) + } else if(e.data === "send-sw-failure-success") { + state = "send-window-failure" + sw.port.postMessage(state) + } else { + assert_unreached() + } + }) + sw.port.onmessageerror = t.step_func(e => { + if(state === "send-window-failure") { + assert_equals(e.data, null, "data") + assert_equals(e.origin, "", "origin") + assert_equals(e.source, null, "source") + assert_equals(e.ports.length, 0, "ports length") + t.done() + } else { + assert_unreached() + } + }) +}) +</script> diff --git a/tests/wpt/web-platform-tests/wasm/serialization/window-similar-but-cross-origin-success.sub.html b/tests/wpt/web-platform-tests/wasm/serialization/window-similar-but-cross-origin-success.sub.html new file mode 100644 index 00000000000..070cf0a49a8 --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/serialization/window-similar-but-cross-origin-success.sub.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<!-- Based on similar tests in html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/ --> +<meta charset="utf-8"> +<title>Structured cloning of WebAssembly.Module to similar-origin, but not same-origin, windows</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="./resources/test-incrementer.js"></script> + +<div id="log"></div> + +<script> +"use strict"; +document.domain = "{{host}}"; + +promise_test(t => { + return new Promise(resolve => { + const iframe = document.createElement("iframe"); + iframe.onload = t.step_func(() => { + resolve(testSharingViaIncrementerScript(t, window, "window", iframe.contentWindow, "iframe", "*")); + }); + iframe.src = "//{{domains[www1]}}:{{location[port]}}/wasm/serialization/resources/incrementer-iframe.html"; + document.body.appendChild(iframe); + }); +}, "postMessaging to a not same-origin-domain, but similar origin, iframe allows them to instantiate"); +</script> diff --git a/tests/wpt/web-platform-tests/wasm/serialization/window-simple-success.html b/tests/wpt/web-platform-tests/wasm/serialization/window-simple-success.html new file mode 100644 index 00000000000..6f2ccf465e9 --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/serialization/window-simple-success.html @@ -0,0 +1,57 @@ +<!DOCTYPE html> +<!-- Based on similar tests in html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/ --> +<meta charset="utf-8"> +<title>Structured cloning of WebAssembly.Module: simple success cases that don't need dedicated files</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="./resources/test-incrementer.js"></script> + +<div id="log"></div> + +<script> +"use strict"; + +promise_test(t => { + const worker = new Worker("resources/incrementer-worker.js"); + + return testSharingViaIncrementerScript(t, worker, "window", worker, "worker", undefined); +}, "postMessaging to a dedicated worker allows them to instantiate"); + +promise_test(t => { + return new Promise(resolve => { + const iframe = document.createElement("iframe"); + iframe.onload = t.step_func(() => { + resolve(testSharingViaIncrementerScript(t, window, "window", iframe.contentWindow, "iframe", "*")); + }); + iframe.src = "resources/incrementer-iframe.html"; + document.body.appendChild(iframe); + }); +}, "postMessaging to a same-origin iframe allows them to instantiate"); + +promise_test(t => { + return new Promise(resolve => { + const iframe = document.createElement("iframe"); + iframe.onload = t.step_func(() => { + const level1 = iframe.contentWindow; + const level2 = level1.frames[0]; + const level3 = level2.frames[0]; + const targetWindow = level3.frames[0]; + resolve(testSharingViaIncrementerScript(t, window, "window", targetWindow, "nested iframe", "*")); + }); + iframe.src = "resources/nested-iframe-1.html"; + document.body.appendChild(iframe); + }); +}, "postMessaging to a same-origin deeply-nested iframe allows them to instantiate"); + +promise_test(t => { + return new Promise(resolve => { + const w = window.open("resources/incrementer-popup.html"); + w.onload = t.step_func(() => { + resolve(testSharingViaIncrementerScript(t, window, "window", w, "popup window", "*").then(() => { + w.close(); + })); + }); + }); +}, "postMessaging to a same-origin opened window allows them to instantiate"); + +</script> diff --git a/tests/wpt/web-platform-tests/wasm/wasm_local_iframe_test.html b/tests/wpt/web-platform-tests/wasm/wasm_local_iframe_test.html deleted file mode 100644 index 0f4fbd0c719..00000000000 --- a/tests/wpt/web-platform-tests/wasm/wasm_local_iframe_test.html +++ /dev/null @@ -1,19 +0,0 @@ -<!DOCTYPE html> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="resources/load_wasm.js"></script> -<script> - function runTests(iframe) { - iframe = iframe.contentWindow; - promise_test(async function() { - var mod = await createWasmModule(); - assert_true(mod instanceof WebAssembly.Module); - var ans = await new Promise((resolve, reject) => { - iframe.postMessage(mod, '*'); - window.addEventListener("message", (reply) => resolve(reply.data), false); - }); - assert_equals(ans, 43); - }, "send wasm module to iframe"); - } -</script> -<iframe src="resources/frame.html" onload="runTests(this)"></iframe> diff --git a/tests/wpt/web-platform-tests/wasm/wasm_serialization_tests.html b/tests/wpt/web-platform-tests/wasm/wasm_serialization_tests.html deleted file mode 100644 index 49766c77052..00000000000 --- a/tests/wpt/web-platform-tests/wasm/wasm_serialization_tests.html +++ /dev/null @@ -1,8 +0,0 @@ -<!DOCTYPE html> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="resources/load_wasm.js"></script> -<script src="wasm_serialization_tests.js"></script> -<script> - promise_test(TestInstantiateInWorker, "serialize wasm to worker"); -</script> diff --git a/tests/wpt/web-platform-tests/wasm/wasm_serialization_tests.js b/tests/wpt/web-platform-tests/wasm/wasm_serialization_tests.js deleted file mode 100644 index 3cc4166168b..00000000000 --- a/tests/wpt/web-platform-tests/wasm/wasm_serialization_tests.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2016 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -function TestInstantiateInWorker() { - return createWasmModule() - .then((mod) => { - var worker = new Worker("wasm_serialization_worker.js"); - return new Promise((resolve, reject) => { - worker.postMessage(mod); - worker.onmessage = function(event) { - resolve(event.data); - } - }); - }) - .then(data => assert_equals(data, 43)) - .catch(error => assert_unreached(error)); -} diff --git a/tests/wpt/web-platform-tests/wasm/wasm_serialization_worker.js b/tests/wpt/web-platform-tests/wasm/wasm_serialization_worker.js deleted file mode 100644 index 3361ed73951..00000000000 --- a/tests/wpt/web-platform-tests/wasm/wasm_serialization_worker.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2016 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -onmessage = function(e) { - var compiled_module = e.data; - var instance = new WebAssembly.Instance(compiled_module); - if (instance === undefined) { - postMessage("error!"); - return; - } - var entrypoint = instance.exports["increment"]; - - if (typeof entrypoint !== "function") { - postMessage("error!"); - return; - } - - var ret = entrypoint(42); - postMessage(ret); -} diff --git a/tests/wpt/web-platform-tests/wasm/wasm_service_worker_test.https.html b/tests/wpt/web-platform-tests/wasm/wasm_service_worker_test.https.html deleted file mode 100644 index cced4b8f6ec..00000000000 --- a/tests/wpt/web-platform-tests/wasm/wasm_service_worker_test.https.html +++ /dev/null @@ -1,23 +0,0 @@ -<!DOCTYPE html> -<title>Service Worker: postMessage with wasm</title> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="/common/get-host-info.sub.js"></script> -<script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script> -<script> - promise_test(async test => { - var registration = await service_worker_unregister_and_register( - test, 'resources/service-worker.js', 'resources/blank.html'); - add_completion_callback(() => registration.unregister()); - var worker = registration.installing; - var event = await new Promise((resolve, reject) => { - var messageChannel = new MessageChannel(); - worker.postMessage({port: messageChannel.port2}, [messageChannel.port2]); - worker.postMessage({compile: true}); - messageChannel.port1.onmessage = event => reject(event); - messageChannel.port1.onmessageerror = event => resolve(event); - }); - assert_equals(event.type, "messageerror"); - assert_equals(event.data, null); - }, 'postMessaging wasm from a service worker should fail'); -</script> diff --git a/tests/wpt/web-platform-tests/webaudio/resources/audionodeoptions.js b/tests/wpt/web-platform-tests/webaudio/resources/audionodeoptions.js index 0d90a9c6300..df0090c6d60 100644 --- a/tests/wpt/web-platform-tests/webaudio/resources/audionodeoptions.js +++ b/tests/wpt/web-platform-tests/webaudio/resources/audionodeoptions.js @@ -40,19 +40,19 @@ function testAudioNodeOptions(should, context, nodeName, expectedNodeOptions) { {channelCount: testChannelCount})); }, 'new ' + nodeName + '(c, {channelCount: ' + testChannelCount + '}}') - .throw(expectedNodeOptions.channelCount.errorType || TypeError); + .throw(DOMException, + expectedNodeOptions.channelCount.exceptionType); } else { // The channel count is not fixed. Try to set the count to invalid // values and make sure an error is thrown. - let errorType = 'NotSupportedError'; - [0, 99].forEach(testValue => { should(() => { node = new window[nodeName]( context, Object.assign({}, expectedNodeOptions.additionalOptions, { channelCount: testValue })); - }, `new ${nodeName}(c, {channelCount: ${testValue}})`).throw(errorType); + }, `new ${nodeName}(c, {channelCount: ${testValue}})`) + .throw(DOMException, 'NotSupportedError'); }); } @@ -88,7 +88,8 @@ function testAudioNodeOptions(should, context, nodeName, expectedNodeOptions) { {channelCountMode: testValue})); }, `new ${nodeName}(c, {channelCountMode: "${testValue}"})`) - .throw(expectedNodeOptions.channelCountMode.errorType); + .throw(DOMException, + expectedNodeOptions.channelCountMode.exceptionType); } }); } else { @@ -140,7 +141,8 @@ function testAudioNodeOptions(should, context, nodeName, expectedNodeOptions) { {channelInterpretation: testValue})); }, `new ${nodeName}(c, {channelInterpretation: "${testValue}"})`) - .throw(expectedNodeOptions.channelInterpretation.errorType); + .throw(DOMException, + expectedNodeOptions.channelCountMode.exceptionType); } }); } else { diff --git a/tests/wpt/web-platform-tests/webaudio/resources/audit.js b/tests/wpt/web-platform-tests/webaudio/resources/audit.js index 7ffa4392b05..b7ca0201610 100644 --- a/tests/wpt/web-platform-tests/webaudio/resources/audit.js +++ b/tests/wpt/web-platform-tests/webaudio/resources/audit.js @@ -274,21 +274,25 @@ window.Audit = (function() { /** * Check if |actual| operation wrapped in a function throws an exception - * with a expected error type correctly. |expected| is optional. If it is a - * String, then it is considered to be the name of a DOMException. It can - * also be an instance of either an Error or a DOMException, to be more - * strict about the actual error type. + * with a expected error type correctly. |expected| is optional. If it is an + * instance of DOMException, then the description (second argument) can be + * provided to be more strict about the expected exception type. |expected| + * also can be other generic error types such as TypeError, RangeError or + * etc. * * @example * should(() => { let a = b; }, 'A bad code').throw(); - * should(() => { let c = d; }, 'Assigning d to c.') - * .throw('ReferenceError'); - * should(() => { let e = f; }, 'Assigning e to f.') - * .throw('ReferenceError', { omitErrorMessage: true }); + * should(() => { new SomeConstructor(); }, 'A bad construction') + * .throw(DOMException, 'NotSupportedError'); + * should(() => { let c = d; }, 'Assigning d to c') + * .throw(ReferenceError); + * should(() => { let e = f; }, 'Assigning e to f') + * .throw(ReferenceError, { omitErrorMessage: true }); * * @result * "PASS A bad code threw an exception of ReferenceError: b is not * defined." + * "PASS A bad construction threw DOMException:NotSupportedError." * "PASS Assigning d to c threw ReferenceError: d is not defined." * "PASS Assigning e to f threw ReferenceError: [error message * omitted]." @@ -313,17 +317,16 @@ window.Audit = (function() { // The expected error type was not given. didThrowCorrectly = true; passDetail = '${actual} threw ' + error.name + errorMessage + '.'; - } else if (typeof(this._expected) == "string" && - error instanceof DOMException && - error.name === this._expected) { - // A DOMException was thrown and expected, and the names match + } else if (this._expected === DOMException && + (this._expectedDescription === undefined || + this._expectedDescription === error.name)) { + // Handles DOMException with the associated name. didThrowCorrectly = true; passDetail = '${actual} threw ${expected}' + errorMessage + '.'; - } else if (this._expected == error.constructor && - this._expected.name == error.name) { - // The expected error type and names match the actual one. + } else if (this._expected == error.constructor) { + // Handler other error types. didThrowCorrectly = true; - passDetail = '${actual} threw ${expected}' + errorMessage + '.'; + passDetail = '${actual} threw ' + error.name + errorMessage + '.'; } else { didThrowCorrectly = false; failDetail = diff --git a/tests/wpt/web-platform-tests/webaudio/resources/start-stop-exceptions.js b/tests/wpt/web-platform-tests/webaudio/resources/start-stop-exceptions.js index 9a77e67ed86..0d2ea12f6db 100644 --- a/tests/wpt/web-platform-tests/webaudio/resources/start-stop-exceptions.js +++ b/tests/wpt/web-platform-tests/webaudio/resources/start-stop-exceptions.js @@ -13,7 +13,7 @@ function testStartStop(should, node, options) { should(() => { node.stop(); - }, 'Calling stop() before start()').throw('InvalidStateError'); + }, 'Calling stop() before start()').throw(DOMException, 'InvalidStateError'); should(() => { node.start(-1); @@ -29,7 +29,7 @@ function testStartStop(should, node, options) { node.start(); should(() => { node.start(); - }, 'Calling start() twice').throw('InvalidStateError'); + }, 'Calling start() twice').throw(DOMException, 'InvalidStateError'); should(() => { node.stop(-1); }, 'stop(-1)').throw(RangeError); diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/ctor-analyser.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/ctor-analyser.html index 2112edeeffc..4e27f842dde 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/ctor-analyser.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/ctor-analyser.html @@ -91,25 +91,25 @@ node = new AnalyserNode(context, {fftSize: 33}); }, 'node = new AnalyserNode(c, { fftSize: 33 })') - .throw('IndexSizeError'); + .throw(DOMException, 'IndexSizeError'); should( () => { node = new AnalyserNode(context, {maxDecibels: -500}); }, 'node = new AnalyserNode(c, { maxDecibels: -500 })') - .throw('IndexSizeError'); + .throw(DOMException, 'IndexSizeError'); should( () => { node = new AnalyserNode(context, {minDecibels: -10}); }, 'node = new AnalyserNode(c, { minDecibels: -10 })') - .throw('IndexSizeError'); + .throw(DOMException, 'IndexSizeError'); should( () => { node = new AnalyserNode(context, {smoothingTimeConstant: 2}); }, 'node = new AnalyserNode(c, { smoothingTimeConstant: 2 })') - .throw('IndexSizeError'); + .throw(DOMException, 'IndexSizeError'); should(function() { node = new AnalyserNode(context, {frequencyBinCount: 33}); }, 'node = new AnalyserNode(c, { frequencyBinCount: 33 })').notThrow(); @@ -164,7 +164,7 @@ node = new AnalyserNode(context, options); }, 'node = new AnalyserNode(c, ' + JSON.stringify(options) + ')') - .throw('IndexSizeError'); + .throw(DOMException, 'IndexSizeError'); options = {minDecibels: -10, maxDecibels: -150}; should( @@ -172,7 +172,7 @@ node = new AnalyserNode(context, options); }, 'node = new AnalyserNode(c, ' + JSON.stringify(options) + ')') - .throw('IndexSizeError'); + .throw(DOMException, 'IndexSizeError'); task.done(); }); diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-sizing.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-sizing.html index b3de37f119f..7ee6a2237ed 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-sizing.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-sizing.html @@ -22,7 +22,7 @@ }; if (illegal) { - should(tester, message).throw('IndexSizeError'); + should(tester, message).throw(DOMException, 'IndexSizeError'); } else { should(tester, message).notThrow(); } diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-copy-channel.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-copy-channel.html index b71078d8f80..e0359953d2e 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-copy-channel.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-copy-channel.html @@ -127,27 +127,27 @@ }, '2: buffer.copyFromChannel(context, 0)').throw(TypeError); should(() => { buffer.copyFromChannel(x, -1); - }, '3: buffer.copyFromChannel(x, -1)').throw('IndexSizeError'); + }, '3: buffer.copyFromChannel(x, -1)').throw(DOMException, 'IndexSizeError'); should( () => { buffer.copyFromChannel(x, numberOfChannels); }, '4: buffer.copyFromChannel(x, ' + numberOfChannels + ')') - .throw('IndexSizeError'); + .throw(DOMException, 'IndexSizeError'); ; should(() => { buffer.copyFromChannel(x, 0, -1); - }, '5: buffer.copyFromChannel(x, 0, -1)').throw('IndexSizeError'); + }, '5: buffer.copyFromChannel(x, 0, -1)').throw(DOMException, 'IndexSizeError'); should( () => { buffer.copyFromChannel(x, 0, bufferLength); }, '6: buffer.copyFromChannel(x, 0, ' + bufferLength + ')') - .throw('IndexSizeError'); + .throw(DOMException, 'IndexSizeError'); should(() => { buffer.copyFromChannel(x, 3); - }, '7: buffer.copyFromChannel(x, 3)').throw('IndexSizeError'); + }, '7: buffer.copyFromChannel(x, 3)').throw(DOMException, 'IndexSizeError'); if (window.SharedArrayBuffer) { let shared_buffer = new Float32Array(new SharedArrayBuffer(32)); @@ -183,26 +183,26 @@ }, '1: buffer.copyToChannel(context, 0)').throw(TypeError); should(() => { buffer.copyToChannel(x, -1); - }, '2: buffer.copyToChannel(x, -1)').throw('IndexSizeError'); + }, '2: buffer.copyToChannel(x, -1)').throw(DOMException, 'IndexSizeError'); should( () => { buffer.copyToChannel(x, numberOfChannels); }, '3: buffer.copyToChannel(x, ' + numberOfChannels + ')') - .throw('IndexSizeError'); + .throw(DOMException, 'IndexSizeError'); should(() => { buffer.copyToChannel(x, 0, -1); - }, '4: buffer.copyToChannel(x, 0, -1)').throw('IndexSizeError'); + }, '4: buffer.copyToChannel(x, 0, -1)').throw(DOMException, 'IndexSizeError'); should( () => { buffer.copyToChannel(x, 0, bufferLength); }, '5: buffer.copyToChannel(x, 0, ' + bufferLength + ')') - .throw('IndexSizeError'); + .throw(DOMException, 'IndexSizeError'); should(() => { buffer.copyToChannel(x, 3); - }, '6: buffer.copyToChannel(x, 3)').throw('IndexSizeError'); + }, '6: buffer.copyToChannel(x, 3)').throw(DOMException, 'IndexSizeError'); if (window.SharedArrayBuffer) { let shared_buffer = new Float32Array(new SharedArrayBuffer(32)); diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer.html index 07a34f07c18..a2c4581c4e8 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer.html @@ -53,7 +53,7 @@ buffer.getChannelData(buffer.numberOfChannels); }, 'buffer.getChannelData(' + buffer.numberOfChannels + ')') - .throw('IndexSizeError'); + .throw(DOMException, 'IndexSizeError'); let buffer2 = context.createBuffer(1, 1000, 24576); let expectedDuration = 1000 / 24576; diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/ctor-audiobuffer.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/ctor-audiobuffer.html index c5aae1ad532..9845d5eaba3 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/ctor-audiobuffer.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/ctor-audiobuffer.html @@ -96,7 +96,7 @@ let buffer = new AudioBuffer(options); }, 'new AudioBuffer(' + JSON.stringify(options) + ')') - .throw('NotSupportedError'); + .throw(DOMException, 'NotSupportedError'); options = {numberOfChannels: 99, length: 0, sampleRate: 16000}; should( @@ -104,7 +104,7 @@ let buffer = new AudioBuffer(options); }, 'new AudioBuffer(' + JSON.stringify(options) + ')') - .throw('NotSupportedError'); + .throw(DOMException, 'NotSupportedError'); options = {numberOfChannels: 1, length: 0, sampleRate: 16000}; should( @@ -112,7 +112,7 @@ let buffer = new AudioBuffer(options); }, 'new AudioBuffer(' + JSON.stringify(options) + ')') - .throw('NotSupportedError'); + .throw(DOMException, 'NotSupportedError'); options = {numberOfChannels: 1, length: 1, sampleRate: 100}; should( @@ -120,7 +120,7 @@ let buffer = new AudioBuffer(options); }, 'new AudioBuffer(' + JSON.stringify(options) + ')') - .throw('NotSupportedError'); + .throw(DOMException, 'NotSupportedError'); task.done(); }); @@ -178,7 +178,7 @@ buffer.getChannelData(options.numberOfChannels); }, 'buffer.getChannelData(' + options.numberOfChannels + ')') - .throw('IndexSizeError'); + .throw(DOMException, 'IndexSizeError'); task.done(); }); diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-channels.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-channels.html index 5527f44cc9c..f3f16c4c648 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-channels.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-channels.html @@ -47,7 +47,7 @@ should(function() { source.buffer = new AudioBuffer({length: 128, sampleRate: context.sampleRate}) - }, 'source.buffer = new buffer').throw('InvalidStateError'); + }, 'source.buffer = new buffer').throw(DOMException, 'InvalidStateError'); // The buffer has been set; it's ok to set it to null. should(function() { @@ -58,7 +58,7 @@ // again. should(function() { source.buffer = buffer; - }, 'source.buffer = buffer again').throw('InvalidStateError'); + }, 'source.buffer = buffer again').throw(DOMException, 'InvalidStateError'); // But setting to null is ok. should(function() { diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-connect-method-chaining.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-connect-method-chaining.html index 0a8c73160e5..4163a8439cd 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-connect-method-chaining.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-connect-method-chaining.html @@ -114,7 +114,7 @@ // does not have the second output, so it should throw. should(function() { gain1.connect(gain2, 1).connect(contextA.destination); - }, 'Connecting with an invalid output').throw('IndexSizeError'); + }, 'Connecting with an invalid output').throw(DOMException, 'IndexSizeError'); // Test if the second connection throws correctly. The contextB's // destination is not compatible with the nodes from contextA, thus the @@ -124,7 +124,7 @@ gain1.connect(gain2).connect(contextB.destination); }, 'Connecting to a node from the different context') - .throw('InvalidAccessError'); + .throw(DOMException, 'InvalidAccessError'); task.done(); }); diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect-audioparam.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect-audioparam.html index c3d3fae2155..386614ff2e2 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect-audioparam.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect-audioparam.html @@ -193,17 +193,17 @@ // gain1 is not connected to gain3.gain. Exception should be thrown. should(function() { gain1.disconnect(gain3.gain); - }, 'gain1.disconnect(gain3.gain)').throw('InvalidAccessError'); + }, 'gain1.disconnect(gain3.gain)').throw(DOMException, 'InvalidAccessError'); // When the output index is good but the destination is invalid. should(function() { splitter.disconnect(gain1.gain, 1); - }, 'splitter.disconnect(gain1.gain, 1)').throw('InvalidAccessError'); + }, 'splitter.disconnect(gain1.gain, 1)').throw(DOMException, 'InvalidAccessError'); // When both arguments are wrong, throw IndexSizeError first. should(function() { splitter.disconnect(gain1.gain, 2); - }, 'splitter.disconnect(gain1.gain, 2)').throw('IndexSizeError'); + }, 'splitter.disconnect(gain1.gain, 2)').throw(DOMException, 'IndexSizeError'); task.done(); }); diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect.html index b29c09d395f..65b93222d10 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect.html @@ -230,7 +230,7 @@ // There is no output #2. An exception should be thrown. should(function() { splitter.disconnect(2); - }, 'splitter.disconnect(2)').throw('IndexSizeError'); + }, 'splitter.disconnect(2)').throw(DOMException, 'IndexSizeError'); // Disconnecting the output already disconnected should not throw. should(function() { @@ -241,34 +241,34 @@ // gain1 is not connected gain2. An exception should be thrown. should(function() { gain1.disconnect(gain2); - }, 'gain1.disconnect(gain2)').throw('InvalidAccessError'); + }, 'gain1.disconnect(gain2)').throw(DOMException, 'InvalidAccessError'); // gain1 and gain3 are not connected. An exception should be thrown. should(function() { gain1.disconnect(gain3); - }, 'gain1.disconnect(gain3)').throw('InvalidAccessError'); + }, 'gain1.disconnect(gain3)').throw(DOMException, 'InvalidAccessError'); // There is no output #2 in the splitter. An exception should be thrown. should(function() { splitter.disconnect(gain2, 2); - }, 'splitter.disconnect(gain2, 2)').throw('IndexSizeError'); + }, 'splitter.disconnect(gain2, 2)').throw(DOMException, 'IndexSizeError'); // The splitter and gain1 are not connected. An exception should be // thrown. should(function() { splitter.disconnect(gain1, 0); - }, 'splitter.disconnect(gain1, 0)').throw('InvalidAccessError'); + }, 'splitter.disconnect(gain1, 0)').throw(DOMException, 'InvalidAccessError'); // The splitter output #0 and the gain3 output #0 are not connected. An // exception should be thrown. should(function() { splitter.disconnect(gain3, 0, 0); - }, 'splitter.disconnect(gain3, 0, 0)').throw('InvalidAccessError'); + }, 'splitter.disconnect(gain3, 0, 0)').throw(DOMException, 'InvalidAccessError'); // The output index is out of bound. An exception should be thrown. should(function() { splitter.disconnect(merger, 3, 0); - }, 'splitter.disconnect(merger, 3, 0)').throw('IndexSizeError'); + }, 'splitter.disconnect(merger, 3, 0)').throw(DOMException, 'IndexSizeError'); task.done(); }); diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode.html index 14cfbff7e27..0b57d27e8e1 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode.html @@ -54,11 +54,11 @@ should( () => audioNode.connect(context.destination, 5, 0), 'audioNode.connect(context.destination, 5, 0)') - .throw('IndexSizeError'); + .throw(DOMException, 'IndexSizeError'); should( () => audioNode.connect(context.destination, 0, 5), 'audioNode.connect(context.destination, 0, 5)') - .throw('IndexSizeError'); + .throw(DOMException, 'IndexSizeError'); should( () => audioNode.connect(context.destination, 0, 0), @@ -71,7 +71,7 @@ should( () => window.audioNode.connect(context2.destination), 'Connecting a node to a different context') - .throw('InvalidAccessError'); + .throw(DOMException, 'InvalidAccessError'); // 3-arg AudioContext doesn't create an offline context anymore. should( diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-exceptional-values.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-exceptional-values.html index c928b3dc165..982731d3384 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-exceptional-values.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-exceptional-values.html @@ -174,11 +174,16 @@ }, ]); - // One final test for setValueCurve: duration can't be 0. + // Two final tests for setValueCurve: duration must be strictly + // positive. should( () => gain.gain.setValueCurveAtTime(curve, 1, 0), 'gain.gain.setValueCurveAtTime(curve, 1, 0)') .throw(RangeError); + should( + () => gain.gain.setValueCurveAtTime(curve, 1, -1), + 'gain.gain.setValueCurveAtTime(curve, 1, -1)') + .throw(RangeError); task.done(); }); diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueCurve-exceptions.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueCurve-exceptions.html index 31405ebfcd2..9609d5d1026 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueCurve-exceptions.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueCurve-exceptions.html @@ -30,7 +30,7 @@ let curveStartTime = 0.1 * testDurationSec; let duration = 0.1 * testDurationSec; - // Some time that is known to during the setValueCurveTime interval. + // Some time that is known to be during the setValueCurveTime interval. let automationTime = curveStartTime + duration / 2; should( @@ -46,28 +46,28 @@ g.gain.setValueAtTime(1, automationTime); }, 'setValueAtTime(1, ' + automationTime + ')') - .throw('NotSupportedError'); + .throw(DOMException, 'NotSupportedError'); should( function() { g.gain.linearRampToValueAtTime(1, automationTime); }, 'linearRampToValueAtTime(1, ' + automationTime + ')') - .throw('NotSupportedError'); + .throw(DOMException, 'NotSupportedError'); should( function() { g.gain.exponentialRampToValueAtTime(1, automationTime); }, 'exponentialRampToValueAtTime(1, ' + automationTime + ')') - .throw('NotSupportedError'); + .throw(DOMException, 'NotSupportedError'); should( function() { g.gain.setTargetAtTime(1, automationTime, 1); }, 'setTargetAtTime(1, ' + automationTime + ', 1)') - .throw('NotSupportedError'); + .throw(DOMException, 'NotSupportedError'); should( function() { @@ -120,7 +120,7 @@ g.gain.setValueCurveAtTime(curve, time, 0.01); }, 'setValueCurveAtTime(curve, ' + time + ', 0.01)') - .throw('NotSupportedError'); + .throw(DOMException, 'NotSupportedError'); } // Elements of setValueCurve should be finite. @@ -167,7 +167,7 @@ g.gain.setValueCurveAtTime(curve, time, 0.01); }, 'setValueCurveAtTime(curve, ' + time + ', 0.01)') - .throw('NotSupportedError'); + .throw(DOMException, 'NotSupportedError'); task.done(); }); @@ -286,6 +286,61 @@ task.done(); }); + audit.define('curve overlap', (task, should) => { + let context = + new OfflineAudioContext(1, testDurationFrames, sampleRate); + let g = context.createGain(); + let startTime = 5; + let startTimeLater = 10; + let startTimeEarlier = 2.5; + let curveDuration = 10; + let curveDurationShorter = 5; + let curve = [1, 2, 3]; + + // An initial curve event + should( + () => { + g.gain.setValueCurveAtTime(curve, startTime, curveDuration); + }, + `g.gain.setValueCurveAtTime([${curve}], ${startTime}, ${curveDuration})`) + .notThrow(); + + // Check that an exception is thrown when trying to overlap two curves, + // in various ways + + // Same start time and end time (curve exactly overlapping) + should( + () => { + g.gain.setValueCurveAtTime(curve, startTime, curveDuration); + }, + `second g.gain.setValueCurveAtTime([${curve}], ${startTime}, ${curveDuration})`) + .throw('NotSupportedError'); + // Same start time, shorter end time + should( + () => { + g.gain.setValueCurveAtTime(curve, startTime, curveDurationShorter); + }, + `g.gain.setValueCurveAtTime([${curve}], ${startTime}, ${curveDurationShorter})`) + .throw('NotSupportedError'); + // Earlier start time, end time after the start time an another curve + should( + () => { + g.gain.setValueCurveAtTime(curve, startTimeEarlier, curveDuration); + }, + `g.gain.setValueCurveAtTime([${curve}], ${startTimeEarlier}, ${curveDuration})`) + .throw('NotSupportedError'); + // Start time after the start time of the other curve, but earlier that + // its end. + should( + () => { + g.gain.setValueCurveAtTime(curve, startTimeLater, curveDuration); + }, + `g.gain.setValueCurveAtTime([${curve}], ${startTimeLater}, ${curveDuration})`) + .throw('NotSupportedError'); + + task.done(); + }); + audit.define('curve lengths', (task, should) => { let context = new OfflineAudioContext(1, testDurationFrames, sampleRate); @@ -298,14 +353,14 @@ g.gain.setValueCurveAtTime(Float32Array.from([]), time, 0.01); }, 'setValueCurveAtTime([], ' + time + ', 0.01)') - .throw('InvalidStateError'); + .throw(DOMException, 'InvalidStateError'); should( () => { g.gain.setValueCurveAtTime(Float32Array.from([1]), time, 0.01); }, 'setValueCurveAtTime([1], ' + time + ', 0.01)') - .throw('InvalidStateError'); + .throw(DOMException, 'InvalidStateError'); should(() => { g.gain.setValueCurveAtTime(Float32Array.from([1, 2]), time, 0.01); diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/automation-rate.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/automation-rate.html index a3c789e2f2c..a3c11994bbe 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/automation-rate.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/automation-rate.html @@ -151,7 +151,7 @@ if (param.isFixed) { should(() => audioParam.automationRate = newRate, setMessage) - .throw('InvalidStateError'); + .throw(DOMException, 'InvalidStateError'); } else { should(() => audioParam.automationRate = newRate, setMessage) diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/event-insertion.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/event-insertion.html index eab77c494d1..688d0478235 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/event-insertion.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/event-insertion.html @@ -30,8 +30,8 @@ // An array of tests to be done. Each entry specifies the event // type and the event time. The events are inserted in the order - // given (in |values|), and the second event should replace the - // first, as required by the spec. + // given (in |values|), and the second event should be inserted + // after the first one, as required by the spec. let testCases = [ { event: 'setValueAtTime', @@ -57,7 +57,7 @@ { event: 'setValueCurveAtTime', frame: 3 * RENDER_QUANTUM_FRAMES, - values: [[98, 99], [3, 4]], + values: [[3, 4]], extraArgs: RENDER_QUANTUM_FRAMES / context.sampleRate, outputTestFrame: 4 * RENDER_QUANTUM_FRAMES, expectedOutputValue: 4 diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-construction.https.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-construction.https.html index 7cfd423c071..8b7704a781b 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-construction.https.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-construction.https.html @@ -23,7 +23,7 @@ (task, should) => { should(() => new AudioWorkletNode(realtimeContext, 'dummy'), 'Creating a node before loading a module should throw.') - .throw('InvalidStateError'); + .throw(DOMException, 'InvalidStateError'); task.done(); }); diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-constructor-options.https.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-constructor-options.https.html index 31e204cdc8d..cee9ec82c20 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-constructor-options.https.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-constructor-options.https.html @@ -90,13 +90,13 @@ should( () => new AudioWorkletNode(context, 'dummy', options2), 'Creating AudioWorkletNode with channelCount 0') - .throw('NotSupportedError'); + .throw(DOMException, 'NotSupportedError'); const options3 = {channelCount: 33}; should( () => new AudioWorkletNode(context, 'dummy', options3), 'Creating AudioWorkletNode with channelCount 33') - .throw('NotSupportedError'); + .throw(DOMException, 'NotSupportedError'); task.done(); }); diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-basic.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-basic.html index 83f53aafb19..441e98a2511 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-basic.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-basic.html @@ -110,7 +110,7 @@ 'new Float32Array(10), ' + 'new Float32Array(1), ' + 'new Float32Array(20))') - .throw('InvalidAccessError'); + .throw(DOMException, 'InvalidAccessError'); should( function() { @@ -123,7 +123,7 @@ 'new Float32Array(10), ' + 'new Float32Array(20), ' + 'new Float32Array(1))') - .throw('InvalidAccessError'); + .throw(DOMException, 'InvalidAccessError'); task.done(); }); diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-channelmergernode-interface/audiochannelmerger-basic.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-channelmergernode-interface/audiochannelmerger-basic.html index f967f0699a3..71a62f176f8 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-channelmergernode-interface/audiochannelmerger-basic.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-channelmergernode-interface/audiochannelmerger-basic.html @@ -24,7 +24,7 @@ should(function() { merger = context.createChannelMerger(0); - }, 'context.createChannelMerger(0)').throw('IndexSizeError'); + }, 'context.createChannelMerger(0)').throw(DOMException, 'IndexSizeError'); should(function() { merger = context.createChannelMerger(32); @@ -34,7 +34,7 @@ // context has a 32-channel-limit in Chrome. should(function() { merger = context.createChannelMerger(33); - }, 'context.createChannelMerger(33)').throw('IndexSizeError'); + }, 'context.createChannelMerger(33)').throw(DOMException, 'IndexSizeError'); task.done(); }); @@ -49,14 +49,14 @@ should(function() { merger.channelCount = 3; - }, 'merger.channelCount = 3').throw('InvalidStateError'); + }, 'merger.channelCount = 3').throw(DOMException, 'InvalidStateError'); should(merger.channelCountMode, 'merger.channelCountMode') .beEqualTo('explicit'); should(function() { merger.channelCountMode = 'max'; - }, 'merger.channelCountMode = "max"').throw('InvalidStateError'); + }, 'merger.channelCountMode = "max"').throw(DOMException, 'InvalidStateError'); task.done(); }); diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-channelmergernode-interface/ctor-channelmerger.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-channelmergernode-interface/ctor-channelmerger.html index 115bd994349..0d6b45c56df 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-channelmergernode-interface/ctor-channelmerger.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-channelmergernode-interface/ctor-channelmerger.html @@ -43,12 +43,15 @@ audit.define('test AudioNodeOptions', (task, should) => { testAudioNodeOptions(should, context, 'ChannelMergerNode', { - channelCount: - {value: 1, isFixed: true, errorType: 'InvalidStateError'}, + channelCount: { + value: 1, + isFixed: true, + exceptionType: 'InvalidStateError' + }, channelCountMode: { value: 'explicit', isFixed: true, - errorType: 'InvalidStateError' + exceptionType: 'InvalidStateError' } }); task.done(); @@ -82,7 +85,7 @@ node = new ChannelMergerNode(context, options); }, 'new ChannelMergerNode(c, ' + JSON.stringify(options) + ')') - .throw('IndexSizeError'); + .throw(DOMException, 'IndexSizeError'); options = {channelCount: 3}; should( @@ -90,7 +93,7 @@ node = new ChannelMergerNode(context, options); }, 'new ChannelMergerNode(c, ' + JSON.stringify(options) + ')') - .throw('InvalidStateError'); + .throw(DOMException, 'InvalidStateError'); options = {channelCountMode: 'max'}; should( @@ -98,7 +101,7 @@ node = new ChannelMergerNode(context, options); }, 'new ChannelMergerNode(c, ' + JSON.stringify(options) + ')') - .throw('InvalidStateError'); + .throw(DOMException, 'InvalidStateError'); task.done(); }); diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-channelsplitternode-interface/audiochannelsplitter.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-channelsplitternode-interface/audiochannelsplitter.html index e0449919ad5..954c71a96b2 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-channelsplitternode-interface/audiochannelsplitter.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-channelsplitternode-interface/audiochannelsplitter.html @@ -75,11 +75,11 @@ Tests that AudioChannelSplitter works correctly. let splitternode; should(() => { let splitternode = context.createChannelSplitter(0); - }, 'createChannelSplitter(0)').throw('IndexSizeError'); + }, 'createChannelSplitter(0)').throw(DOMException, 'IndexSizeError'); should(() => { splitternode = context.createChannelSplitter(33); - }, 'createChannelSplitter(33)').throw('IndexSizeError'); + }, 'createChannelSplitter(33)').throw(DOMException, 'IndexSizeError'); should(() => { splitternode = context.createChannelSplitter(32); diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-channelsplitternode-interface/ctor-channelsplitter.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-channelsplitternode-interface/ctor-channelsplitter.html index 7fa9d6fa546..9cbb46b6d96 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-channelsplitternode-interface/ctor-channelsplitter.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-channelsplitternode-interface/ctor-channelsplitter.html @@ -41,8 +41,11 @@ audit.define('test AudioNodeOptions', (task, should) => { testAudioNodeOptions(should, context, 'ChannelSplitterNode', { - channelCount: - {value: 6, isFixed: true, errorType: 'InvalidStateError'}, + channelCount: { + value: 6, + isFixed: true, + exceptionType: 'InvalidStateError' + }, channelCountMode: { value: 'explicit', isFixed: true, @@ -50,7 +53,7 @@ channelInterpretation: { value: 'discrete', isFixed: true, - errorType: 'InvalidStateError' + exceptionType: 'InvalidStateError' }, }); task.done(); @@ -84,7 +87,7 @@ node = new ChannelSplitterNode(context, options); }, 'new ChannelSplitterNode(c, ' + JSON.stringify(options) + ')') - .throw('IndexSizeError'); + .throw(DOMException, 'IndexSizeError'); options = {channelCount: 3}; should( @@ -92,7 +95,7 @@ node = new ChannelSplitterNode(context, options); }, 'new ChannelSplitterNode(c, ' + JSON.stringify(options) + ')') - .throw('InvalidStateError'); + .throw(DOMException, 'InvalidStateError'); options = {channelCountMode: 'max'}; should( @@ -100,7 +103,7 @@ node = new ChannelSplitterNode(context, options); }, 'new ChannelSplitterNode(c, ' + JSON.stringify(options) + ')') - .throw('InvalidStateError'); + .throw(DOMException, 'InvalidStateError'); task.done(); }); diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/convolver-channels.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/convolver-channels.html index 11d6f332a1b..ac4f198d7c1 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/convolver-channels.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/convolver-channels.html @@ -30,7 +30,7 @@ should(() => convolver.buffer = buffer, message).notThrow(); } else { should(() => convolver.buffer = buffer, message) - .throw('NotSupportedError'); + .throw(DOMException, 'NotSupportedError'); } } diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-already-has-value.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-already-has-value.html index 31f115da532..c8dbeb941bc 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-already-has-value.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-already-has-value.html @@ -27,7 +27,7 @@ should(() => { convolver.buffer = audioBuffer; - }, 'Set buffer a second time').throw('InvalidStateError'); + }, 'Set buffer a second time').throw(DOMException, 'InvalidStateError'); should(() => { convolver.buffer = null; @@ -40,7 +40,7 @@ should(() => { convolver.buffer = audioBuffer; }, 'Set buffer to non-null to verify to throw an error') - .throw('InvalidStateError'); + .throw(DOMException, 'InvalidStateError'); task.done(); }); diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/ctor-convolver.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/ctor-convolver.html index cf818330060..935ceeb715e 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/ctor-convolver.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/ctor-convolver.html @@ -46,12 +46,15 @@ audit.define('test AudioNodeOptions', (task, should) => { testAudioNodeOptions(should, context, 'ConvolverNode', { - channelCount: - {value: 2, isFixed: true, errorType: 'NotSupportedError'}, + channelCount: { + value: 2, + isFixed: true, + exceptionType: 'NotSupportedError' + }, channelCountMode: { value: 'clamped-max', isFixed: true, - errorType: 'NotSupportedError' + exceptionType: 'NotSupportedError' }, }); task.done(); diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-delaynode-interface/delaynode-maxdelaylimit.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-delaynode-interface/delaynode-maxdelaylimit.html index 7bbff410650..caf2f85dfd4 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-delaynode-interface/delaynode-maxdelaylimit.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-delaynode-interface/delaynode-maxdelaylimit.html @@ -32,14 +32,18 @@ bufferSource.buffer = toneBuffer; window.context = context; - should(() => context.createDelay(180)).throw("NotSupportedError", - "Delay length cannot be 180 seconds or more"); - should(() => context.createDelay(0)).throw("NotSupportedError", - "Delay length cannot be 0"); - should(() => context.createDelay(-1)).throw("NotSupportedError", - "Delay length cannot be negative"); - should(() => context.createDelay(NaN)).throw(TypeError, - "Delay length cannot be a NaN"); + should(() => context.createDelay(180), + 'Setting Delay length to 180 seconds or more') + .throw(DOMException, 'NotSupportedError'); + should(() => context.createDelay(0), + 'Setting Delay length to 0 seconds') + .throw(DOMException, 'NotSupportedError'); + should(() => context.createDelay(-1), + 'Setting Delay length to negative') + .throw(DOMException, 'NotSupportedError'); + should(() => context.createDelay(NaN), + 'Setting Delay length to NaN') + .throw(TypeError); let delay = context.createDelay(179); delay.delayTime.value = delayTimeSeconds; diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-dynamicscompressornode-interface/ctor-dynamicscompressor.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-dynamicscompressornode-interface/ctor-dynamicscompressor.html index 98d5dbfded1..c2460dfa1dd 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-dynamicscompressornode-interface/ctor-dynamicscompressor.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-dynamicscompressornode-interface/ctor-dynamicscompressor.html @@ -182,9 +182,12 @@ let message = 'new DynamicsCompressorNode(c, ' + JSON.stringify(options.nodeOptions) + ')'; - if (options.expectedErrorType) { + if (options.expectedErrorType === TypeError) { should(createNodeFunction(), message) .throw(options.expectedErrorType); + } else if (options.expectedErrorType === 'NotSupportedError') { + should(createNodeFunction(), message) + .throw(DOMException, 'NotSupportedError'); } else { should(createNodeFunction(), message).notThrow(); should(node[options.testAttribute], 'node.' + options.testAttribute) diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-iirfilternode-interface/iirfilter-basic.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-iirfilternode-interface/iirfilter-basic.html index 79c40dc0847..7828f052261 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-iirfilternode-interface/iirfilter-basic.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-iirfilternode-interface/iirfilter-basic.html @@ -66,17 +66,17 @@ should(function() { // There has to be at least one coefficient. context.createIIRFilter([], []); - }, 'createIIRFilter([], [])').throw('NotSupportedError'); + }, 'createIIRFilter([], [])').throw(DOMException, 'NotSupportedError'); should(function() { // There has to be at least one coefficient. context.createIIRFilter([1], []); - }, 'createIIRFilter([1], [])').throw('NotSupportedError'); + }, 'createIIRFilter([1], [])').throw(DOMException, 'NotSupportedError'); should(function() { // There has to be at least one coefficient. context.createIIRFilter([], [1]); - }, 'createIIRFilter([], [1])').throw('NotSupportedError'); + }, 'createIIRFilter([], [1])').throw(DOMException, 'NotSupportedError'); should( function() { @@ -96,7 +96,7 @@ context.createIIRFilter(coef, [1]); }, 'createIIRFilter(new Float32Array(21), [1])') - .throw('NotSupportedError'); + .throw(DOMException, 'NotSupportedError'); should( function() { @@ -106,7 +106,7 @@ context.createIIRFilter([1], coef); }, 'createIIRFilter([1], new Float32Array(21))') - .throw('NotSupportedError'); + .throw(DOMException, 'NotSupportedError'); should( function() { @@ -114,7 +114,7 @@ context.createIIRFilter([1], new Float32Array(2)); }, 'createIIRFilter([1], new Float32Array(2))') - .throw('InvalidStateError'); + .throw(DOMException, 'InvalidStateError'); should( function() { @@ -122,7 +122,7 @@ context.createIIRFilter(new Float32Array(10), [1]); }, 'createIIRFilter(new Float32Array(10), [1])') - .throw('InvalidStateError'); + .throw(DOMException, 'InvalidStateError'); should(function() { // Feedback coefficients must be finite. @@ -183,7 +183,7 @@ new Float32Array(20)); }, 'getFrequencyResponse(new Float32Array(10), new Float32Array(1), new Float32Array(20))') - .throw('InvalidAccessError'); + .throw(DOMException, 'InvalidAccessError'); should( function() { @@ -193,7 +193,7 @@ new Float32Array(1)); }, 'getFrequencyResponse(new Float32Array(10), new Float32Array(20), new Float32Array(1))') - .throw('InvalidAccessError'); + .throw(DOMException, 'InvalidAccessError'); task.done(); }); diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-offlineaudiocontext-interface/ctor-offlineaudiocontext.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-offlineaudiocontext-interface/ctor-offlineaudiocontext.html index f480ec8ce51..4b686310362 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-offlineaudiocontext-interface/ctor-offlineaudiocontext.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-offlineaudiocontext-interface/ctor-offlineaudiocontext.html @@ -129,7 +129,7 @@ new OfflineAudioContext(options); }, 'new OfflineAudioContext(' + JSON.stringify(options) + ')') - .throw('NotSupportedError'); + .throw(DOMException, 'NotSupportedError'); // length cannot be 0 options = {length: 0, sampleRate: 8000}; @@ -138,7 +138,7 @@ new OfflineAudioContext(options); }, 'new OfflineAudioContext(' + JSON.stringify(options) + ')') - .throw('NotSupportedError'); + .throw(DOMException, 'NotSupportedError'); // sampleRate outside valid range options = {length: 1, sampleRate: 1}; @@ -147,7 +147,7 @@ new OfflineAudioContext(options); }, 'new OfflineAudioContext(' + JSON.stringify(options) + ')') - .throw('NotSupportedError'); + .throw(DOMException, 'NotSupportedError'); task.done(); }); diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-oscillatornode-interface/ctor-oscillator.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-oscillatornode-interface/ctor-oscillator.html index aaf77aec555..36bf604b296 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-oscillatornode-interface/ctor-oscillator.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-oscillatornode-interface/ctor-oscillator.html @@ -87,7 +87,7 @@ node = new OscillatorNode(context, options); }, 'new OscillatorNode(c, ' + JSON.stringify(options) + ')') - .throw('InvalidStateError'); + .throw(DOMException, 'InvalidStateError'); options = { type: 'custom', 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 95e914a75f6..98a171ad059 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 @@ -107,7 +107,7 @@ node = new PannerNode(context, options); }, 'new PannerNode(c, ' + JSON.stringify(options) + ')') - .throw('NotSupportedError'); + .throw(DOMException, 'NotSupportedError'); options = {channelCount: 3}; should( @@ -115,7 +115,7 @@ node = new PannerNode(context, options); }, 'new PannerNode(c, ' + JSON.stringify(options) + ')') - .throw('NotSupportedError'); + .throw(DOMException, 'NotSupportedError'); options = {channelCount: 99}; should( @@ -123,7 +123,7 @@ node = new PannerNode(context, options); }, 'new PannerNode(c, ' + JSON.stringify(options) + ')') - .throw('NotSupportedError'); + .throw(DOMException, 'NotSupportedError'); // Test channelCountMode. A mode of "max" is illegal, but others are // ok. @@ -153,7 +153,7 @@ node = new PannerNode(context, options); }, 'new PannerNode(c, ' + JSON.stringify(options) + ')') - .throw('NotSupportedError'); + .throw(DOMException, 'NotSupportedError'); options = {channelCountMode: 'foobar'}; should( @@ -192,67 +192,6 @@ 'new PannerNode(c, ' + JSON.stringify(options) + ')') .throw(TypeError); - // Test maxDistance - options = {maxDistance: -1}; - should( - () => { - node = new PannerNode(context, options); - }, - 'new PannerNode(c, ' + JSON.stringify(options) + ')') - .throw(RangeError); - options = {maxDistance: 100}; - should( - () => { - node = new PannerNode(context, options); - }, - 'node7 = new PannerNode(c, ' + JSON.stringify(options) + ')') - .notThrow(); - should(node.maxDistance, 'node7.maxDistance') - .beEqualTo(options.maxDistance); - - // Test rolloffFactor - options = {rolloffFactor: -1}; - should( - () => { - node = new PannerNode(context, options); - }, - 'new PannerNode(c, ' + JSON.stringify(options) + ')') - .throw(RangeError); - options = {rolloffFactor: 0.5}; - should( - () => { - node = new PannerNode(context, options); - }, - 'node8 = new PannerNode(c, ' + JSON.stringify(options) + ')') - .notThrow(); - should(node.rolloffFactor, 'node8.rolloffFactor') - .beEqualTo(options.rolloffFactor); - - // Test coneOuterGain - options = {coneOuterGain: -1}; - should( - () => { - node = new PannerNode(context, options); - }, - 'new PannerNode(c, ' + JSON.stringify(options) + ')') - .throw('InvalidStateError'); - options = {coneOuterGain: 1.1}; - should( - () => { - node = new PannerNode(context, options); - }, - 'new PannerNode(c, ' + JSON.stringify(options) + ')') - .throw('InvalidStateError'); - options = {coneOuterGain: 0.5}; - should( - () => { - node = new PannerNode(context, options); - }, - 'node9 = new PannerNode(c, ' + JSON.stringify(options) + ')') - .notThrow(); - should(node.coneOuterGain, 'node9.coneOuterGain') - .beEqualTo(options.coneOuterGain); - task.done(); }); @@ -279,7 +218,7 @@ rolloffFactor: 3 * Math.PI, coneInnerAngle: 4 * Math.PI, coneOuterAngle: 5 * Math.PI, - coneOuterGain: 0.1 * Math.PI + coneOuterGain: 6 * Math.PI }; should( diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-stereopanner-interface/ctor-stereopanner.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-stereopanner-interface/ctor-stereopanner.html index caa99aa4031..9409f1ffce2 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-stereopanner-interface/ctor-stereopanner.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-stereopanner-interface/ctor-stereopanner.html @@ -80,17 +80,23 @@ entry.tests.forEach(testItem => { let options = {}; options[entry.attribute] = testItem.value; - let method = testItem.error ? 'throw' : 'notThrow'; - - should( - () => { - node = new StereoPannerNode(context, options); - }, - `new StereoPannerNode(c, ${JSON.stringify(options)})`)[method]( - testItem.error); - if (!testItem.error) + + const testFunction = () => { + node = new StereoPannerNode(context, options); + }; + const testDescription = + `new StereoPannerNode(c, ${JSON.stringify(options)})`; + + if (testItem.error) { + testItem.error === TypeError + ? should(testFunction, testDescription).throw(TypeError) + : should(testFunction, testDescription) + .throw(DOMException, 'NotSupportedError'); + } else { + should(testFunction, testDescription).notThrow(); should(node[entry.attribute], `node.${entry.attribute}`) .beEqualTo(options[entry.attribute]); + } }); }); diff --git a/tests/wpt/web-platform-tests/webdriver/tests/execute_script/execute.py b/tests/wpt/web-platform-tests/webdriver/tests/execute_script/execute.py index 9e220d02687..2af16c1e5e8 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/execute_script/execute.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/execute_script/execute.py @@ -27,6 +27,11 @@ def test_no_browsing_context(session, closed_window): assert_error(response, "no such window") +def test_ending_comment(session): + response = execute_script(session, "return 1; // foo") + assert_success(response, 1) + + @pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"]) def test_abort_by_user_prompt(session, dialog_type): response = execute_script( diff --git a/tests/wpt/web-platform-tests/webdriver/tests/get_element_attribute/__init__.py b/tests/wpt/web-platform-tests/webdriver/tests/get_element_attribute/__init__.py new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/webdriver/tests/get_element_attribute/__init__.py diff --git a/tests/wpt/web-platform-tests/webdriver/tests/get_element_css_value/__init__.py b/tests/wpt/web-platform-tests/webdriver/tests/get_element_css_value/__init__.py new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/webdriver/tests/get_element_css_value/__init__.py diff --git a/tests/wpt/web-platform-tests/webdriver/tests/get_element_css_value/get.py b/tests/wpt/web-platform-tests/webdriver/tests/get_element_css_value/get.py new file mode 100644 index 00000000000..88a56e1ad45 --- /dev/null +++ b/tests/wpt/web-platform-tests/webdriver/tests/get_element_css_value/get.py @@ -0,0 +1,48 @@ +from tests.support.asserts import assert_error, assert_success +from tests.support.inline import inline + + +def get_element_css_value(session, element_id, prop): + return session.transport.send( + "GET", + "session/{session_id}/element/{element_id}/css/{prop}".format( + session_id=session.session_id, + element_id=element_id, + prop=prop + ) + ) + + +def test_no_browsing_context(session, closed_window): + response = get_element_css_value(session, "foo", "bar") + assert_error(response, "no such window") + + +def test_element_not_found(session): + result = get_element_css_value(session, "foo", "display") + assert_error(result, "no such element") + + +def test_element_stale(session): + session.url = inline("<input>") + element = session.find.css("input", all=False) + session.refresh() + + result = get_element_css_value(session, element.id, "display") + assert_error(result, "stale element reference") + + +def test_property_name_value(session): + session.url = inline("""<input style="display: block">""") + element = session.find.css("input", all=False) + + result = get_element_css_value(session, element.id, "display") + assert_success(result, "block") + + +def test_property_name_not_existent(session): + session.url = inline("<input>") + element = session.find.css("input", all=False) + + result = get_element_css_value(session, element.id, "foo") + assert_success(result, "") diff --git a/tests/wpt/web-platform-tests/webdriver/tests/get_element_css_value/user_prompts.py b/tests/wpt/web-platform-tests/webdriver/tests/get_element_css_value/user_prompts.py new file mode 100644 index 00000000000..529b6ae9183 --- /dev/null +++ b/tests/wpt/web-platform-tests/webdriver/tests/get_element_css_value/user_prompts.py @@ -0,0 +1,121 @@ +# META: timeout=long + +import pytest + +from tests.support.asserts import assert_error, assert_success, assert_dialog_handled +from tests.support.inline import inline + + +def get_element_css_value(session, element_id, prop): + return session.transport.send( + "GET", + "session/{session_id}/element/{element_id}/css/{prop}".format( + session_id=session.session_id, + element_id=element_id, + prop=prop + ) + ) + + +@pytest.fixture +def check_user_prompt_closed_without_exception(session, create_dialog): + def check_user_prompt_closed_without_exception(dialog_type, retval): + session.url = inline("""<input style="display: block">""") + element = session.find.css("input", all=False) + + create_dialog(dialog_type, text=dialog_type) + + response = get_element_css_value(session, element.id, "display") + assert_success(response, "block") + + assert_dialog_handled(session, expected_text=dialog_type, expected_retval=retval) + + return check_user_prompt_closed_without_exception + + +@pytest.fixture +def check_user_prompt_closed_with_exception(session, create_dialog): + def check_user_prompt_closed_with_exception(dialog_type, retval): + session.url = inline("""<input style="display: block">""") + element = session.find.css("input", all=False) + + create_dialog(dialog_type, text=dialog_type) + + response = get_element_css_value(session, element.id, "display") + assert_error(response, "unexpected alert open") + + assert_dialog_handled(session, expected_text=dialog_type, expected_retval=retval) + + return check_user_prompt_closed_with_exception + + +@pytest.fixture +def check_user_prompt_not_closed_but_exception(session, create_dialog): + def check_user_prompt_not_closed_but_exception(dialog_type): + session.url = inline("""<input style="display: block">""") + element = session.find.css("input", all=False) + + create_dialog(dialog_type, text=dialog_type) + + response = get_element_css_value(session, element.id, "display") + assert_error(response, "unexpected alert open") + + assert session.alert.text == dialog_type + session.alert.dismiss() + + return check_user_prompt_not_closed_but_exception + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "accept"}) +@pytest.mark.parametrize("dialog_type, retval", [ + ("alert", None), + ("confirm", True), + ("prompt", ""), +]) +def test_accept(check_user_prompt_closed_without_exception, dialog_type, retval): + check_user_prompt_closed_without_exception(dialog_type, retval) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "accept and notify"}) +@pytest.mark.parametrize("dialog_type, retval", [ + ("alert", None), + ("confirm", True), + ("prompt", ""), +]) +def test_accept_and_notify(check_user_prompt_closed_with_exception, dialog_type, retval): + check_user_prompt_closed_with_exception(dialog_type, retval) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss"}) +@pytest.mark.parametrize("dialog_type, retval", [ + ("alert", None), + ("confirm", False), + ("prompt", None), +]) +def test_dismiss(check_user_prompt_closed_without_exception, dialog_type, retval): + check_user_prompt_closed_without_exception(dialog_type, retval) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss and notify"}) +@pytest.mark.parametrize("dialog_type, retval", [ + ("alert", None), + ("confirm", False), + ("prompt", None), +]) +def test_dismiss_and_notify(check_user_prompt_closed_with_exception, dialog_type, retval): + check_user_prompt_closed_with_exception(dialog_type, retval) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "ignore"}) +@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"]) +def test_ignore(check_user_prompt_not_closed_but_exception, dialog_type): + check_user_prompt_not_closed_but_exception(dialog_type) + + +@pytest.mark.parametrize("dialog_type, retval", [ + ("alert", None), + ("confirm", False), + ("prompt", None), +]) +def test_default(check_user_prompt_closed_with_exception, dialog_type, retval): + check_user_prompt_closed_with_exception(dialog_type, retval) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/get_element_rect/__init__.py b/tests/wpt/web-platform-tests/webdriver/tests/get_element_rect/__init__.py new file mode 100644 index 00000000000..abf1a913675 --- /dev/null +++ b/tests/wpt/web-platform-tests/webdriver/tests/get_element_rect/__init__.py @@ -0,0 +1,10 @@ +def retrieve_element_rect(session, element): + return session.execute_script(""" + let rect = arguments[0].getBoundingClientRect(); + return { + x: rect.left + window.pageXOffset, + y: rect.top + window.pageYOffset, + width: rect.width, + height: rect.height, + }; + """, args=(element,)) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/get_element_rect/get.py b/tests/wpt/web-platform-tests/webdriver/tests/get_element_rect/get.py new file mode 100644 index 00000000000..433e2f6bf8b --- /dev/null +++ b/tests/wpt/web-platform-tests/webdriver/tests/get_element_rect/get.py @@ -0,0 +1,41 @@ +from tests.support.asserts import assert_error, assert_success +from tests.support.inline import inline + +from . import retrieve_element_rect + + +def get_element_rect(session, element_id): + return session.transport.send( + "GET", + "session/{session_id}/element/{element_id}/rect".format( + session_id=session.session_id, + element_id=element_id, + ) + ) + + +def test_no_browsing_context(session, closed_window): + response = get_element_rect(session, "foo") + assert_error(response, "no such window") + + +def test_element_not_found(session): + result = get_element_rect(session, "foo") + assert_error(result, "no such element") + + +def test_element_stale(session): + session.url = inline("<input>") + element = session.find.css("input", all=False) + session.refresh() + + result = get_element_rect(session, element.id) + assert_error(result, "stale element reference") + + +def test_basic(session): + session.url = inline("<input>") + element = session.find.css("input", all=False) + + result = get_element_rect(session, element.id) + assert_success(result, retrieve_element_rect(session, element)) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/get_element_rect/user_prompts.py b/tests/wpt/web-platform-tests/webdriver/tests/get_element_rect/user_prompts.py new file mode 100644 index 00000000000..ec1047bd389 --- /dev/null +++ b/tests/wpt/web-platform-tests/webdriver/tests/get_element_rect/user_prompts.py @@ -0,0 +1,122 @@ +# META: timeout=long + +import pytest + +from tests.support.asserts import assert_error, assert_success, assert_dialog_handled +from tests.support.inline import inline + +from . import retrieve_element_rect + + +def get_element_rect(session, element_id): + return session.transport.send( + "GET", + "session/{session_id}/element/{element_id}/rect".format( + session_id=session.session_id, + element_id=element_id, + ) + ) + + +@pytest.fixture +def check_user_prompt_closed_without_exception(session, create_dialog): + def check_user_prompt_closed_without_exception(dialog_type, retval): + session.url = inline("<input>") + element = session.find.css("input", all=False) + + create_dialog(dialog_type, text=dialog_type) + + response = get_element_rect(session, element.id) + assert_success(response, retrieve_element_rect(session, element)) + + assert_dialog_handled(session, expected_text=dialog_type, expected_retval=retval) + + return check_user_prompt_closed_without_exception + + +@pytest.fixture +def check_user_prompt_closed_with_exception(session, create_dialog): + def check_user_prompt_closed_with_exception(dialog_type, retval): + session.url = inline("<input>") + element = session.find.css("input", all=False) + + create_dialog(dialog_type, text=dialog_type) + + response = get_element_rect(session, element.id) + assert_error(response, "unexpected alert open") + + assert_dialog_handled(session, expected_text=dialog_type, expected_retval=retval) + + return check_user_prompt_closed_with_exception + + +@pytest.fixture +def check_user_prompt_not_closed_but_exception(session, create_dialog): + def check_user_prompt_not_closed_but_exception(dialog_type): + session.url = inline("<input>") + element = session.find.css("input", all=False) + + create_dialog(dialog_type, text=dialog_type) + + response = get_element_rect(session, element.id) + assert_error(response, "unexpected alert open") + + assert session.alert.text == dialog_type + session.alert.dismiss() + + return check_user_prompt_not_closed_but_exception + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "accept"}) +@pytest.mark.parametrize("dialog_type, retval", [ + ("alert", None), + ("confirm", True), + ("prompt", ""), +]) +def test_accept(check_user_prompt_closed_without_exception, dialog_type, retval): + check_user_prompt_closed_without_exception(dialog_type, retval) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "accept and notify"}) +@pytest.mark.parametrize("dialog_type, retval", [ + ("alert", None), + ("confirm", True), + ("prompt", ""), +]) +def test_accept_and_notify(check_user_prompt_closed_with_exception, dialog_type, retval): + check_user_prompt_closed_with_exception(dialog_type, retval) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss"}) +@pytest.mark.parametrize("dialog_type, retval", [ + ("alert", None), + ("confirm", False), + ("prompt", None), +]) +def test_dismiss(check_user_prompt_closed_without_exception, dialog_type, retval): + check_user_prompt_closed_without_exception(dialog_type, retval) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss and notify"}) +@pytest.mark.parametrize("dialog_type, retval", [ + ("alert", None), + ("confirm", False), + ("prompt", None), +]) +def test_dismiss_and_notify(check_user_prompt_closed_with_exception, dialog_type, retval): + check_user_prompt_closed_with_exception(dialog_type, retval) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "ignore"}) +@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"]) +def test_ignore(check_user_prompt_not_closed_but_exception, dialog_type): + check_user_prompt_not_closed_but_exception(dialog_type) + + +@pytest.mark.parametrize("dialog_type, retval", [ + ("alert", None), + ("confirm", False), + ("prompt", None), +]) +def test_default(check_user_prompt_closed_with_exception, dialog_type, retval): + check_user_prompt_closed_with_exception(dialog_type, retval) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/is_element_enabled/__init__.py b/tests/wpt/web-platform-tests/webdriver/tests/is_element_enabled/__init__.py new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/webdriver/tests/is_element_enabled/__init__.py diff --git a/tests/wpt/web-platform-tests/webdriver/tests/is_element_enabled/enabled.py b/tests/wpt/web-platform-tests/webdriver/tests/is_element_enabled/enabled.py new file mode 100644 index 00000000000..dd56084d8d0 --- /dev/null +++ b/tests/wpt/web-platform-tests/webdriver/tests/is_element_enabled/enabled.py @@ -0,0 +1,109 @@ +import pytest + +from tests.support.asserts import assert_error, assert_success +from tests.support.inline import inline + + +def is_element_enabled(session, element_id): + return session.transport.send( + "GET", + "session/{session_id}/element/{element_id}/enabled".format( + session_id=session.session_id, + element_id=element_id + ) + ) + + +def test_no_browsing_context(session, closed_window): + response = is_element_enabled(session, "foo") + assert_error(response, "no such window") + + +def test_element_stale(session): + session.url = inline("<input>") + element = session.find.css("input", all=False) + session.refresh() + + result = is_element_enabled(session, element.id) + assert_error(result, "stale element reference") + + +@pytest.mark.parametrize("element", ["button", "input", "select", "textarea"]) +def test_form_control_disabled(session, element): + session.url = inline("<{} disabled/>".format(element)) + element = session.find.css(element, all=False) + + result = is_element_enabled(session, element.id) + assert_success(result, False) + + +@pytest.mark.parametrize("element", ["button", "input", "select", "textarea"]) +def test_form_control_enabled(session, element): + session.url = inline("<{}/>".format(element)) + element = session.find.css(element, all=False) + + result = is_element_enabled(session, element.id) + assert_success(result, True) + + +@pytest.mark.parametrize("element", ["button", "input", "select", "textarea"]) +def test_fieldset_disabled_descendant(session, element): + session.url = inline("<fieldset disabled><{}/></fieldset>".format(element)) + element = session.find.css(element, all=False) + + result = is_element_enabled(session, element.id) + assert_success(result, False) + + +@pytest.mark.parametrize("element", ["button", "input", "select", "textarea"]) +def test_fieldset_enabled_descendant(session, element): + session.url = inline("<fieldset><{}/></fieldset>".format(element)) + element = session.find.css(element, all=False) + + result = is_element_enabled(session, element.id) + assert_success(result, True) + + +@pytest.mark.parametrize("element", ["button", "input", "select", "textarea"]) +def test_fieldset_disabled_descendant_legend(session, element): + session.url = inline("<fieldset disabled><legend><{}/></legend></fieldset>".format(element)) + element = session.find.css(element, all=False) + + result = is_element_enabled(session, element.id) + assert_success(result, True) + + +@pytest.mark.parametrize("element", ["button", "input", "select", "textarea"]) +def test_fieldset_enabled_descendant_legend(session, element): + session.url = inline("<fieldset><legend><{}/></legend></fieldset>".format(element)) + element = session.find.css(element, all=False) + + result = is_element_enabled(session, element.id) + assert_success(result, True) + + +@pytest.mark.parametrize("element", ["button", "input", "select", "textarea"]) +def test_xhtml_form_control_disabled(session, element): + session.url = inline("""<{} disabled="disabled"/>""".format(element), + doctype="xhtml") + element = session.find.css(element, all=False) + + result = is_element_enabled(session, element.id) + assert_success(result, False) + + +@pytest.mark.parametrize("element", ["button", "input", "select", "textarea"]) +def test_xhtml_form_control_enabled(session, element): + session.url = inline("""<{}/>""".format(element), doctype="xhtml") + element = session.find.css(element, all=False) + + result = is_element_enabled(session, element.id) + assert_success(result, True) + + +def test_xml_always_not_enabled(session): + session.url = inline("""<note></note>""", doctype="xml") + element = session.find.css("note", all=False) + + result = is_element_enabled(session, element.id) + assert_success(result, False) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/is_element_enabled/user_prompts.py b/tests/wpt/web-platform-tests/webdriver/tests/is_element_enabled/user_prompts.py new file mode 100644 index 00000000000..bd8bc81bdfc --- /dev/null +++ b/tests/wpt/web-platform-tests/webdriver/tests/is_element_enabled/user_prompts.py @@ -0,0 +1,120 @@ +# META: timeout=long + +import pytest + +from tests.support.asserts import assert_error, assert_dialog_handled, assert_success +from tests.support.inline import inline + + +def is_element_enabled(session, element_id): + return session.transport.send( + "GET", + "session/{session_id}/element/{element_id}/enabled".format( + session_id=session.session_id, + element_id=element_id + ) + ) + + +@pytest.fixture +def check_user_prompt_closed_without_exception(session, create_dialog): + def check_user_prompt_closed_without_exception(dialog_type, retval): + session.url = inline("<input id=foo disabled>") + element = session.find.css("#foo", all=False) + + create_dialog(dialog_type, text=dialog_type) + + response = is_element_enabled(session, element.id) + assert_success(response, False) + + assert_dialog_handled(session, expected_text=dialog_type, expected_retval=retval) + + return check_user_prompt_closed_without_exception + + +@pytest.fixture +def check_user_prompt_closed_with_exception(session, create_dialog): + def check_user_prompt_closed_with_exception(dialog_type, retval): + session.url = inline("<input id=foo disabled>") + element = session.find.css("#foo", all=False) + + create_dialog(dialog_type, text=dialog_type) + + response = is_element_enabled(session, element.id) + assert_error(response, "unexpected alert open") + + assert_dialog_handled(session, expected_text=dialog_type, expected_retval=retval) + + return check_user_prompt_closed_with_exception + + +@pytest.fixture +def check_user_prompt_not_closed_but_exception(session, create_dialog): + def check_user_prompt_not_closed_but_exception(dialog_type): + session.url = inline("<input id=foo disabled>") + element = session.find.css("#foo", all=False) + + create_dialog(dialog_type, text=dialog_type) + + response = is_element_enabled(session, element.id) + assert_error(response, "unexpected alert open") + + assert session.alert.text == dialog_type + session.alert.dismiss() + + return check_user_prompt_not_closed_but_exception + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "accept"}) +@pytest.mark.parametrize("dialog_type, retval", [ + ("alert", None), + ("confirm", True), + ("prompt", ""), +]) +def test_accept(check_user_prompt_closed_without_exception, dialog_type, retval): + check_user_prompt_closed_without_exception(dialog_type, retval) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "accept and notify"}) +@pytest.mark.parametrize("dialog_type, retval", [ + ("alert", None), + ("confirm", True), + ("prompt", ""), +]) +def test_accept_and_notify(check_user_prompt_closed_with_exception, dialog_type, retval): + check_user_prompt_closed_with_exception(dialog_type, retval) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss"}) +@pytest.mark.parametrize("dialog_type, retval", [ + ("alert", None), + ("confirm", False), + ("prompt", None), +]) +def test_dismiss(check_user_prompt_closed_without_exception, dialog_type, retval): + check_user_prompt_closed_without_exception(dialog_type, retval) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss and notify"}) +@pytest.mark.parametrize("dialog_type, retval", [ + ("alert", None), + ("confirm", False), + ("prompt", None), +]) +def test_dismiss_and_notify(check_user_prompt_closed_with_exception, dialog_type, retval): + check_user_prompt_closed_with_exception(dialog_type, retval) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "ignore"}) +@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"]) +def test_ignore(check_user_prompt_not_closed_but_exception, dialog_type): + check_user_prompt_not_closed_but_exception(dialog_type) + + +@pytest.mark.parametrize("dialog_type, retval", [ + ("alert", None), + ("confirm", False), + ("prompt", None), +]) +def test_default(check_user_prompt_closed_with_exception, dialog_type, retval): + check_user_prompt_closed_with_exception(dialog_type, retval) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/new_session/invalid_capabilities.py b/tests/wpt/web-platform-tests/webdriver/tests/new_session/invalid_capabilities.py index 83f93ea22f7..f31ce3b8b6f 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/new_session/invalid_capabilities.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/new_session/invalid_capabilities.py @@ -1,8 +1,10 @@ import pytest -from tests.support.asserts import assert_error from conftest import product, flatten +from tests.new_session.support.create import invalid_data, invalid_extensions +from tests.support.asserts import assert_error + @pytest.mark.parametrize("value", [None, 1, "{}", []]) def test_invalid_capabilites(new_session, value): @@ -26,29 +28,6 @@ def test_invalid_first_match(new_session, add_browser_capabilities, value): assert_error(response, "invalid argument") -invalid_data = [ - ("acceptInsecureCerts", [1, [], {}, "false"]), - ("browserName", [1, [], {}, False]), - ("browserVersion", [1, [], {}, False]), - ("platformName", [1, [], {}, False]), - ("pageLoadStrategy", [1, [], {}, False, "invalid", "NONE", "Eager", "eagerblah", "interactive", - " eager", "eager "]), - ("proxy", [1, [], "{}", {"proxyType": "SYSTEM"}, {"proxyType": "systemSomething"}, - {"proxy type": "pac"}, {"proxy-Type": "system"}, {"proxy_type": "system"}, - {"proxytype": "system"}, {"PROXYTYPE": "system"}, {"proxyType": None}, - {"proxyType": 1}, {"proxyType": []}, {"proxyType": {"value": "system"}}, - {" proxyType": "system"}, {"proxyType ": "system"}, {"proxyType ": " system"}, - {"proxyType": "system "}]), - ("timeouts", [1, [], "{}", False, {"pageLOAD": 10}, {"page load": 10}, - {"page load": 10}, {"pageLoad": "10"}, {"pageLoad": {"value": 10}}, - {"invalid": 10}, {"pageLoad": -1}, {"pageLoad": 2**64}, - {"pageLoad": None}, {"pageLoad": 1.1}, {"pageLoad": 10, "invalid": 10}, - {" pageLoad": 10}, {"pageLoad ": 10}]), - ("unhandledPromptBehavior", [1, [], {}, False, "DISMISS", "dismissABC", "Accept", - " dismiss", "dismiss "]) -] - - @pytest.mark.parametrize("body", [lambda key, value: {"alwaysMatch": {key: value}}, lambda key, value: {"firstMatch": [{key: value}]}]) @pytest.mark.parametrize("key,value", flatten(product(*item) for item in invalid_data)) @@ -63,31 +42,6 @@ def test_invalid_values(new_session, add_browser_capabilities, body, key, value) assert_error(response, "invalid argument") -invalid_extensions = [ - "firefox", - "firefox_binary", - "firefoxOptions", - "chromeOptions", - "automaticInspection", - "automaticProfiling", - "platform", - "version", - "browser", - "platformVersion", - "javascriptEnabled", - "nativeEvents", - "seleniumProtocol", - "profile", - "trustAllSSLCertificates", - "initialBrowserUrl", - "requireWindowFocus", - "logFile", - "logLevel", - "safari.options", - "ensureCleanSession", -] - - @pytest.mark.parametrize("body", [lambda key, value: {"alwaysMatch": {key: value}}, lambda key, value: {"firstMatch": [{key: value}]}]) @pytest.mark.parametrize("key", invalid_extensions) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/new_session/support/create.py b/tests/wpt/web-platform-tests/webdriver/tests/new_session/support/create.py index 85ae1cd4ea8..475fe5a424f 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/new_session/support/create.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/new_session/support/create.py @@ -1,15 +1,130 @@ # Note that we can only test things here all implementations must support valid_data = [ - ("acceptInsecureCerts", [False, None]), - ("browserName", [None]), - ("browserVersion", [None]), - ("platformName", [None]), - ("pageLoadStrategy", ["none", "eager", "normal", None]), - ("proxy", [None]), - ("timeouts", [{"script": 0, "pageLoad": 2.0, "implicit": 2**53 - 1}, - {"script": 50, "pageLoad": 25}, - {"script": 500}, - {}]), - ("unhandledPromptBehavior", ["dismiss", "accept", None]), - ("test:extension", [True, "abc", 123, [], {"key": "value"}, None]), + ("acceptInsecureCerts", [ + False, None, + ]), + ("browserName", [ + None, + ]), + ("browserVersion", [ + None, + ]), + ("platformName", [ + None, + ]), + ("pageLoadStrategy", [ + None, + "none", + "eager", + "normal", + ]), + ("proxy", [ + None, + ]), + ("timeouts", [ + None, {}, + {"script": 0, "pageLoad": 2.0, "implicit": 2**53 - 1}, + {"script": 50, "pageLoad": 25}, + {"script": 500}, + ]), + ("unhandledPromptBehavior", [ + "dismiss", + "accept", + None, + ]), + ("test:extension", [ + None, False, "abc", 123, [], + {"key": "value"}, + ]), +] + +invalid_data = [ + ("acceptInsecureCerts", [ + 1, [], {}, "false", + ]), + ("browserName", [ + 1, [], {}, False, + ]), + ("browserVersion", [ + 1, [], {}, False, + ]), + ("platformName", [ + 1, [], {}, False, + ]), + ("pageLoadStrategy", [ + 1, [], {}, False, + "invalid", + "NONE", + "Eager", + "eagerblah", + "interactive", + " eager", + "eager "]), + ("proxy", [ + 1, [], "{}", + {"proxyType": "SYSTEM"}, + {"proxyType": "systemSomething"}, + {"proxy type": "pac"}, + {"proxy-Type": "system"}, + {"proxy_type": "system"}, + {"proxytype": "system"}, + {"PROXYTYPE": "system"}, + {"proxyType": None}, + {"proxyType": 1}, + {"proxyType": []}, + {"proxyType": {"value": "system"}}, + {" proxyType": "system"}, + {"proxyType ": "system"}, + {"proxyType ": " system"}, + {"proxyType": "system "}, + ]), + ("timeouts", [ + 1, [], "{}", False, + {"invalid": 10}, + {"PAGELOAD": 10}, + {"page load": 10}, + {" pageLoad": 10}, + {"pageLoad ": 10}, + {"pageLoad": None}, + {"pageLoad": False}, + {"pageLoad": []}, + {"pageLoad": "10"}, + {"pageLoad": 2.5}, + {"pageLoad": -1}, + {"pageLoad": 2**53}, + {"pageLoad": {"value": 10}}, + {"pageLoad": 10, "invalid": 10}, + ]), + ("unhandledPromptBehavior", [ + 1, [], {}, False, + "DISMISS", + "dismissABC", + "Accept", + " dismiss", + "dismiss ", + ]) +] + +invalid_extensions = [ + "firefox", + "firefox_binary", + "firefoxOptions", + "chromeOptions", + "automaticInspection", + "automaticProfiling", + "platform", + "version", + "browser", + "platformVersion", + "javascriptEnabled", + "nativeEvents", + "seleniumProtocol", + "profile", + "trustAllSSLCertificates", + "initialBrowserUrl", + "requireWindowFocus", + "logFile", + "logLevel", + "safari.options", + "ensureCleanSession", ] diff --git a/tests/wpt/web-platform-tests/webdriver/tests/send_alert_text/send.py b/tests/wpt/web-platform-tests/webdriver/tests/send_alert_text/send.py index edc37d6edb4..6dbc03f9401 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/send_alert_text/send.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/send_alert_text/send.py @@ -6,6 +6,13 @@ from tests.support.asserts import assert_error, assert_success from tests.support.inline import inline +@pytest.fixture +def page(session): + session.url = inline(""" + <script>window.result = window.prompt('Enter Your Name: ', 'Name');</script> + """) + + def send_alert_text(session, text=None): return session.transport.send( "POST", "session/{session_id}/alert/text".format(**vars(session)), @@ -18,64 +25,41 @@ def test_null_parameter_value(session, http): assert_error(Response.from_http(response), "invalid argument") -def test_null_response_value(session, url): - session.url = inline("<script>window.result = window.prompt('Enter Your Name: ', 'Name');</script>") - +def test_null_response_value(session, page): response = send_alert_text(session, "Federer") value = assert_success(response) assert value is None -def test_no_browsing_context(session, closed_window): - response = send_alert_text(session, "foo") - assert_error(response, "no such window") - - @pytest.mark.parametrize("text", [None, {}, [], 42, True]) -def test_invalid_input(session, text): - session.url = inline("<script>window.result = window.prompt('Enter Your Name: ', 'Name');</script>") +def test_invalid_input(session, page, text): response = send_alert_text(session, text) assert_error(response, "invalid argument") -def test_no_user_prompt(session): +def test_no_browsing_context(session, closed_window): response = send_alert_text(session, "Federer") - assert_error(response, "no such alert") - + assert_error(response, "no such window") -def test_alert_element_not_interactable(session): - session.url = inline("<script>window.alert('Hello');</script>") +def test_no_user_prompt(session): response = send_alert_text(session, "Federer") - assert_error(response, "element not interactable") + assert_error(response, "no such alert") -def test_confirm_element_not_interactable(session): - session.url = inline("<script>window.confirm('Hello');</script>") +@pytest.mark.parametrize("dialog_type", ["alert", "confirm"]) +def test_alert_element_not_interactable(session, dialog_type): + session.url = inline("<script>window.{}('Hello');</script>".format(dialog_type)) response = send_alert_text(session, "Federer") assert_error(response, "element not interactable") -def test_send_alert_text(session): - session.url = inline("<script>window.result = window.prompt('Enter Your Name: ', 'Name');</script>") - - send_response = send_alert_text(session, "Federer") +@pytest.mark.parametrize("text", ["", "Federer", " Fed erer "]) +def test_send_alert_text(session, page, text): + send_response = send_alert_text(session, text) assert_success(send_response) - accept_response = session.transport.send("POST", "session/{session_id}/alert/accept" - .format(session_id=session.session_id)) - assert_success(accept_response) - assert session.execute_script("return window.result") == "Federer" - - -def test_send_alert_text_with_whitespace(session): - session.url = inline("<script>window.result = window.prompt('Enter Your Name: ', 'Name');</script>") - - send_response = send_alert_text(session, " Fed erer ") - assert_success(send_response) + session.alert.accept() - accept_response = session.transport.send("POST", "session/{session_id}/alert/accept" - .format(session_id=session.session_id)) - assert_success(accept_response) - assert session.execute_script("return window.result") == " Fed erer " + assert session.execute_script("return window.result") == text diff --git a/tests/wpt/web-platform-tests/webdriver/tests/set_timeouts/set.py b/tests/wpt/web-platform-tests/webdriver/tests/set_timeouts/set.py index e603e217ec7..a78ab2e68e8 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/set_timeouts/set.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/set_timeouts/set.py @@ -1,3 +1,5 @@ +import pytest + from webdriver.transport import Response from tests.support.asserts import assert_error, assert_success @@ -16,14 +18,60 @@ def test_null_parameter_value(session, http): def test_null_response_value(session): - response = set_timeouts(session, {"implicit": 1000}) + timeouts = {"implicit": 10, "pageLoad": 10, "script": 10} + response = set_timeouts(session, timeouts) value = assert_success(response) assert value is None - response = set_timeouts(session, {"pageLoad": 1000}) - value = assert_success(response) - assert value is None - response = set_timeouts(session, {"script": 1000}) - value = assert_success(response) - assert value is None +@pytest.mark.parametrize("value", [1, "{}", False, []]) +def test_parameters_invalid(session, value): + response = set_timeouts(session, value) + assert_error(response, "invalid argument") + + +def test_parameters_empty_no_change(session): + original = session.timeouts._get() + + response = set_timeouts(session, {}) + assert_success(response) + + assert session.timeouts._get() == original + + +def test_key_invalid(session): + response = set_timeouts(session, {"foo": 1000}) + assert_error(response, "invalid argument") + + +@pytest.mark.parametrize("typ", ["implicit", "pageLoad", "script"]) +@pytest.mark.parametrize("value", [0, 2.0, 2**53 - 1]) +def test_positive_integer(session, typ, value): + response = set_timeouts(session, {typ: value}) + assert_success(response) + + assert session.timeouts._get(typ) == value + + +@pytest.mark.parametrize("typ", ["implicit", "pageLoad", "script"]) +@pytest.mark.parametrize("value", [None, [], {}, False, "10"]) +def test_value_invalid_types(session, typ, value): + response = set_timeouts(session, {typ: value}) + assert_error(response, "invalid argument") + + +@pytest.mark.parametrize("typ", ["implicit", "pageLoad", "script"]) +@pytest.mark.parametrize("value", [-1, 2.5, 2**53]) +def test_value_positive_integer(session, typ, value): + response = set_timeouts(session, {typ: value}) + assert_error(response, "invalid argument") + + +def test_set_all_fields(session): + timeouts = {"implicit": 10, "pageLoad": 20, "script": 30} + response = set_timeouts(session, timeouts) + assert_success(response) + + assert session.timeouts.implicit == 10 + assert session.timeouts.page_load == 20 + assert session.timeouts.script == 30 diff --git a/tests/wpt/web-platform-tests/webdriver/tests/set_timeouts/user_prompts.py b/tests/wpt/web-platform-tests/webdriver/tests/set_timeouts/user_prompts.py new file mode 100644 index 00000000000..a98d87e9b2e --- /dev/null +++ b/tests/wpt/web-platform-tests/webdriver/tests/set_timeouts/user_prompts.py @@ -0,0 +1,62 @@ +# META: timeout=long + +import pytest + +from tests.support.asserts import assert_success + + +def set_timeouts(session, timeouts): + return session.transport.send( + "POST", "session/{session_id}/timeouts".format(**vars(session)), + timeouts) + + +@pytest.fixture +def check_user_prompt_not_closed(session, create_dialog): + def check_user_prompt_not_closed(dialog_type): + create_dialog(dialog_type, text=dialog_type) + + response = set_timeouts(session, {"script": 100}) + assert_success(response) + + assert session.alert.text == dialog_type + session.alert.dismiss() + + assert session.timeouts.script == 100 + + return check_user_prompt_not_closed + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "accept"}) +@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"]) +def test_accept(check_user_prompt_not_closed, dialog_type): + check_user_prompt_not_closed(dialog_type) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "accept and notify"}) +@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"]) +def test_accept_and_notify(check_user_prompt_not_closed, dialog_type): + check_user_prompt_not_closed(dialog_type) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss"}) +@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"]) +def test_dismiss(check_user_prompt_not_closed, dialog_type): + check_user_prompt_not_closed(dialog_type) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss and notify"}) +@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"]) +def test_dismiss_and_notify(check_user_prompt_not_closed, dialog_type): + check_user_prompt_not_closed(dialog_type) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "ignore"}) +@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"]) +def test_ignore(check_user_prompt_not_closed, dialog_type): + check_user_prompt_not_closed(dialog_type) + + +@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"]) +def test_default(check_user_prompt_not_closed, dialog_type): + check_user_prompt_not_closed(dialog_type) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/asserts.py b/tests/wpt/web-platform-tests/webdriver/tests/support/asserts.py index 44c76a96b09..2d305a0f3be 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/support/asserts.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/support/asserts.py @@ -20,10 +20,10 @@ errors = { "no such element": 404, "no such frame": 404, "no such window": 404, - "script timeout": 408, + "script timeout": 500, "session not created": 500, "stale element reference": 404, - "timeout": 408, + "timeout": 500, "unable to set cookie": 500, "unable to capture screen": 500, "unexpected alert open": 500, diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/inline.py b/tests/wpt/web-platform-tests/webdriver/tests/support/inline.py index 1ef379093cb..3bf56c84bed 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/support/inline.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/support/inline.py @@ -9,7 +9,7 @@ def inline(doc, doctype="html", mime="text/html;charset=utf-8", protocol="http") mime = "text/html;charset=utf-8" elif doctype == "xhtml": mime = "application/xhtml+xml" - doc = r"""<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + doc = """<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> @@ -20,6 +20,9 @@ def inline(doc, doctype="html", mime="text/html;charset=utf-8", protocol="http") {} </body> </html>""".format(doc) + elif doctype == "xml": + mime = "text/xml" + doc = """<?xml version="1.0" encoding="UTF-8"?>{}""".format(doc) query = {"doc": doc} if mime != "text/html;charset=utf8": @@ -41,8 +44,8 @@ def main(request, response): rv = 404, [("Content-Type", "text/plain")], "Missing doc parameter in query" else: response.headers.update([ - ("Content-Type", content_type), - ("X-XSS-Protection", "0") + ("Content-Type", content_type), + ("X-XSS-Protection", "0") ]) rv = doc return rv diff --git a/tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/__init__.py b/tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/__init__.py new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/__init__.py diff --git a/tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/screenshot.py b/tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/screenshot.py new file mode 100644 index 00000000000..e4d2869af4f --- /dev/null +++ b/tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/screenshot.py @@ -0,0 +1,40 @@ +import base64 +import imghdr + +from tests.support.asserts import assert_error, assert_success +from tests.support.inline import inline + + +def take_element_screenshot(session, element_id): + return session.transport.send( + "GET", + "session/{session_id}/element/{element_id}/screenshot".format( + session_id=session.session_id, + element_id=element_id, + ) + ) + + +def test_no_browsing_context(session, closed_window): + response = take_element_screenshot(session, "foo") + assert_error(response, "no such window") + + +def test_screenshot(session): + session.url = inline("<input>") + element = session.find.css("input", all=False) + + response = take_element_screenshot(session, element.id) + value = assert_success(response) + + image = base64.decodestring(value) + assert imghdr.what("", image) == "png" + + +def test_stale(session): + session.url = inline("<input>") + element = session.find.css("input", all=False) + session.refresh() + + result = take_element_screenshot(session, element.id) + assert_error(result, "stale element reference") diff --git a/tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/user_prompts.py b/tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/user_prompts.py new file mode 100644 index 00000000000..fa239999e4f --- /dev/null +++ b/tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/user_prompts.py @@ -0,0 +1,74 @@ +# META: timeout=long + +import base64 +import imghdr + +import pytest + +from tests.support.asserts import assert_success +from tests.support.inline import inline + + +def take_element_screenshot(session, element_id): + return session.transport.send( + "GET", + "session/{session_id}/element/{element_id}/screenshot".format( + session_id=session.session_id, + element_id=element_id, + ) + ) + + +@pytest.fixture +def check_user_prompt_not_closed_without_exception(session, create_dialog): + def check_user_prompt_not_closed_without_exception(dialog_type): + session.url = inline("<input/>") + element = session.find.css("input", all=False) + + create_dialog(dialog_type, text=dialog_type) + + response = take_element_screenshot(session, element.id) + value = assert_success(response) + + image = base64.decodestring(value) + assert imghdr.what("", image) == "png" + + assert session.alert.text == dialog_type + session.alert.dismiss() + + return check_user_prompt_not_closed_without_exception + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "accept"}) +@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"]) +def test_accept(check_user_prompt_not_closed_without_exception, dialog_type): + check_user_prompt_not_closed_without_exception(dialog_type) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "accept and notify"}) +@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"]) +def test_accept_and_notify(check_user_prompt_not_closed_without_exception, dialog_type): + check_user_prompt_not_closed_without_exception(dialog_type) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss"}) +@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"]) +def test_dismiss(check_user_prompt_not_closed_without_exception, dialog_type): + check_user_prompt_not_closed_without_exception(dialog_type) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss and notify"}) +@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"]) +def test_dismiss_and_notify(check_user_prompt_not_closed_without_exception, dialog_type): + check_user_prompt_not_closed_without_exception(dialog_type) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "ignore"}) +@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"]) +def test_ignore(check_user_prompt_not_closed_without_exception, dialog_type): + check_user_prompt_not_closed_without_exception(dialog_type) + + +@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"]) +def test_default(check_user_prompt_not_closed_without_exception, dialog_type): + check_user_prompt_not_closed_without_exception(dialog_type) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/take_screenshot/__init__.py b/tests/wpt/web-platform-tests/webdriver/tests/take_screenshot/__init__.py new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/webdriver/tests/take_screenshot/__init__.py diff --git a/tests/wpt/web-platform-tests/webdriver/tests/take_screenshot/screenshot.py b/tests/wpt/web-platform-tests/webdriver/tests/take_screenshot/screenshot.py new file mode 100644 index 00000000000..d3153710f7b --- /dev/null +++ b/tests/wpt/web-platform-tests/webdriver/tests/take_screenshot/screenshot.py @@ -0,0 +1,25 @@ +import base64 +import imghdr + +from tests.support.asserts import assert_error, assert_success +from tests.support.inline import inline + + +def take_screenshot(session): + return session.transport.send( + "GET", "session/{session_id}/screenshot".format(**vars(session))) + + +def test_no_browsing_context(session, closed_window): + response = take_screenshot(session) + assert_error(response, "no such window") + + +def test_screenshot(session): + session.url = inline("<input>") + + response = take_screenshot(session) + value = assert_success(response) + + image = base64.decodestring(value) + assert imghdr.what("", image) == "png" diff --git a/tests/wpt/web-platform-tests/webdriver/tests/take_screenshot/user_prompts.py b/tests/wpt/web-platform-tests/webdriver/tests/take_screenshot/user_prompts.py new file mode 100644 index 00000000000..4d4840f08ba --- /dev/null +++ b/tests/wpt/web-platform-tests/webdriver/tests/take_screenshot/user_prompts.py @@ -0,0 +1,68 @@ +# META: timeout=long + +import base64 +import imghdr + +import pytest + +from tests.support.asserts import assert_success +from tests.support.inline import inline + + +def take_screenshot(session): + return session.transport.send( + "GET", "session/{session_id}/screenshot".format(**vars(session))) + + +@pytest.fixture +def check_user_prompt_not_closed_without_exception(session, create_dialog): + def check_user_prompt_not_closed_without_exception(dialog_type): + session.url = inline("<input/>") + + create_dialog(dialog_type, text=dialog_type) + + response = take_screenshot(session) + value = assert_success(response) + + image = base64.decodestring(value) + assert imghdr.what("", image) == "png" + + assert session.alert.text == dialog_type + session.alert.dismiss() + + return check_user_prompt_not_closed_without_exception + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "accept"}) +@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"]) +def test_accept(check_user_prompt_not_closed_without_exception, dialog_type): + check_user_prompt_not_closed_without_exception(dialog_type) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "accept and notify"}) +@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"]) +def test_accept_and_notify(check_user_prompt_not_closed_without_exception, dialog_type): + check_user_prompt_not_closed_without_exception(dialog_type) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss"}) +@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"]) +def test_dismiss(check_user_prompt_not_closed_without_exception, dialog_type): + check_user_prompt_not_closed_without_exception(dialog_type) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss and notify"}) +@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"]) +def test_dismiss_and_notify(check_user_prompt_not_closed_without_exception, dialog_type): + check_user_prompt_not_closed_without_exception(dialog_type) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "ignore"}) +@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"]) +def test_ignore(check_user_prompt_not_closed_without_exception, dialog_type): + check_user_prompt_not_closed_without_exception(dialog_type) + + +@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"]) +def test_default(check_user_prompt_not_closed_without_exception, dialog_type): + check_user_prompt_not_closed_without_exception(dialog_type) diff --git a/tests/wpt/web-platform-tests/webrtc/RTCQuicStream.https.html b/tests/wpt/web-platform-tests/webrtc/RTCQuicStream.https.html new file mode 100644 index 00000000000..1e08016d75a --- /dev/null +++ b/tests/wpt/web-platform-tests/webrtc/RTCQuicStream.https.html @@ -0,0 +1,43 @@ +<!doctype html> +<meta charset=utf-8> +<title>RTCQuicStream.https.html</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="RTCQuicTransport-helper.js"></script> +<script> +'use strict'; + +// These tests are based on the following specification: +// https://w3c.github.io/webrtc-quic/ + +// The following helper functions are called from RTCQuicTransport-helper.js: +// makeQuicTransport + +test(t => { + const quicTransport = makeQuicTransport(t, []); + const quicStream = quicTransport.createStream(); + assert_equals(quicStream.transport, quicTransport, + 'Expect transport to be set to the creating RTCQuicTransport.'); + assert_equals(quicStream.state, 'new', `Expect state to be 'new'.`); + assert_equals(quicStream.readBufferedAmount, 0, + 'Expect read buffered amount to be 0.'); + assert_equals(quicStream.writeBufferedAmount, 0, + 'Expect write buffered amount to be 0.'); +}, 'createStream() returns an RTCQuicStream with initial properties set.'); + +test(t => { + const quicTransport = makeQuicTransport(t, []); + quicTransport.stop(); + assert_throws('InvalidStateError', () => quicTransport.createStream()); +}, 'createStream() throws if the transport is closed.'); + +test(t => { + const quicTransport = makeQuicTransport(t, []); + const firstQuicStream = quicTransport.createStream(); + const secondQuicStream = quicTransport.createStream(); + quicTransport.stop(); + assert_equals(firstQuicStream.state, 'closed'); + assert_equals(secondQuicStream.state, 'closed'); +}, 'RTCQuicTransport.stop() closes all streams.'); + +</script> diff --git a/tests/wpt/web-platform-tests/webrtc/RTCQuicTransport-helper.js b/tests/wpt/web-platform-tests/webrtc/RTCQuicTransport-helper.js new file mode 100644 index 00000000000..50d9e6666a2 --- /dev/null +++ b/tests/wpt/web-platform-tests/webrtc/RTCQuicTransport-helper.js @@ -0,0 +1,10 @@ +'use strict'; + +function makeQuicTransport(t, certificates) { + const iceTransport = new RTCIceTransport(); + t.add_cleanup(() => iceTransport.stop()); + const quicTransport = new RTCQuicTransport(iceTransport, certificates); + t.add_cleanup(() => quicTransport.stop()); + return quicTransport; +} + diff --git a/tests/wpt/web-platform-tests/webrtc/RTCQuicTransport.https.html b/tests/wpt/web-platform-tests/webrtc/RTCQuicTransport.https.html index 8eaa4aa78fa..703f424a638 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCQuicTransport.https.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCQuicTransport.https.html @@ -3,19 +3,15 @@ <title>RTCQuicTransport.https.html</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="RTCQuicTransport-helper.js"></script> <script> 'use strict'; // These tests are based on the following specification: // https://w3c.github.io/webrtc-quic/ -function makeQuicTransport(t, certificates) { - const iceTransport = new RTCIceTransport(); - t.add_cleanup(() => iceTransport.stop()); - const quicTransport = new RTCQuicTransport(iceTransport, certificates); - t.add_cleanup(() => quicTransport.stop()); - return quicTransport; -} +// The following helper functions are called from RTCQuicTransport-helper.js: +// makeQuicTransport function generateCertificate(keygenAlgorithm) { return RTCPeerConnection.generateCertificate({ diff --git a/tests/wpt/web-platform-tests/webrtc/no-media-call.html b/tests/wpt/web-platform-tests/webrtc/no-media-call.html index c4979e85214..8f4f5962d4a 100644 --- a/tests/wpt/web-platform-tests/webrtc/no-media-call.html +++ b/tests/wpt/web-platform-tests/webrtc/no-media-call.html @@ -37,9 +37,9 @@ This test uses the legacy callback API with no media, and thus does not require var parsedOffer = new RTCSessionDescription({ type: 'offer', sdp: offerSdp }); // These functions use the legacy interface extensions to RTCPeerConnection. - gSecondConnection.setRemoteDescription(parsedOffer, + gSecondConnection.setRemoteDescription(parsedOffer).then( function() { - gSecondConnection.createAnswer(onAnswerCreated, + gSecondConnection.createAnswer().then(onAnswerCreated, failed('createAnswer')); }, failed('setRemoteDescription second')); @@ -56,7 +56,7 @@ This test uses the legacy callback API with no media, and thus does not require function handleAnswer(answerSdp) { var parsedAnswer = new RTCSessionDescription({ type: 'answer', sdp: answerSdp }); - gFirstConnection.setRemoteDescription(parsedAnswer, ignoreSuccess, + gFirstConnection.setRemoteDescription(parsedAnswer).then(ignoreSuccess, failed('setRemoteDescription first')); }; @@ -125,8 +125,8 @@ This test uses the legacy callback API with no media, and thus does not require // The offerToReceiveVideo is necessary and sufficient to make // an actual connection. - gFirstConnection.createOffer(onOfferCreated, failed('createOffer'), - {offerToReceiveVideo: true}); + gFirstConnection.createOffer({offerToReceiveVideo: true}) + .then(onOfferCreated, failed('createOffer')); }); </script> diff --git a/tests/wpt/web-platform-tests/webrtc/simplecall.https.html b/tests/wpt/web-platform-tests/webrtc/simplecall.https.html index 6adefe77492..681c42d4cd8 100644 --- a/tests/wpt/web-platform-tests/webrtc/simplecall.https.html +++ b/tests/wpt/web-platform-tests/webrtc/simplecall.https.html @@ -36,7 +36,7 @@ localStream.getTracks().forEach(function(track) { gFirstConnection.addTrack(track, localStream); }); - gFirstConnection.createOffer(onOfferCreated, failed('createOffer')); + gFirstConnection.createOffer().then(onOfferCreated, failed('createOffer')); var videoTag = document.getElementById('local-view'); videoTag.srcObject = localStream; @@ -59,7 +59,7 @@ sdp: offerSdp }); gSecondConnection.setRemoteDescription(parsedOffer); - gSecondConnection.createAnswer(onAnswerCreated, + gSecondConnection.createAnswer().then(onAnswerCreated, failed('createAnswer')); }; diff --git a/tests/wpt/web-platform-tests/webusb/resources/open-in-iframe.html b/tests/wpt/web-platform-tests/webusb/resources/open-in-iframe.html index 0b04a3e03aa..ec80bff3c23 100644 --- a/tests/wpt/web-platform-tests/webusb/resources/open-in-iframe.html +++ b/tests/wpt/web-platform-tests/webusb/resources/open-in-iframe.html @@ -1,4 +1,5 @@ <!DOCTYPE html> +<script src="usb-helpers.js"></script> <script> 'use strict'; window.onmessage = messageEvent => { diff --git a/tests/wpt/web-platform-tests/webusb/resources/open-in-worker.js b/tests/wpt/web-platform-tests/webusb/resources/open-in-worker.js new file mode 100644 index 00000000000..b715184e04d --- /dev/null +++ b/tests/wpt/web-platform-tests/webusb/resources/open-in-worker.js @@ -0,0 +1,15 @@ +importScripts('/webusb/resources/usb-helpers.js'); +'use strict'; + +onmessage = messageEvent => { + if (messageEvent.data.type === 'Ready') { + navigator.usb.addEventListener('connect', connectEvent => { + connectEvent.device.open().then(() => { + postMessage({ type: 'Success' }); + }).catch(error => { + postMessage({ type: `FAIL: open rejected ${error}` }); + }); + }); + postMessage({ type: 'Ready' }); + } +};
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/webusb/resources/usb-helpers.js b/tests/wpt/web-platform-tests/webusb/resources/usb-helpers.js index 93740920dee..a3a4a31ba88 100644 --- a/tests/wpt/web-platform-tests/webusb/resources/usb-helpers.js +++ b/tests/wpt/web-platform-tests/webusb/resources/usb-helpers.js @@ -8,6 +8,29 @@ // these tests the browser must be run with these options: // // --enable-blink-features=MojoJS,MojoJSTest + +(() => { + // Load scripts needed by the test API on context creation. + if ('MojoInterfaceInterceptor' in self) { + let prefix = '/resources/chromium'; + if ('window' in self) { + if (window.location.pathname.includes('/LayoutTests/')) { + let root = window.location.pathname.match(/.*LayoutTests/); + prefix = `${root}/external/wpt/resources/chromium`; + } + } + let scriptPath = `${prefix}/webusb-child-test.js`; + if (typeof document == 'undefined') { + importScripts(scriptPath); + } else { + let script = document.createElement('script'); + script.src = scriptPath; + script.async = false; + document.head.appendChild(script); + } + } +})(); + let loadChromiumResources = Promise.resolve().then(() => { if (!('MojoInterfaceInterceptor' in self)) { // Do nothing on non-Chromium-based browsers or when the Mojo bindings are diff --git a/tests/wpt/web-platform-tests/webusb/usb-disabled-by-feature-policy.https.sub.html b/tests/wpt/web-platform-tests/webusb/usb-disabled-by-feature-policy.https.sub.html index 3a8a9183591..97e66b2a373 100644 --- a/tests/wpt/web-platform-tests/webusb/usb-disabled-by-feature-policy.https.sub.html +++ b/tests/wpt/web-platform-tests/webusb/usb-disabled-by-feature-policy.https.sub.html @@ -1,8 +1,8 @@ <!DOCTYPE html> <body> -<script src=/resources/testharness.js></script> -<script src=/resources/testharnessreport.js></script> -<script src=/feature-policy/resources/featurepolicy.js></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/feature-policy/resources/featurepolicy.js"></script> <script> 'use strict'; const sub = 'https://{{domains[www]}}:{{ports[https][0]}}'; @@ -19,7 +19,16 @@ promise_test(() => { }, error => { assert_equals(error.name, 'SecurityError'); }); -}, header + ' disallows the top-level document.'); +}, header + ' disallows getDevices in the top-level document.'); + +promise_test(async () => { + try { + await navigator.usb.requestDevice({ filters: [] }); + assert_unreached('expected promise to reject with SecurityError'); + } catch(error) { + assert_equals(error.name, 'SecurityError'); + } +}, header + ' disallows requestDevice in the top-level document.'); async_test(t => { test_feature_availability('usb.getDevices()', t, same_origin_src, diff --git a/tests/wpt/web-platform-tests/webusb/usb.https.window.js b/tests/wpt/web-platform-tests/webusb/usb.https.window.js index ee26619cf22..8c9e676cdfc 100644 --- a/tests/wpt/web-platform-tests/webusb/usb.https.window.js +++ b/tests/wpt/web-platform-tests/webusb/usb.https.window.js @@ -60,7 +60,8 @@ usb_test(() => { usb_test(() => { const expectedFilters = [ { vendorId: 1234, classCode: 0xFF, serialNumber: "123ABC" }, - { vendorId: 5678, productId: 0xF00F } + { vendorId: 5678, productId: 0xF00F }, + { vendorId: 9012, classCode: 0xFF, subclassCode: 0xEE, protocolCode: 0xDD }, ]; navigator.usb.test.onrequestdevice = event => { @@ -77,7 +78,8 @@ usb_test(() => { return callWithTrustedClick(() => { return navigator.usb.requestDevice({ filters: expectedFilters }) .then(device => { - assert_unreachable('requestDevice should reject because no device selected'); + assert_unreached( + 'requestDevice should reject because no device selected'); }) .catch(error => { assert_equals(error.code, DOMException.NOT_FOUND_ERR); @@ -85,6 +87,26 @@ usb_test(() => { }); }, 'filters are sent correctly'); +usb_test(async () => { + const badFilters = [ + { productId: 1234 }, // productId requires vendorId + { subclassCode: 5678 }, // subclassCode requires classCode + { protocolCode: 9012 }, // protocolCode requires subclassCode + ]; + + for (const filter of badFilters) { + await callWithTrustedClick(async () => { + try { + await navigator.usb.requestDevice({ filters: [filter] }); + assert_unreached( + 'requestDevice should reject because of invalid filters'); + } catch (error) { + assert_equals(error.name, 'TypeError'); + } + }); + } +}, 'requestDevice rejects on invalid filters'); + usb_test(() => { return getFakeDevice().then(({ device, fakeDevice }) => { navigator.usb.test.onrequestdevice = event => { diff --git a/tests/wpt/web-platform-tests/webusb/usbAlternateInterface.https.any.js b/tests/wpt/web-platform-tests/webusb/usbAlternateInterface.https.any.js new file mode 100644 index 00000000000..e5ef3844ae4 --- /dev/null +++ b/tests/wpt/web-platform-tests/webusb/usbAlternateInterface.https.any.js @@ -0,0 +1,33 @@ +// META: script=/webusb/resources/fake-devices.js +// META: script=/webusb/resources/usb-helpers.js +'use strict'; + +usb_test(async () => { + let { device } = await getFakeDevice(); + let configuration = new USBConfiguration( + device, device.configurations[1].configurationValue); + let usbInterface = new USBInterface( + configuration, configuration.interfaces[0].interfaceNumber); + let alternateInterface = new USBAlternateInterface( + usbInterface, usbInterface.alternates[1].alternateSetting); + assertDeviceInfoEquals( + alternateInterface, + fakeDeviceInit.configurations[1].interfaces[0].alternates[1]); +}, 'Can construct a USBAlternateInterface.'); + +usb_test(async () => { + let { device } = await getFakeDevice(); + let configuration = new USBConfiguration( + device, device.configurations[1].configurationValue); + let usbInterface = new USBInterface( + configuration, configuration.interfaces[0].interfaceNumber); + try { + let alternateInterface = new USBAlternateInterface( + usbInterface, usbInterface.alternates.length); + assert_unreached( + 'USBAlternateInterface should reject an invalid alternate setting'); + } catch (error) { + assert_equals(error.name, 'RangeError'); + } +}, 'Constructing a USBAlternateInterface with an invalid alternate setting ' + + 'throws a range error.'); diff --git a/tests/wpt/web-platform-tests/webusb/usbConfiguration.https.any.js b/tests/wpt/web-platform-tests/webusb/usbConfiguration.https.any.js new file mode 100644 index 00000000000..e7d1c7fb146 --- /dev/null +++ b/tests/wpt/web-platform-tests/webusb/usbConfiguration.https.any.js @@ -0,0 +1,23 @@ +// META: script=/webusb/resources/fake-devices.js +// META: script=/webusb/resources/usb-helpers.js +'use strict'; + +usb_test(async () => { + let { device } = await getFakeDevice(); + let configuration = new USBConfiguration( + device, device.configurations[1].configurationValue); + assertDeviceInfoEquals(configuration, fakeDeviceInit.configurations[1]); +}, 'Can construct a USBConfiguration.'); + +usb_test(async () => { + let { device } = await getFakeDevice(); + try { + let configuration = + new USBConfiguration(device, device.configurations.length + 1); + assert_unreached( + 'USBConfiguration should reject an invalid configuration value'); + } catch (error) { + assert_equals(error.name, 'RangeError'); + } +}, 'Constructing a USBConfiguration with an invalid configuration value ' + + 'throws a range error.'); diff --git a/tests/wpt/web-platform-tests/webusb/usbDevice-iframe.https.html b/tests/wpt/web-platform-tests/webusb/usbDevice-iframe.https.html index 02b2c5010fb..75bad9e0c9f 100644 --- a/tests/wpt/web-platform-tests/webusb/usbDevice-iframe.https.html +++ b/tests/wpt/web-platform-tests/webusb/usbDevice-iframe.https.html @@ -6,46 +6,39 @@ <script> 'use strict'; -function runIframeDisconnectTest(onDeviceConnected) { - return new Promise((resolve, reject) => { - let opened = false; +async function connectInIframe() { + let iframe = document.createElement('iframe'); + let opened = false; - let iframe = document.createElement('iframe'); - iframe.src = 'resources/open-in-iframe.html'; - iframe.onload = () => { - navigator.usb.test.attachToWindow(iframe.contentWindow).then(() => { - iframe.contentWindow.postMessage('Ready', '*'); - }); - }; + iframe.src = 'resources/open-in-iframe.html'; + document.body.appendChild(iframe); - window.onmessage = messageEvent => { - if (messageEvent.data == 'Ready') { - let fakeDevice = navigator.usb.test.addFakeDevice(fakeDeviceInit); - fakeDevice.onclose = () => { - assert_true(opened); - resolve(); - }; - } else if (messageEvent.data == 'Success') { - opened = true; - onDeviceConnected(iframe); - } else { - reject(messageEvent.data); - } - }; + await navigator.usb.test.attachToContext(iframe); + function nextIFrameMessage() { + return new Promise(resolve => window.addEventListener( + 'message', e => resolve(e.data))); + } + iframe.contentWindow.postMessage('Ready', '*'); - document.body.appendChild(iframe); - }); + assert_equals('Ready', (await nextIFrameMessage())); + let fakeDevice = navigator.usb.test.addFakeDevice(fakeDeviceInit); + let closedPromise = new Promise(resolve => fakeDevice.onclose = resolve) + .then(() => assert_true(opened)); + + assert_equals('Success', (await nextIFrameMessage())); + opened = true; + return { iframe, closedPromise }; } -usb_test(() => { - return runIframeDisconnectTest(iframe => { - document.body.removeChild(iframe); - }); +usb_test(async () => { + let { iframe, closedPromise } = await connectInIframe(); + document.body.removeChild(iframe); + await closedPromise; }, 'detaching iframe disconnects device.'); -usb_test(() => { - return runIframeDisconnectTest(iframe => { - iframe.src = 'about:blank'; - }); +usb_test(async () => { + let { iframe, closedPromise } = await connectInIframe(); + iframe.src = 'about:blank'; + await closedPromise; }, 'navigating iframe disconnects device.'); </script> diff --git a/tests/wpt/web-platform-tests/webusb/usbDevice-worker.https.html b/tests/wpt/web-platform-tests/webusb/usbDevice-worker.https.html new file mode 100644 index 00000000000..119f5d66882 --- /dev/null +++ b/tests/wpt/web-platform-tests/webusb/usbDevice-worker.https.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/webusb/resources/fake-devices.js"></script> +<script src="/webusb/resources/usb-helpers.js"></script> +<script> +'use strict'; + +async function connectInWorker() { + let worker = new Worker('/webusb/resources/open-in-worker.js'); + let opened = false; + + await navigator.usb.test.attachToContext(worker); + function nextWorkerMessage() { + return new Promise(resolve => worker.addEventListener( + 'message', e => resolve(e.data))); + } + worker.postMessage({ type: 'Ready' }); + + assert_equals('Ready', (await nextWorkerMessage()).type); + let fakeDevice = navigator.usb.test.addFakeDevice(fakeDeviceInit); + let closedPromise = new Promise(resolve => fakeDevice.onclose = resolve) + .then(() => assert_true(opened)); + + assert_equals('Success', (await nextWorkerMessage()).type); + opened = true; + return { worker, closedPromise }; +} + +usb_test(async () => { + let { worker, closedPromise } = await connectInWorker(); + worker.terminate(); + await closedPromise; +}, 'terminating worker disconnects device.'); +</script> diff --git a/tests/wpt/web-platform-tests/webusb/usbDevice.https.any.js b/tests/wpt/web-platform-tests/webusb/usbDevice.https.any.js index da7df081b8b..046de82b1bd 100644 --- a/tests/wpt/web-platform-tests/webusb/usbDevice.https.any.js +++ b/tests/wpt/web-platform-tests/webusb/usbDevice.https.any.js @@ -6,6 +6,10 @@ function assertRejectsWithNotFoundError(promise) { return assertRejectsWithError(promise, 'NotFoundError'); } +function assertRejectsWithTypeError(promise) { + return assertRejectsWithError(promise, 'TypeError'); +} + function assertRejectsWithNotOpenError(promise) { return assertRejectsWithError( promise, 'InvalidStateError', 'The device must be opened first.'); @@ -17,6 +21,18 @@ function assertRejectsWithNotConfiguredError(promise) { 'The device must have a configuration selected.'); } +function assertRejectsWithDeviceStateChangeInProgressError(promise) { + return assertRejectsWithError( + promise, 'InvalidStateError', + 'An operation that changes the device state is in progress.'); +} + +function assertRejectsWithInterfaceStateChangeInProgressError(promise) { + return assertRejectsWithError( + promise, 'InvalidStateError', + 'An operation that changes interface state is in progress.'); +} + usb_test(() => { return getFakeDevice().then(({ device, fakeDevice }) => { return waitForDisconnect(fakeDevice) @@ -59,22 +75,63 @@ usb_test(() => { }); }, 'open and close can be called multiple times'); -usb_test(() => { - return getFakeDevice().then(({ device }) => { - const message = - 'An operation that changes the device state is in progress.'; - return Promise.all([ - device.open(), - assertRejectsWithError(device.open(), 'InvalidStateError', message), - assertRejectsWithError(device.close(), 'InvalidStateError', message), - ]).then(() => Promise.all([ - device.close(), - assertRejectsWithError(device.open(), 'InvalidStateError', message), - assertRejectsWithError(device.close(), 'InvalidStateError', message), - ])); - }); +usb_test(async () => { + let { device } = await getFakeDevice(); + await Promise.all([ + device.open(), + assertRejectsWithDeviceStateChangeInProgressError(device.open()), + assertRejectsWithDeviceStateChangeInProgressError(device.close()), + ]); + await Promise.all([ + device.close(), + assertRejectsWithDeviceStateChangeInProgressError(device.open()), + assertRejectsWithDeviceStateChangeInProgressError(device.close()), + ]); }, 'open and close cannot be called again while open or close are in progress'); +usb_test(async () => { + let { device } = await getFakeDevice(); + await device.open(); + return Promise.all([ + device.selectConfiguration(1), + assertRejectsWithDeviceStateChangeInProgressError( + device.claimInterface(0)), + assertRejectsWithDeviceStateChangeInProgressError( + device.releaseInterface(0)), + assertRejectsWithDeviceStateChangeInProgressError(device.open()), + assertRejectsWithDeviceStateChangeInProgressError( + device.selectConfiguration(1)), + assertRejectsWithDeviceStateChangeInProgressError(device.reset()), + assertRejectsWithDeviceStateChangeInProgressError( + device.selectAlternateInterface(0, 0)), + assertRejectsWithDeviceStateChangeInProgressError( + device.controlTransferOut({ + requestType: 'standard', + recipient: 'interface', + request: 0x42, + value: 0x1234, + index: 0x0000, + })), + assertRejectsWithDeviceStateChangeInProgressError( + device.controlTransferOut({ + requestType: 'standard', + recipient: 'interface', + request: 0x42, + value: 0x1234, + index: 0x0000, + }, new Uint8Array([1, 2, 3]))), + assertRejectsWithDeviceStateChangeInProgressError( + device.controlTransferIn({ + requestType: 'standard', + recipient: 'interface', + request: 0x42, + value: 0x1234, + index: 0x0000 + }, 0)), + assertRejectsWithDeviceStateChangeInProgressError(device.close()), + ]); +}, 'device operations reject if an device state change is in progress'); + usb_test(() => { return getFakeDevice().then(({ device, fakeDevice }) => { return device.open() @@ -138,6 +195,21 @@ usb_test(() => { }); }, 'device configuration can be set and queried'); +usb_test(async () => { + let { device } = await getFakeDevice(); + assert_equals(device.configuration, null); + await device.open(); + assert_equals(device.configuration, null); + await device.selectConfiguration(1); + await device.selectConfiguration(1); + assertDeviceInfoEquals( + device.configuration, fakeDeviceInit.configurations[0]); + await device.selectConfiguration(2); + assertDeviceInfoEquals( + device.configuration, fakeDeviceInit.configurations[1]); + await device.close(); +}, 'a device configuration value can be set again'); + usb_test(() => { return getFakeDevice().then(({ device }) => { assert_equals(device.configuration, null); @@ -198,19 +270,82 @@ usb_test(() => { }); }, 'an interface can be claimed and released'); -usb_test(() => { - return getFakeDevice().then(({ device }) => { - return device.open() - .then(() => device.selectConfiguration(1)) - .then(() => device.claimInterface(0)) - .then(() => { - assert_true(device.configuration.interfaces[0].claimed); - return device.close(0); - }) - .then(() => { - assert_false(device.configuration.interfaces[0].claimed); - }); - }); +usb_test(async () => { + let { device } = await getFakeDevice() + await device.open(); + await device.selectConfiguration(1); + await device.claimInterface(0); + assert_true(device.configuration.interfaces[0].claimed); + await device.claimInterface(0); + assert_true(device.configuration.interfaces[0].claimed); + await device.close(); +}, 'an interface can be claimed multiple times'); + +usb_test(async () => { + let { device } = await getFakeDevice(); + await device.open(); + await device.selectConfiguration(1); + await device.claimInterface(0); + assert_true(device.configuration.interfaces[0].claimed); + await device.releaseInterface(0); + assert_false(device.configuration.interfaces[0].claimed); + await device.releaseInterface(0); + assert_false(device.configuration.interfaces[0].claimed); + await device.close(); +}, 'an interface can be released multiple times'); + +usb_test(async () => { + let { device } = await getFakeDevice(); + await device.open(); + await device.selectConfiguration(1); + return Promise.all([ + device.claimInterface(0), + assertRejectsWithInterfaceStateChangeInProgressError( + device.claimInterface(0)), + assertRejectsWithInterfaceStateChangeInProgressError( + device.releaseInterface(0)), + assertRejectsWithInterfaceStateChangeInProgressError(device.open()), + assertRejectsWithInterfaceStateChangeInProgressError( + device.selectConfiguration(1)), + assertRejectsWithInterfaceStateChangeInProgressError(device.reset()), + assertRejectsWithInterfaceStateChangeInProgressError( + device.selectAlternateInterface(0, 0)), + assertRejectsWithInterfaceStateChangeInProgressError( + device.controlTransferOut({ + requestType: 'standard', + recipient: 'interface', + request: 0x42, + value: 0x1234, + index: 0x0000, + })), + assertRejectsWithInterfaceStateChangeInProgressError( + device.controlTransferOut({ + requestType: 'standard', + recipient: 'interface', + request: 0x42, + value: 0x1234, + index: 0x0000, + }, new Uint8Array([1, 2, 3]))), + assertRejectsWithInterfaceStateChangeInProgressError( + device.controlTransferIn({ + requestType: 'standard', + recipient: 'interface', + request: 0x42, + value: 0x1234, + index: 0x0000 + }, 0)), + assertRejectsWithInterfaceStateChangeInProgressError(device.close()), + ]); +}, 'device operations reject if an interface state change is in progress'); + +usb_test(async () => { + let { device } = await getFakeDevice(); + await device.open(); + await device.selectConfiguration(1); + await device.claimInterface(0); + assert_true(device.configuration.interfaces[0].claimed); + await device.close(0); + assert_false(device.configuration.interfaces[0].claimed); }, 'interfaces are released on close'); usb_test(() => { @@ -281,29 +416,35 @@ usb_test(() => { }); }, 'selectAlternateInterface rejects when called on a disconnected device'); -usb_test(() => { - return getFakeDevice().then(({ device }) => { - return device.open() - .then(() => device.selectConfiguration(1)) - .then(() => device.controlTransferIn({ - requestType: 'vendor', - recipient: 'device', +usb_test(async () => { + let { device } = await getFakeDevice(); + let usbRequestTypes = ['standard', 'class', 'vendor']; + let usbRecipients = ['device', 'interface', 'endpoint', 'other']; + await device.open(); + await device.selectConfiguration(1); + await device.claimInterface(0); + await device.selectAlternateInterface(0, 0); + for (const requestType of usbRequestTypes) { + for (const recipient of usbRecipients) { + let index = recipient === 'interface' ? 0x5600 : 0x5681; + let result = await device.controlTransferIn({ + requestType: requestType, + recipient: recipient, request: 0x42, value: 0x1234, - index: 0x5678 - }, 7)) - .then(result => { - assert_true(result instanceof USBInTransferResult); - assert_equals(result.status, 'ok'); - assert_equals(result.data.byteLength, 7); - assert_equals(result.data.getUint16(0), 0x07); - assert_equals(result.data.getUint8(2), 0x42); - assert_equals(result.data.getUint16(3), 0x1234); - assert_equals(result.data.getUint16(5), 0x5678); - return device.close(); - }); - }); -}, 'can issue IN control transfer'); + index: index + }, 7); + assert_true(result instanceof USBInTransferResult); + assert_equals(result.status, 'ok'); + assert_equals(result.data.byteLength, 7); + assert_equals(result.data.getUint16(0), 0x07); + assert_equals(result.data.getUint8(2), 0x42); + assert_equals(result.data.getUint16(3), 0x1234); + assert_equals(result.data.getUint16(5), index); + } + } + await device.close(); +}, 'can issue all types of IN control transfers'); usb_test(() => { return getFakeDevice().then(({ device, fakeDevice }) => { @@ -320,25 +461,39 @@ usb_test(() => { }); }, 'controlTransferIn rejects when called on a disconnected device'); -usb_test(() => { - return getFakeDevice().then(({ device }) => { - return device.open() - .then(() => device.selectConfiguration(1)) - .then(() => device.controlTransferOut({ - requestType: 'vendor', - recipient: 'device', +usb_test(async () => { + let { device } = await getFakeDevice(); + let usbRequestTypes = ['standard', 'class', 'vendor']; + let usbRecipients = ['device', 'interface', 'endpoint', 'other']; + let dataArray = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]); + let dataTypes = [dataArray, dataArray.buffer]; + await device.open(); + await device.selectConfiguration(1); + await device.claimInterface(0); + await device.selectAlternateInterface(0, 0); + for (const requestType of usbRequestTypes) { + for (const recipient of usbRecipients) { + let index = recipient === 'interface' ? 0x5600 : 0x5681; + let transferParams = { + requestType: requestType, + recipient: recipient, request: 0x42, value: 0x1234, - index: 0x5678 - }, new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]))) - .then(result => { + index: index + }; + for (const data of dataTypes) { + let result = await device.controlTransferOut(transferParams, data); + assert_true(result instanceof USBOutTransferResult); + assert_equals(result.status, 'ok'); + assert_equals(result.bytesWritten, 8); + } + let result = await device.controlTransferOut(transferParams); assert_true(result instanceof USBOutTransferResult); assert_equals(result.status, 'ok'); - assert_equals(result.bytesWritten, 8); - return device.close(); - }); - }); -}, 'can issue OUT control transfer'); + } + } + await device.close(); +}, 'can issue all types of OUT control transfers'); usb_test(() => { return getFakeDevice().then(({ device, fakeDevice }) => { @@ -355,6 +510,70 @@ usb_test(() => { }); }, 'controlTransferOut rejects when called on a disconnected device'); +usb_test(async () => { + let { device } = await getFakeDevice(); + await device.open(); + await device.selectConfiguration(1); + await device.claimInterface(0); + assertRejectsWithTypeError(device.controlTransferOut({ + requestType: 'invalid', + recipient: 'device', + request: 0x42, + value: 0x1234, + index: 0x5678 + }, new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]))); + assertRejectsWithTypeError(device.controlTransferIn({ + requestType: 'invalid', + recipient: 'device', + request: 0x42, + value: 0x1234, + index: 0x5678 + }, 0)); + await device.close(); +}, 'control transfers with a invalid request type reject'); + +usb_test(async () => { + let { device } = await getFakeDevice(); + await device.open(); + await device.selectConfiguration(1); + await device.claimInterface(0); + assertRejectsWithTypeError(device.controlTransferOut({ + requestType: 'vendor', + recipient: 'invalid', + request: 0x42, + value: 0x1234, + index: 0x5678 + }, new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]))); + assertRejectsWithTypeError(device.controlTransferIn({ + requestType: 'vendor', + recipient: 'invalid', + request: 0x42, + value: 0x1234, + index: 0x5678 + }, 0)); +}, 'control transfers with a invalid recipient type reject'); + +usb_test(async () => { + let { device } = await getFakeDevice(); + await device.open(); + await device.selectConfiguration(1); + await device.claimInterface(0); + assertRejectsWithNotFoundError(device.controlTransferOut({ + requestType: 'vendor', + recipient: 'interface', + request: 0x42, + value: 0x1234, + index: 0x0002 // Last byte of index is interface number. + }, new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]))); + assertRejectsWithNotFoundError(device.controlTransferIn({ + requestType: 'vendor', + recipient: 'interface', + request: 0x42, + value: 0x1234, + index: 0x0002 // Last byte of index is interface number. + }, 0)); +}, 'control transfers to a non-existant interface reject'); + usb_test(() => { return getFakeDevice().then(({ device }) => { let interfaceRequest = { diff --git a/tests/wpt/web-platform-tests/webusb/usbEndpoint.https.any.js b/tests/wpt/web-platform-tests/webusb/usbEndpoint.https.any.js new file mode 100644 index 00000000000..e57639c3d4b --- /dev/null +++ b/tests/wpt/web-platform-tests/webusb/usbEndpoint.https.any.js @@ -0,0 +1,45 @@ +// META: script=/webusb/resources/fake-devices.js +// META: script=/webusb/resources/usb-helpers.js +'use strict'; + +usb_test(async () => { + let { device } = await getFakeDevice(); + let configuration = new USBConfiguration( + device, device.configurations[1].configurationValue); + let usbInterface = new USBInterface( + configuration, configuration.interfaces[0].interfaceNumber); + let alternateInterface = new USBAlternateInterface( + usbInterface, usbInterface.alternates[1].alternateSetting); + let inEndpoint = new USBEndpoint( + alternateInterface, alternateInterface.endpoints[0].endpointNumber, 'in'); + let outEndpoint = new USBEndpoint( + alternateInterface, + alternateInterface.endpoints[1].endpointNumber, + 'out'); + assertDeviceInfoEquals( + inEndpoint, + fakeDeviceInit.configurations[1].interfaces[0].alternates[1] + .endpoints[0]); + assertDeviceInfoEquals( + outEndpoint, + fakeDeviceInit.configurations[1].interfaces[0].alternates[1] + .endpoints[1]); +}, 'Can construct a USBEndpoint.'); + +usb_test(async () => { + let { device } = await getFakeDevice(); + let configuration = new USBConfiguration( + device, device.configurations[1].configurationValue); + let usbInterface = new USBInterface( + configuration, configuration.interfaces[0].interfaceNumber); + let alternateInterface = new USBAlternateInterface( + usbInterface, usbInterface.alternates[1].alternateSetting); + try { + let endpoint = new USBEndpoint( + alternateInterface, alternateInterface.endpoints.length, 'in'); + assert_unreached('USBEndpoint should reject an invalid endpoint number'); + } catch (error) { + assert_equals(error.name, 'RangeError'); + } +}, 'Constructing a USBEndpoint with an invalid endpoint number throws a ' + + 'range error.'); diff --git a/tests/wpt/web-platform-tests/webusb/usbInterface.https.any.js b/tests/wpt/web-platform-tests/webusb/usbInterface.https.any.js new file mode 100644 index 00000000000..7fbf660bbce --- /dev/null +++ b/tests/wpt/web-platform-tests/webusb/usbInterface.https.any.js @@ -0,0 +1,53 @@ +// META: script=/webusb/resources/fake-devices.js +// META: script=/webusb/resources/usb-helpers.js +'use strict'; + +usb_test(async () => { + let { device } = await getFakeDevice(); + let configuration = new USBConfiguration( + device, device.configurations[1].configurationValue); + let usbInterface = new USBInterface( + configuration, configuration.interfaces[0].interfaceNumber); + assertDeviceInfoEquals( + usbInterface, fakeDeviceInit.configurations[1].interfaces[0]); +}, 'Can construct a USBInterface.'); + +usb_test(async () => { + let { device } = await getFakeDevice(); + let configuration = new USBConfiguration( + device, device.configurations[1].configurationValue); + try { + let usbInterface = new USBInterface( + configuration, configuration.interfaces.length); + assert_unreached('USBInterface should reject an invalid interface number'); + } catch (error) { + assert_equals(error.name, 'RangeError'); + } +}, 'Constructing a USBInterface with an invalid interface number ' + + 'throws a range error.'); + +usb_test(async () => { + let { device } = await getFakeDevice(); + await device.open(); + await device.selectConfiguration(2); + let configuration = new USBConfiguration( + device, device.configurations[1].configurationValue); + let usbInterface = new USBInterface( + configuration, configuration.interfaces[0].interfaceNumber); + assert_equals(usbInterface.alternate, null); +}, 'The alternate attribute of USBInterface returns null if the interface' + + 'has not been claimed.'); + +usb_test(async () => { + let { device } = await getFakeDevice(); + await device.open(); + await device.selectConfiguration(2); + await device.claimInterface(0); + await device.selectAlternateInterface(0, 1); + let configuration = new USBConfiguration( + device, device.configurations[1].configurationValue); + let usbInterface = new USBInterface( + configuration, configuration.interfaces[0].interfaceNumber); + assert_equals(usbInterface.alternate.alternateSetting, 1); +}, 'The alternate attribute of USBInterface returns the active alternate ' + + 'interface.'); diff --git a/tests/wpt/web-platform-tests/worklets/audio-worklet-credentials.https.html b/tests/wpt/web-platform-tests/worklets/audio-worklet-credentials.https.html new file mode 100644 index 00000000000..9d867db7ce0 --- /dev/null +++ b/tests/wpt/web-platform-tests/worklets/audio-worklet-credentials.https.html @@ -0,0 +1,15 @@ +<!DOCTYPE html> +<html> +<head> + <script src="/common/get-host-info.sub.js"></script> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="resources/worklet-test-utils.js"></script> + <script src="resources/credentials-tests.js"></script> +</head> +<body> +<script> + runCredentialsTests("audio"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/worklets/audio-worklet-csp.https.html b/tests/wpt/web-platform-tests/worklets/audio-worklet-csp.https.html new file mode 100644 index 00000000000..ef148a4a098 --- /dev/null +++ b/tests/wpt/web-platform-tests/worklets/audio-worklet-csp.https.html @@ -0,0 +1,15 @@ +<!DOCTYPE html> +<html> +<head> + <script src="/common/get-host-info.sub.js"></script> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="resources/worklet-test-utils.js"></script> + <script src="resources/csp-tests.js"></script> +</head> +<body> +<script> + runContentSecurityPolicyTests("audio"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/worklets/audio-worklet-import.https.html b/tests/wpt/web-platform-tests/worklets/audio-worklet-import.https.html new file mode 100644 index 00000000000..cff063a4361 --- /dev/null +++ b/tests/wpt/web-platform-tests/worklets/audio-worklet-import.https.html @@ -0,0 +1,15 @@ +<!DOCTYPE html> +<html> +<head> + <script src="/common/get-host-info.sub.js"></script> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="resources/worklet-test-utils.js"></script> + <script src="resources/import-tests.js"></script> +</head> +<body> +<script> + runImportTests("audio"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/worklets/audio-worklet-referrer.https.html b/tests/wpt/web-platform-tests/worklets/audio-worklet-referrer.https.html new file mode 100644 index 00000000000..f258cd5a452 --- /dev/null +++ b/tests/wpt/web-platform-tests/worklets/audio-worklet-referrer.https.html @@ -0,0 +1,15 @@ +<!DOCTYPE html> +<html> +<head> + <script src="/common/get-host-info.sub.js"></script> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="resources/worklet-test-utils.js"></script> + <script src="resources/referrer-tests.js"></script> +</head> +<body> +<script> + runReferrerTests("audio"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/worklets/audio-worklet-service-worker-interception.https.html b/tests/wpt/web-platform-tests/worklets/audio-worklet-service-worker-interception.https.html new file mode 100644 index 00000000000..479ae176f9d --- /dev/null +++ b/tests/wpt/web-platform-tests/worklets/audio-worklet-service-worker-interception.https.html @@ -0,0 +1,15 @@ +<!DOCTYPE html> +<html> +<head> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="resources/worklet-test-utils.js"></script> + <script src="resources/service-worker-interception-tests.js"></script> + <script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script> +</head> +<body> +<script> + runServiceWorkerInterceptionTests("audio"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/worklets/resources/worklet-test-utils.js b/tests/wpt/web-platform-tests/worklets/resources/worklet-test-utils.js index 499999f22df..797edc9e563 100644 --- a/tests/wpt/web-platform-tests/worklets/resources/worklet-test-utils.js +++ b/tests/wpt/web-platform-tests/worklets/resources/worklet-test-utils.js @@ -6,5 +6,7 @@ function get_worklet(type) { return CSS.layoutWorklet; if (type == 'paint') return CSS.paintWorklet; + if (type == 'audio') + return new OfflineAudioContext(2,44100*40,44100).audioWorklet; return undefined; } diff --git a/tests/wpt/web-platform-tests/xhr/headers-normalize-response.htm b/tests/wpt/web-platform-tests/xhr/headers-normalize-response.htm index 466b0d977cc..84f2fc85821 100644 --- a/tests/wpt/web-platform-tests/xhr/headers-normalize-response.htm +++ b/tests/wpt/web-platform-tests/xhr/headers-normalize-response.htm @@ -3,13 +3,15 @@ <title>Whitespace and null in header values</title> <script src=/resources/testharness.js></script> <script src=/resources/testharnessreport.js></script> -<script src=support.js?pipe=sub></script> - -<h1>Whitespace and null in response header values</h1> - <div id=log></div> - <script> +function error(val) { + test(() => { + const client = new XMLHttpRequest(); + client.open("GET", "resources/parse-headers.py?my-custom-header="+encodeURIComponent(val), false); + assert_throws("NetworkError", () => client.send()); + }, "Header value: " + val.replace("\0", "\\0")); +} function matchHeaderValue(val) { test(function () { @@ -20,12 +22,12 @@ function matchHeaderValue(val) { var r = client.getResponseHeader("My-Custom-Header"); assert_equals(r, trimmed); - }, "Header value: " + val.replace(/\t/g, "[tab]").replace(/ /g, "_").replace("\0", "\\0")); + }, "Header value: " + val.replace(/\t/g, "[tab]").replace(/ /g, "_")); } -matchHeaderValue("hello world\0"); -matchHeaderValue("\0hello world"); -matchHeaderValue("hello\0world"); +error("hello world\0"); +error("\0hello world"); +error("hello\0world"); matchHeaderValue(" hello world"); matchHeaderValue("hello world "); matchHeaderValue(" hello world "); @@ -34,9 +36,8 @@ matchHeaderValue("hello world\t"); matchHeaderValue("\thello world\t"); matchHeaderValue("hello world"); matchHeaderValue("hello\tworld"); -matchHeaderValue("\0"); +error("\0"); matchHeaderValue(" "); matchHeaderValue("\t"); matchHeaderValue(""); - </script> diff --git a/tests/wpt/web-platform-tests/xhr/timeout-multiple-fetches.html b/tests/wpt/web-platform-tests/xhr/timeout-multiple-fetches.html index 30d6b736c56..4f4998c4285 100644 --- a/tests/wpt/web-platform-tests/xhr/timeout-multiple-fetches.html +++ b/tests/wpt/web-platform-tests/xhr/timeout-multiple-fetches.html @@ -3,12 +3,13 @@ <script src=/resources/testharness.js></script> <script src=/resources/testharnessreport.js></script> <script src=/common/get-host-info.sub.js></script> +<script src=/common/utils.js></script> <div id=log></div> <script> async_test(t => { const client = new XMLHttpRequest client.open("GET", "resources/redirect.py?delay=500&location=delay.py") // 500 + 500 = 1000 - client.timeout = 1000 + client.timeout = 750 client.send() client.ontimeout = t.step_func_done(() => { assert_equals(client.readyState, 4) @@ -17,9 +18,11 @@ async_test(t => { }, "Redirects should not reset the timer") async_test(t => { + // Use a unique ID to prevent caching of the preflight making the test flaky. + const uuid = token(); const client = new XMLHttpRequest - client.open("YO", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/delay.py") - client.timeout = 1000 + client.open("YO", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/delay.py?uuid=" + uuid) + client.timeout = 750 client.send() client.ontimeout = t.step_func_done(() => { assert_equals(client.readyState, 4) |