aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/wpt/metadata/2dcontext/wide-gamut-canvas/imageData-colorManagedBehavior.html.ini1
-rw-r--r--tests/wpt/metadata/MANIFEST.json3225
-rw-r--r--tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_cbc.https.worker.js.ini1
-rw-r--r--tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_ctr.https.worker.js.ini1
-rw-r--r--tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_gcm.https.worker.js.ini1
-rw-r--r--tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/rsa.https.worker.js.ini1
-rw-r--r--tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_aes_cbc.https.html.ini1
-rw-r--r--tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_aes_ctr.https.html.ini1
-rw-r--r--tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_aes_gcm.https.html.ini1
-rw-r--r--tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_rsa_oaep.https.html.ini1
-rw-r--r--tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-CBC.https.any.js.ini2
-rw-r--r--tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-CTR.https.any.js.ini2
-rw-r--r--tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-GCM.https.any.js.ini2
-rw-r--r--tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-KW.https.any.js.ini2
-rw-r--r--tests/wpt/metadata/WebCryptoAPI/generateKey/failures_ECDH.https.any.js.ini2
-rw-r--r--tests/wpt/metadata/WebCryptoAPI/generateKey/failures_ECDSA.https.any.js.ini2
-rw-r--r--tests/wpt/metadata/WebCryptoAPI/generateKey/failures_HMAC.https.any.js.ini2
-rw-r--r--tests/wpt/metadata/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.any.js.ini2
-rw-r--r--tests/wpt/metadata/WebCryptoAPI/generateKey/failures_RSA-PSS.https.any.js.ini2
-rw-r--r--tests/wpt/metadata/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.any.js.ini2
-rw-r--r--tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-CBC.https.any.js.ini2
-rw-r--r--tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-CTR.https.any.js.ini2
-rw-r--r--tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-GCM.https.any.js.ini2
-rw-r--r--tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-KW.https.any.js.ini2
-rw-r--r--tests/wpt/metadata/WebCryptoAPI/generateKey/successes_ECDH.https.any.js.ini2
-rw-r--r--tests/wpt/metadata/WebCryptoAPI/generateKey/successes_ECDSA.https.any.js.ini2
-rw-r--r--tests/wpt/metadata/WebCryptoAPI/generateKey/successes_HMAC.https.any.js.ini2
-rw-r--r--tests/wpt/metadata/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.any.js.ini32
-rw-r--r--tests/wpt/metadata/WebCryptoAPI/generateKey/successes_RSA-PSS.https.any.js.ini8
-rw-r--r--tests/wpt/metadata/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.any.js.ini8
-rw-r--r--tests/wpt/metadata/WebCryptoAPI/sign_verify/ecdsa.https.worker.js.ini1
-rw-r--r--tests/wpt/metadata/WebCryptoAPI/sign_verify/hmac.https.worker.js.ini1
-rw-r--r--tests/wpt/metadata/WebCryptoAPI/sign_verify/rsa_pkcs.https.worker.js.ini1
-rw-r--r--tests/wpt/metadata/WebCryptoAPI/sign_verify/rsa_pss.https.worker.js.ini1
-rw-r--r--tests/wpt/metadata/WebCryptoAPI/sign_verify/test_ecdsa.https.html.ini1
-rw-r--r--tests/wpt/metadata/WebCryptoAPI/sign_verify/test_hmac.https.html.ini1
-rw-r--r--tests/wpt/metadata/WebCryptoAPI/sign_verify/test_rsa_pkcs.https.html.ini1
-rw-r--r--tests/wpt/metadata/WebCryptoAPI/sign_verify/test_rsa_pss.https.html.ini1
-rw-r--r--tests/wpt/metadata/WebCryptoAPI/wrapKey_unwrapKey/test_wrapKey_unwrapKey.https.html.ini1
-rw-r--r--tests/wpt/metadata/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.https.worker.js.ini1
-rw-r--r--tests/wpt/metadata/WebIDL/ecmascript-binding/global-immutable-prototype.any.js.ini2
-rw-r--r--tests/wpt/metadata/css/CSS2/linebox/vertical-align-top-bottom-001.html.ini1
-rw-r--r--tests/wpt/metadata/css/CSS2/positioning/inline-static-position-001.html.ini1
-rw-r--r--tests/wpt/metadata/css/CSS2/positioning/relpos-percentage-left-in-scrollable-2.html.ini1
-rw-r--r--tests/wpt/metadata/css/CSS2/positioning/relpos-percentage-left-in-scrollable.html.ini1
-rw-r--r--tests/wpt/metadata/css/CSS2/positioning/relpos-percentage-top-in-scrollable.html.ini1
-rw-r--r--tests/wpt/metadata/css/CSS2/visufx/animation/visibility-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-align/animation/column-gap-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-align/animation/row-gap-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-backgrounds/animations/background-color-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-backgrounds/animations/background-position-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-backgrounds/animations/background-position-origin-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-backgrounds/animations/background-position-x-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-backgrounds/animations/background-position-y-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-backgrounds/animations/background-size-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-backgrounds/animations/border-color-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-backgrounds/animations/border-image-outset-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-backgrounds/animations/border-image-slice-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-backgrounds/animations/border-image-source-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-backgrounds/animations/border-image-width-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-backgrounds/animations/border-radius-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-backgrounds/animations/border-width-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-backgrounds/animations/box-shadow-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-backgrounds/inheritance.sub.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-color/animation/color-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-color/animation/opacity-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-color/parsing/color-valid.html.ini7
-rw-r--r--tests/wpt/metadata/css/css-color/parsing/system-color-valid.html.ini37
-rw-r--r--tests/wpt/metadata/css/css-flexbox/animation/flex-basis-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-flexbox/animation/flex-grow-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-flexbox/animation/flex-shrink-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-flexbox/animation/order-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-flexbox/percentage-heights-009.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-fonts/animations/font-size-adjust-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-fonts/animations/font-size-interpolation-001.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-fonts/animations/font-size-interpolation-002.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-fonts/animations/font-size-interpolation-003.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-fonts/animations/font-variation-settings-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-fonts/math-script-level-and-math-style/math-script-level-002.tentative.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-fonts/math-script-level-and-math-style/math-script-level-004.tentative.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-images/animations/object-position-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-text/animations/letter-spacing-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-text/animations/text-indent-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-text/animations/word-spacing-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-017.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-and-white-space-005.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-and-white-space-008.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-and-white-space-009.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-001.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-002.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-003.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-004.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-005.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-006.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-007.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-008.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-009.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-010.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-011.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-012.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-013.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-014.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-015.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-016.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-006.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-007.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-008.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-009.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-010.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-001.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-002.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-003.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-004.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-break-word-009.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-break-word-010.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-min-content-size-005.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-min-content-size-006.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-min-content-size-007.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/text-indent/percentage-value-intrinsic-size.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/break-spaces-before-first-char-014.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/break-spaces-before-first-char-015.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/break-spaces-before-first-char-016.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/break-spaces-before-first-char-017.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/break-spaces-before-first-char-018.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-001.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-002.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-003.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-004.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-005.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-006.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-007.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-008.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-009.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-010.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/pre-wrap-009.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/trailing-space-before-br-001.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-text/word-break/word-break-break-all-029.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/word-break/word-break-break-all-030.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/word-break/word-break-break-all-inline-009.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/word-break/word-break-break-all-inline-010.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-transforms/animation/list-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-transforms/animation/matrix-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-transforms/animation/perspective-interpolation.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-transforms/animation/perspective-origin-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-transforms/animation/rotate-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-transforms/animation/scale-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-001.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-002.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-003.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-004.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-005.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-006.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-transforms/animation/transform-origin-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-transforms/animation/translate-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-transitions/animations/text-shadow-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-ui/animation/caret-color-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-ui/animation/outline-color-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-ui/animation/outline-offset-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-ui/animation/outline-width-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-ui/inheritance.html.ini1
-rw-r--r--tests/wpt/metadata/css/css-ui/text-overflow-023.html.ini1
-rw-r--r--tests/wpt/metadata/css/cssom-view/MediaQueryList-addListener-handleEvent.html.ini3
-rw-r--r--tests/wpt/metadata/css/cssom-view/MediaQueryList-addListener-removeListener.html.ini3
-rw-r--r--tests/wpt/metadata/css/cssom-view/elementsFromPoint-shadowroot.html.ini1
-rw-r--r--tests/wpt/metadata/css/cssom-view/getBoundingClientRect-empty-inline.html.ini1
-rw-r--r--tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini2
-rw-r--r--tests/wpt/metadata/css/cssom-view/scroll-behavior-default-css.html.ini1
-rw-r--r--tests/wpt/metadata/css/cssom-view/scroll-behavior-element.html.ini1
-rw-r--r--tests/wpt/metadata/css/cssom/CSSStyleSheet-constructable.html.ini1
-rw-r--r--tests/wpt/metadata/css/cssom/computed-style-003.html.ini1
-rw-r--r--tests/wpt/metadata/css/cssom/computed-style-004.html.ini1
-rw-r--r--tests/wpt/metadata/css/cssom/selectorText-modification-restyle-002.html.ini1
-rw-r--r--tests/wpt/metadata/css/cssom/serialize-media-rule.html.ini16
-rw-r--r--tests/wpt/metadata/css/filter-effects/animation/backdrop-filter-interpolation-001.html.ini1
-rw-r--r--tests/wpt/metadata/css/filter-effects/animation/backdrop-filter-interpolation-002.html.ini1
-rw-r--r--tests/wpt/metadata/css/filter-effects/animation/backdrop-filter-interpolation-003.html.ini1
-rw-r--r--tests/wpt/metadata/css/filter-effects/animation/backdrop-filter-interpolation-004.html.ini1
-rw-r--r--tests/wpt/metadata/css/filter-effects/animation/filter-interpolation-001.html.ini1
-rw-r--r--tests/wpt/metadata/css/filter-effects/animation/filter-interpolation-002.html.ini1
-rw-r--r--tests/wpt/metadata/css/filter-effects/animation/filter-interpolation-003.html.ini1
-rw-r--r--tests/wpt/metadata/css/filter-effects/animation/filter-interpolation-004.html.ini1
-rw-r--r--tests/wpt/metadata/css/selectors/scope-selector.html.ini1
-rw-r--r--tests/wpt/metadata/css/selectors/selectors-case-sensitive-001.html.ini1
-rw-r--r--tests/wpt/metadata/custom-elements/CustomElementRegistry.html.ini6
-rw-r--r--tests/wpt/metadata/custom-elements/form-associated/ElementInternals-accessibility.html.ini1
-rw-r--r--tests/wpt/metadata/custom-elements/form-associated/form-associated-callback.html.ini1
-rw-r--r--tests/wpt/metadata/custom-elements/pseudo-class-defined.html.ini1
-rw-r--r--tests/wpt/metadata/custom-elements/reactions/HTMLSlotElement.html.ini1
-rw-r--r--tests/wpt/metadata/dom/events/relatedTarget.window.js.ini1
-rw-r--r--tests/wpt/metadata/dom/events/shadow-relatedTarget.html.ini1
-rw-r--r--tests/wpt/metadata/dom/idlharness.any.js.ini2
-rw-r--r--tests/wpt/metadata/dom/nodes/Document-contentType/contentType/contenttype_txt.html.ini2
-rw-r--r--tests/wpt/metadata/dom/nodes/aria-element-reflection.tentative.html.ini6
-rw-r--r--tests/wpt/metadata/encoding/idlharness.any.js.ini2
-rw-r--r--tests/wpt/metadata/encoding/streams/backpressure.any.js.ini2
-rw-r--r--tests/wpt/metadata/encoding/streams/decode-attributes.any.js.ini4
-rw-r--r--tests/wpt/metadata/encoding/streams/decode-bad-chunks.any.js.ini2
-rw-r--r--tests/wpt/metadata/encoding/streams/decode-ignore-bom.any.js.ini4
-rw-r--r--tests/wpt/metadata/encoding/streams/decode-incomplete-input.any.js.ini3
-rw-r--r--tests/wpt/metadata/encoding/streams/decode-non-utf8.any.js.ini3
-rw-r--r--tests/wpt/metadata/encoding/streams/decode-split-character.any.js.ini3
-rw-r--r--tests/wpt/metadata/encoding/streams/decode-utf8.any.js.ini2
-rw-r--r--tests/wpt/metadata/encoding/streams/encode-bad-chunks.any.js.ini4
-rw-r--r--tests/wpt/metadata/encoding/streams/encode-utf8.any.js.ini4
-rw-r--r--tests/wpt/metadata/encoding/streams/readable-writable-properties.any.js.ini4
-rw-r--r--tests/wpt/metadata/eventsource/eventsource-constructor-url-bogus.any.js.ini2
-rw-r--r--tests/wpt/metadata/fetch/api/abort/destroyed-context.html.ini1
-rw-r--r--tests/wpt/metadata/fetch/api/abort/general.any.js.ini101
-rw-r--r--tests/wpt/metadata/fetch/api/abort/keepalive.html.ini1
-rw-r--r--tests/wpt/metadata/fetch/api/basic/header-value-combining.any.js.ini2
-rw-r--r--tests/wpt/metadata/fetch/api/basic/header-value-null-byte.any.js.ini3
-rw-r--r--tests/wpt/metadata/fetch/api/basic/integrity.sub.any.js.ini1
-rw-r--r--tests/wpt/metadata/fetch/api/basic/stream-safe-creation.any.js.ini3
-rw-r--r--tests/wpt/metadata/fetch/api/idlharness.any.js.ini2
-rw-r--r--tests/wpt/metadata/fetch/api/request/destination/fetch-destination-frame.https.html.ini7
-rw-r--r--tests/wpt/metadata/fetch/api/request/destination/fetch-destination-iframe.https.html.ini6
-rw-r--r--tests/wpt/metadata/fetch/api/request/request-init-stream.any.js.ini3
-rw-r--r--tests/wpt/metadata/fetch/api/response/response-consume.html.ini3
-rw-r--r--tests/wpt/metadata/fetch/api/response/response-from-stream.any.js.ini4
-rw-r--r--tests/wpt/metadata/fetch/content-type/response.window.js.ini12
-rw-r--r--tests/wpt/metadata/fetch/content-type/script.window.js.ini3
-rw-r--r--tests/wpt/metadata/fetch/cors-rfc1918/idlharness.tentative.any.js.ini5
-rw-r--r--tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch.any.js.ini1
-rw-r--r--tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch.https.any.js.ini2
-rw-r--r--tests/wpt/metadata/fetch/metadata/font.tentative.https.sub.html.ini1
-rw-r--r--tests/wpt/metadata/fetch/metadata/sec-fetch-dest/font.tentative.https.sub.html.ini1
-rw-r--r--tests/wpt/metadata/fetch/metadata/sec-fetch-dest/redirect/multiple-redirect-https-downgrade-upgrade.tentative.sub.html.ini1
-rw-r--r--tests/wpt/metadata/fetch/metadata/sec-fetch-dest/redirect/redirect-http-upgrade.tentative.sub.html.ini1
-rw-r--r--tests/wpt/metadata/fetch/metadata/sec-fetch-dest/redirect/redirect-https-downgrade.tentative.sub.html.ini1
-rw-r--r--tests/wpt/metadata/fetch/metadata/sec-fetch-dest/sharedworker.tentative.https.sub.html.ini1
-rw-r--r--tests/wpt/metadata/fetch/metadata/sharedworker.tentative.https.sub.html.ini1
-rw-r--r--tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini5
-rw-r--r--tests/wpt/metadata/hr-time/idlharness.any.js.ini6
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini4
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini (renamed from tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_3.html.ini)2
-rw-r--r--tests/wpt/metadata/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_access_details.sub.html.ini6
-rw-r--r--tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/creating_browsing_context_test_01.html.ini4
-rw-r--r--tests/wpt/metadata/html/browsers/windows/embedded-opener-remove-frame.html.ini2
-rw-r--r--tests/wpt/metadata/html/dom/usvstring-reflection.https.html.ini (renamed from tests/wpt/metadata/html/dom/usvstring-reflection.html.ini)19
-rw-r--r--tests/wpt/metadata/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-sharedworker-success.https.html.ini1
-rw-r--r--tests/wpt/metadata/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success.https.html.ini3
-rw-r--r--tests/wpt/metadata/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.js.ini6
-rw-r--r--tests/wpt/metadata/html/infrastructure/safe-passing-of-structured-data/structured_clone_bigint.html.ini1
-rw-r--r--tests/wpt/metadata/html/interaction/focus/sequential-focus-navigation-and-the-tabindex-attribute/tabindex-getter.html.ini1
-rw-r--r--tests/wpt/metadata/html/rendering/non-replaced-elements/form-controls/resets.html.ini1
-rw-r--r--tests/wpt/metadata/html/rendering/non-replaced-elements/tables/form-in-tables.html.ini1
-rw-r--r--tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-default-style.html.ini1
-rw-r--r--tests/wpt/metadata/html/rendering/pixel-length-attributes.html.ini1
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini2
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini2
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/srcdoc_process_attributes.html.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini10
-rw-r--r--tests/wpt/metadata/html/semantics/forms/the-button-element/button-submit-children.html.ini5
-rw-r--r--tests/wpt/metadata/html/semantics/forms/the-input-element/input-stepdown.html.ini1
-rw-r--r--tests/wpt/metadata/html/semantics/forms/the-input-element/input-stepup.html.ini1
-rw-r--r--tests/wpt/metadata/html/semantics/interactive-elements/the-details-element/toggleEvent.html.ini7
-rw-r--r--tests/wpt/metadata/html/semantics/interactive-elements/the-dialog-element/dialog-autofocus-just-once.html.ini4
-rw-r--r--tests/wpt/metadata/html/semantics/interactive-elements/the-dialog-element/dialog-focusing-steps-prevent-autofocus.html.ini4
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/execution-timing/084.html.ini1
-rw-r--r--tests/wpt/metadata/html/webappapis/microtask-queuing/queue-microtask-exceptions.any.js.ini4
-rw-r--r--tests/wpt/metadata/html/webappapis/microtask-queuing/queue-microtask.any.js.ini5
-rw-r--r--tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/requires-failure.https.any.js.ini1
-rw-r--r--tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/requires-success.any.js.ini1
-rw-r--r--tests/wpt/metadata/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.sharedworker.html.ini1
-rw-r--r--tests/wpt/metadata/offscreen-canvas/filter/offscreencanvas.filter.w.html.ini1
-rw-r--r--tests/wpt/metadata/performance-timeline/idlharness.any.js.ini2
-rw-r--r--tests/wpt/metadata/permissions/nfc-permission.html.ini4
-rw-r--r--tests/wpt/metadata/resource-timing/resource_timing_TAO_cross_origin_redirect.html.ini1
-rw-r--r--tests/wpt/metadata/resource-timing/resource_timing_cross_origin_redirect.html.ini1
-rw-r--r--tests/wpt/metadata/resource-timing/resource_timing_same_origin_redirect.html.ini1
-rw-r--r--tests/wpt/metadata/touch-events/touch-retargeting.html.ini1
-rw-r--r--tests/wpt/metadata/wasm/serialization/module/nested-worker-success.any.js.ini1
-rw-r--r--tests/wpt/metadata/wasm/webapi/body.any.js.ini2
-rw-r--r--tests/wpt/metadata/wasm/webapi/contenttype.any.js.ini2
-rw-r--r--tests/wpt/metadata/wasm/webapi/empty-body.any.js.ini2
-rw-r--r--tests/wpt/metadata/wasm/webapi/instantiateStreaming-bad-imports.any.js.ini2
-rw-r--r--tests/wpt/metadata/wasm/webapi/instantiateStreaming.any.js.ini2
-rw-r--r--tests/wpt/metadata/wasm/webapi/invalid-args.any.js.ini2
-rw-r--r--tests/wpt/metadata/wasm/webapi/invalid-code.any.js.ini2
-rw-r--r--tests/wpt/metadata/wasm/webapi/origin.sub.any.js.ini2
-rw-r--r--tests/wpt/metadata/wasm/webapi/rejected-arg.any.js.ini2
-rw-r--r--tests/wpt/metadata/wasm/webapi/status.any.js.ini2
-rw-r--r--tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-messageport.https.html.ini1
-rw-r--r--tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-postmessage-sharedarraybuffer.https.html.ini1
-rw-r--r--tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletglobalscope-sample-rate.https.html.ini1
-rw-r--r--tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletglobalscope-timing-info.https.html.ini1
-rw-r--r--tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-onerror.https.html.ini1
-rw-r--r--tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-output-channel-count.https.html.ini2
-rw-r--r--tests/wpt/metadata/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/cors-check.https.html.ini1
-rw-r--r--tests/wpt/metadata/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/no-cors.https.html.ini1
-rw-r--r--tests/wpt/metadata/webaudio/the-audio-api/the-mediastreamaudiosourcenode-interface/mediastreamaudiosourcenode-ctor.html.ini1
-rw-r--r--tests/wpt/metadata/webmessaging/with-ports/018.html.ini5
-rw-r--r--tests/wpt/metadata/webmessaging/without-ports/017.html.ini5
-rw-r--r--tests/wpt/metadata/websockets/basic-auth.any.js.ini8
-rw-r--r--tests/wpt/metadata/websockets/bufferedAmount-unchanged-by-sync-xhr.any.js.ini1
-rw-r--r--tests/wpt/metadata/websockets/stream-tentative/abort.any.js.ini2
-rw-r--r--tests/wpt/metadata/websockets/stream-tentative/backpressure-receive.any.js.ini2
-rw-r--r--tests/wpt/metadata/websockets/stream-tentative/backpressure-send.any.js.ini2
-rw-r--r--tests/wpt/metadata/websockets/stream-tentative/close.any.js.ini2
-rw-r--r--tests/wpt/metadata/websockets/stream-tentative/constructor.any.js.ini2
-rw-r--r--tests/wpt/metadata/websockets/unload-a-document/002.html.ini11
-rw-r--r--tests/wpt/metadata/websockets/unload-a-document/004.html.ini5
-rw-r--r--tests/wpt/metadata/workers/SharedWorker-MessageEvent-source.any.js.ini1
-rw-r--r--tests/wpt/metadata/workers/SharedWorker-replace-EventHandler.any.js.ini1
-rw-r--r--tests/wpt/metadata/workers/Worker-base64.any.js.ini2
-rw-r--r--tests/wpt/metadata/workers/Worker-constructor-proto.any.js.ini2
-rw-r--r--tests/wpt/metadata/workers/Worker-custom-event.any.js.ini2
-rw-r--r--tests/wpt/metadata/workers/Worker-location.sub.any.js.ini1
-rw-r--r--tests/wpt/metadata/workers/Worker-replace-event-handler.any.js.ini2
-rw-r--r--tests/wpt/metadata/workers/Worker-replace-global-constructor.any.js.ini2
-rw-r--r--tests/wpt/metadata/workers/Worker-replace-self.any.js.ini2
-rw-r--r--tests/wpt/metadata/workers/WorkerGlobalScope-close.html.ini4
-rw-r--r--tests/wpt/metadata/workers/WorkerNavigator-hardware-concurrency.any.js.ini2
-rw-r--r--tests/wpt/metadata/workers/WorkerNavigator.any.js.ini2
-rw-r--r--tests/wpt/metadata/workers/baseurl/alpha/import-in-moduleworker.html.ini1
-rw-r--r--tests/wpt/metadata/workers/baseurl/alpha/importScripts-in-sharedworker.html.ini1
-rw-r--r--tests/wpt/metadata/workers/baseurl/alpha/sharedworker-in-worker.html.ini1
-rw-r--r--tests/wpt/metadata/workers/baseurl/alpha/xhr-in-sharedworker.html.ini1
-rw-r--r--tests/wpt/metadata/workers/constructors/Worker/Worker-constructor.html.ini2
-rw-r--r--tests/wpt/metadata/workers/examples/general.any.js.ini2
-rw-r--r--tests/wpt/metadata/workers/examples/onconnect.any.js.ini1
-rw-r--r--tests/wpt/metadata/workers/importscripts_mime.any.js.ini2
-rw-r--r--tests/wpt/metadata/workers/interfaces/WorkerGlobalScope/location/redirect-sharedworker.html.ini1
-rw-r--r--tests/wpt/metadata/workers/semantics/interface-objects/003.any.js.ini1
-rw-r--r--tests/wpt/metadata/workers/semantics/interface-objects/004.any.js.ini1
-rw-r--r--tests/wpt/metadata/xhr/idlharness.any.js.ini5
-rw-r--r--tests/wpt/metadata/xhr/open-url-redirected-sharedworker-origin.htm.ini1
-rw-r--r--tests/wpt/metadata/xhr/responsexml-document-properties.htm.ini1
-rw-r--r--tests/wpt/metadata/xhr/send-data-readablestream.any.js.ini1
-rw-r--r--tests/wpt/metadata/xhr/sync-no-timeout.any.js.ini5
-rw-r--r--tests/wpt/mozilla/meta/css/transition_calc_implicit.html.ini2
-rw-r--r--tests/wpt/mozilla/meta/mozilla/animation-removed-node.html.ini1
-rw-r--r--tests/wpt/mozilla/meta/mozilla/inline-event-listener-panic.html.ini2
-rw-r--r--tests/wpt/mozilla/meta/mozilla/interfaces.html.ini4
-rw-r--r--tests/wpt/mozilla/meta/mozilla/interfaces.worker.js.ini4
-rw-r--r--tests/wpt/mozilla/meta/mozilla/window_requestAnimationFrame2.html.ini1
-rw-r--r--tests/wpt/web-platform-tests/CONTRIBUTING.md2
-rw-r--r--tests/wpt/web-platform-tests/IndexedDB/idbindex_reverse_cursor.any.js60
-rw-r--r--tests/wpt/web-platform-tests/README.md18
-rw-r--r--tests/wpt/web-platform-tests/battery-status/idlharness.https.window.js (renamed from tests/wpt/web-platform-tests/battery-status/battery-interface-idlharness.https.window.js)0
-rw-r--r--tests/wpt/web-platform-tests/client-hints/accept-ch-feature-policy-navigation.https.html33
-rw-r--r--tests/wpt/web-platform-tests/client-hints/accept-ch-feature-policy-navigation.https.html.headers3
-rw-r--r--tests/wpt/web-platform-tests/client-hints/accept-ch-no-feature-policy-navigation.https.html24
-rw-r--r--tests/wpt/web-platform-tests/client-hints/accept-ch-no-feature-policy-navigation.https.html.headers2
-rw-r--r--tests/wpt/web-platform-tests/client-hints/resources/accept_ch_lifetime.html.headers2
-rw-r--r--tests/wpt/web-platform-tests/client-hints/resources/expect-client-hints-headers-iframe.py21
-rw-r--r--tests/wpt/web-platform-tests/client-hints/resources/feature-policy-navigation.js19
-rw-r--r--tests/wpt/web-platform-tests/client-hints/resources/iframe-accept-ch-lifetime.html3
-rw-r--r--tests/wpt/web-platform-tests/client-hints/resources/iframe-accept-ch-lifetime.html.headers4
-rw-r--r--tests/wpt/web-platform-tests/common/security-features/resources/common.sub.js87
-rw-r--r--tests/wpt/web-platform-tests/compat/webkit-box-clamp-visibility-change-ref.html24
-rw-r--r--tests/wpt/web-platform-tests/compat/webkit-box-clamp-visibility-change.html34
-rw-r--r--tests/wpt/web-platform-tests/contacts/contacts-select.https.window.js14
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/README.html2
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/frame-src/frame-src-same-document-meta.html54
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/frame-src/frame-src-same-document.html25
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/frame-src/frame-src-same-document.html.headers1
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/generic/generic-0_1-script-src.html2
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/generic/generic-0_10.sub.html (renamed from tests/wpt/web-platform-tests/content-security-policy/generic/generic-0_10.html)4
-rw-r--r--tests/wpt/web-platform-tests/css/css-backgrounds/background-attachment-local/reftest.list20
-rw-r--r--tests/wpt/web-platform-tests/css/css-backgrounds/background-size/vector/empty/reftest.list30
-rw-r--r--tests/wpt/web-platform-tests/css/css-backgrounds/background-size/vector/reftest.list208
-rw-r--r--tests/wpt/web-platform-tests/css/css-color/parsing/color-valid.html2
-rw-r--r--tests/wpt/web-platform-tests/css/css-color/parsing/system-color-valid.html28
-rw-r--r--tests/wpt/web-platform-tests/css/css-flexbox/percentage-heights-008.html34
-rw-r--r--tests/wpt/web-platform-tests/css/css-flexbox/percentage-heights-009.html37
-rw-r--r--tests/wpt/web-platform-tests/css/css-flexbox/percentage-padding-001.html40
-rw-r--r--tests/wpt/web-platform-tests/css/css-flexbox/reference/ttwf-reftest-flex-order-ref.html30
-rw-r--r--tests/wpt/web-platform-tests/css/css-flexbox/ttwf-reftest-flex-order.html49
-rw-r--r--tests/wpt/web-platform-tests/css/css-fonts/generic-family-keywords-001.html36
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-margin-border-padding-vertical-lr.html240
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-margin-border-padding-vertical-rl.html241
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-margin-border-padding.html239
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-overflow.html134
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-stretch-with-orthogonal-flows.html124
-rw-r--r--tests/wpt/web-platform-tests/css/css-lists/list-inside-contain.html32
-rw-r--r--tests/wpt/web-platform-tests/css/css-lists/ol-change-display-type-ref.html23
-rw-r--r--tests/wpt/web-platform-tests/css/css-lists/ol-change-display-type.html29
-rw-r--r--tests/wpt/web-platform-tests/css/css-overflow/dynamic-visible-to-clip-001.html8
-rw-r--r--tests/wpt/web-platform-tests/css/css-pseudo/first-line-with-before-after-ref.html10
-rw-r--r--tests/wpt/web-platform-tests/css/css-pseudo/first-line-with-before-after.html28
-rw-r--r--tests/wpt/web-platform-tests/css/css-scroll-anchoring/README.md2
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-001-ref.html14
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-001.html16
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-002-ref.html21
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-002.html22
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-003-ref.html15
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-003.html17
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-004-ref.html15
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-004.html17
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-005-ref.html15
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-005.html17
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-006-ref.html16
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-006.html16
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-007-ref.html27
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-007.html26
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-008-ref.html37
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-008.html37
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-009-ref.html23
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-009.html23
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-010-ref.html39
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-010.html40
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-011-ref.html39
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-011.html40
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-012-ref.html14
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-012.html15
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-013-ref.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-013.html32
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-014-ref.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-014.html19
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-015-ref.html16
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-015.html17
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-016-ref.html39
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-016.html41
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-017-ref.html17
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-017.html20
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-018-ref.html15
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-018.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-019-ref.html15
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-019.html17
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-020-ref.html14
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-020.html17
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-021-ref.html41
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-021.html39
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-022-ref.html30
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-022.html31
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-023-ref.html29
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-023.html30
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-024-ref.html30
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-024.html31
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-025-ref.html56
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-025.html57
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-026-ref.html53
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-026.html61
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-001-ref.html37
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-001.html34
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-002-ref.html30
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-002.html34
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-003-ref.html37
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-003.html32
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-001-ref.html15
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-001.html17
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-002-ref.html41
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-002.html39
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-003-ref.html20
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-003.html20
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-004-ref.html25
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-004.html22
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-005-ref.html36
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-005.html44
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-006-ref.html35
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-006.html43
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-007-ref.html35
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-007.html43
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-008-ref.html80
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-008.html87
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-block-size-computed.html30
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-block-size-invalid.html21
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-block-size-valid.html22
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-height-computed.html30
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-height-invalid.html21
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-height-valid.html22
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-inline-size-computed.html30
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-inline-size-invalid.html21
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-inline-size-valid.html22
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-size-computed.html38
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-size-invalid.html24
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-size-sets-computed-dimensions.html61
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-size-valid.html26
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-width-computed.html30
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-width-invalid.html21
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-width-valid.html22
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/resources/dice.pngbin0 -> 58618 bytes
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-017.html35
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-001.html39
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-002.html40
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-003.html38
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-004.html40
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-005.html40
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-006.html39
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-007.html40
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-008.html39
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-009.html39
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-001.html35
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-002.html35
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-003.html36
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-004.html35
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-005.html34
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-006.html35
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-007.html35
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-008.html34
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-009.html34
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-010.html35
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-011.html34
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-012.html35
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-013.html35
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-014.html35
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-015.html36
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-016.html35
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/line-breaking/line-breaking-atomic-nowrap-001.html40
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-006.html39
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-007.html22
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-008.html33
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-009.html36
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-010.html34
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-001.html33
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-002.html34
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-003.html32
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-004.html35
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-009.html36
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-010.html34
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-001.html3
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-004.html5
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-005.html36
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-006.html36
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-007.html31
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-008.html31
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/overflow-wrap/reference/overflow-wrap-min-content-size-001-ref.html2
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/overflow-wrap/reference/overflow-wrap-min-content-size-004-ref.html2
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-011.html2
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-014.html36
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-015.html39
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-016.html39
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-017.html42
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-018.html36
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-001.html37
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-002.html37
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-003.html35
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-004.html35
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-005.html35
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-006.html35
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-007.html35
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-008.html35
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-009.html37
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-010.html37
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-009.html40
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-010.html40
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-029.html35
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-030.html34
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-inline-009.html34
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-inline-010.html33
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/word-break/word-break-min-content-001.html3
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/word-break/word-break-min-content-004.html2
-rw-r--r--tests/wpt/web-platform-tests/css/cssom/serialize-media-rule.html185
-rw-r--r--tests/wpt/web-platform-tests/custom-elements/CustomElementRegistry.html11
-rw-r--r--tests/wpt/web-platform-tests/docs/admin/index.md17
-rw-r--r--tests/wpt/web-platform-tests/docs/assets/web-platform.pngbin0 -> 33622 bytes
-rw-r--r--tests/wpt/web-platform-tests/docs/index.md21
-rw-r--r--tests/wpt/web-platform-tests/docs/intro-video-transcript.md232
-rw-r--r--tests/wpt/web-platform-tests/docs/reviewing-tests/email.md4
-rw-r--r--tests/wpt/web-platform-tests/docs/writing-tests/test-templates.md17
-rw-r--r--tests/wpt/web-platform-tests/docs/writing-tests/testharness-api.md64
-rw-r--r--tests/wpt/web-platform-tests/docs/writing-tests/testharness.md8
-rw-r--r--tests/wpt/web-platform-tests/dom/nodes/aria-element-reflection.tentative.html417
-rw-r--r--tests/wpt/web-platform-tests/fetch/api/request/destination/fetch-destination-frame.https.html51
-rw-r--r--tests/wpt/web-platform-tests/fetch/api/request/destination/fetch-destination-iframe.https.html4
-rw-r--r--tests/wpt/web-platform-tests/fetch/api/request/destination/resources/fetch-destination-worker-frame.js20
-rw-r--r--tests/wpt/web-platform-tests/fetch/api/response/response-consume.html11
-rw-r--r--tests/wpt/web-platform-tests/html/cross-origin-opener-policy/coep.https.html4
-rw-r--r--tests/wpt/web-platform-tests/html/cross-origin-opener-policy/no-https.html4
-rw-r--r--tests/wpt/web-platform-tests/html/dom/usvstring-reflection.https.html (renamed from tests/wpt/web-platform-tests/html/dom/usvstring-reflection.html)0
-rw-r--r--tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.js4
-rw-r--r--tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-worker-success.js4
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/srcdoc_process_attributes.html8
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/dialog-autofocus-just-once.html24
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/dialog-focusing-steps-prevent-autofocus.html21
-rw-r--r--tests/wpt/web-platform-tests/html/webappapis/the-windoworworkerglobalscope-mixin/README.md1
-rw-r--r--tests/wpt/web-platform-tests/import-maps/builtin-support.tentative/static-import.js1
-rw-r--r--tests/wpt/web-platform-tests/import-maps/builtin-support.tentative/static-import.py5
-rw-r--r--tests/wpt/web-platform-tests/import-maps/core/static-import.js1
-rw-r--r--tests/wpt/web-platform-tests/import-maps/core/static-import.py5
-rw-r--r--tests/wpt/web-platform-tests/import-maps/resources/test-helper.js2
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/expected-fail/precondition-in-promise.html10
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/expected-fail/precondition-in-setup.html10
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/expected-fail/precondition-without-setup.html8
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/expected-fail/precondition.html31
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/precondition-in-promise.html.ini2
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/precondition-in-setup.html.ini2
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/precondition-without-setup.html.ini2
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/precondition.html.ini15
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/uncaught-exception.html.ini4
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/unhandled-rejection.html.ini4
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/context.any.js.ini5
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/order-of-metas.any.js.ini5
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/secure-context.https.any.js.ini5
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/title.any.js.ini5
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/multiTouchPoints.html.ini3
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/virtual_authenticator.html.ini3
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/testdriver/actions/multiTouchPoints.html54
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/testdriver/virtual_authenticator.html81
-rw-r--r--tests/wpt/web-platform-tests/interfaces/appmanifest.idl9
-rw-r--r--tests/wpt/web-platform-tests/interfaces/fetch.idl2
-rw-r--r--tests/wpt/web-platform-tests/interfaces/picture-in-picture.idl6
-rw-r--r--tests/wpt/web-platform-tests/interfaces/resize-observer.idl3
-rw-r--r--tests/wpt/web-platform-tests/interfaces/web-animations.idl10
-rw-r--r--tests/wpt/web-platform-tests/interfaces/web-nfc.idl1
-rw-r--r--tests/wpt/web-platform-tests/interfaces/web-share.idl2
-rw-r--r--tests/wpt/web-platform-tests/interfaces/webrtc-stats.idl2
-rw-r--r--tests/wpt/web-platform-tests/interfaces/webrtc.idl6
-rw-r--r--tests/wpt/web-platform-tests/layout-instability/resources/util.js66
-rw-r--r--tests/wpt/web-platform-tests/layout-instability/rtl-distance.html31
-rw-r--r--tests/wpt/web-platform-tests/layout-instability/simple-block-movement.html33
-rw-r--r--tests/wpt/web-platform-tests/layout-instability/transform.html37
-rw-r--r--tests/wpt/web-platform-tests/mathml/relations/html5-tree/css-inline-style-dynamic.tentative.html13
-rw-r--r--tests/wpt/web-platform-tests/mathml/relations/html5-tree/href-click-3.html12
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-mimetype.html54
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-MediaElement-srcObject.https.html156
-rw-r--r--tests/wpt/web-platform-tests/mixed-content/README.md2
-rw-r--r--tests/wpt/web-platform-tests/mixed-content/generic/test-case.sub.js2
-rw-r--r--tests/wpt/web-platform-tests/permissions/nfc-permission.html14
-rw-r--r--tests/wpt/web-platform-tests/referrer-policy/README.md2
-rw-r--r--tests/wpt/web-platform-tests/resources/chromium/contacts_manager_mock.js16
-rw-r--r--tests/wpt/web-platform-tests/resources/chromium/nfc-mock.js15
-rw-r--r--tests/wpt/web-platform-tests/resources/chromium/webxr-test.js23
-rw-r--r--tests/wpt/web-platform-tests/resources/test/tests/functional/api-tests-1.html24
-rw-r--r--tests/wpt/web-platform-tests/resources/test/tests/functional/single-page-test-fail.html1
-rw-r--r--tests/wpt/web-platform-tests/resources/test/tests/functional/single-page-test-no-assertions.html1
-rw-r--r--tests/wpt/web-platform-tests/resources/test/tests/functional/single-page-test-no-body.html1
-rw-r--r--tests/wpt/web-platform-tests/resources/test/tests/functional/single-page-test-pass.html1
-rw-r--r--tests/wpt/web-platform-tests/resources/test/tests/functional/worker-uncaught-single.js8
-rw-r--r--tests/wpt/web-platform-tests/resources/test/tests/unit/exceptional-cases.html39
-rw-r--r--tests/wpt/web-platform-tests/resources/testdriver.js222
-rw-r--r--tests/wpt/web-platform-tests/resources/testharness.js86
-rw-r--r--tests/wpt/web-platform-tests/screen_enumeration/getScreens.tentative.https.any.js30
-rw-r--r--tests/wpt/web-platform-tests/screen_enumeration/requestDisplays.tentative.https.any.js21
-rw-r--r--tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment-api.html32
-rw-r--r--tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment-same-doc.html57
-rw-r--r--tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment-target.html45
-rw-r--r--tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment.html258
-rw-r--r--tests/wpt/web-platform-tests/sms/README.md2
-rw-r--r--tests/wpt/web-platform-tests/speech-api/SpeechSynthesis-speak-events.html22
-rw-r--r--tests/wpt/web-platform-tests/speech-api/historical.html12
-rw-r--r--tests/wpt/web-platform-tests/storage-access-api/META.yml2
-rw-r--r--tests/wpt/web-platform-tests/streams/piping/throwing-options.any.js64
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/short-simple-duration-and-fractional-repeatcount.html22
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/switching-animated-target-to-unknown-element.html23
-rw-r--r--tests/wpt/web-platform-tests/svg/layout/svg-with-precent-dimensions-relayout-ref.html12
-rw-r--r--tests/wpt/web-platform-tests/svg/layout/svg-with-precent-dimensions-relayout.html21
-rw-r--r--tests/wpt/web-platform-tests/tools/requirements_flake8.txt2
-rw-r--r--tests/wpt/web-platform-tests/tools/tox.ini1
-rw-r--r--tests/wpt/web-platform-tests/tools/webdriver/README.md6
-rw-r--r--tests/wpt/web-platform-tests/tools/wpt/run.py4
-rw-r--r--tests/wpt/web-platform-tests/tools/wpt/tox.ini3
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/requirements_epiphany.txt2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/requirements_firefox.txt2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/requirements_webkit.txt2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/tox.ini3
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/base.py92
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py31
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/protocol.py59
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testdriver-extra.js65
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wpttest.py4
-rw-r--r--tests/wpt/web-platform-tests/trusted-types/support/navigation-report-only-support.html44
-rw-r--r--tests/wpt/web-platform-tests/trusted-types/support/navigation-report-only-support.html.headers1
-rw-r--r--tests/wpt/web-platform-tests/trusted-types/support/navigation-support.html42
-rw-r--r--tests/wpt/web-platform-tests/trusted-types/support/navigation-support.html.headers1
-rw-r--r--tests/wpt/web-platform-tests/trusted-types/trusted-types-createHTMLDocument.tentative.html36
-rw-r--r--tests/wpt/web-platform-tests/trusted-types/trusted-types-navigation.tentative.html65
-rw-r--r--tests/wpt/web-platform-tests/upgrade-insecure-requests/README.md2
-rw-r--r--tests/wpt/web-platform-tests/vibration/invalid-values.html1
-rw-r--r--tests/wpt/web-platform-tests/visual-viewport/viewport-no-resize-event-on-overflow-recalc.html.ini4
-rw-r--r--tests/wpt/web-platform-tests/web-animations/idlharness.window.js20
-rw-r--r--tests/wpt/web-platform-tests/web-animations/interfaces/Animation/idlharness.window.js21
-rw-r--r--tests/wpt/web-platform-tests/web-animations/interfaces/AnimationPlaybackEvent/idlharness.window.js26
-rw-r--r--tests/wpt/web-platform-tests/web-animations/interfaces/DocumentTimeline/idlharness.window.js22
-rw-r--r--tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/idlharness.window.js31
-rw-r--r--tests/wpt/web-platform-tests/web-nfc/NDEFMessage_constructor.https.html7
-rw-r--r--tests/wpt/web-platform-tests/web-nfc/NDEFReader_options.https.html52
-rw-r--r--tests/wpt/web-platform-tests/web-nfc/NDEFReader_scan.https.html27
-rw-r--r--tests/wpt/web-platform-tests/web-nfc/NDEFReadingEvent_constructor.https.html6
-rw-r--r--tests/wpt/web-platform-tests/web-nfc/NDEFRecord_constructor.https.html105
-rw-r--r--tests/wpt/web-platform-tests/web-nfc/NDEFWriter_push.https.html62
-rw-r--r--tests/wpt/web-platform-tests/web-nfc/resources/nfc-helpers.js29
-rwxr-xr-xtests/wpt/web-platform-tests/webaudio/refresh_idl.rb57
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/find_element_from_element/find.py1
-rw-r--r--tests/wpt/web-platform-tests/webgpu/cts.html32
-rw-r--r--tests/wpt/web-platform-tests/webgpu/framework/fixture.js42
-rw-r--r--tests/wpt/web-platform-tests/webgpu/framework/logger.js91
-rw-r--r--tests/wpt/web-platform-tests/webgpu/framework/test_group.js18
-rw-r--r--tests/wpt/web-platform-tests/webgpu/framework/util/stack.js3
-rw-r--r--tests/wpt/web-platform-tests/webgpu/framework/version.js2
-rw-r--r--tests/wpt/web-platform-tests/webgpu/runtime/wpt.js3
-rw-r--r--tests/wpt/web-platform-tests/webgpu/suites/cts/canvas/context_creation.spec.js11
-rw-r--r--tests/wpt/web-platform-tests/webgpu/suites/cts/command_buffer/compute/basic.spec.js2
-rw-r--r--tests/wpt/web-platform-tests/webgpu/suites/cts/command_buffer/render/rendering.spec.js6
-rw-r--r--tests/wpt/web-platform-tests/webgpu/suites/cts/command_buffer/render/storeop.spec.js4
-rw-r--r--tests/wpt/web-platform-tests/webgpu/suites/cts/gpu_test.js99
-rw-r--r--tests/wpt/web-platform-tests/webgpu/suites/cts/index.js4
-rw-r--r--tests/wpt/web-platform-tests/webgpu/suites/cts/validation/createRenderPipeline.spec.js4
-rw-r--r--tests/wpt/web-platform-tests/webgpu/suites/cts/validation/render_pass.spec.js4
-rw-r--r--tests/wpt/web-platform-tests/webgpu/suites/cts/validation/setVertexBuffer.spec.js11
-rw-r--r--tests/wpt/web-platform-tests/webgpu/suites/cts/validation/validation_test.js8
-rw-r--r--tests/wpt/web-platform-tests/webgpu/suites/cts/validation/vertex_state.spec.js (renamed from tests/wpt/web-platform-tests/webgpu/suites/cts/validation/vertex_input.spec.js)435
-rw-r--r--tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html26
-rw-r--r--tests/wpt/web-platform-tests/websockets/unload-a-document/001-1.html1
-rw-r--r--tests/wpt/web-platform-tests/websockets/unload-a-document/002-1.html4
-rw-r--r--tests/wpt/web-platform-tests/wpt.py4
-rw-r--r--tests/wpt/web-platform-tests/xhr/resources/echo-method.py17
701 files changed, 13849 insertions, 1894 deletions
diff --git a/tests/wpt/metadata/2dcontext/wide-gamut-canvas/imageData-colorManagedBehavior.html.ini b/tests/wpt/metadata/2dcontext/wide-gamut-canvas/imageData-colorManagedBehavior.html.ini
index f55ee4c25c7..c2bdf03fb9c 100644
--- a/tests/wpt/metadata/2dcontext/wide-gamut-canvas/imageData-colorManagedBehavior.html.ini
+++ b/tests/wpt/metadata/2dcontext/wide-gamut-canvas/imageData-colorManagedBehavior.html.ini
@@ -1,4 +1,5 @@
[imageData-colorManagedBehavior.html]
+ expected: ERROR
[imageData-colorManagedBehavior]
expected: FAIL
diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json
index fb42ac009cc..ace6e811425 100644
--- a/tests/wpt/metadata/MANIFEST.json
+++ b/tests/wpt/metadata/MANIFEST.json
@@ -20121,6 +20121,18 @@
{}
]
],
+ "compat/webkit-box-clamp-visibility-change.html": [
+ [
+ "compat/webkit-box-clamp-visibility-change.html",
+ [
+ [
+ "/compat/webkit-box-clamp-visibility-change-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"compat/webkit-box-fieldset.html": [
[
"compat/webkit-box-fieldset.html",
@@ -122133,6 +122145,30 @@
{}
]
],
+ "css/css-flexbox/percentage-heights-008.html": [
+ [
+ "css/css-flexbox/percentage-heights-008.html",
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square.xht",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-flexbox/percentage-heights-009.html": [
+ [
+ "css/css-flexbox/percentage-heights-009.html",
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square.xht",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-flexbox/percentage-size-subitems-001.html": [
[
"css/css-flexbox/percentage-size-subitems-001.html",
@@ -122373,18 +122409,6 @@
{}
]
],
- "css/css-flexbox/ttwf-reftest-flex-order.html": [
- [
- "css/css-flexbox/ttwf-reftest-flex-order.html",
- [
- [
- "/css/css-flexbox/reference/ttwf-reftest-flex-order-ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
"css/css-flexbox/ttwf-reftest-flex-wrap-reverse.html": [
[
"css/css-flexbox/ttwf-reftest-flex-wrap-reverse.html",
@@ -130495,6 +130519,18 @@
{}
]
],
+ "css/css-lists/ol-change-display-type.html": [
+ [
+ "css/css-lists/ol-change-display-type.html",
+ [
+ [
+ "/css/css-lists/ol-change-display-type-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-logical/cascading-001.html": [
[
"css/css-logical/cascading-001.html",
@@ -138415,6 +138451,18 @@
{}
]
],
+ "css/css-pseudo/first-line-with-before-after.html": [
+ [
+ "css/css-pseudo/first-line-with-before-after.html",
+ [
+ [
+ "/css/css-pseudo/first-line-with-before-after-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-pseudo/first-line-with-out-of-flow.html": [
[
"css/css-pseudo/first-line-with-out-of-flow.html",
@@ -143735,6 +143783,450 @@
{}
]
],
+ "css/css-sizing/intrinsic-size/intrinsic-size-001.html": [
+ [
+ "css/css-sizing/intrinsic-size/intrinsic-size-001.html",
+ [
+ [
+ "/css/css-sizing/intrinsic-size/intrinsic-size-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-002.html": [
+ [
+ "css/css-sizing/intrinsic-size/intrinsic-size-002.html",
+ [
+ [
+ "/css/css-sizing/intrinsic-size/intrinsic-size-002-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-003.html": [
+ [
+ "css/css-sizing/intrinsic-size/intrinsic-size-003.html",
+ [
+ [
+ "/css/css-sizing/intrinsic-size/intrinsic-size-003-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-004.html": [
+ [
+ "css/css-sizing/intrinsic-size/intrinsic-size-004.html",
+ [
+ [
+ "/css/css-sizing/intrinsic-size/intrinsic-size-004-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-005.html": [
+ [
+ "css/css-sizing/intrinsic-size/intrinsic-size-005.html",
+ [
+ [
+ "/css/css-sizing/intrinsic-size/intrinsic-size-004-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-006.html": [
+ [
+ "css/css-sizing/intrinsic-size/intrinsic-size-006.html",
+ [
+ [
+ "/css/css-sizing/intrinsic-size/intrinsic-size-006-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-007.html": [
+ [
+ "css/css-sizing/intrinsic-size/intrinsic-size-007.html",
+ [
+ [
+ "/css/css-sizing/intrinsic-size/intrinsic-size-007-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-008.html": [
+ [
+ "css/css-sizing/intrinsic-size/intrinsic-size-008.html",
+ [
+ [
+ "/css/css-sizing/intrinsic-size/intrinsic-size-008-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-009.html": [
+ [
+ "css/css-sizing/intrinsic-size/intrinsic-size-009.html",
+ [
+ [
+ "/css/css-sizing/intrinsic-size/intrinsic-size-009-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-010.html": [
+ [
+ "css/css-sizing/intrinsic-size/intrinsic-size-010.html",
+ [
+ [
+ "/css/css-sizing/intrinsic-size/intrinsic-size-010-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-011.html": [
+ [
+ "css/css-sizing/intrinsic-size/intrinsic-size-011.html",
+ [
+ [
+ "/css/css-sizing/intrinsic-size/intrinsic-size-011-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-012.html": [
+ [
+ "css/css-sizing/intrinsic-size/intrinsic-size-012.html",
+ [
+ [
+ "/css/css-sizing/intrinsic-size/intrinsic-size-012-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-013.html": [
+ [
+ "css/css-sizing/intrinsic-size/intrinsic-size-013.html",
+ [
+ [
+ "/css/css-sizing/intrinsic-size/intrinsic-size-013-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-014.html": [
+ [
+ "css/css-sizing/intrinsic-size/intrinsic-size-014.html",
+ [
+ [
+ "/css/css-sizing/intrinsic-size/intrinsic-size-014-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-015.html": [
+ [
+ "css/css-sizing/intrinsic-size/intrinsic-size-015.html",
+ [
+ [
+ "/css/css-sizing/intrinsic-size/intrinsic-size-015-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-016.html": [
+ [
+ "css/css-sizing/intrinsic-size/intrinsic-size-016.html",
+ [
+ [
+ "/css/css-sizing/intrinsic-size/intrinsic-size-016-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-017.html": [
+ [
+ "css/css-sizing/intrinsic-size/intrinsic-size-017.html",
+ [
+ [
+ "/css/css-sizing/intrinsic-size/intrinsic-size-017-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-018.html": [
+ [
+ "css/css-sizing/intrinsic-size/intrinsic-size-018.html",
+ [
+ [
+ "/css/css-sizing/intrinsic-size/intrinsic-size-018-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-019.html": [
+ [
+ "css/css-sizing/intrinsic-size/intrinsic-size-019.html",
+ [
+ [
+ "/css/css-sizing/intrinsic-size/intrinsic-size-019-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-020.html": [
+ [
+ "css/css-sizing/intrinsic-size/intrinsic-size-020.html",
+ [
+ [
+ "/css/css-sizing/intrinsic-size/intrinsic-size-020-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-021.html": [
+ [
+ "css/css-sizing/intrinsic-size/intrinsic-size-021.html",
+ [
+ [
+ "/css/css-sizing/intrinsic-size/intrinsic-size-021-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-022.html": [
+ [
+ "css/css-sizing/intrinsic-size/intrinsic-size-022.html",
+ [
+ [
+ "/css/css-sizing/intrinsic-size/intrinsic-size-022-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-023.html": [
+ [
+ "css/css-sizing/intrinsic-size/intrinsic-size-023.html",
+ [
+ [
+ "/css/css-sizing/intrinsic-size/intrinsic-size-023-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-024.html": [
+ [
+ "css/css-sizing/intrinsic-size/intrinsic-size-024.html",
+ [
+ [
+ "/css/css-sizing/intrinsic-size/intrinsic-size-024-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-025.html": [
+ [
+ "css/css-sizing/intrinsic-size/intrinsic-size-025.html",
+ [
+ [
+ "/css/css-sizing/intrinsic-size/intrinsic-size-025-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-026.html": [
+ [
+ "css/css-sizing/intrinsic-size/intrinsic-size-026.html",
+ [
+ [
+ "/css/css-sizing/intrinsic-size/intrinsic-size-026-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-auto-001.html": [
+ [
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-auto-001.html",
+ [
+ [
+ "/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-auto-002.html": [
+ [
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-auto-002.html",
+ [
+ [
+ "/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-002-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-auto-003.html": [
+ [
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-auto-003.html",
+ [
+ [
+ "/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-003-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-001.html": [
+ [
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-001.html",
+ [
+ [
+ "/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-002.html": [
+ [
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-002.html",
+ [
+ [
+ "/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-002-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-003.html": [
+ [
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-003.html",
+ [
+ [
+ "/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-003-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-004.html": [
+ [
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-004.html",
+ [
+ [
+ "/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-004-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-005.html": [
+ [
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-005.html",
+ [
+ [
+ "/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-005-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-006.html": [
+ [
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-006.html",
+ [
+ [
+ "/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-006-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-007.html": [
+ [
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-007.html",
+ [
+ [
+ "/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-007-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-008.html": [
+ [
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-008.html",
+ [
+ [
+ "/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-008-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-sizing/orthogonal-writing-mode-float-in-inline.html": [
[
"css/css-sizing/orthogonal-writing-mode-float-in-inline.html",
@@ -147831,6 +148323,318 @@
{}
]
],
+ "css/css-text/line-break/line-break-anywhere-017.html": [
+ [
+ "css/css-text/line-break/line-break-anywhere-017.html",
+ [
+ [
+ "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/line-break/line-break-anywhere-and-white-space-001.html": [
+ [
+ "css/css-text/line-break/line-break-anywhere-and-white-space-001.html",
+ [
+ [
+ "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/line-break/line-break-anywhere-and-white-space-002.html": [
+ [
+ "css/css-text/line-break/line-break-anywhere-and-white-space-002.html",
+ [
+ [
+ "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/line-break/line-break-anywhere-and-white-space-003.html": [
+ [
+ "css/css-text/line-break/line-break-anywhere-and-white-space-003.html",
+ [
+ [
+ "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/line-break/line-break-anywhere-and-white-space-004.html": [
+ [
+ "css/css-text/line-break/line-break-anywhere-and-white-space-004.html",
+ [
+ [
+ "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/line-break/line-break-anywhere-and-white-space-005.html": [
+ [
+ "css/css-text/line-break/line-break-anywhere-and-white-space-005.html",
+ [
+ [
+ "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/line-break/line-break-anywhere-and-white-space-006.html": [
+ [
+ "css/css-text/line-break/line-break-anywhere-and-white-space-006.html",
+ [
+ [
+ "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/line-break/line-break-anywhere-and-white-space-007.html": [
+ [
+ "css/css-text/line-break/line-break-anywhere-and-white-space-007.html",
+ [
+ [
+ "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/line-break/line-break-anywhere-and-white-space-008.html": [
+ [
+ "css/css-text/line-break/line-break-anywhere-and-white-space-008.html",
+ [
+ [
+ "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/line-break/line-break-anywhere-and-white-space-009.html": [
+ [
+ "css/css-text/line-break/line-break-anywhere-and-white-space-009.html",
+ [
+ [
+ "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-001.html": [
+ [
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-001.html",
+ [
+ [
+ "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-002.html": [
+ [
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-002.html",
+ [
+ [
+ "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-003.html": [
+ [
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-003.html",
+ [
+ [
+ "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-004.html": [
+ [
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-004.html",
+ [
+ [
+ "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-005.html": [
+ [
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-005.html",
+ [
+ [
+ "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-006.html": [
+ [
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-006.html",
+ [
+ [
+ "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-007.html": [
+ [
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-007.html",
+ [
+ [
+ "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-008.html": [
+ [
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-008.html",
+ [
+ [
+ "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-009.html": [
+ [
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-009.html",
+ [
+ [
+ "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-010.html": [
+ [
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-010.html",
+ [
+ [
+ "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-011.html": [
+ [
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-011.html",
+ [
+ [
+ "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-012.html": [
+ [
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-012.html",
+ [
+ [
+ "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-013.html": [
+ [
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-013.html",
+ [
+ [
+ "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-014.html": [
+ [
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-014.html",
+ [
+ [
+ "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-015.html": [
+ [
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-015.html",
+ [
+ [
+ "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-016.html": [
+ [
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-016.html",
+ [
+ [
+ "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-text/line-break/line-break-loose-011.xht": [
[
"css/css-text/line-break/line-break-loose-011.xht",
@@ -148731,6 +149535,66 @@
{}
]
],
+ "css/css-text/overflow-wrap/overflow-wrap-anywhere-006.html": [
+ [
+ "css/css-text/overflow-wrap/overflow-wrap-anywhere-006.html",
+ [
+ [
+ "/css/css-text/overflow-wrap/reference/overflow-wrap-break-word-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/overflow-wrap/overflow-wrap-anywhere-007.html": [
+ [
+ "css/css-text/overflow-wrap/overflow-wrap-anywhere-007.html",
+ [
+ [
+ "/css/css-text/overflow-wrap/overflow-wrap-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/overflow-wrap/overflow-wrap-anywhere-008.html": [
+ [
+ "css/css-text/overflow-wrap/overflow-wrap-anywhere-008.html",
+ [
+ [
+ "/css/css-text/overflow-wrap/overflow-wrap-002-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/overflow-wrap/overflow-wrap-anywhere-009.html": [
+ [
+ "css/css-text/overflow-wrap/overflow-wrap-anywhere-009.html",
+ [
+ [
+ "/css/css-text/overflow-wrap/reference/overflow-wrap-break-word-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/overflow-wrap/overflow-wrap-anywhere-010.html": [
+ [
+ "css/css-text/overflow-wrap/overflow-wrap-anywhere-010.html",
+ [
+ [
+ "/css/css-text/overflow-wrap/reference/overflow-wrap-break-word-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-text/overflow-wrap/overflow-wrap-anywhere-fit-content-001.html": [
[
"css/css-text/overflow-wrap/overflow-wrap-anywhere-fit-content-001.html",
@@ -148743,6 +149607,54 @@
{}
]
],
+ "css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-001.html": [
+ [
+ "css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-001.html",
+ [
+ [
+ "/css/css-text/overflow-wrap/reference/overflow-wrap-break-word-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-002.html": [
+ [
+ "css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-002.html",
+ [
+ [
+ "/css/css-text/overflow-wrap/reference/overflow-wrap-break-word-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-003.html": [
+ [
+ "css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-003.html",
+ [
+ [
+ "/css/css-text/overflow-wrap/reference/overflow-wrap-break-word-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-004.html": [
+ [
+ "css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-004.html",
+ [
+ [
+ "/css/css-text/overflow-wrap/reference/overflow-wrap-break-word-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-text/overflow-wrap/overflow-wrap-anywhere-span-001.html": [
[
"css/css-text/overflow-wrap/overflow-wrap-anywhere-span-001.html",
@@ -148851,6 +149763,30 @@
{}
]
],
+ "css/css-text/overflow-wrap/overflow-wrap-break-word-009.html": [
+ [
+ "css/css-text/overflow-wrap/overflow-wrap-break-word-009.html",
+ [
+ [
+ "/css/css-text/overflow-wrap/reference/overflow-wrap-break-word-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/overflow-wrap/overflow-wrap-break-word-010.html": [
+ [
+ "css/css-text/overflow-wrap/overflow-wrap-break-word-010.html",
+ [
+ [
+ "/css/css-text/overflow-wrap/reference/overflow-wrap-break-word-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-text/overflow-wrap/overflow-wrap-break-word-fit-content-001.html": [
[
"css/css-text/overflow-wrap/overflow-wrap-break-word-fit-content-001.html",
@@ -148947,6 +149883,54 @@
{}
]
],
+ "css/css-text/overflow-wrap/overflow-wrap-min-content-size-005.html": [
+ [
+ "css/css-text/overflow-wrap/overflow-wrap-min-content-size-005.html",
+ [
+ [
+ "/css/css-text/overflow-wrap/reference/overflow-wrap-min-content-size-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/overflow-wrap/overflow-wrap-min-content-size-006.html": [
+ [
+ "css/css-text/overflow-wrap/overflow-wrap-min-content-size-006.html",
+ [
+ [
+ "/css/css-text/overflow-wrap/reference/overflow-wrap-min-content-size-004-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/overflow-wrap/overflow-wrap-min-content-size-007.html": [
+ [
+ "css/css-text/overflow-wrap/overflow-wrap-min-content-size-007.html",
+ [
+ [
+ "/css/css-text/overflow-wrap/reference/overflow-wrap-break-word-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/overflow-wrap/overflow-wrap-min-content-size-008.html": [
+ [
+ "css/css-text/overflow-wrap/overflow-wrap-min-content-size-008.html",
+ [
+ [
+ "/css/css-text/overflow-wrap/reference/overflow-wrap-break-word-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-text/overflow-wrap/overflow-wrap-normal-keep-all-001.html": [
[
"css/css-text/overflow-wrap/overflow-wrap-normal-keep-all-001.html",
@@ -151791,6 +152775,66 @@
{}
]
],
+ "css/css-text/white-space/break-spaces-before-first-char-014.html": [
+ [
+ "css/css-text/white-space/break-spaces-before-first-char-014.html",
+ [
+ [
+ "/css/css-text/white-space/reference/white-space-break-spaces-005-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/break-spaces-before-first-char-015.html": [
+ [
+ "css/css-text/white-space/break-spaces-before-first-char-015.html",
+ [
+ [
+ "/css/css-text/white-space/reference/white-space-break-spaces-005-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/break-spaces-before-first-char-016.html": [
+ [
+ "css/css-text/white-space/break-spaces-before-first-char-016.html",
+ [
+ [
+ "/css/css-text/white-space/reference/white-space-break-spaces-005-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/break-spaces-before-first-char-017.html": [
+ [
+ "css/css-text/white-space/break-spaces-before-first-char-017.html",
+ [
+ [
+ "/css/css-text/white-space/reference/white-space-break-spaces-005-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/break-spaces-before-first-char-018.html": [
+ [
+ "css/css-text/white-space/break-spaces-before-first-char-018.html",
+ [
+ [
+ "/css/css-text/white-space/reference/white-space-break-spaces-005-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-text/white-space/break-spaces-tab-001.html": [
[
"css/css-text/white-space/break-spaces-tab-001.html",
@@ -151863,6 +152907,126 @@
{}
]
],
+ "css/css-text/white-space/break-spaces-with-overflow-wrap-001.html": [
+ [
+ "css/css-text/white-space/break-spaces-with-overflow-wrap-001.html",
+ [
+ [
+ "/css/css-text/white-space/reference/white-space-break-spaces-005-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/break-spaces-with-overflow-wrap-002.html": [
+ [
+ "css/css-text/white-space/break-spaces-with-overflow-wrap-002.html",
+ [
+ [
+ "/css/css-text/white-space/reference/white-space-break-spaces-005-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/break-spaces-with-overflow-wrap-003.html": [
+ [
+ "css/css-text/white-space/break-spaces-with-overflow-wrap-003.html",
+ [
+ [
+ "/css/css-text/white-space/reference/pre-wrap-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/break-spaces-with-overflow-wrap-004.html": [
+ [
+ "css/css-text/white-space/break-spaces-with-overflow-wrap-004.html",
+ [
+ [
+ "/css/css-text/white-space/reference/pre-wrap-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/break-spaces-with-overflow-wrap-005.html": [
+ [
+ "css/css-text/white-space/break-spaces-with-overflow-wrap-005.html",
+ [
+ [
+ "/css/css-text/white-space/reference/white-space-break-spaces-005-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/break-spaces-with-overflow-wrap-006.html": [
+ [
+ "css/css-text/white-space/break-spaces-with-overflow-wrap-006.html",
+ [
+ [
+ "/css/css-text/white-space/reference/white-space-break-spaces-005-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/break-spaces-with-overflow-wrap-007.html": [
+ [
+ "css/css-text/white-space/break-spaces-with-overflow-wrap-007.html",
+ [
+ [
+ "/css/css-text/white-space/reference/white-space-break-spaces-005-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/break-spaces-with-overflow-wrap-008.html": [
+ [
+ "css/css-text/white-space/break-spaces-with-overflow-wrap-008.html",
+ [
+ [
+ "/css/css-text/white-space/reference/white-space-break-spaces-005-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/break-spaces-with-overflow-wrap-009.html": [
+ [
+ "css/css-text/white-space/break-spaces-with-overflow-wrap-009.html",
+ [
+ [
+ "/css/css-text/white-space/reference/white-space-break-spaces-005-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/break-spaces-with-overflow-wrap-010.html": [
+ [
+ "css/css-text/white-space/break-spaces-with-overflow-wrap-010.html",
+ [
+ [
+ "/css/css-text/white-space/reference/white-space-break-spaces-005-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-text/white-space/control-chars-000.html": [
[
"css/css-text/white-space/control-chars-000.html",
@@ -152763,6 +153927,30 @@
{}
]
],
+ "css/css-text/white-space/pre-wrap-009.html": [
+ [
+ "css/css-text/white-space/pre-wrap-009.html",
+ [
+ [
+ "/css/css-text/white-space/reference/white-space-break-spaces-005-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/pre-wrap-010.html": [
+ [
+ "css/css-text/white-space/pre-wrap-010.html",
+ [
+ [
+ "/css/css-text/white-space/reference/pre-wrap-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-text/white-space/pre-wrap-011.html": [
[
"css/css-text/white-space/pre-wrap-011.html",
@@ -154187,6 +155375,30 @@
{}
]
],
+ "css/css-text/word-break/word-break-break-all-029.html": [
+ [
+ "css/css-text/word-break/word-break-break-all-029.html",
+ [
+ [
+ "/css/css-text/word-break/reference/word-break-break-all-010-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/word-break/word-break-break-all-030.html": [
+ [
+ "css/css-text/word-break/word-break-break-all-030.html",
+ [
+ [
+ "/css/css-text/word-break/reference/word-break-break-all-010-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-text/word-break/word-break-break-all-inline-001.html": [
[
"css/css-text/word-break/word-break-break-all-inline-001.html",
@@ -154283,6 +155495,30 @@
{}
]
],
+ "css/css-text/word-break/word-break-break-all-inline-009.html": [
+ [
+ "css/css-text/word-break/word-break-break-all-inline-009.html",
+ [
+ [
+ "/css/css-text/word-break/reference/word-break-break-all-010-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/word-break/word-break-break-all-inline-010.html": [
+ [
+ "css/css-text/word-break/word-break-break-all-inline-010.html",
+ [
+ [
+ "/css/css-text/word-break/reference/word-break-break-all-010-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-text/word-break/word-break-break-word-overflow-wrap-interactions.html": [
[
"css/css-text/word-break/word-break-break-word-overflow-wrap-interactions.html",
@@ -205521,6 +206757,18 @@
{}
]
],
+ "svg/layout/svg-with-precent-dimensions-relayout.html": [
+ [
+ "svg/layout/svg-with-precent-dimensions-relayout.html",
+ [
+ [
+ "/svg/layout/svg-with-precent-dimensions-relayout-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"svg/linking/reftests/href-a-element-attr-change.html": [
[
"svg/linking/reftests/href-a-element-attr-change.html",
@@ -214197,6 +215445,12 @@
"client-hints/accept-ch-cache-revalidation.https.html.headers": [
[]
],
+ "client-hints/accept-ch-feature-policy-navigation.https.html.headers": [
+ []
+ ],
+ "client-hints/accept-ch-no-feature-policy-navigation.https.html.headers": [
+ []
+ ],
"client-hints/accept_ch.http.html.headers": [
[]
],
@@ -214245,15 +215499,27 @@
"client-hints/resources/dpr.py": [
[]
],
+ "client-hints/resources/expect-client-hints-headers-iframe.py": [
+ []
+ ],
"client-hints/resources/expect_client_hints_headers.html": [
[]
],
+ "client-hints/resources/feature-policy-navigation.js": [
+ []
+ ],
"client-hints/resources/http_equiv_accept_ch_lifetime.html": [
[]
],
"client-hints/resources/http_equiv_accept_ch_lifetime.html.headers": [
[]
],
+ "client-hints/resources/iframe-accept-ch-lifetime.html": [
+ []
+ ],
+ "client-hints/resources/iframe-accept-ch-lifetime.html.headers": [
+ []
+ ],
"client-hints/resources/sec-ch-ua.py": [
[]
],
@@ -214503,6 +215769,9 @@
"compat/webkit-background-origin-text-ref.html": [
[]
],
+ "compat/webkit-box-clamp-visibility-change-ref.html": [
+ []
+ ],
"compat/webkit-box-fieldset-ref.html": [
[]
],
@@ -227784,6 +229053,9 @@
"content-security-policy/frame-src/frame-src-redirect.html.headers": [
[]
],
+ "content-security-policy/frame-src/frame-src-same-document.html.headers": [
+ []
+ ],
"content-security-policy/frame-src/support/frame.html": [
[]
],
@@ -243366,9 +244638,6 @@
"css/css-backgrounds/background-attachment-local/attachment-scroll-positioning-1-ref.html": [
[]
],
- "css/css-backgrounds/background-attachment-local/reftest.list": [
- []
- ],
"css/css-backgrounds/background-clip-color-ref.html": [
[]
],
@@ -243447,9 +244716,6 @@
"css/css-backgrounds/background-size/support/rectangle-96x60.png": [
[]
],
- "css/css-backgrounds/background-size/vector/empty/reftest.list": [
- []
- ],
"css/css-backgrounds/background-size/vector/reference/background-size-vector-001-ref.html": [
[]
],
@@ -243570,9 +244836,6 @@
"css/css-backgrounds/background-size/vector/reference/ref-wide-lime8x64-aqua8x64.html": [
[]
],
- "css/css-backgrounds/background-size/vector/reftest.list": [
- []
- ],
"css/css-backgrounds/background-size/vector/support/diagonal-scaled-fixed.svg": [
[]
],
@@ -245634,9 +246897,6 @@
"css/css-flexbox/reference/ttwf-reftest-flex-inline-ref.html": [
[]
],
- "css/css-flexbox/reference/ttwf-reftest-flex-order-ref.html": [
- []
- ],
"css/css-flexbox/reference/ttwf-reftest-flex-wrap-ref.html": [
[]
],
@@ -251718,6 +252978,9 @@
"css/css-lists/nested-marker-ref.html": [
[]
],
+ "css/css-lists/ol-change-display-type-ref.html": [
+ []
+ ],
"css/css-lists/resources/white.gif": [
[]
],
@@ -253095,6 +254358,9 @@
"css/css-pseudo/first-line-on-ancestor-block-ref.html": [
[]
],
+ "css/css-pseudo/first-line-with-before-after-ref.html": [
+ []
+ ],
"css/css-pseudo/first-line-with-out-of-flow-ref.html": [
[]
],
@@ -254265,6 +255531,120 @@
"css/css-sizing/intrinsic-percent-non-replaced-005-ref.html": [
[]
],
+ "css/css-sizing/intrinsic-size/intrinsic-size-001-ref.html": [
+ []
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-002-ref.html": [
+ []
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-003-ref.html": [
+ []
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-004-ref.html": [
+ []
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-005-ref.html": [
+ []
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-006-ref.html": [
+ []
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-007-ref.html": [
+ []
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-008-ref.html": [
+ []
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-009-ref.html": [
+ []
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-010-ref.html": [
+ []
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-011-ref.html": [
+ []
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-012-ref.html": [
+ []
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-013-ref.html": [
+ []
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-014-ref.html": [
+ []
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-015-ref.html": [
+ []
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-016-ref.html": [
+ []
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-017-ref.html": [
+ []
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-018-ref.html": [
+ []
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-019-ref.html": [
+ []
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-020-ref.html": [
+ []
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-021-ref.html": [
+ []
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-022-ref.html": [
+ []
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-023-ref.html": [
+ []
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-024-ref.html": [
+ []
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-025-ref.html": [
+ []
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-026-ref.html": [
+ []
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-auto-001-ref.html": [
+ []
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-auto-002-ref.html": [
+ []
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-auto-003-ref.html": [
+ []
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-001-ref.html": [
+ []
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-002-ref.html": [
+ []
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-003-ref.html": [
+ []
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-004-ref.html": [
+ []
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-005-ref.html": [
+ []
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-006-ref.html": [
+ []
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-007-ref.html": [
+ []
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-008-ref.html": [
+ []
+ ],
+ "css/css-sizing/intrinsic-size/resources/dice.png": [
+ []
+ ],
"css/css-sizing/range-percent-intrinsic-size-1-ref.html": [
[]
],
@@ -264543,12 +265923,18 @@
"docs/assets/testharness-tutorial-test-screenshot-2.png": [
[]
],
+ "docs/assets/web-platform.png": [
+ []
+ ],
"docs/conf.py": [
[]
],
"docs/index.md": [
[]
],
+ "docs/intro-video-transcript.md": [
+ []
+ ],
"docs/make.bat": [
[]
],
@@ -266562,6 +267948,9 @@
"fetch/api/request/destination/resources/empty.https.html": [
[]
],
+ "fetch/api/request/destination/resources/fetch-destination-worker-frame.js": [
+ []
+ ],
"fetch/api/request/destination/resources/fetch-destination-worker-iframe.js": [
[]
],
@@ -274161,6 +275550,9 @@
"html/webappapis/structured-clone/structured-clone-battery-of-tests.js": [
[]
],
+ "html/webappapis/the-windoworworkerglobalscope-mixin/README.md": [
+ []
+ ],
"html/webappapis/the-windoworworkerglobalscope-mixin/support/WorkerSelfOriginSharedWorker.js": [
[]
],
@@ -274413,7 +275805,7 @@
"import-maps/builtin-support.tentative/imported/resources/resolving.js": [
[]
],
- "import-maps/builtin-support.tentative/static-import.js": [
+ "import-maps/builtin-support.tentative/static-import.py": [
[]
],
"import-maps/core/bare/__dir__.headers": [
@@ -274431,7 +275823,7 @@
"import-maps/core/bare/to-data": [
[]
],
- "import-maps/core/static-import.js": [
+ "import-maps/core/static-import.py": [
[]
],
"import-maps/imported/resources/helpers/parsing.js": [
@@ -274524,6 +275916,18 @@
"infrastructure/metadata/infrastructure/expected-fail/failing-test.html.ini": [
[]
],
+ "infrastructure/metadata/infrastructure/expected-fail/precondition-in-promise.html.ini": [
+ []
+ ],
+ "infrastructure/metadata/infrastructure/expected-fail/precondition-in-setup.html.ini": [
+ []
+ ],
+ "infrastructure/metadata/infrastructure/expected-fail/precondition-without-setup.html.ini": [
+ []
+ ],
+ "infrastructure/metadata/infrastructure/expected-fail/precondition.html.ini": [
+ []
+ ],
"infrastructure/metadata/infrastructure/expected-fail/timeout.html.ini": [
[]
],
@@ -274608,6 +276012,9 @@
"infrastructure/metadata/infrastructure/testdriver/actions/multiDevice.html.ini": [
[]
],
+ "infrastructure/metadata/infrastructure/testdriver/actions/multiTouchPoints.html.ini": [
+ []
+ ],
"infrastructure/metadata/infrastructure/testdriver/actions/pause.html.ini": [
[]
],
@@ -274620,6 +276027,9 @@
"infrastructure/metadata/infrastructure/testdriver/generate_test_report.html.ini": [
[]
],
+ "infrastructure/metadata/infrastructure/testdriver/virtual_authenticator.html.ini": [
+ []
+ ],
"infrastructure/reftest-wait-ref.html": [
[]
],
@@ -275208,6 +276618,9 @@
"layout-instability/resources/slow-image.py": [
[]
],
+ "layout-instability/resources/util.js": [
+ []
+ ],
"lifecycle/META.yml": [
[]
],
@@ -282114,6 +283527,9 @@
"std-toast/resources/helpers.js": [
[]
],
+ "storage-access-api/META.yml": [
+ []
+ ],
"storage-access-api/helpers.js": [
[]
],
@@ -282423,6 +283839,9 @@
"svg/interact/scripted/resources/blank.htm": [
[]
],
+ "svg/layout/svg-with-precent-dimensions-relayout-ref.html": [
+ []
+ ],
"svg/linking/reftests/href-a-element-ref.html": [
[]
],
@@ -287310,6 +288729,18 @@
"trusted-types/support/helper.sub.js": [
[]
],
+ "trusted-types/support/navigation-report-only-support.html": [
+ []
+ ],
+ "trusted-types/support/navigation-report-only-support.html.headers": [
+ []
+ ],
+ "trusted-types/support/navigation-support.html": [
+ []
+ ],
+ "trusted-types/support/navigation-support.html.headers": [
+ []
+ ],
"trusted-types/support/worker.js": [
[]
],
@@ -287994,9 +289425,6 @@
"webaudio/js/worklet-recorder.js": [
[]
],
- "webaudio/refresh_idl.rb": [
- []
- ],
"webaudio/resources/4ch-440.wav": [
[]
],
@@ -288663,7 +290091,7 @@
"webgpu/suites/cts/validation/validation_test.js": [
[]
],
- "webgpu/suites/cts/validation/vertex_input.spec.js": [
+ "webgpu/suites/cts/validation/vertex_state.spec.js": [
[]
],
"webmessaging/META.yml": [
@@ -298417,6 +299845,38 @@
{}
]
],
+ "IndexedDB/idbindex_reverse_cursor.any.js": [
+ [
+ "IndexedDB/idbindex_reverse_cursor.any.html",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "Reverse Cursor Validity"
+ ],
+ [
+ "script",
+ "support-promises.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "IndexedDB/idbindex_reverse_cursor.any.worker.html",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "Reverse Cursor Validity"
+ ],
+ [
+ "script",
+ "support-promises.js"
+ ]
+ ]
+ }
+ ]
+ ],
"IndexedDB/idbkeyrange-includes.htm": [
[
"IndexedDB/idbkeyrange-includes.htm",
@@ -307099,9 +308559,21 @@
{}
]
],
- "battery-status/battery-interface-idlharness.https.window.js": [
+ "battery-status/battery-promise-window.https.html": [
+ [
+ "battery-status/battery-promise-window.https.html",
+ {}
+ ]
+ ],
+ "battery-status/battery-promise.https.html": [
+ [
+ "battery-status/battery-promise.https.html",
+ {}
+ ]
+ ],
+ "battery-status/idlharness.https.window.js": [
[
- "battery-status/battery-interface-idlharness.https.window.html",
+ "battery-status/idlharness.https.window.html",
{
"script_metadata": [
[
@@ -307116,18 +308588,6 @@
}
]
],
- "battery-status/battery-promise-window.https.html": [
- [
- "battery-status/battery-promise-window.https.html",
- {}
- ]
- ],
- "battery-status/battery-promise.https.html": [
- [
- "battery-status/battery-promise.https.html",
- {}
- ]
- ],
"beacon/beacon-basic-blob.html": [
[
"beacon/beacon-basic-blob.html",
@@ -310039,6 +311499,12 @@
{}
]
],
+ "client-hints/accept-ch-feature-policy-navigation.https.html": [
+ [
+ "client-hints/accept-ch-feature-policy-navigation.https.html",
+ {}
+ ]
+ ],
"client-hints/accept-ch-lifetime.tentative.https.html": [
[
"client-hints/accept-ch-lifetime.tentative.https.html",
@@ -310047,6 +311513,12 @@
}
]
],
+ "client-hints/accept-ch-no-feature-policy-navigation.https.html": [
+ [
+ "client-hints/accept-ch-no-feature-policy-navigation.https.html",
+ {}
+ ]
+ ],
"client-hints/accept_ch.http.html": [
[
"client-hints/accept_ch.http.html",
@@ -311656,6 +313128,18 @@
{}
]
],
+ "content-security-policy/frame-src/frame-src-same-document-meta.html": [
+ [
+ "content-security-policy/frame-src/frame-src-same-document-meta.html",
+ {}
+ ]
+ ],
+ "content-security-policy/frame-src/frame-src-same-document.html": [
+ [
+ "content-security-policy/frame-src/frame-src-same-document.html",
+ {}
+ ]
+ ],
"content-security-policy/frame-src/frame-src-self-unique-origin.html": [
[
"content-security-policy/frame-src/frame-src-self-unique-origin.html",
@@ -311716,9 +313200,9 @@
{}
]
],
- "content-security-policy/generic/generic-0_10.html": [
+ "content-security-policy/generic/generic-0_10.sub.html": [
[
- "content-security-policy/generic/generic-0_10.html",
+ "content-security-policy/generic/generic-0_10.sub.html",
{}
]
],
@@ -317094,6 +318578,12 @@
{}
]
],
+ "css/css-color/parsing/system-color-valid.html": [
+ [
+ "css/css-color/parsing/system-color-valid.html",
+ {}
+ ]
+ ],
"css/css-color/rgb-rounding-001.html": [
[
"css/css-color/rgb-rounding-001.html",
@@ -318090,6 +319580,12 @@
{}
]
],
+ "css/css-flexbox/percentage-padding-001.html": [
+ [
+ "css/css-flexbox/percentage-padding-001.html",
+ {}
+ ]
+ ],
"css/css-flexbox/position-absolute-001.html": [
[
"css/css-flexbox/position-absolute-001.html",
@@ -318246,6 +319742,12 @@
{}
]
],
+ "css/css-fonts/generic-family-keywords-001.html": [
+ [
+ "css/css-fonts/generic-family-keywords-001.html",
+ {}
+ ]
+ ],
"css/css-fonts/idlharness.html": [
[
"css/css-fonts/idlharness.html",
@@ -319090,6 +320592,36 @@
{}
]
],
+ "css/css-grid/alignment/grid-align-justify-margin-border-padding-vertical-lr.html": [
+ [
+ "css/css-grid/alignment/grid-align-justify-margin-border-padding-vertical-lr.html",
+ {}
+ ]
+ ],
+ "css/css-grid/alignment/grid-align-justify-margin-border-padding-vertical-rl.html": [
+ [
+ "css/css-grid/alignment/grid-align-justify-margin-border-padding-vertical-rl.html",
+ {}
+ ]
+ ],
+ "css/css-grid/alignment/grid-align-justify-margin-border-padding.html": [
+ [
+ "css/css-grid/alignment/grid-align-justify-margin-border-padding.html",
+ {}
+ ]
+ ],
+ "css/css-grid/alignment/grid-align-justify-overflow.html": [
+ [
+ "css/css-grid/alignment/grid-align-justify-overflow.html",
+ {}
+ ]
+ ],
+ "css/css-grid/alignment/grid-align-justify-stretch-with-orthogonal-flows.html": [
+ [
+ "css/css-grid/alignment/grid-align-justify-stretch-with-orthogonal-flows.html",
+ {}
+ ]
+ ],
"css/css-grid/alignment/grid-align-justify-stretch.html": [
[
"css/css-grid/alignment/grid-align-justify-stretch.html",
@@ -321184,6 +322716,12 @@
{}
]
],
+ "css/css-lists/list-inside-contain.html": [
+ [
+ "css/css-lists/list-inside-contain.html",
+ {}
+ ]
+ ],
"css/css-lists/nested-list-with-list-style-type-none.html": [
[
"css/css-lists/nested-list-with-list-style-type-none.html",
@@ -324664,6 +326202,102 @@
{}
]
],
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-block-size-computed.html": [
+ [
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-block-size-computed.html",
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-block-size-invalid.html": [
+ [
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-block-size-invalid.html",
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-block-size-valid.html": [
+ [
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-block-size-valid.html",
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-height-computed.html": [
+ [
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-height-computed.html",
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-height-invalid.html": [
+ [
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-height-invalid.html",
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-height-valid.html": [
+ [
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-height-valid.html",
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-inline-size-computed.html": [
+ [
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-inline-size-computed.html",
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-inline-size-invalid.html": [
+ [
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-inline-size-invalid.html",
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-inline-size-valid.html": [
+ [
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-inline-size-valid.html",
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-size-computed.html": [
+ [
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-size-computed.html",
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-size-invalid.html": [
+ [
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-size-invalid.html",
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-size-sets-computed-dimensions.html": [
+ [
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-size-sets-computed-dimensions.html",
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-size-valid.html": [
+ [
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-size-valid.html",
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-width-computed.html": [
+ [
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-width-computed.html",
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-width-invalid.html": [
+ [
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-width-invalid.html",
+ {}
+ ]
+ ],
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-width-valid.html": [
+ [
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-width-valid.html",
+ {}
+ ]
+ ],
"css/css-sizing/min-max-content-orthogonal-flow-crash-001.html": [
[
"css/css-sizing/min-max-content-orthogonal-flow-crash-001.html",
@@ -327010,6 +328644,12 @@
{}
]
],
+ "css/css-text/line-breaking/line-breaking-atomic-nowrap-001.html": [
+ [
+ "css/css-text/line-breaking/line-breaking-atomic-nowrap-001.html",
+ {}
+ ]
+ ],
"css/css-text/overflow-wrap/overflow-wrap-anywhere-span-002.html": [
[
"css/css-text/overflow-wrap/overflow-wrap-anywhere-span-002.html",
@@ -332848,6 +334488,12 @@
{}
]
],
+ "css/cssom/serialize-media-rule.html": [
+ [
+ "css/cssom/serialize-media-rule.html",
+ {}
+ ]
+ ],
"css/cssom/serialize-namespaced-type-selectors.html": [
[
"css/cssom/serialize-namespaced-type-selectors.html",
@@ -350450,6 +352096,12 @@
}
]
],
+ "fetch/api/request/destination/fetch-destination-frame.https.html": [
+ [
+ "fetch/api/request/destination/fetch-destination-frame.https.html",
+ {}
+ ]
+ ],
"fetch/api/request/destination/fetch-destination-iframe.https.html": [
[
"fetch/api/request/destination/fetch-destination-iframe.https.html",
@@ -355525,9 +357177,9 @@
{}
]
],
- "html/dom/usvstring-reflection.html": [
+ "html/dom/usvstring-reflection.https.html": [
[
- "html/dom/usvstring-reflection.html",
+ "html/dom/usvstring-reflection.https.html",
{}
]
],
@@ -361772,6 +363424,12 @@
{}
]
],
+ "html/semantics/interactive-elements/the-dialog-element/dialog-autofocus-just-once.html": [
+ [
+ "html/semantics/interactive-elements/the-dialog-element/dialog-autofocus-just-once.html",
+ {}
+ ]
+ ],
"html/semantics/interactive-elements/the-dialog-element/dialog-autofocus-multiple-times.html": [
[
"html/semantics/interactive-elements/the-dialog-element/dialog-autofocus-multiple-times.html",
@@ -361796,6 +363454,12 @@
{}
]
],
+ "html/semantics/interactive-elements/the-dialog-element/dialog-focusing-steps-prevent-autofocus.html": [
+ [
+ "html/semantics/interactive-elements/the-dialog-element/dialog-focusing-steps-prevent-autofocus.html",
+ {}
+ ]
+ ],
"html/semantics/interactive-elements/the-dialog-element/dialog-open.html": [
[
"html/semantics/interactive-elements/the-dialog-element/dialog-open.html",
@@ -367795,6 +369459,30 @@
{}
]
],
+ "infrastructure/expected-fail/precondition-in-promise.html": [
+ [
+ "infrastructure/expected-fail/precondition-in-promise.html",
+ {}
+ ]
+ ],
+ "infrastructure/expected-fail/precondition-in-setup.html": [
+ [
+ "infrastructure/expected-fail/precondition-in-setup.html",
+ {}
+ ]
+ ],
+ "infrastructure/expected-fail/precondition-without-setup.html": [
+ [
+ "infrastructure/expected-fail/precondition-without-setup.html",
+ {}
+ ]
+ ],
+ "infrastructure/expected-fail/precondition.html": [
+ [
+ "infrastructure/expected-fail/precondition.html",
+ {}
+ ]
+ ],
"infrastructure/expected-fail/timeout.html": [
[
"infrastructure/expected-fail/timeout.html",
@@ -368152,6 +369840,14 @@
}
]
],
+ "infrastructure/testdriver/actions/multiTouchPoints.html": [
+ [
+ "infrastructure/testdriver/actions/multiTouchPoints.html",
+ {
+ "testdriver": true
+ }
+ ]
+ ],
"infrastructure/testdriver/actions/pause.html": [
[
"infrastructure/testdriver/actions/pause.html",
@@ -368200,6 +369896,14 @@
}
]
],
+ "infrastructure/testdriver/virtual_authenticator.html": [
+ [
+ "infrastructure/testdriver/virtual_authenticator.html",
+ {
+ "testdriver": true
+ }
+ ]
+ ],
"input-device-capabilities/idlharness.window.js": [
[
"input-device-capabilities/idlharness.window.html",
@@ -369040,6 +370744,18 @@
}
]
],
+ "layout-instability/rtl-distance.html": [
+ [
+ "layout-instability/rtl-distance.html",
+ {}
+ ]
+ ],
+ "layout-instability/simple-block-movement.html": [
+ [
+ "layout-instability/simple-block-movement.html",
+ {}
+ ]
+ ],
"layout-instability/supported-layout-type.html": [
[
"layout-instability/supported-layout-type.html",
@@ -369052,6 +370768,12 @@
{}
]
],
+ "layout-instability/transform.html": [
+ [
+ "layout-instability/transform.html",
+ {}
+ ]
+ ],
"lifecycle/child-display-none.tentative.html": [
[
"lifecycle/child-display-none.tentative.html",
@@ -385662,6 +387384,12 @@
}
]
],
+ "permissions/nfc-permission.html": [
+ [
+ "permissions/nfc-permission.html",
+ {}
+ ]
+ ],
"permissions/permissions-query-feature-policy-attribute.https.sub.html": [
[
"permissions/permissions-query-feature-policy-attribute.https.sub.html",
@@ -402419,9 +404147,9 @@
}
]
],
- "screen_enumeration/requestDisplays.tentative.https.any.js": [
+ "screen_enumeration/getScreens.tentative.https.any.js": [
[
- "screen_enumeration/requestDisplays.tentative.https.any.html",
+ "screen_enumeration/getScreens.tentative.https.any.html",
{
"script_metadata": [
[
@@ -402432,7 +404160,7 @@
}
],
[
- "screen_enumeration/requestDisplays.tentative.https.any.serviceworker.html",
+ "screen_enumeration/getScreens.tentative.https.any.serviceworker.html",
{
"script_metadata": [
[
@@ -402443,7 +404171,7 @@
}
],
[
- "screen_enumeration/requestDisplays.tentative.https.any.sharedworker.html",
+ "screen_enumeration/getScreens.tentative.https.any.sharedworker.html",
{
"script_metadata": [
[
@@ -402454,7 +404182,7 @@
}
],
[
- "screen_enumeration/requestDisplays.tentative.https.any.worker.html",
+ "screen_enumeration/getScreens.tentative.https.any.worker.html",
{
"script_metadata": [
[
@@ -402524,6 +404252,22 @@
{}
]
],
+ "scroll-to-text-fragment/scroll-to-text-fragment-api.html": [
+ [
+ "scroll-to-text-fragment/scroll-to-text-fragment-api.html",
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "scroll-to-text-fragment/scroll-to-text-fragment-same-doc.html": [
+ [
+ "scroll-to-text-fragment/scroll-to-text-fragment-same-doc.html",
+ {
+ "testdriver": true
+ }
+ ]
+ ],
"scroll-to-text-fragment/scroll-to-text-fragment.html": [
[
"scroll-to-text-fragment/scroll-to-text-fragment.html",
@@ -407592,6 +409336,64 @@
}
]
],
+ "streams/piping/throwing-options.any.js": [
+ [
+ "streams/piping/throwing-options.any.html",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "worker,jsshell"
+ ]
+ ]
+ }
+ ],
+ [
+ "streams/piping/throwing-options.any.js",
+ {
+ "jsshell": true,
+ "script_metadata": [
+ [
+ "global",
+ "worker,jsshell"
+ ]
+ ]
+ }
+ ],
+ [
+ "streams/piping/throwing-options.any.serviceworker.html",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "worker,jsshell"
+ ]
+ ]
+ }
+ ],
+ [
+ "streams/piping/throwing-options.any.sharedworker.html",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "worker,jsshell"
+ ]
+ ]
+ }
+ ],
+ [
+ "streams/piping/throwing-options.any.worker.html",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "worker,jsshell"
+ ]
+ ]
+ }
+ ]
+ ],
"streams/piping/transform-streams.any.js": [
[
"streams/piping/transform-streams.any.html",
@@ -412018,6 +413820,12 @@
{}
]
],
+ "svg/animations/short-simple-duration-and-fractional-repeatcount.html": [
+ [
+ "svg/animations/short-simple-duration-and-fractional-repeatcount.html",
+ {}
+ ]
+ ],
"svg/animations/single-values-animation.html": [
[
"svg/animations/single-values-animation.html",
@@ -412476,6 +414284,12 @@
{}
]
],
+ "svg/animations/switching-animated-target-to-unknown-element.html": [
+ [
+ "svg/animations/switching-animated-target-to-unknown-element.html",
+ {}
+ ]
+ ],
"svg/animations/syncbase-remove-add-while-running.html": [
[
"svg/animations/syncbase-remove-add-while-running.html",
@@ -414101,6 +415915,12 @@
}
]
],
+ "trusted-types/trusted-types-createHTMLDocument.tentative.html": [
+ [
+ "trusted-types/trusted-types-createHTMLDocument.tentative.html",
+ {}
+ ]
+ ],
"trusted-types/trusted-types-eval-reporting-no-unsafe-eval.tentative.https.html": [
[
"trusted-types/trusted-types-eval-reporting-no-unsafe-eval.tentative.https.html",
@@ -414119,6 +415939,12 @@
{}
]
],
+ "trusted-types/trusted-types-navigation.tentative.html": [
+ [
+ "trusted-types/trusted-types-navigation.tentative.html",
+ {}
+ ]
+ ],
"trusted-types/trusted-types-report-only.tentative.https.html": [
[
"trusted-types/trusted-types-report-only.tentative.https.html",
@@ -421295,6 +423121,23 @@
{}
]
],
+ "web-animations/idlharness.window.js": [
+ [
+ "web-animations/idlharness.window.html",
+ {
+ "script_metadata": [
+ [
+ "script",
+ "/resources/WebIDLParser.js"
+ ],
+ [
+ "script",
+ "/resources/idlharness.js"
+ ]
+ ]
+ }
+ ]
+ ],
"web-animations/interfaces/Animatable/animate-no-browsing-context.html": [
[
"web-animations/interfaces/Animatable/animate-no-browsing-context.html",
@@ -421349,23 +423192,6 @@
{}
]
],
- "web-animations/interfaces/Animation/idlharness.window.js": [
- [
- "web-animations/interfaces/Animation/idlharness.window.html",
- {
- "script_metadata": [
- [
- "script",
- "/resources/WebIDLParser.js"
- ],
- [
- "script",
- "/resources/idlharness.js"
- ]
- ]
- }
- ]
- ],
"web-animations/interfaces/Animation/oncancel.html": [
[
"web-animations/interfaces/Animation/oncancel.html",
@@ -421438,23 +423264,6 @@
{}
]
],
- "web-animations/interfaces/AnimationPlaybackEvent/idlharness.window.js": [
- [
- "web-animations/interfaces/AnimationPlaybackEvent/idlharness.window.html",
- {
- "script_metadata": [
- [
- "script",
- "/resources/WebIDLParser.js"
- ],
- [
- "script",
- "/resources/idlharness.js"
- ]
- ]
- }
- ]
- ],
"web-animations/interfaces/Document/timeline.html": [
[
"web-animations/interfaces/Document/timeline.html",
@@ -421473,23 +423282,6 @@
{}
]
],
- "web-animations/interfaces/DocumentTimeline/idlharness.window.js": [
- [
- "web-animations/interfaces/DocumentTimeline/idlharness.window.html",
- {
- "script_metadata": [
- [
- "script",
- "/resources/WebIDLParser.js"
- ],
- [
- "script",
- "/resources/idlharness.js"
- ]
- ]
- }
- ]
- ],
"web-animations/interfaces/DocumentTimeline/style-change-events.html": [
[
"web-animations/interfaces/DocumentTimeline/style-change-events.html",
@@ -421520,23 +423312,6 @@
{}
]
],
- "web-animations/interfaces/KeyframeEffect/idlharness.window.js": [
- [
- "web-animations/interfaces/KeyframeEffect/idlharness.window.html",
- {
- "script_metadata": [
- [
- "script",
- "/resources/WebIDLParser.js"
- ],
- [
- "script",
- "/resources/idlharness.js"
- ]
- ]
- }
- ]
- ],
"web-animations/interfaces/KeyframeEffect/iterationComposite.html": [
[
"web-animations/interfaces/KeyframeEffect/iterationComposite.html",
@@ -424436,7 +426211,7 @@
{}
],
[
- "webgpu/cts.html?q=cts:validation/vertex_input:",
+ "webgpu/cts.html?q=cts:validation/vertex_state:",
{}
]
],
@@ -456369,7 +458144,9 @@
"webdriver/tests/find_element_from_element/find.py": [
[
"webdriver/tests/find_element_from_element/find.py",
- {}
+ {
+ "timeout": "long"
+ }
]
],
"webdriver/tests/find_element_from_element/user_prompts.py": [
@@ -461566,7 +463343,7 @@
"support"
],
"CONTRIBUTING.md": [
- "baa208e30f4eca8ca10c0e9cb6f89f2d0a726f2b",
+ "54d963d7adbd9d0ab22ef331d0f5d56240c82e90",
"support"
],
"FileAPI/BlobURL/support/file_test2.txt": [
@@ -462725,6 +464502,10 @@
"bf134dff18a3bf6278b0c659b32e01652e4b984b",
"testharness"
],
+ "IndexedDB/idbindex_reverse_cursor.any.js": [
+ "0b3c767fee17cb2739bd49a05237beaea5129e20",
+ "testharness"
+ ],
"IndexedDB/idbkeyrange-includes.htm": [
"aea588051aeaab63c3855a778b22d1a6932d78ff",
"testharness"
@@ -463414,7 +465195,7 @@
"support"
],
"README.md": [
- "320176c40ce4d4fc3bfdbd6a637c87e59143cb20",
+ "e3ee8551ff48a77652e2a4dc4fbc677e0812c5c5",
"support"
],
"WebCryptoAPI/META.yml": [
@@ -467557,10 +469338,6 @@
"9d2c9fd1d41dc299a59c4e374c954302db1ac502",
"testharness"
],
- "battery-status/battery-interface-idlharness.https.window.js": [
- "b33c82e426c7fe35c6c54a649d12685d3419d9e7",
- "testharness"
- ],
"battery-status/battery-plugging-in-manual.https.html": [
"1445bd7e2600bcf531cb50bdaf2337152d6638ae",
"manual"
@@ -467577,6 +469354,10 @@
"3b515786dc75e72c8d821f4a6189722021803edb",
"manual"
],
+ "battery-status/idlharness.https.window.js": [
+ "b33c82e426c7fe35c6c54a649d12685d3419d9e7",
+ "testharness"
+ ],
"battery-status/support-iframe.html": [
"d4e5b31f130067ddf1a28d7cf787e61e83d340c1",
"support"
@@ -468581,10 +470362,26 @@
"05b7a4a6f6fcb91b18f2a0e767010e81c9329fb8",
"support"
],
+ "client-hints/accept-ch-feature-policy-navigation.https.html": [
+ "dff960d28709ae6888f0da0b221e93c7b160e7e6",
+ "testharness"
+ ],
+ "client-hints/accept-ch-feature-policy-navigation.https.html.headers": [
+ "f9595a794d9c93dca09f371f5797399a9204ed53",
+ "support"
+ ],
"client-hints/accept-ch-lifetime.tentative.https.html": [
"f0b03ba0a8c311642af793a341653995fb73cbd9",
"testharness"
],
+ "client-hints/accept-ch-no-feature-policy-navigation.https.html": [
+ "5fb6c22f50873ce597e6d5ed04c1ebeef64a17c1",
+ "testharness"
+ ],
+ "client-hints/accept-ch-no-feature-policy-navigation.https.html.headers": [
+ "7eb28a000bdde9634e618701e2ba512e4a9ebc49",
+ "support"
+ ],
"client-hints/accept_ch.http.html": [
"50d77646f89aea13c212c6ecee4e7f32107007e9",
"testharness"
@@ -468674,7 +470471,7 @@
"support"
],
"client-hints/resources/accept_ch_lifetime.html.headers": [
- "bd90f6eced08859fc8918757538c255be3b2a1db",
+ "370f9869226db4bdf8785c876b13d69b415e5abf",
"support"
],
"client-hints/resources/clear-site-data.html": [
@@ -468693,10 +470490,18 @@
"14d7d550fe28d49a63105ea966d3cf7cf59901b1",
"support"
],
+ "client-hints/resources/expect-client-hints-headers-iframe.py": [
+ "e72d77c47d9aae36c619e8e065e5685f7a9c166b",
+ "support"
+ ],
"client-hints/resources/expect_client_hints_headers.html": [
"8e64b1989ab2046952f91920245423caebb2a706",
"support"
],
+ "client-hints/resources/feature-policy-navigation.js": [
+ "4487d9a447313f87dd2f230ce7d858b38008fae8",
+ "support"
+ ],
"client-hints/resources/http_equiv_accept_ch_lifetime.html": [
"ab2ab9e60c8a4ee6d4fc088fb6c8d4d6d0daffd6",
"support"
@@ -468705,6 +470510,14 @@
"27140bf36e4dbd22b8f7190587f42a570c9d12bd",
"support"
],
+ "client-hints/resources/iframe-accept-ch-lifetime.html": [
+ "693e4f94dcc3363f0d15e7c7a18a7a598c72cf77",
+ "support"
+ ],
+ "client-hints/resources/iframe-accept-ch-lifetime.html.headers": [
+ "8e6dc72dda620dc0508d02009e6cc58631a00e7b",
+ "support"
+ ],
"client-hints/resources/sec-ch-ua.py": [
"a14a27dadf9e333784a5c636c821634b387e475f",
"support"
@@ -468894,7 +470707,7 @@
"support"
],
"common/security-features/resources/common.sub.js": [
- "c974e83b9604d5770ffb849a1b77f963d3f7955b",
+ "b43417b417c189d1e1b3444baa286456df979bb5",
"support"
],
"common/security-features/resources/common.sub.js.headers": [
@@ -469117,6 +470930,14 @@
"06e728342cdb63a72b420423b40b6e32ae3e2162",
"reftest"
],
+ "compat/webkit-box-clamp-visibility-change-ref.html": [
+ "20ec3bfaf8bf92f426d6dc7b6dc56a59dd568b1d",
+ "support"
+ ],
+ "compat/webkit-box-clamp-visibility-change.html": [
+ "115fa4366523dd64adf5bd14de661eb8ac8f9214",
+ "reftest"
+ ],
"compat/webkit-box-fieldset-ref.html": [
"b5d7176150d0403a87dfd2b9e59af219ddb6b9bb",
"support"
@@ -486862,7 +488683,7 @@
"testharness"
],
"contacts/contacts-select.https.window.js": [
- "617dee8b7f85a77c3d412d87f1c7dcada176749f",
+ "c93d711ed5205fffb96298423d853bf4171ff8d3",
"testharness"
],
"contacts/resources/helpers.js": [
@@ -486882,7 +488703,7 @@
"support"
],
"content-security-policy/README.html": [
- "98fd5c4bf789b99b959bab3fbdadb1ad408db5a0",
+ "8986d736a0e7d68b0c0b19d8555238d00f9248f3",
"support"
],
"content-security-policy/base-uri/base-uri-allow.sub.html": [
@@ -487433,6 +489254,18 @@
"338bea13b84a2f5c4d95b778637409e2bf8d3263",
"support"
],
+ "content-security-policy/frame-src/frame-src-same-document-meta.html": [
+ "f3750b1e7d83fb50089a1b643045b89df223dff4",
+ "testharness"
+ ],
+ "content-security-policy/frame-src/frame-src-same-document.html": [
+ "398d0223bcb7cf3fad9086c424510bbfcdcdc818",
+ "testharness"
+ ],
+ "content-security-policy/frame-src/frame-src-same-document.html.headers": [
+ "6502444407f59e6ea08da63c8dcdb22978e5ae83",
+ "support"
+ ],
"content-security-policy/frame-src/frame-src-self-unique-origin.html": [
"947b11e063de776b4d9afffb91e1667460d9099f",
"testharness"
@@ -487490,11 +489323,11 @@
"testharness"
],
"content-security-policy/generic/generic-0_1-script-src.html": [
- "35033c3899f78e1f176f34977e4e069d935ff1b3",
+ "b374b8b88e99c2275881d71c518358fff41feb60",
"testharness"
],
- "content-security-policy/generic/generic-0_10.html": [
- "5dfd9d83c7ff3060fa30beb8e3cff1845ab1d7ca",
+ "content-security-policy/generic/generic-0_10.sub.html": [
+ "d4f52d8b8d1598779faacacec9825e0a9852abdb",
"testharness"
],
"content-security-policy/generic/generic-0_10_1.sub.html": [
@@ -553733,10 +555566,6 @@
"67bccc350e00f815b8bcd46f3a85a0d8916d378f",
"reftest"
],
- "css/css-backgrounds/background-attachment-local/reftest.list": [
- "b1d23371e3e5ef66de8d2bf3ef78fa4d3ce83803",
- "support"
- ],
"css/css-backgrounds/background-border-collapsed-gradient.html": [
"73b097cf9a84733126237ea9ef0534b4850536bd",
"reftest"
@@ -554521,10 +556350,6 @@
"a794e46622b2c2d2405b6d324f1aa308c4e96157",
"reftest"
],
- "css/css-backgrounds/background-size/vector/empty/reftest.list": [
- "8cacdc1e469b240d7e24a5c2d0254f03e357cd5d",
- "support"
- ],
"css/css-backgrounds/background-size/vector/reference/background-size-vector-001-ref.html": [
"9f0c4de5629d844ee246f4f84288e58da8e1d7c8",
"support"
@@ -554685,10 +556510,6 @@
"870bc1bf2c91f32a0c091ac39984cff6cf7b2d44",
"support"
],
- "css/css-backgrounds/background-size/vector/reftest.list": [
- "6b9fe45f97ea56b26468abc56d1c1543bb404a47",
- "support"
- ],
"css/css-backgrounds/background-size/vector/support/diagonal-scaled-fixed.svg": [
"bf0dcfb59b5e215546de9aae8c0ba47229804f19",
"support"
@@ -557946,7 +559767,7 @@
"testharness"
],
"css/css-color/parsing/color-valid.html": [
- "48e97561f40c370acd88bf41220b5482eedf245e",
+ "62df82623a4e958da46dbe91b1cd64e95a57c5af",
"testharness"
],
"css/css-color/parsing/opacity-computed.html": [
@@ -557961,6 +559782,10 @@
"daa8d8647f17ec48a1c648dfaea48bc8373c20ea",
"testharness"
],
+ "css/css-color/parsing/system-color-valid.html": [
+ "9d93bd4a21de259eb991e0dc90db6581e9b7c8c3",
+ "testharness"
+ ],
"css/css-color/rebeccapurple-ref.html": [
"8c15364f38e53cc1651f2f6c115c7b2fca3f4ba9",
"support"
@@ -565253,6 +567078,18 @@
"1318933952c99e9bb142f74110cbc388e6dda6c4",
"reftest"
],
+ "css/css-flexbox/percentage-heights-008.html": [
+ "732f94199b5129e8d7a46dba0a6195d996678683",
+ "reftest"
+ ],
+ "css/css-flexbox/percentage-heights-009.html": [
+ "b3de59562bc1ff6b78d9c7b29a5836d47bf8a81b",
+ "reftest"
+ ],
+ "css/css-flexbox/percentage-padding-001.html": [
+ "8bba5d60f5cae1b93df70c1973a473f163020a51",
+ "testharness"
+ ],
"css/css-flexbox/percentage-size-subitems-001.html": [
"70f3953052a3a770c6cd15ee169607a00fc452b0",
"reftest"
@@ -565441,10 +567278,6 @@
"369de990ff2190ea0e4592d4dfc354a8a8fcae16",
"support"
],
- "css/css-flexbox/reference/ttwf-reftest-flex-order-ref.html": [
- "6cddecece8649a168f915e502eae4d00204a74fb",
- "support"
- ],
"css/css-flexbox/reference/ttwf-reftest-flex-wrap-ref.html": [
"bb3e2b947af42106dec6974664075afb9e8cb7d3",
"support"
@@ -565729,10 +567562,6 @@
"275ecd0b6091a1c2d267b5104552c9038b76b681",
"reftest"
],
- "css/css-flexbox/ttwf-reftest-flex-order.html": [
- "2edac404b6d1688c1cbe7cc497e82d5e87a918fd",
- "reftest"
- ],
"css/css-flexbox/ttwf-reftest-flex-wrap-reverse.html": [
"f2aefa29e8b5e4461e6a8ae9eb76bc8c1c771698",
"reftest"
@@ -566985,6 +568814,10 @@
"8caf2f3d6000a28c548c84a6fbe2d4c8de2ee5b7",
"testharness"
],
+ "css/css-fonts/generic-family-keywords-001.html": [
+ "aa9fb5a6a03bb330d35669f903a1ee7c0f138e18",
+ "testharness"
+ ],
"css/css-fonts/idlharness.html": [
"ecc601bcf6a97a1722e3901d731f9f424d0a79e1",
"testharness"
@@ -574377,6 +576210,26 @@
"fb3f7007ee19189a09de9c1f786176c317b7ee14",
"testharness"
],
+ "css/css-grid/alignment/grid-align-justify-margin-border-padding-vertical-lr.html": [
+ "9c9e944df04b58a11f0b3096d50b94ddc4f326db",
+ "testharness"
+ ],
+ "css/css-grid/alignment/grid-align-justify-margin-border-padding-vertical-rl.html": [
+ "f7698e45df39855d53c2c205cd034fd04524568a",
+ "testharness"
+ ],
+ "css/css-grid/alignment/grid-align-justify-margin-border-padding.html": [
+ "9cdce092cc302ccbb3d4ed7633c19696b481b241",
+ "testharness"
+ ],
+ "css/css-grid/alignment/grid-align-justify-overflow.html": [
+ "f0d94198aff6dddb7acab1e7965e1ca9fc84c4a3",
+ "testharness"
+ ],
+ "css/css-grid/alignment/grid-align-justify-stretch-with-orthogonal-flows.html": [
+ "c8fd340006038b1bd7addd84e2bd013da389bbed",
+ "testharness"
+ ],
"css/css-grid/alignment/grid-align-justify-stretch.html": [
"9feeed3e0ef2a17b68bce2b7d71cbdb14a06ee2d",
"testharness"
@@ -578501,6 +580354,10 @@
"df54e8fb0df8146f896c2abd136d63d930d92d1c",
"testharness"
],
+ "css/css-lists/list-inside-contain.html": [
+ "70e25b8644e5e7c7398e734611e7dd46a4db8f2b",
+ "testharness"
+ ],
"css/css-lists/list-item-definition-ref.html": [
"2d49bc4cb972803c45f701667d68d13028c4abc2",
"support"
@@ -578629,6 +580486,14 @@
"9627ce936ae570325b430a1ac673cd66ae7d4252",
"reftest"
],
+ "css/css-lists/ol-change-display-type-ref.html": [
+ "a10bc17899f9cfaa938d04d198598c4fc82fe3ca",
+ "support"
+ ],
+ "css/css-lists/ol-change-display-type.html": [
+ "e711cfef5ddfd0d85914ce166f774a2ec1480f05",
+ "reftest"
+ ],
"css/css-lists/parsing/content-invalid.html": [
"54fe99c0f02442c30256692aae83a3cc3a685a06",
"testharness"
@@ -582142,7 +584007,7 @@
"reftest"
],
"css/css-overflow/dynamic-visible-to-clip-001.html": [
- "08114d73b8bf6364d2ad647236fe5388f9eef1b2",
+ "b97701bfb299b5b9fc06b774f489b2e2285b2c13",
"reftest"
],
"css/css-overflow/float-with-relpos-and-transform.html": [
@@ -584389,6 +586254,14 @@
"6b797107df80156b511b9dc58c5ee40d6114cfc4",
"reftest"
],
+ "css/css-pseudo/first-line-with-before-after-ref.html": [
+ "fcee7995052717c0509c58a76fa1f420434ceb43",
+ "support"
+ ],
+ "css/css-pseudo/first-line-with-before-after.html": [
+ "f91a22a4a7d65366dbd7dda3934c82c9b5776977",
+ "reftest"
+ ],
"css/css-pseudo/first-line-with-out-of-flow-ref.html": [
"7193bf25eb88c5443457480f7ce27782acd9473a",
"support"
@@ -587162,7 +589035,7 @@
"support"
],
"css/css-scroll-anchoring/README.md": [
- "8ce2a95c620b5a25c31a4d8d4bca251904d0fa32",
+ "78f1387bdf47e987da47861a8f0be5ddcd4fba6a",
"support"
],
"css/css-scroll-anchoring/abspos-containing-block-outside-scroller.html": [
@@ -589285,6 +591158,370 @@
"bce0a18be6f66e57cad2e2e90694a6f53dab71c7",
"reftest"
],
+ "css/css-sizing/intrinsic-size/intrinsic-size-001-ref.html": [
+ "d4f0281ae48cd9ab43403fcbfc0c50d8c96e1381",
+ "support"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-001.html": [
+ "4d17602a95f91af86ef16825203e903d841e68cc",
+ "reftest"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-002-ref.html": [
+ "ab847fc36e56155a0b3638a24f9ca90077c76b23",
+ "support"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-002.html": [
+ "55f209494125e08900b60bc566b5c85d0d123d54",
+ "reftest"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-003-ref.html": [
+ "6a2d05149894c0e7ecfc5471bab6055bc51f072d",
+ "support"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-003.html": [
+ "3dd41ba1d2c001bcaaec7ea8338bcb3cce41d52e",
+ "reftest"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-004-ref.html": [
+ "6e710943de9957bcda6ac83985615e35f2154d1e",
+ "support"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-004.html": [
+ "9cce7ae25fc8f343e9a693e1ee6ef92847e71ece",
+ "reftest"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-005-ref.html": [
+ "950f7190cac250124ba5cda419a71126e157d2e0",
+ "support"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-005.html": [
+ "92b777d22e054bef9d675f00b7d67845f17081df",
+ "reftest"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-006-ref.html": [
+ "d545093e2db58163637e466b233cd15da40d0f7b",
+ "support"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-006.html": [
+ "82c6e8eef8536cb95f291828107a53a97a1d1428",
+ "reftest"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-007-ref.html": [
+ "6b3f63685ac07bb0e5f95570744a7b87c56158f6",
+ "support"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-007.html": [
+ "85fcae6cd91ba8a2f9404497992ba5b7d6411ad9",
+ "reftest"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-008-ref.html": [
+ "5c6186fd48cf0dfd2ee83fd6ed2819fa6dbb0989",
+ "support"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-008.html": [
+ "f3b344f6b0a79464090434127309f724ab4ba64e",
+ "reftest"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-009-ref.html": [
+ "223e0c8a33a6832e37dc4b78de4c27b5a3abcc11",
+ "support"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-009.html": [
+ "06a02fe78bd08602c14f890ae4bb374076807789",
+ "reftest"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-010-ref.html": [
+ "eaaa0977f139938e2657814fd78d543f2bc5e0db",
+ "support"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-010.html": [
+ "eea76ffb07325ac9268581f9b2db348f8301e4df",
+ "reftest"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-011-ref.html": [
+ "29d1f4e2d1a108dd53c5905e45d9c7923ca9a2ba",
+ "support"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-011.html": [
+ "c7888f906f8b7ec92648a7cb5b4b18df2bbeaad5",
+ "reftest"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-012-ref.html": [
+ "ed9857aa2565762f514fe5fb73173b6a5da6494f",
+ "support"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-012.html": [
+ "889b07ace922271e335054992d6731264a291c9f",
+ "reftest"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-013-ref.html": [
+ "9f8334c03d508bc1d91d0163674a28c89c77e034",
+ "support"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-013.html": [
+ "1082100012fd890d466cbea1aafe8c1101ebc945",
+ "reftest"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-014-ref.html": [
+ "66c10824893089e0c78dd5f6f68e167eac7438b6",
+ "support"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-014.html": [
+ "4dd45a2da409449d225c6768d2e19564f0b567d6",
+ "reftest"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-015-ref.html": [
+ "ae65a3b5ca547b19e8bdc7b38099c8206edfa6c4",
+ "support"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-015.html": [
+ "5ca5e49992e1d537499bc8ea314229bdfdc5bfc7",
+ "reftest"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-016-ref.html": [
+ "f80510f630624b7bce27483fe9847cd182114fe0",
+ "support"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-016.html": [
+ "ce6ac5c56e4a101fda21a46dc37d81ebee4b1dd5",
+ "reftest"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-017-ref.html": [
+ "553451a7075559dad575be17e2ce08b62cb67832",
+ "support"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-017.html": [
+ "5e2122f34ecf8e74e54c8b101772de0f9be0cdb6",
+ "reftest"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-018-ref.html": [
+ "17261caa8af2b65f80ed331fb38bb5c2e37d5b10",
+ "support"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-018.html": [
+ "68931834d630410e1ca9906db8a97317b26ee062",
+ "reftest"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-019-ref.html": [
+ "8e55d7b02f9d1d7352ebdeeca1ee48a1009b49f4",
+ "support"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-019.html": [
+ "cae8e0739fe823e82369fa5661a7f70b4dd30e0f",
+ "reftest"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-020-ref.html": [
+ "1ee5ba8376ddc7e6bb74d765755fbe89b9e33b6b",
+ "support"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-020.html": [
+ "a7286ce1054cae30cb8023cae074d9be8781fa33",
+ "reftest"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-021-ref.html": [
+ "35db43fcf44a3668ae19f0d97ea7a872223fcc9c",
+ "support"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-021.html": [
+ "04591924f659615dc22851102f5d59b4d83e5e18",
+ "reftest"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-022-ref.html": [
+ "b0df199283470db4a7ecba4011a3429e8065bb7e",
+ "support"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-022.html": [
+ "3593b9cce38f158bf96164ba1e8110c09eedbc01",
+ "reftest"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-023-ref.html": [
+ "800e4ae706447004c3c8ff5bf8a530216cba1dea",
+ "support"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-023.html": [
+ "c64ef66a03fd18b57e34ade82bd538e33578f129",
+ "reftest"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-024-ref.html": [
+ "02ec85a0084910bb09de2e7871b7ddd7d8a68265",
+ "support"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-024.html": [
+ "b11317d96b015282e9bcc043efcdbba799851bc6",
+ "reftest"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-025-ref.html": [
+ "60d5cc9cd9aadb99620773ea11eaf9e2081b771b",
+ "support"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-025.html": [
+ "ab9c56fc528ed848a200a890e0df3cc018618529",
+ "reftest"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-026-ref.html": [
+ "2e456b43422c014a10c62fe93c776c43ad59581a",
+ "support"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-026.html": [
+ "100f542b783794dbf5c07ac146f1e0ee5f481db7",
+ "reftest"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-auto-001-ref.html": [
+ "99e86d0c38fd2b76745b6cbd05224dc5aa0537d6",
+ "support"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-auto-001.html": [
+ "9c2dac07da2b012a4e927916cd18f980a15d9e68",
+ "reftest"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-auto-002-ref.html": [
+ "70a245469b702bb5b2348ca7698c71ac1ca99671",
+ "support"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-auto-002.html": [
+ "5b3902455bdccd8d16f8e9795e3821f5ab73799a",
+ "reftest"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-auto-003-ref.html": [
+ "246a5bad51ed6155177a7f1fb11705c4ca7dd944",
+ "support"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-auto-003.html": [
+ "07ec0326787f96e08654f9643e7032309c62bfaa",
+ "reftest"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-001-ref.html": [
+ "39c6abdcf8eba74a04c1255388ca551cf8988ed5",
+ "support"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-001.html": [
+ "df662e5c7f17342a0facdf2c614689833b4a424b",
+ "reftest"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-002-ref.html": [
+ "535915a7a7bed54142f731a21eb20a97379650a1",
+ "support"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-002.html": [
+ "66d008ce6cef7cfe93d097a362e6cfba57b57a7a",
+ "reftest"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-003-ref.html": [
+ "eb6394fe28464f74106c99830d67af1efa58aba4",
+ "support"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-003.html": [
+ "90e4f53bf64fe4d9eb9c19036abdccea98a582bf",
+ "reftest"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-004-ref.html": [
+ "d5e7c9ff9bb9c4f155955065161e14f1fcbc954e",
+ "support"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-004.html": [
+ "dfeed45d73b91e620a8d3aefe8461af2c21c3e86",
+ "reftest"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-005-ref.html": [
+ "c23984f5f1a4d07c2121088987718781d00fc85c",
+ "support"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-005.html": [
+ "baf9bef3aca6ae9d9c6026d993dda9e4584e78e3",
+ "reftest"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-006-ref.html": [
+ "9b9e25d3c8da8693f82bfa7d49e87a320bb3f141",
+ "support"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-006.html": [
+ "41ef1fddc19d6ba3ec3ee6c6adfce4d51d078929",
+ "reftest"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-007-ref.html": [
+ "6894b4643ad616d4acf3a631c991718c76cdae27",
+ "support"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-007.html": [
+ "df2c57b5d8a7f884a31934a15cc1e1037d3a6c8e",
+ "reftest"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-008-ref.html": [
+ "5cce190275940e70c3e3451a47ed9432025dab46",
+ "support"
+ ],
+ "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-008.html": [
+ "45b8fbdd24484d6d2637d440edad3dc3e959cadf",
+ "reftest"
+ ],
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-block-size-computed.html": [
+ "e9a073ca2aacd9dd9fce6a1b0d33493498b33bac",
+ "testharness"
+ ],
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-block-size-invalid.html": [
+ "1b6cba20f88d78f8e29d385676a261d6d78c8e67",
+ "testharness"
+ ],
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-block-size-valid.html": [
+ "b34c73b230f50d00371811ec063180bfc249fad7",
+ "testharness"
+ ],
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-height-computed.html": [
+ "6f95274c637a54bd88b1bf5e732b8a6aaa291e32",
+ "testharness"
+ ],
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-height-invalid.html": [
+ "1f801124a2b5f2fe3cf96c76b9b64fe33d9f50da",
+ "testharness"
+ ],
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-height-valid.html": [
+ "e461476211879b903e451e662ad393162a94afdd",
+ "testharness"
+ ],
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-inline-size-computed.html": [
+ "c53a77e5631068101f4d58a9a67d6db8b9c8c2a3",
+ "testharness"
+ ],
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-inline-size-invalid.html": [
+ "6ad224d11d3831ba227fc41ab90bf0c3b748be46",
+ "testharness"
+ ],
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-inline-size-valid.html": [
+ "ad5aef95dca952785a8263a7b6447ef4e4b83e03",
+ "testharness"
+ ],
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-size-computed.html": [
+ "29be33d4a3d9a33ec30cfe150f9c9f80d5fd796d",
+ "testharness"
+ ],
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-size-invalid.html": [
+ "b4cb2dbffd2004762d028f092e82e5f9297655ec",
+ "testharness"
+ ],
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-size-sets-computed-dimensions.html": [
+ "e70c3179223eaf220edd3993069848b8e0294dea",
+ "testharness"
+ ],
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-size-valid.html": [
+ "7ab13c7d7986151f22e01711f34a9184effca082",
+ "testharness"
+ ],
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-width-computed.html": [
+ "08602e5347f3de0827446875b15a29c8b6789b27",
+ "testharness"
+ ],
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-width-invalid.html": [
+ "b89f6567ae27595ac752ece8bfe66784d16146de",
+ "testharness"
+ ],
+ "css/css-sizing/intrinsic-size/parsing/intrinsic-width-valid.html": [
+ "e2d23eabe5da207ce82519e9f57adcbd4cf5d70c",
+ "testharness"
+ ],
+ "css/css-sizing/intrinsic-size/resources/dice.png": [
+ "c82d01517cd056fe1b63266b00fb9a96ce6251a2",
+ "support"
+ ],
"css/css-sizing/min-max-content-orthogonal-flow-crash-001.html": [
"d2617f8aa2d1c966e394abb1d1617c012ea4648e",
"testharness"
@@ -594073,6 +596310,110 @@
"5f80f52c6ea0c5c9c7577896b9bc5d309093c90e",
"reftest"
],
+ "css/css-text/line-break/line-break-anywhere-017.html": [
+ "a2521cbcbbe1c16e0d71d22d33b90429ae8e1ed7",
+ "reftest"
+ ],
+ "css/css-text/line-break/line-break-anywhere-and-white-space-001.html": [
+ "a4158dc990798d7868332eeb245137bac74e8b87",
+ "reftest"
+ ],
+ "css/css-text/line-break/line-break-anywhere-and-white-space-002.html": [
+ "2fbb53dca21179e679a1d8523ac75e8b712dbb37",
+ "reftest"
+ ],
+ "css/css-text/line-break/line-break-anywhere-and-white-space-003.html": [
+ "3002dc106487187da90af9bbd39e84d7d5cfe535",
+ "reftest"
+ ],
+ "css/css-text/line-break/line-break-anywhere-and-white-space-004.html": [
+ "e6e1b39787d50178bb152e6459e624c84df97e99",
+ "reftest"
+ ],
+ "css/css-text/line-break/line-break-anywhere-and-white-space-005.html": [
+ "2f64d8704bac8d3ad85bad41c05b5b490a3b34de",
+ "reftest"
+ ],
+ "css/css-text/line-break/line-break-anywhere-and-white-space-006.html": [
+ "c804e37126266852909a3bf2054a4446105496be",
+ "reftest"
+ ],
+ "css/css-text/line-break/line-break-anywhere-and-white-space-007.html": [
+ "d9b266db9f95db5eaa45c12709125155faa46f41",
+ "reftest"
+ ],
+ "css/css-text/line-break/line-break-anywhere-and-white-space-008.html": [
+ "aebd31ea6851cc3fcef469d50bf320d1914395c4",
+ "reftest"
+ ],
+ "css/css-text/line-break/line-break-anywhere-and-white-space-009.html": [
+ "f536c907a4004ca7ff7c7fcec9e99f7c5a5cd25c",
+ "reftest"
+ ],
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-001.html": [
+ "d18df4b38c65c3a46ba0c68e7f57a6512a2eb86a",
+ "reftest"
+ ],
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-002.html": [
+ "1255aa14d38589dfaaa46446e3e77409910abd55",
+ "reftest"
+ ],
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-003.html": [
+ "7fe230e890dbbb206107fc64631439c8dde26ae4",
+ "reftest"
+ ],
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-004.html": [
+ "13706d5d9dc4bd44c40bd416051997cb43f3a3d7",
+ "reftest"
+ ],
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-005.html": [
+ "175228d9c52ac7eb08958f22bc23f2f0aea290ce",
+ "reftest"
+ ],
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-006.html": [
+ "9bb557e7d3b01e0af7b14ebd67726eb9666f79a7",
+ "reftest"
+ ],
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-007.html": [
+ "7f90bfd43049337d66054804dd351f8877d73973",
+ "reftest"
+ ],
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-008.html": [
+ "40826540c9f5de0cb135f111812cda54f579e02e",
+ "reftest"
+ ],
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-009.html": [
+ "6d6ca3f743a7a68db65c6df70c04726c1e1d519d",
+ "reftest"
+ ],
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-010.html": [
+ "5f152c66294e4ea8bebbc229288f7ed43d80d59d",
+ "reftest"
+ ],
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-011.html": [
+ "2196d983f9f9fa140e2d7b71689ecf62417609ae",
+ "reftest"
+ ],
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-012.html": [
+ "110d9cafc4c3aa98b07f9fd5e4ffecde6467ffbd",
+ "reftest"
+ ],
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-013.html": [
+ "2cda76c5cd324ffeb0573b9c87c579f19fc4a641",
+ "reftest"
+ ],
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-014.html": [
+ "d79efb7aee83eca68b72f33c0a6d7b00e90eaa1f",
+ "reftest"
+ ],
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-015.html": [
+ "5eecd03da25ec0cfa2f2f22b1adb658d4c83e55c",
+ "reftest"
+ ],
+ "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-016.html": [
+ "d4ab337a7b5d5a77063bc9ed024336f061346229",
+ "reftest"
+ ],
"css/css-text/line-break/line-break-loose-011.xht": [
"604466a1f4723f5da0e74682643b4fcd746852d0",
"reftest"
@@ -594449,6 +596790,10 @@
"777b5ab92e985945c5eb3a8a5c0467b828f3f2d6",
"reftest"
],
+ "css/css-text/line-breaking/line-breaking-atomic-nowrap-001.html": [
+ "1e3b9edb1dc1331660c1300d2c5a8fd103b6b115",
+ "testharness"
+ ],
"css/css-text/line-breaking/line-breaking-ic-001.html": [
"6cfe6f86a452c19eae31a076710f02dfc8c4ec4e",
"reftest"
@@ -594601,10 +596946,46 @@
"d125a0b5c85c15c94f4765c11c5b6ef276cca7e2",
"reftest"
],
+ "css/css-text/overflow-wrap/overflow-wrap-anywhere-006.html": [
+ "ac90149ff30d1d8252171460ab1f3b8800c2d58a",
+ "reftest"
+ ],
+ "css/css-text/overflow-wrap/overflow-wrap-anywhere-007.html": [
+ "a5e10a84ebd3dad65e5cecfbf55eea0e70cdc108",
+ "reftest"
+ ],
+ "css/css-text/overflow-wrap/overflow-wrap-anywhere-008.html": [
+ "ddb95629999d3599d972de5cf19afaa9378d6d06",
+ "reftest"
+ ],
+ "css/css-text/overflow-wrap/overflow-wrap-anywhere-009.html": [
+ "90f2ad3337305bc1f59194a582373851577eadaa",
+ "reftest"
+ ],
+ "css/css-text/overflow-wrap/overflow-wrap-anywhere-010.html": [
+ "0b4b75bc1c5d3daf6ecedc146c2f693de7dc8b17",
+ "reftest"
+ ],
"css/css-text/overflow-wrap/overflow-wrap-anywhere-fit-content-001.html": [
"8655b1f087df4534f59ea7c6348fe3272f84ccbf",
"reftest"
],
+ "css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-001.html": [
+ "5a93c873445e91d59a857220056ba18234926850",
+ "reftest"
+ ],
+ "css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-002.html": [
+ "38dc19631d3794e011f046acb225471aec2363dd",
+ "reftest"
+ ],
+ "css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-003.html": [
+ "511294901d914cf8f836ea8b50662544fb72dbf4",
+ "reftest"
+ ],
+ "css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-004.html": [
+ "e498e1eff16a40ce96279173b42c3827b566ba5c",
+ "reftest"
+ ],
"css/css-text/overflow-wrap/overflow-wrap-anywhere-span-001.html": [
"c4a0e10fa42d6389f1bb02a945137a4f40fa03db",
"reftest"
@@ -594645,6 +597026,14 @@
"8a0fb9959d697f9d4188a0fd49973d90d8143ab3",
"reftest"
],
+ "css/css-text/overflow-wrap/overflow-wrap-break-word-009.html": [
+ "fbbcf2233c5a2666bcccb3941bd76b6383410530",
+ "reftest"
+ ],
+ "css/css-text/overflow-wrap/overflow-wrap-break-word-010.html": [
+ "da45dea2530dd19a2cecf3dc8ceb160d2d9a9d34",
+ "reftest"
+ ],
"css/css-text/overflow-wrap/overflow-wrap-break-word-fit-content-001.html": [
"2c83c46aa50f6d51efbb4d05635d86f7c166042d",
"reftest"
@@ -594682,7 +597071,7 @@
"reftest"
],
"css/css-text/overflow-wrap/overflow-wrap-min-content-size-001.html": [
- "608d4853a2425d9b4157bbe331fd78763985cecd",
+ "6975e816b469a898d3f3617f49ad91badfdc0859",
"reftest"
],
"css/css-text/overflow-wrap/overflow-wrap-min-content-size-002.html": [
@@ -594694,7 +597083,23 @@
"reftest"
],
"css/css-text/overflow-wrap/overflow-wrap-min-content-size-004.html": [
- "7ee2b344f7fdee15b05e590ff93a23c04cf63ffc",
+ "16161ece69dc85e0caffe370889e46a3071ebe08",
+ "reftest"
+ ],
+ "css/css-text/overflow-wrap/overflow-wrap-min-content-size-005.html": [
+ "c8c2a1a43353f9f572ce0a586a2d9c81f51515d1",
+ "reftest"
+ ],
+ "css/css-text/overflow-wrap/overflow-wrap-min-content-size-006.html": [
+ "dbbd39301bd741cb77f49deebc6de0ea324e8ddb",
+ "reftest"
+ ],
+ "css/css-text/overflow-wrap/overflow-wrap-min-content-size-007.html": [
+ "7296b8d3769a6ea83726d41efdd0725c230e9d17",
+ "reftest"
+ ],
+ "css/css-text/overflow-wrap/overflow-wrap-min-content-size-008.html": [
+ "5c2b3958bd79a235d2c0236804de8df195c87776",
"reftest"
],
"css/css-text/overflow-wrap/overflow-wrap-normal-keep-all-001.html": [
@@ -594734,7 +597139,7 @@
"support"
],
"css/css-text/overflow-wrap/reference/overflow-wrap-min-content-size-001-ref.html": [
- "99d964777c663fb8ca37be00c162ddfbb82951c9",
+ "ef5c2e88cefbb99163b8144098d38eb5fb0d06bf",
"support"
],
"css/css-text/overflow-wrap/reference/overflow-wrap-min-content-size-002-ref.html": [
@@ -594746,7 +597151,7 @@
"support"
],
"css/css-text/overflow-wrap/reference/overflow-wrap-min-content-size-004-ref.html": [
- "c37f3f107841a33afd891a7f39433146ab4704cc",
+ "93e22ba71ed08199fb01858e8db9950c41d4b35b",
"support"
],
"css/css-text/overflow-wrap/reference/overflow-wrap-normal-keep-all-001-ref.html": [
@@ -596982,7 +599387,7 @@
"reftest"
],
"css/css-text/white-space/break-spaces-before-first-char-011.html": [
- "bc6b2965cb0fdc554082ae0cd2453c602fd805de",
+ "cf1babeb5e93f601a416994cce060d46a3894f07",
"reftest"
],
"css/css-text/white-space/break-spaces-before-first-char-012.html": [
@@ -596993,6 +599398,26 @@
"828058f53dd811d4dbea0b7e0d56ab5a940725c6",
"reftest"
],
+ "css/css-text/white-space/break-spaces-before-first-char-014.html": [
+ "6eb32b57f3f3298d9b66056c7c6842c88851b152",
+ "reftest"
+ ],
+ "css/css-text/white-space/break-spaces-before-first-char-015.html": [
+ "785c2f2a4e9ac98bbb53124eb5a0a45e5bf1648e",
+ "reftest"
+ ],
+ "css/css-text/white-space/break-spaces-before-first-char-016.html": [
+ "bec4520b113b26a10f1ff29b3f515487f8d565e0",
+ "reftest"
+ ],
+ "css/css-text/white-space/break-spaces-before-first-char-017.html": [
+ "9cb8fdbebcbec4687a1f523b1ffcd4a137338bff",
+ "reftest"
+ ],
+ "css/css-text/white-space/break-spaces-before-first-char-018.html": [
+ "828058f53dd811d4dbea0b7e0d56ab5a940725c6",
+ "reftest"
+ ],
"css/css-text/white-space/break-spaces-tab-001.html": [
"4b01a60395a6c1133c7af8af957dd70859db4823",
"reftest"
@@ -597017,6 +599442,46 @@
"34df3bfc1bd2f20abbe29b79124a95ce28a4cfaf",
"reftest"
],
+ "css/css-text/white-space/break-spaces-with-overflow-wrap-001.html": [
+ "6912bafee9ebd55cfeddd878f9145048b235566b",
+ "reftest"
+ ],
+ "css/css-text/white-space/break-spaces-with-overflow-wrap-002.html": [
+ "caef57ec60f8fa7c1874825272290d8236af10dd",
+ "reftest"
+ ],
+ "css/css-text/white-space/break-spaces-with-overflow-wrap-003.html": [
+ "9f91d085d8ad295b7308fe65822ad4114273fbf7",
+ "reftest"
+ ],
+ "css/css-text/white-space/break-spaces-with-overflow-wrap-004.html": [
+ "911cff021ad2df5ada257d3aa0d2a53aa131caac",
+ "reftest"
+ ],
+ "css/css-text/white-space/break-spaces-with-overflow-wrap-005.html": [
+ "d5c836539d2636e3b4e916d2b66eca135a659321",
+ "reftest"
+ ],
+ "css/css-text/white-space/break-spaces-with-overflow-wrap-006.html": [
+ "0e4b6a80f14eb9c6ed73d7d97d040ba0163dbe93",
+ "reftest"
+ ],
+ "css/css-text/white-space/break-spaces-with-overflow-wrap-007.html": [
+ "bf51e4bc2fb4b3d17635df65716a3fe2e504bda2",
+ "reftest"
+ ],
+ "css/css-text/white-space/break-spaces-with-overflow-wrap-008.html": [
+ "9826449ecc639cd0c6f388159e0a118ff1f2e0ca",
+ "reftest"
+ ],
+ "css/css-text/white-space/break-spaces-with-overflow-wrap-009.html": [
+ "3b6e76433091aae25af57b389b207d75d51dae73",
+ "reftest"
+ ],
+ "css/css-text/white-space/break-spaces-with-overflow-wrap-010.html": [
+ "d479c5e56757fd32fcfff2066e326a8bfc24860a",
+ "reftest"
+ ],
"css/css-text/white-space/control-chars-000.html": [
"b038fe9a90d3b8b9cb3bde7fd46396c7121688c9",
"reftest"
@@ -597329,6 +599794,14 @@
"e2faf3671c2061c30028be4c9608ba1495b79072",
"reftest"
],
+ "css/css-text/white-space/pre-wrap-009.html": [
+ "0912a2d3a150cea47ace39cb815af14ca811bb60",
+ "reftest"
+ ],
+ "css/css-text/white-space/pre-wrap-010.html": [
+ "71d169c65c011fe28e1b2fcdb3c3bd9dd35dad32",
+ "reftest"
+ ],
"css/css-text/white-space/pre-wrap-011.html": [
"9945e3ae2dda846c8691a3676d3a83aacd08bb0c",
"reftest"
@@ -598269,6 +600742,14 @@
"48f60a346115a576cf63c5222dd68aeeda91fb13",
"reftest"
],
+ "css/css-text/word-break/word-break-break-all-029.html": [
+ "3e0a1e14e6952d756a64e7b16a8b7b0af84dd2ff",
+ "reftest"
+ ],
+ "css/css-text/word-break/word-break-break-all-030.html": [
+ "e6a8a0076d4bd80b7eca2a1cf7c568ccf38ac332",
+ "reftest"
+ ],
"css/css-text/word-break/word-break-break-all-inline-001.html": [
"a0c7c4958bd94be3ae199e6e18f1dace4cc2d28b",
"reftest"
@@ -598301,6 +600782,14 @@
"930ae436fe4f1c91b60e9a84c0925e679b6ddfc0",
"reftest"
],
+ "css/css-text/word-break/word-break-break-all-inline-009.html": [
+ "e1914f5f4db6d5bfbc5c928562eb1ab790a934b8",
+ "reftest"
+ ],
+ "css/css-text/word-break/word-break-break-all-inline-010.html": [
+ "3c2df3cea296b32b4bb4972ed50e28e9d3f5427b",
+ "reftest"
+ ],
"css/css-text/word-break/word-break-break-word-crash-001.html": [
"894a6f3aa0ce257a92926158b75a29986a98e079",
"testharness"
@@ -598346,7 +600835,7 @@
"reftest"
],
"css/css-text/word-break/word-break-min-content-001.html": [
- "20b610180b359bfdf7da5720d2e962af2ba6343f",
+ "a310e304529dd83f1d356cab6b6664e7f07be97d",
"reftest"
],
"css/css-text/word-break/word-break-min-content-002.html": [
@@ -598358,7 +600847,7 @@
"reftest"
],
"css/css-text/word-break/word-break-min-content-004.html": [
- "efa61b9cd8af65bdb354ef7b07e7008f8a3b6511",
+ "89b30027c2e9b127ee65e5466ae0d7872f0fa451",
"reftest"
],
"css/css-text/word-break/word-break-min-content-005.html": [
@@ -616969,6 +619458,10 @@
"804885a74a17f23e18f4c073099c26b2e9f80532",
"testharness"
],
+ "css/cssom/serialize-media-rule.html": [
+ "94b37dc1a95f12dd36e59bae82ab9e2c42e9ed1a",
+ "testharness"
+ ],
"css/cssom/serialize-namespaced-type-selectors.html": [
"600008c7a9eb7351b15ede25b870525882b32a0c",
"testharness"
@@ -630602,7 +633095,7 @@
"reftest"
],
"custom-elements/CustomElementRegistry.html": [
- "368044df3c9373b4ea966bd1b7e9080581b91293",
+ "c288e8232703afbe00d355ef5b40bdc8d1fa0ac2",
"testharness"
],
"custom-elements/Document-createElement-svg.svg": [
@@ -631062,7 +633555,7 @@
"support"
],
"docs/admin/index.md": [
- "7eca6e3a9a92cbbfb8b23d3c1ee88e43d1af69ad",
+ "56a08eb7f07aefd2b9d2f9de0130ba584b960df8",
"support"
],
"docs/assets/_reftest_graph_example.dot": [
@@ -631125,12 +633618,20 @@
"0010a57173121330bae8df3c3f851db10cffcb67",
"support"
],
+ "docs/assets/web-platform.png": [
+ "2b14c5ef60dd064b8751151f5b778019fe2431bf",
+ "support"
+ ],
"docs/conf.py": [
"e425667ce888dabed639ff29a7e051d3aedcdd0f",
"support"
],
"docs/index.md": [
- "b24abae007fe9a84e523f30fc2018a07a447582a",
+ "d1a527e1a754bdb846c11846e90b23c6e7771a92",
+ "support"
+ ],
+ "docs/intro-video-transcript.md": [
+ "b43ebf728fc2340420827be04e17b884015daf1f",
"support"
],
"docs/make.bat": [
@@ -631146,7 +633647,7 @@
"support"
],
"docs/reviewing-tests/email.md": [
- "fbfa65d75cccca5b913da393788cd94faf637f6e",
+ "55bbf4436726163432837909db30bf57d570b865",
"support"
],
"docs/reviewing-tests/git.md": [
@@ -631290,7 +633791,7 @@
"support"
],
"docs/writing-tests/test-templates.md": [
- "858758b4c8e022afe53d76184a65a44da8106a1b",
+ "e8f4bfe77f4c7d142345e02792f2128d25c40f54",
"support"
],
"docs/writing-tests/testdriver-extension-tutorial.md": [
@@ -631302,7 +633803,7 @@
"support"
],
"docs/writing-tests/testharness-api.md": [
- "5883308cc66957b1b7215825fd0ea6c7aa1ca74a",
+ "1bdf06613f993bd7ad74a8385c682150f4ea121c",
"support"
],
"docs/writing-tests/testharness-tutorial.md": [
@@ -631310,7 +633811,7 @@
"support"
],
"docs/writing-tests/testharness.md": [
- "acab70a1f1630cce6a270d8a966d166c90c23c22",
+ "e04a344d098f994cca585f9759070cc3a672494c",
"support"
],
"docs/writing-tests/tools.md": [
@@ -632594,7 +635095,7 @@
"testharness"
],
"dom/nodes/aria-element-reflection.tentative.html": [
- "848828810f160d5ac01f11bf41b27230b9738800",
+ "7c8e690a28bbcaa1391878300f143aa1e584fe5e",
"testharness"
],
"dom/nodes/attributes.html": [
@@ -637777,8 +640278,12 @@
"68ff2c5bcf2d85e6930196b8b1a3a2005ea54094",
"testharness"
],
+ "fetch/api/request/destination/fetch-destination-frame.https.html": [
+ "f3f9f7856d5d908fe2ed45b0cbbd3981cdab8dad",
+ "testharness"
+ ],
"fetch/api/request/destination/fetch-destination-iframe.https.html": [
- "cb1e9d87cd537fce1a21f2d839d105739b1df2d2",
+ "1aa5a5613b1c6e601801dea3b4b4457ca592e2ca",
"testharness"
],
"fetch/api/request/destination/fetch-destination-no-load-event.https.html": [
@@ -637841,6 +640346,10 @@
"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
"support"
],
+ "fetch/api/request/destination/resources/fetch-destination-worker-frame.js": [
+ "b69de0b7df91ac442f095d4cbda568d50b7822ab",
+ "support"
+ ],
"fetch/api/request/destination/resources/fetch-destination-worker-iframe.js": [
"76345839eadfeb75d07134919af80983b0e61531",
"support"
@@ -638122,7 +640631,7 @@
"testharness"
],
"fetch/api/response/response-consume.html": [
- "4946a4d33a437af657d4440b270bec3f56534d0a",
+ "7a9c6505d80f3feff2ffa297df03cf37e546f0d7",
"testharness"
],
"fetch/api/response/response-error-from-stream.html": [
@@ -643566,7 +646075,7 @@
"support"
],
"html/cross-origin-opener-policy/coep.https.html": [
- "1c04ed30dd7b3e7cdf7df43e29eca3b433000703",
+ "64994cdfb76f18cb11c42cc8258209fcfd1091e3",
"testharness"
],
"html/cross-origin-opener-policy/coep.https.html.headers": [
@@ -643590,7 +646099,7 @@
"support"
],
"html/cross-origin-opener-policy/no-https.html": [
- "da9efdce777c43e5b3f37bda628884c1a3579fde",
+ "014ba1f333b5e254609819bd99618ebcc6b7391b",
"testharness"
],
"html/cross-origin-opener-policy/no-https.html.headers": [
@@ -644785,7 +647294,7 @@
"aba2b3016a5d56e29cdf5526b7b7259e402c188d",
"testharness"
],
- "html/dom/usvstring-reflection.html": [
+ "html/dom/usvstring-reflection.https.html": [
"b9cafd1fb352cf619141420cbb68aca1483ca8e4",
"testharness"
],
@@ -648870,7 +651379,7 @@
"support"
],
"html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.js": [
- "96276d747047fc72d02a22055edf2986ab2163b9",
+ "a755865911d7bd5eea2c7eeca85705602234e571",
"testharness"
],
"html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-transferring.https.html": [
@@ -649014,7 +651523,7 @@
"support"
],
"html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-worker-success.js": [
- "9befc9006e706853d9fab259e631a39f3193c095",
+ "ffc3708acb7ae00339efbde8c9d912b1f58e7e50",
"support"
],
"html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-worker-success.js.headers": [
@@ -653778,7 +656287,7 @@
"testharness"
],
"html/semantics/embedded-content/the-iframe-element/srcdoc_process_attributes.html": [
- "397c95a23911ef979718a3aa8b879d257803fb85",
+ "0bd9f9b2295813f0a4664c01a9594ba94d76233d",
"testharness"
],
"html/semantics/embedded-content/the-iframe-element/stash.py": [
@@ -655837,6 +658346,10 @@
"8df2d3052320bbfebc8184b3f426405b398dc632",
"testharness"
],
+ "html/semantics/interactive-elements/the-dialog-element/dialog-autofocus-just-once.html": [
+ "894efd59dc290d682b6732e49782606a90f4fad1",
+ "testharness"
+ ],
"html/semantics/interactive-elements/the-dialog-element/dialog-autofocus-multiple-times.html": [
"ff9ebd7d2868ca732a9f4eff8558b461fd14154c",
"testharness"
@@ -655853,6 +658366,10 @@
"87a130c6f0178de695a1f9ebd8c000dabf3e53c3",
"testharness"
],
+ "html/semantics/interactive-elements/the-dialog-element/dialog-focusing-steps-prevent-autofocus.html": [
+ "2e8563f761dd5538185c988dc63008e2ecf25c0c",
+ "testharness"
+ ],
"html/semantics/interactive-elements/the-dialog-element/dialog-open.html": [
"4719f63b853ded4577d09066eb7ef2cedf7cd934",
"testharness"
@@ -660469,6 +662986,10 @@
"006827f186eb4e47d387a3b0c9fae404e41e1d37",
"testharness"
],
+ "html/webappapis/the-windoworworkerglobalscope-mixin/README.md": [
+ "10ae3e5f03601a67e247f771cf73fdfddfdda12f",
+ "support"
+ ],
"html/webappapis/the-windoworworkerglobalscope-mixin/Worker_Self_Origin.html": [
"22b28b3e35ef5f05d18b4013798d6513c59c1700",
"testharness"
@@ -661001,8 +663522,8 @@
"29ee31ccbc936787894a43de1f6625608d14a192",
"support"
],
- "import-maps/builtin-support.tentative/static-import.js": [
- "1686fc123a798bddbf626f4d112516317739da8f",
+ "import-maps/builtin-support.tentative/static-import.py": [
+ "8d0f5d9f4204384ec9612ddca3ec30cec017d14e",
"support"
],
"import-maps/core/bare.sub.tentative.html": [
@@ -661041,8 +663562,8 @@
"6f2f18a02e12a92530b7a3ae6bbbd31eecff3816",
"testharness"
],
- "import-maps/core/static-import.js": [
- "1686fc123a798bddbf626f4d112516317739da8f",
+ "import-maps/core/static-import.py": [
+ "8d0f5d9f4204384ec9612ddca3ec30cec017d14e",
"support"
],
"import-maps/csp/applied-to-target-dynamic.sub.tentative.html": [
@@ -661142,7 +663663,7 @@
"support"
],
"import-maps/resources/test-helper.js": [
- "f21ad935baa5e1310e15232822902c86481bebc4",
+ "3cb278b7989959977c7cca3d645bb61f032701d8",
"support"
],
"inert/frame/button.html": [
@@ -661281,6 +663802,22 @@
"249099c06f6c08e92bd1bc6752f57a436ebf9ae0",
"testharness"
],
+ "infrastructure/expected-fail/precondition-in-promise.html": [
+ "b2a32facad07150258cae3af857c841eb6e2cfae",
+ "testharness"
+ ],
+ "infrastructure/expected-fail/precondition-in-setup.html": [
+ "071f140afb6a4b3244dc6793c2ff304d80df4891",
+ "testharness"
+ ],
+ "infrastructure/expected-fail/precondition-without-setup.html": [
+ "12188dbdaeb516c8f67cedf78b0989720c81fdac",
+ "testharness"
+ ],
+ "infrastructure/expected-fail/precondition.html": [
+ "2e6ddc1d02cc77d4068c1bb2997780f6a03d579d",
+ "testharness"
+ ],
"infrastructure/expected-fail/timeout.html": [
"29ff348a9af645ff59d860e91af9534e64a606c5",
"testharness"
@@ -661337,6 +663874,22 @@
"b954a0e9b75d79c279eed0f3205c25e5b09fdd17",
"support"
],
+ "infrastructure/metadata/infrastructure/expected-fail/precondition-in-promise.html.ini": [
+ "7210f8dcfe616f8170b92c43b40e09bfb3b59b9c",
+ "support"
+ ],
+ "infrastructure/metadata/infrastructure/expected-fail/precondition-in-setup.html.ini": [
+ "a33ebafe65023bf5b91834e0d203a9a82f46a14e",
+ "support"
+ ],
+ "infrastructure/metadata/infrastructure/expected-fail/precondition-without-setup.html.ini": [
+ "406db30a095e057d4302180455830f3abb71d067",
+ "support"
+ ],
+ "infrastructure/metadata/infrastructure/expected-fail/precondition.html.ini": [
+ "91544eba4c44ff60ab4e51548c4052c34d0dbf9e",
+ "support"
+ ],
"infrastructure/metadata/infrastructure/expected-fail/timeout.html.ini": [
"53b281f8358c4f90aab96c731076439ccb5567b4",
"support"
@@ -661350,7 +663903,7 @@
"support"
],
"infrastructure/metadata/infrastructure/expected-fail/uncaught-exception.html.ini": [
- "0bcdd374f2521b6534208ab750a1c0d36e7dd7ca",
+ "40a58e4153ec8c39c3ce6ce64e8bcaae391f3b68",
"support"
],
"infrastructure/metadata/infrastructure/expected-fail/unhandled-rejection-following-subtest.html.ini": [
@@ -661362,7 +663915,7 @@
"support"
],
"infrastructure/metadata/infrastructure/expected-fail/unhandled-rejection.html.ini": [
- "39773dfe714a6b5754bfe73c64294bcb38f2afa3",
+ "da4fe27e58959f7e3d6ba5ebbc7edd58a93dcf5c",
"support"
],
"infrastructure/metadata/infrastructure/reftest/reftest_and_fail.html.ini": [
@@ -661406,19 +663959,19 @@
"support"
],
"infrastructure/metadata/infrastructure/server/context.any.js.ini": [
- "c3431d687b60aa1a07d9a4307ccfd4a2253ee162",
+ "ca095a18785a6d31070c02492a868c3b8d6e6606",
"support"
],
"infrastructure/metadata/infrastructure/server/order-of-metas.any.js.ini": [
- "8db9536e38cc880865c374f3743d7df9f727a530",
+ "23387657b41e99385f8fb9cbc0e46a7dd2626164",
"support"
],
"infrastructure/metadata/infrastructure/server/secure-context.https.any.js.ini": [
- "5f5ed991cf1b04da84e89d7eae2e0d80b9fd2841",
+ "5b24c9429dc6e75a1288379290f04b18ab050f2c",
"support"
],
"infrastructure/metadata/infrastructure/server/title.any.js.ini": [
- "e2a7b5578c3b0dec13206ec60da2a5c018c23eb1",
+ "8cbb5f76493c2c8e21f6c45223d4b551f5335b68",
"support"
],
"infrastructure/metadata/infrastructure/server/wpt-server-http.sub.html.ini": [
@@ -661449,6 +664002,10 @@
"baf2116bad6b5cd258e07d29e2115c6aab11e099",
"support"
],
+ "infrastructure/metadata/infrastructure/testdriver/actions/multiTouchPoints.html.ini": [
+ "c7b3482c786fc4532488f388b802930ccea8dc0e",
+ "support"
+ ],
"infrastructure/metadata/infrastructure/testdriver/actions/pause.html.ini": [
"657d2a2492605557dcc62f02dca36364cf3007fd",
"support"
@@ -661465,6 +664022,10 @@
"3e43b63af9545f2828efd2f7ce510bbc9a87bbfc",
"support"
],
+ "infrastructure/metadata/infrastructure/testdriver/virtual_authenticator.html.ini": [
+ "88c9bbd479951b62ffa83d900a62f7a6a019dd37",
+ "support"
+ ],
"infrastructure/reftest-wait-ref.html": [
"6772c2c460e79993979688ddf46e2045b14f7d71",
"support"
@@ -661673,6 +664234,10 @@
"5cab1206dbec8bc307fbdfed1bf3002cc02c299a",
"testharness"
],
+ "infrastructure/testdriver/actions/multiTouchPoints.html": [
+ "c8169733306b4f348509145f2f04df2573cc6c3e",
+ "testharness"
+ ],
"infrastructure/testdriver/actions/pause.html": [
"72f34c1bde8cf54814cdf91b3fdeeaff90dd07e3",
"testharness"
@@ -661705,6 +664270,10 @@
"2170347c9729564f7e492009b3d20b3267422c1d",
"testharness"
],
+ "infrastructure/testdriver/virtual_authenticator.html": [
+ "339e42665c720cd212419a956936daf10640d8af",
+ "testharness"
+ ],
"infrastructure/webdriver/tests/conftest.py": [
"cbc4f83421bb4868d1e6958a0622676895eac9ca",
"support"
@@ -661806,7 +664375,7 @@
"support"
],
"interfaces/appmanifest.idl": [
- "4a6425829f23da3cd1f78f74ff52a18635f7af7c",
+ "b3a303652f53d2ca225fbd8da4899d3eefe6aa15",
"support"
],
"interfaces/audio-output.idl": [
@@ -661958,7 +664527,7 @@
"support"
],
"interfaces/fetch.idl": [
- "eacc69d8b9d1d8f7f9bdbf6f2a879d95d9d847bd",
+ "9ff4aab4b148c152b4dea4bd47fa8ab1c82b6e4b",
"support"
],
"interfaces/filter-effects.idl": [
@@ -662126,7 +664695,7 @@
"support"
],
"interfaces/picture-in-picture.idl": [
- "3323fc1f099f86ebd06a85baabfe953211be3ae1",
+ "3d3bad08219af2e422f2cb0d4cabeffa1f8a2b80",
"support"
],
"interfaces/pointerevents-extension.idl": [
@@ -662170,7 +664739,7 @@
"support"
],
"interfaces/resize-observer.idl": [
- "d96a348a721a62516a451c2bb58618fe48035178",
+ "8018fc4b22be815b0947821b72cd92d10b5892f4",
"support"
],
"interfaces/resource-timing.idl": [
@@ -662258,7 +664827,7 @@
"support"
],
"interfaces/web-animations.idl": [
- "6fd172ce425d570d097fcb573115091c83cc5484",
+ "0d5d40ba74f40ed68c19a8218710204b2767ae12",
"support"
],
"interfaces/web-bluetooth.idl": [
@@ -662266,11 +664835,11 @@
"support"
],
"interfaces/web-nfc.idl": [
- "117812a1f276d0bb84de94c2357485d7670ad314",
+ "9f726ece289dde08facf194c40b59539d8e799c2",
"support"
],
"interfaces/web-share.idl": [
- "f433f2314becd82e7446cc00c96108d1f0efe681",
+ "a29107f05987369128593b9fb2bd3bb13017eae0",
"support"
],
"interfaces/webaudio.idl": [
@@ -662306,11 +664875,11 @@
"support"
],
"interfaces/webrtc-stats.idl": [
- "2b823047ff1e37a13e9d2e71711360944019fcb5",
+ "3e58254baa45dbd9f94307326bf3f6fedce53b60",
"support"
],
"interfaces/webrtc.idl": [
- "5a5eb7b10631f14245b158cc6b06a2a178ce1d20",
+ "43ee424b7c396fe32a087ce63b604d18322ee595",
"support"
],
"interfaces/webusb.idl": [
@@ -662957,6 +665526,18 @@
"ee7988c551f6429eea2b929af083ad30cbd5c73d",
"support"
],
+ "layout-instability/resources/util.js": [
+ "ca430d0a9e2a89e85ed087289de40234f9061bae",
+ "support"
+ ],
+ "layout-instability/rtl-distance.html": [
+ "a6f0040e950649015119ecacc465e75303b5ff9b",
+ "testharness"
+ ],
+ "layout-instability/simple-block-movement.html": [
+ "0f9257e27ce5d553d8176f084e537e47b331416e",
+ "testharness"
+ ],
"layout-instability/supported-layout-type.html": [
"8679a2de7388c5e43a8d784cb3a986d4e23ca568",
"testharness"
@@ -662965,6 +665546,10 @@
"3d39d623e13314b183463fa1c365df3a7b725243",
"testharness"
],
+ "layout-instability/transform.html": [
+ "7ac1c8cafde664f6a39c9d0a88e0a5d76753d85f",
+ "testharness"
+ ],
"lifecycle/META.yml": [
"c1fcbca4c1f8366da1dd9eb91bc9427edeef1153",
"support"
@@ -664258,7 +666843,7 @@
"support"
],
"mathml/relations/html5-tree/css-inline-style-dynamic.tentative.html": [
- "ca3e679491951d9a573a0f754491cf549a565953",
+ "d50e69eb97db1c3741401817788054b904598491",
"reftest"
],
"mathml/relations/html5-tree/css-inline-style-interface.tentative.html": [
@@ -664302,7 +666887,7 @@
"reftest"
],
"mathml/relations/html5-tree/href-click-3.html": [
- "a8475ea3ff801dfdb6f4d6d5a7e049a6eafe7c00",
+ "1b7f0685e65e7c939caab3d546316e7bf858f885",
"testharness"
],
"mathml/relations/html5-tree/html-or-foreign-element-interfaces.tentative.html": [
@@ -665334,7 +667919,7 @@
"testharness"
],
"mediacapture-record/MediaRecorder-mimetype.html": [
- "ddc56e9cb750c59753e238c8ec39c6e1f128790b",
+ "e90bbcced989d5c5b7fa8a978821316b0150c731",
"testharness"
],
"mediacapture-record/MediaRecorder-pause-resume.html": [
@@ -665438,7 +668023,7 @@
"manual"
],
"mediacapture-streams/MediaStream-MediaElement-srcObject.https.html": [
- "3b16006e0f52ca966c0298bef59a10a19e4038a3",
+ "790f73ae7bd21bb118a104fc3c3e37d7895f5fe6",
"testharness"
],
"mediacapture-streams/MediaStream-add-audio-track.https.html": [
@@ -665602,7 +668187,7 @@
"support"
],
"mixed-content/README.md": [
- "407b8960cbeb108b729ba5bdc70e1ace41e944ea",
+ "488432d41ea61c18264c37310369dbd59ccb78ea",
"support"
],
"mixed-content/gen/top.http-rp/opt-in/audio-tag/cross-http.keep-scheme.https.html": [
@@ -668202,7 +670787,7 @@
"support"
],
"mixed-content/generic/test-case.sub.js": [
- "9e9e169f15ff07423065c38afc8a449de6513813",
+ "661cff12d00e1d7cc1f8e9b2ca2f4ff2b65f4e06",
"support"
],
"mixed-content/generic/tools/generate.py": [
@@ -676305,6 +678890,10 @@
"ff0a969badace39c3c4466c4528e30c21355e132",
"testharness"
],
+ "permissions/nfc-permission.html": [
+ "eeec7251c1c18ff839f5e01d8d439a5e0630aa55",
+ "testharness"
+ ],
"permissions/permissions-query-feature-policy-attribute.https.sub.html": [
"1d7333d9b5f67a405dc6979d5ddcfda444a04c39",
"testharness"
@@ -677826,7 +680415,7 @@
"support"
],
"referrer-policy/README.md": [
- "ca9977c89ec36493bb6ec35cde30df8e8e6c187a",
+ "4d6eda97250a3177cb1846fd0950965519605d67",
"support"
],
"referrer-policy/css-integration/README.md": [
@@ -690758,7 +693347,7 @@
"support"
],
"resources/chromium/contacts_manager_mock.js": [
- "8e7c9eef38e39e39652075e757bcc8bf521c4039",
+ "bbee65b0c9e5c170259fbebc8768fc3f8fa49d44",
"support"
],
"resources/chromium/device.mojom.js": [
@@ -690838,7 +693427,7 @@
"support"
],
"resources/chromium/nfc-mock.js": [
- "aff72bbad028ecd6b8c6a8023841e08f072adfac",
+ "ce22a9c2cfe9c0ae460d6e1eff4aaa99fe6b24e3",
"support"
],
"resources/chromium/sensor.mojom.js": [
@@ -690898,7 +693487,7 @@
"support"
],
"resources/chromium/webxr-test.js": [
- "d87b3420a85177ad5ef1c5c36cc5c4d785133eba",
+ "653dcac79f8f22e7143568fcf33543d210eb0127",
"support"
],
"resources/chromium/webxr-test.js.headers": [
@@ -690986,7 +693575,7 @@
"support"
],
"resources/test/tests/functional/api-tests-1.html": [
- "02009f856f6a33bf10d9804541efba5350178431",
+ "e4246e7faba8a57920bca06eafa11f7817fb07ed",
"support"
],
"resources/test/tests/functional/api-tests-2.html": [
@@ -691082,19 +693671,19 @@
"support"
],
"resources/test/tests/functional/single-page-test-fail.html": [
- "5826a2ef15c00d817197333de1f444cf1ac51e8b",
+ "9169a5a54e211042d2d46bdcc1b8d68ec9699e03",
"support"
],
"resources/test/tests/functional/single-page-test-no-assertions.html": [
- "f3140dd492c0c6442d03bc3fe063029892c45dcd",
+ "f1b18923de4b9e60e129c5eff08183647d88b644",
"support"
],
"resources/test/tests/functional/single-page-test-no-body.html": [
- "82f3e18a44cdc78cabd6b55406449d18eae59f20",
+ "0f3d4adf44bd753f3cfb4a8103d9a8d47adb8d9e",
"support"
],
"resources/test/tests/functional/single-page-test-pass.html": [
- "9d5f776d541454cdcff985bb2ad050036d358b81",
+ "e47250d763cfdf209efd954ac7d7758f4bf54db5",
"support"
],
"resources/test/tests/functional/task-scheduling-promise-test.html": [
@@ -691142,7 +693731,7 @@
"support"
],
"resources/test/tests/functional/worker-uncaught-single.js": [
- "d7f00382c0b92ff29bd8bcb7fceebec727df4ef7",
+ "c04542b2f57915826887592b9c08c30d90741ee3",
"support"
],
"resources/test/tests/functional/worker.js": [
@@ -691222,7 +693811,7 @@
"support"
],
"resources/test/tests/unit/exceptional-cases.html": [
- "236970cbea95a53ad1be21076d5a6af3bc53642e",
+ "2be4dacaaec8ae53e63d704e842d32968a424b4b",
"support"
],
"resources/test/tests/unit/format-value.html": [
@@ -691274,7 +693863,7 @@
"support"
],
"resources/testdriver.js": [
- "031be1b7e5501658d412aecc6f0cba56b3444601",
+ "bd38e3e006afec94c23005cb1725c6d4a6e9bbe0",
"support"
],
"resources/testdriver.js.headers": [
@@ -691286,7 +693875,7 @@
"support"
],
"resources/testharness.js": [
- "a44185c1eaf97d89dd023d75354da588873905a4",
+ "93809664ea347d575913186362d12635893ec1c3",
"support"
],
"resources/testharness.js.headers": [
@@ -691393,8 +693982,8 @@
"e1b50f670105f3a05dacd3518d62770685121c67",
"support"
],
- "screen_enumeration/requestDisplays.tentative.https.any.js": [
- "e2a5bc427deb96275a1441141d53e2ffc7f8cd99",
+ "screen_enumeration/getScreens.tentative.https.any.js": [
+ "0b8c226ddbd7035d29760b8afa84d8429a3d3482",
"testharness"
],
"scroll-animations/META.yml": [
@@ -691437,12 +694026,20 @@
"0320210f8394c7439353a6e1efd0eba339b27e20",
"testharness"
],
+ "scroll-to-text-fragment/scroll-to-text-fragment-api.html": [
+ "8b1dea6f331bf41b4759cadf6859f016848566fa",
+ "testharness"
+ ],
+ "scroll-to-text-fragment/scroll-to-text-fragment-same-doc.html": [
+ "3bfd45382e55657b8f42d16f3a47c0188cd5c73f",
+ "testharness"
+ ],
"scroll-to-text-fragment/scroll-to-text-fragment-target.html": [
- "bc513126ae625846ef16e15f23ff174e78709fdb",
+ "1ef9dbba519697c61529fba0e81dc64979257e70",
"support"
],
"scroll-to-text-fragment/scroll-to-text-fragment.html": [
- "e05210f1ea06e3f7676cc86392c6eb5b3d1d8837",
+ "b3a35f489aca424b24c57b40796a179c5ee5b4c7",
"testharness"
],
"secure-contexts/META.yml": [
@@ -696142,7 +698739,7 @@
"testharness"
],
"sms/README.md": [
- "7cd98964c24979d427b51c095e178b0622efa971",
+ "1f34178beace0786a347a6b378489b3741c960d9",
"support"
],
"sms/idlharness.https.any.js": [
@@ -696198,7 +698795,7 @@
"testharness"
],
"speech-api/SpeechSynthesis-speak-events.html": [
- "babfe3c388e92aee8c4e6ea62cd3c038eb5bcb2d",
+ "c559da1f92965d00c7532bfdad6e0cccad80c83a",
"testharness"
],
"speech-api/SpeechSynthesis-speak-ownership.html": [
@@ -696230,7 +698827,7 @@
"manual"
],
"speech-api/historical.html": [
- "207d3e016ed1fec05d9a1256f40088c61bb05c83",
+ "9da70c44de9be25933d95d7e6fd2f3ae69a04333",
"testharness"
],
"speech-api/idlharness.window.js": [
@@ -696297,6 +698894,10 @@
"1db8620485dc459577649e0c2689194d106dcc51",
"testharness"
],
+ "storage-access-api/META.yml": [
+ "cb059fe6bb103af62e83abe2e1518011975102e2",
+ "support"
+ ],
"storage-access-api/hasStorageAccess.sub.window.js": [
"c4d6e3a8b9a856007a299b7f2b1112188547ebd1",
"testharness"
@@ -696457,6 +699058,10 @@
"3c85f6edb25b955645ccc5fedae3f0facdb36a2b",
"testharness"
],
+ "streams/piping/throwing-options.any.js": [
+ "6fab32cc6dcf4c2f4fb5a7a22999788f22459f4e",
+ "testharness"
+ ],
"streams/piping/transform-streams.any.js": [
"368ed79da4786e0206d421d33076fe9fe61a14ba",
"testharness"
@@ -697177,6 +699782,10 @@
"56f67dc5ed1ceeeea347b703f5048b289f95131b",
"testharness"
],
+ "svg/animations/short-simple-duration-and-fractional-repeatcount.html": [
+ "025dd5092d3bb77707423b316f10bef8f2fb927d",
+ "testharness"
+ ],
"svg/animations/single-values-animation.html": [
"40aa3461866cf4c32316d86216dcfe4298be7718",
"testharness"
@@ -697481,6 +700090,10 @@
"17b78a2787d0becf64b90136fcf0f6f966404baa",
"testharness"
],
+ "svg/animations/switching-animated-target-to-unknown-element.html": [
+ "fef86a723eebede0641f0fd46f7a2672b184457e",
+ "testharness"
+ ],
"svg/animations/syncbase-remove-add-while-running.html": [
"61b9604a7b6751a156c48431b89fa2f3cd1af551",
"testharness"
@@ -700045,6 +702658,14 @@
"29ba209b2badecaac695a678540cc53e5c4ed3f5",
"testharness"
],
+ "svg/layout/svg-with-precent-dimensions-relayout-ref.html": [
+ "1a15a9f2b890dfcfe4a8a59530a75de8a69b9179",
+ "support"
+ ],
+ "svg/layout/svg-with-precent-dimensions-relayout.html": [
+ "9d04f412b70ad3038bde08b31bf981b7f65619bb",
+ "reftest"
+ ],
"svg/linking/reftests/href-a-element-attr-change.html": [
"c74b2e015613a09d1cecb5a0c3136d26f07e2a5b",
"reftest"
@@ -702518,7 +705139,7 @@
"support"
],
"tools/requirements_flake8.txt": [
- "16e35cf5aa957755d0b171e8a86f69c208484996",
+ "ae35da67e53fcc348054d10c9e498e5fcbca06ed",
"support"
],
"tools/requirements_mypy.txt": [
@@ -706534,7 +709155,7 @@
"support"
],
"tools/tox.ini": [
- "63fb8ed9832ba9d11dae965e3c335e3d26289720",
+ "a330d0523486ca0b3f5e7d4e00567f8a0b60200e",
"support"
],
"tools/webdriver/.gitignore": [
@@ -706542,7 +709163,7 @@
"support"
],
"tools/webdriver/README.md": [
- "72de3b2ae8b6a25434bbfef00e49e0a0463ff247",
+ "2795ff1fcf39f7da98a18eb3484109b0bf7137ae",
"support"
],
"tools/webdriver/setup.py": [
@@ -706614,7 +709235,7 @@
"support"
],
"tools/wpt/run.py": [
- "25255320fa9232286de9a779550618913d9ba7a3",
+ "44dfbc25fa58ca50dbfdb761f358692c2115a7a3",
"support"
],
"tools/wpt/testfiles.py": [
@@ -706646,7 +709267,7 @@
"support"
],
"tools/wpt/tox.ini": [
- "d0dead55d9aa863dd4bd50c941f45ab462f4ede9",
+ "6a044473a6b74981345683abb960588de6535bfb",
"support"
],
"tools/wpt/update.py": [
@@ -706702,7 +709323,7 @@
"support"
],
"tools/wptrunner/requirements.txt": [
- "d8a6c898d24f40c2bcffae42c32e63a9e5b10005",
+ "60775f8259eb317203825ea8fd5c26c901db5fad",
"support"
],
"tools/wptrunner/requirements_android_webview.txt": [
@@ -706730,11 +709351,11 @@
"support"
],
"tools/wptrunner/requirements_epiphany.txt": [
- "9115b7ac4e8f6a6e4703a7b61d2715075e2f6053",
+ "470aaf9a93996d0231e13e05cc35557a36d25de9",
"support"
],
"tools/wptrunner/requirements_firefox.txt": [
- "85efd35486d8d9a3724c9cf37aa231dfcdac72ec",
+ "f49102b8a89ba7bbbc809c1b4313779c31330fc4",
"support"
],
"tools/wptrunner/requirements_ie.txt": [
@@ -706758,7 +709379,7 @@
"support"
],
"tools/wptrunner/requirements_webkit.txt": [
- "f85779a40bd50db1e24dc032ec43a7444341905b",
+ "470aaf9a93996d0231e13e05cc35557a36d25de9",
"support"
],
"tools/wptrunner/setup.py": [
@@ -706874,7 +709495,7 @@
"support"
],
"tools/wptrunner/tox.ini": [
- "5d343751c5488cdd1a73b9d3fcae94de46874a3e",
+ "f82dbc6b8a83556383cb26a2e7c5633f6b19da99",
"support"
],
"tools/wptrunner/wptrunner.default.ini": [
@@ -706986,7 +709607,7 @@
"support"
],
"tools/wptrunner/wptrunner/executors/base.py": [
- "004b92b4b6639aba5ccfe46e6558640a794c18cf",
+ "f20f735528c16dbc72fdb41434f3511c2128dbd9",
"support"
],
"tools/wptrunner/wptrunner/executors/executorchrome.py": [
@@ -707030,7 +709651,7 @@
"support"
],
"tools/wptrunner/wptrunner/executors/executorwebdriver.py": [
- "a2601978b578aa546fd5d38c1bb997719ae27d41",
+ "344debf8aa69ef0634764cdaf0e994511bbceab6",
"support"
],
"tools/wptrunner/wptrunner/executors/executorwebkit.py": [
@@ -707042,7 +709663,7 @@
"support"
],
"tools/wptrunner/wptrunner/executors/protocol.py": [
- "77a705ffb4759c04c53ab3a8f045b50569f2598d",
+ "0758312d65f90043b1cbb2f536d3d31c71812ad6",
"support"
],
"tools/wptrunner/wptrunner/executors/pytestrunner/__init__.py": [
@@ -707134,7 +709755,7 @@
"support"
],
"tools/wptrunner/wptrunner/testdriver-extra.js": [
- "9f97fac9a0cbc99ae8631ac2a1179da8bb9123a8",
+ "278f226dbd2cefc284ebf347c32089ea1fa5a22d",
"support"
],
"tools/wptrunner/wptrunner/testdriver-vendor.js": [
@@ -707318,7 +709939,7 @@
"support"
],
"tools/wptrunner/wptrunner/wpttest.py": [
- "80db17a3c7284cd82145a3d20c3532a0e79c82a4",
+ "e5c28bc47316df6aec758459b6aa2c5053cf7a3e",
"support"
],
"tools/wptserve/.gitignore": [
@@ -707913,10 +710534,30 @@
"d13ad567a726f39299a7e7f58aeffec4ba90a908",
"support"
],
+ "trusted-types/support/navigation-report-only-support.html": [
+ "d00d0538753a74411feeec42d5682082031c09d4",
+ "support"
+ ],
+ "trusted-types/support/navigation-report-only-support.html.headers": [
+ "fa87952ae486b3a902eca0257eadace8e25e881f",
+ "support"
+ ],
+ "trusted-types/support/navigation-support.html": [
+ "cd41f3968e7c74f84a7541506053808073ce541d",
+ "support"
+ ],
+ "trusted-types/support/navigation-support.html.headers": [
+ "1bc33add09b4b34ce2cba21f488f8ed53345a27a",
+ "support"
+ ],
"trusted-types/support/worker.js": [
"4079f7e9c7933cf9ee195fe0e7a54e0f56f184ab",
"support"
],
+ "trusted-types/trusted-types-createHTMLDocument.tentative.html": [
+ "7a43b1f7b35f51d249b815a64eb26fdd90d529d1",
+ "testharness"
+ ],
"trusted-types/trusted-types-eval-reporting-no-unsafe-eval.tentative.https.html": [
"e15ecfaa86c5b48dcc3aa9903ab7b0ab89af8474",
"testharness"
@@ -707941,6 +710582,10 @@
"2e935f73a48c42346b6352fa6cd16d12294eebd8",
"support"
],
+ "trusted-types/trusted-types-navigation.tentative.html": [
+ "7f17c64e57090392c100eb0791372fcf9107de13",
+ "testharness"
+ ],
"trusted-types/trusted-types-report-only.tentative.https.html": [
"bf0a1eb9c1911e2fb25ed89dbd14e7dfd86cf358",
"testharness"
@@ -708162,7 +710807,7 @@
"support"
],
"upgrade-insecure-requests/README.md": [
- "516e8e262f4b18375689cb45d15f2c516c24571f",
+ "7b7ac65c9903410dd9e6e924b922b1961df32318",
"support"
],
"upgrade-insecure-requests/gen/iframe-blank-inherit.meta/unset/fetch/cross-http-downgrade.downgrade.https.html": [
@@ -711558,7 +714203,7 @@
"testharness"
],
"vibration/invalid-values.html": [
- "6740a44a8ed98ac76c577636d42010c1c8c27ada",
+ "9381dadcc06e5d301b5531f0679ce44f943e8740",
"testharness"
],
"vibration/pattern-array-extra-manual.html": [
@@ -711610,7 +714255,7 @@
"testharness"
],
"visual-viewport/viewport-no-resize-event-on-overflow-recalc.html.ini": [
- "75e29ae4c427efbaeb9e08ec4824b90c30c2aead",
+ "f8d682fbf902cf7d65ed75c1bcdfd2d1f54980ac",
"support"
],
"visual-viewport/viewport-offset-manual.html": [
@@ -713149,6 +715794,10 @@
"a33d6d4f24676356b59b6b431968d8486df50615",
"testharness"
],
+ "web-animations/idlharness.window.js": [
+ "c32016280e659fe8268c87b58e4956a1eb81b399",
+ "testharness"
+ ],
"web-animations/interfaces/Animatable/animate-no-browsing-context.html": [
"61a7502a988f96437574bc2949a8978d326003e9",
"testharness"
@@ -713185,10 +715834,6 @@
"5b9586bfaf962e73dd418212e407e6d529ecdfd6",
"testharness"
],
- "web-animations/interfaces/Animation/idlharness.window.js": [
- "14b8395a2171db536ac5bbde964972a99defc41d",
- "testharness"
- ],
"web-animations/interfaces/Animation/oncancel.html": [
"d5391196092c9671c2c22c1c035bc173bbef7b4f",
"testharness"
@@ -713237,10 +715882,6 @@
"1c40a3fb211c1bd3e33e6c6c6325b1d25e3b981d",
"testharness"
],
- "web-animations/interfaces/AnimationPlaybackEvent/idlharness.window.js": [
- "5124e5095724521c721b8781dcfc92ff573f48e8",
- "testharness"
- ],
"web-animations/interfaces/Document/timeline.html": [
"b8b4d74d5e536a111449fd0268424ac06a151b95",
"testharness"
@@ -713253,10 +715894,6 @@
"ca0997ac8f9012b7d019760be97e09fa0f837179",
"testharness"
],
- "web-animations/interfaces/DocumentTimeline/idlharness.window.js": [
- "395d133f482a38a33ea5be061450f0f322be9fc9",
- "testharness"
- ],
"web-animations/interfaces/DocumentTimeline/style-change-events.html": [
"c1607e6fb92943c580802025e4a4cc617a747144",
"testharness"
@@ -713277,10 +715914,6 @@
"1f8d267e4a660c80b9820ff516079dbd71042f94",
"testharness"
],
- "web-animations/interfaces/KeyframeEffect/idlharness.window.js": [
- "22548861ae335c80858808cbe19f996f24a7edc9",
- "testharness"
- ],
"web-animations/interfaces/KeyframeEffect/iterationComposite.html": [
"bbb8ee2a3261fcb98cda7a83056467bc0b20dac6",
"testharness"
@@ -713558,7 +716191,7 @@
"testharness"
],
"web-nfc/NDEFMessage_constructor.https.html": [
- "a6a2e6bd67c5c480367e20dd46e7a796b4c4f8a9",
+ "ce212136023058dd6597ff925fd68a73e5d2ab95",
"testharness"
],
"web-nfc/NDEFReader-document-hidden-manual.https.html": [
@@ -713566,11 +716199,11 @@
"manual"
],
"web-nfc/NDEFReader_options.https.html": [
- "389fff9e041e284358a87e5cc133046d4a579b84",
+ "b1452c0240d176316341a0ab6857433fbc99a5b5",
"testharness"
],
"web-nfc/NDEFReader_scan.https.html": [
- "3fe95cc91478aea7426e882743814723c4517ec6",
+ "a26a548c6392d8116e8c188d6dbbe03b4660d87f",
"testharness"
],
"web-nfc/NDEFReader_scan_iframe.https.html": [
@@ -713578,11 +716211,11 @@
"testharness"
],
"web-nfc/NDEFReadingEvent_constructor.https.html": [
- "c23a68a2f79e5527f5d2742c4729bce0d6178c19",
+ "15ef6e466aab05e289cc93bb678fbda02ce253f7",
"testharness"
],
"web-nfc/NDEFRecord_constructor.https.html": [
- "1206afb4713dc7e4b48dcc837b3dd708382a9ce2",
+ "6028e970b879b1f65dd48d64525995114b5e82e9",
"testharness"
],
"web-nfc/NDEFWriter-document-hidden-manual.https.html": [
@@ -713590,7 +716223,7 @@
"manual"
],
"web-nfc/NDEFWriter_push.https.html": [
- "2be655fbbf93cfb0c0c8813f86dc3e98450af720",
+ "f8b461c42d5ee0265f1301458b8e92a812e650da",
"testharness"
],
"web-nfc/README.md": [
@@ -713606,7 +716239,7 @@
"testharness"
],
"web-nfc/resources/nfc-helpers.js": [
- "cf9b510f30424e79412cc35098f63f5afd05707b",
+ "bdd8290d9eb7f9fcae1e46820a64fc6cef8617e5",
"support"
],
"web-nfc/resources/support-iframe.html": [
@@ -713749,10 +716382,6 @@
"3bf3bc23b20764ba54d5ff125699df91fffe741a",
"support"
],
- "webaudio/refresh_idl.rb": [
- "a07847535ad7cae63b06c3d30333819cfef08b77",
- "support"
- ],
"webaudio/resources/4ch-440.wav": [
"85dc1ea9044e28eeeac6176bae61285c25ebf711",
"support"
@@ -715150,7 +717779,7 @@
"support"
],
"webdriver/tests/find_element_from_element/find.py": [
- "56e216bb646131bdcc9a0c3c28ea4142c2982897",
+ "b107a8957e08fa2c83fd47459f1e66d3b7d74134",
"wdspec"
],
"webdriver/tests/find_element_from_element/user_prompts.py": [
@@ -715862,7 +718491,7 @@
"testharness"
],
"webgpu/cts.html": [
- "b60faec9623bb0adf7c1b9ad0e5d488ce14b5882",
+ "13d8b7c8324a7e3c3c0c00359e729a958f715205",
"testharness"
],
"webgpu/framework/allowed_characters.js": [
@@ -715874,7 +718503,7 @@
"support"
],
"webgpu/framework/fixture.js": [
- "2c1ea8314689e610528ba81254ee00e99242f4d5",
+ "d976fa46880a30cbb1837fce30a96023875e0f87",
"support"
],
"webgpu/framework/gpu/implementation.js": [
@@ -715898,7 +718527,7 @@
"support"
],
"webgpu/framework/logger.js": [
- "e854292473640a21d6bb660a2a0999e740a90c8e",
+ "5536e736f069a3a013eb88233eb0d3a8c413f919",
"support"
],
"webgpu/framework/params/combine.js": [
@@ -715942,7 +718571,7 @@
"support"
],
"webgpu/framework/test_group.js": [
- "69d8cc0401714f4f6ffe2ddfe0f8763b833914e5",
+ "68527a5b2cf55426ae779739fba788cfde94b244",
"support"
],
"webgpu/framework/tree.js": [
@@ -715962,7 +718591,7 @@
"support"
],
"webgpu/framework/util/stack.js": [
- "ae99ac904a132d947f304ca0f03f50b25fd197ae",
+ "bd51d54509483954bb84ea9757b873ca42233cab",
"support"
],
"webgpu/framework/util/timeout.js": [
@@ -715970,7 +718599,7 @@
"support"
],
"webgpu/framework/version.js": [
- "55a72f5efb03ad9043ea2600a311cfff249a21ce",
+ "e2c91190305110d107b22dfb45e6a29739d424cd",
"support"
],
"webgpu/runtime/helper/options.js": [
@@ -715986,7 +718615,7 @@
"testharness"
],
"webgpu/runtime/wpt.js": [
- "c87f9167bbeba1edca847a76a6cb59401f0c7409",
+ "fd02f09471bc656a900714dd586101d6acb28c46",
"support"
],
"webgpu/suites/cts/buffers/create_mapped.spec.js": [
@@ -716010,7 +718639,7 @@
"support"
],
"webgpu/suites/cts/canvas/context_creation.spec.js": [
- "ba0d47228536da7192111f8bd7a6947de7c6181a",
+ "a693b002769ae9a1e951bc1888ca49ba393df7d0",
"support"
],
"webgpu/suites/cts/command_buffer/basic.spec.js": [
@@ -716018,7 +718647,7 @@
"support"
],
"webgpu/suites/cts/command_buffer/compute/basic.spec.js": [
- "8fcc7ef9309b5a8760247f0c86ea374c0d3f3e14",
+ "8a5fc168a4d8fbed69ba5ee2009fc7049fdcf3a3",
"support"
],
"webgpu/suites/cts/command_buffer/copies.spec.js": [
@@ -716030,11 +718659,11 @@
"support"
],
"webgpu/suites/cts/command_buffer/render/rendering.spec.js": [
- "46829a8d07cc51a04ad1ec323fdaf6f5b14e6cdc",
+ "54c627dfd35d7179d9f357c046afa77c8b9e116a",
"support"
],
"webgpu/suites/cts/command_buffer/render/storeop.spec.js": [
- "0b38debc13425c87def0548f88085aa362a7a7cb",
+ "0326cf65ad69a1558a69b83df94622041d7eb1db",
"support"
],
"webgpu/suites/cts/examples.spec.js": [
@@ -716050,11 +718679,11 @@
"support"
],
"webgpu/suites/cts/gpu_test.js": [
- "96f109d3043edf8f77d7cbfce88e13b348e44f58",
+ "a324e8839e505ab4fcce98dbf49b9217bc52aa00",
"support"
],
"webgpu/suites/cts/index.js": [
- "33934cdd38cb51c8a00dc72c436a14965ab7aa28",
+ "d38bcc5b6b51cf6b5f7bc19d4a23d9f5d98b4415",
"support"
],
"webgpu/suites/cts/validation/createBindGroup.spec.js": [
@@ -716070,7 +718699,7 @@
"support"
],
"webgpu/suites/cts/validation/createRenderPipeline.spec.js": [
- "cc838fc6515a5b9a7cc55bacc0361556a3bdd93c",
+ "b66dabf285a2c007e01356ed9c42a9cfe7eddc43",
"support"
],
"webgpu/suites/cts/validation/createTexture.spec.js": [
@@ -716094,7 +718723,7 @@
"support"
],
"webgpu/suites/cts/validation/render_pass.spec.js": [
- "52da36fa7ac9cb196aaf578707acf09a7f62724d",
+ "3e08dcc17368ecb7a74d386c64e2166fb6baff66",
"support"
],
"webgpu/suites/cts/validation/render_pass_descriptor.spec.js": [
@@ -716118,7 +718747,7 @@
"support"
],
"webgpu/suites/cts/validation/setVertexBuffer.spec.js": [
- "1df40173abe0eab97fe384b12df94f0e4ec03c3b",
+ "ba22ee2d2a4e636e2b519003da669bbd33fead2d",
"support"
],
"webgpu/suites/cts/validation/setViewport.spec.js": [
@@ -716126,11 +718755,11 @@
"support"
],
"webgpu/suites/cts/validation/validation_test.js": [
- "099b8202204d06b41403410f287a770a0945559d",
+ "dc5488e769883b99a9157567d3aaa71eafd2dd42",
"support"
],
- "webgpu/suites/cts/validation/vertex_input.spec.js": [
- "951c9ead3cfc53569bbcfa322252edef3b672609",
+ "webgpu/suites/cts/validation/vertex_state.spec.js": [
+ "da619181192b907f0485d71cf364616568d77f66",
"support"
],
"webmessaging/Channel_postMessage_Blob.htm": [
@@ -716910,7 +719539,7 @@
"testharness"
],
"webrtc/RTCPeerConnection-iceConnectionState.https.html": [
- "9dd364ed3271283d71f784c3c37abddf09e68c68",
+ "32f2eb9b4607121ad9aa0db99a05e3ab78750f7e",
"testharness"
],
"webrtc/RTCPeerConnection-iceGatheringState.html": [
@@ -718262,7 +720891,7 @@
"support"
],
"websockets/unload-a-document/001-1.html": [
- "bd0c36686954938a1d2bf70918bc506da431e296",
+ "75d689e0b3d2e2ce3b7aa56ef33fb05409b78cb6",
"support"
],
"websockets/unload-a-document/001-2.html": [
@@ -718274,7 +720903,7 @@
"testharness"
],
"websockets/unload-a-document/002-1.html": [
- "d151b231f250ab61103db23877e0dc0e80bd1eec",
+ "546de89dfee0782a916bf0ed82328bb77e92956c",
"support"
],
"websockets/unload-a-document/002-2.html": [
@@ -724206,7 +726835,7 @@
"support"
],
"wpt.py": [
- "0736186c5d813f04a83fdd117974a9e1513dbff1",
+ "c65e1ed2c6cde4d3abd9e9a771f02542398fec49",
"support"
],
"x-frame-options/META.yml": [
@@ -725090,7 +727719,7 @@
"support"
],
"xhr/resources/echo-method.py": [
- "5351d1961ac0254106c374e2b2ead84bbc6878d4",
+ "ccb46b6b2eb4d4b4c281720e0a16142f048ddbc3",
"support"
],
"xhr/resources/empty-div-utf8-html.py": [
diff --git a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_cbc.https.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_cbc.https.worker.js.ini
index 0ca37973f27..f36c001c6e3 100644
--- a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_cbc.https.worker.js.ini
+++ b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_cbc.https.worker.js.ini
@@ -1,4 +1,5 @@
[aes_cbc.https.worker.html]
+ expected: ERROR
[Untitled]
expected: FAIL
diff --git a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_ctr.https.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_ctr.https.worker.js.ini
index 090e9e6de76..57f13020bf4 100644
--- a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_ctr.https.worker.js.ini
+++ b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_ctr.https.worker.js.ini
@@ -1,4 +1,5 @@
[aes_ctr.https.worker.html]
+ expected: ERROR
[Untitled]
expected: FAIL
diff --git a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_gcm.https.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_gcm.https.worker.js.ini
index 0d86ee96b49..78ba046e07c 100644
--- a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_gcm.https.worker.js.ini
+++ b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_gcm.https.worker.js.ini
@@ -1,4 +1,5 @@
[aes_gcm.https.worker.html]
+ expected: ERROR
[Untitled]
expected: FAIL
diff --git a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/rsa.https.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/rsa.https.worker.js.ini
index 953d7d5a25a..e07e920891e 100644
--- a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/rsa.https.worker.js.ini
+++ b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/rsa.https.worker.js.ini
@@ -1,4 +1,5 @@
[rsa.https.worker.html]
+ expected: ERROR
[Untitled]
expected: FAIL
diff --git a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_aes_cbc.https.html.ini b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_aes_cbc.https.html.ini
index 20d98b7e6c2..ed2e028c280 100644
--- a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_aes_cbc.https.html.ini
+++ b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_aes_cbc.https.html.ini
@@ -1,5 +1,6 @@
[test_aes_cbc.https.html]
type: testharness
+ expected: ERROR
[WebCryptoAPI: encrypt() Using AES-CBC]
expected: FAIL
diff --git a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_aes_ctr.https.html.ini b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_aes_ctr.https.html.ini
index 1dec5ae9d7c..a358eeb4442 100644
--- a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_aes_ctr.https.html.ini
+++ b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_aes_ctr.https.html.ini
@@ -1,5 +1,6 @@
[test_aes_ctr.https.html]
type: testharness
+ expected: ERROR
[WebCryptoAPI: encrypt() Using AES-CTR]
expected: FAIL
diff --git a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_aes_gcm.https.html.ini b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_aes_gcm.https.html.ini
index 83c05d12a09..8c2823cafb6 100644
--- a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_aes_gcm.https.html.ini
+++ b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_aes_gcm.https.html.ini
@@ -1,5 +1,6 @@
[test_aes_gcm.https.html]
type: testharness
+ expected: ERROR
[WebCryptoAPI: encrypt() Using AES-GCM]
expected: FAIL
diff --git a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_rsa_oaep.https.html.ini b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_rsa_oaep.https.html.ini
index 2d053589082..be69a1b8f60 100644
--- a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_rsa_oaep.https.html.ini
+++ b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_rsa_oaep.https.html.ini
@@ -1,5 +1,6 @@
[test_rsa_oaep.https.html]
type: testharness
+ expected: ERROR
[WebCryptoAPI: encrypt() Using RSA-OAEP]
expected: FAIL
diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-CBC.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-CBC.https.any.js.ini
index 508d737660c..63c4cbd671d 100644
--- a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-CBC.https.any.js.ini
+++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-CBC.https.any.js.ini
@@ -1,4 +1,5 @@
[failures_AES-CBC.https.any.worker.html]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -7,6 +8,7 @@
[failures_AES-CBC.https.any.html]
+ expected: ERROR
[Untitled]
expected: FAIL
diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-CTR.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-CTR.https.any.js.ini
index b2741c0aa31..a94fd44425d 100644
--- a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-CTR.https.any.js.ini
+++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-CTR.https.any.js.ini
@@ -1,4 +1,5 @@
[failures_AES-CTR.https.any.html]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -7,6 +8,7 @@
[failures_AES-CTR.https.any.worker.html]
+ expected: ERROR
[Untitled]
expected: FAIL
diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-GCM.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-GCM.https.any.js.ini
index 6332c7f58db..9dddf23cc9e 100644
--- a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-GCM.https.any.js.ini
+++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-GCM.https.any.js.ini
@@ -1,4 +1,5 @@
[failures_AES-GCM.https.any.worker.html]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -7,6 +8,7 @@
[failures_AES-GCM.https.any.html]
+ expected: ERROR
[Untitled]
expected: FAIL
diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-KW.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-KW.https.any.js.ini
index aed97dc8b02..0790ecec4a2 100644
--- a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-KW.https.any.js.ini
+++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-KW.https.any.js.ini
@@ -1,4 +1,5 @@
[failures_AES-KW.https.any.html]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -7,6 +8,7 @@
[failures_AES-KW.https.any.worker.html]
+ expected: ERROR
[Untitled]
expected: FAIL
diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_ECDH.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_ECDH.https.any.js.ini
index 0d6ad10da7e..51fab92d9f2 100644
--- a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_ECDH.https.any.js.ini
+++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_ECDH.https.any.js.ini
@@ -1,4 +1,5 @@
[failures_ECDH.https.any.worker.html]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -7,6 +8,7 @@
[failures_ECDH.https.any.html]
+ expected: ERROR
[Untitled]
expected: FAIL
diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_ECDSA.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_ECDSA.https.any.js.ini
index da5d59aa3f3..ccff8aa6284 100644
--- a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_ECDSA.https.any.js.ini
+++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_ECDSA.https.any.js.ini
@@ -1,4 +1,5 @@
[failures_ECDSA.https.any.html]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -7,6 +8,7 @@
[failures_ECDSA.https.any.worker.html]
+ expected: ERROR
[Untitled]
expected: FAIL
diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_HMAC.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_HMAC.https.any.js.ini
index efe0d31b033..f38b35f747d 100644
--- a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_HMAC.https.any.js.ini
+++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_HMAC.https.any.js.ini
@@ -1,4 +1,5 @@
[failures_HMAC.https.any.html]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -7,6 +8,7 @@
[failures_HMAC.https.any.worker.html]
+ expected: ERROR
[Untitled]
expected: FAIL
diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.any.js.ini
index 8c954b5cca5..a12b666e11b 100644
--- a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.any.js.ini
+++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.any.js.ini
@@ -1,4 +1,5 @@
[failures_RSA-OAEP.https.any.html]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -7,6 +8,7 @@
[failures_RSA-OAEP.https.any.worker.html]
+ expected: ERROR
[Untitled]
expected: FAIL
diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_RSA-PSS.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_RSA-PSS.https.any.js.ini
index 56008b662b9..221ae61cd44 100644
--- a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_RSA-PSS.https.any.js.ini
+++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_RSA-PSS.https.any.js.ini
@@ -1,4 +1,5 @@
[failures_RSA-PSS.https.any.html]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -7,6 +8,7 @@
[failures_RSA-PSS.https.any.worker.html]
+ expected: ERROR
[Untitled]
expected: FAIL
diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.any.js.ini
index d6daa8d5cd6..90843f4b0a6 100644
--- a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.any.js.ini
+++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.any.js.ini
@@ -1,4 +1,5 @@
[failures_RSASSA-PKCS1-v1_5.https.any.html]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -7,6 +8,7 @@
[failures_RSASSA-PKCS1-v1_5.https.any.worker.html]
+ expected: ERROR
[Untitled]
expected: FAIL
diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-CBC.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-CBC.https.any.js.ini
index f4d5ec100fa..4ab30e4c1d9 100644
--- a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-CBC.https.any.js.ini
+++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-CBC.https.any.js.ini
@@ -1,4 +1,5 @@
[successes_AES-CBC.https.any.html]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -7,6 +8,7 @@
[successes_AES-CBC.https.any.worker.html]
+ expected: ERROR
[Untitled]
expected: FAIL
diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-CTR.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-CTR.https.any.js.ini
index ab30f20ed2a..26f9b95b3b5 100644
--- a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-CTR.https.any.js.ini
+++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-CTR.https.any.js.ini
@@ -1,4 +1,5 @@
[successes_AES-CTR.https.any.worker.html]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -7,6 +8,7 @@
[successes_AES-CTR.https.any.html]
+ expected: ERROR
[Untitled]
expected: FAIL
diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-GCM.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-GCM.https.any.js.ini
index 8ad478fae27..47a58a9d66b 100644
--- a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-GCM.https.any.js.ini
+++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-GCM.https.any.js.ini
@@ -1,4 +1,5 @@
[successes_AES-GCM.https.any.html]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -7,6 +8,7 @@
[successes_AES-GCM.https.any.worker.html]
+ expected: ERROR
[Untitled]
expected: FAIL
diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-KW.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-KW.https.any.js.ini
index 13a7bdf1646..ad313f67217 100644
--- a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-KW.https.any.js.ini
+++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-KW.https.any.js.ini
@@ -1,4 +1,5 @@
[successes_AES-KW.https.any.html]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -7,6 +8,7 @@
[successes_AES-KW.https.any.worker.html]
+ expected: ERROR
[Untitled]
expected: FAIL
diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_ECDH.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_ECDH.https.any.js.ini
index a4270c582ca..86e8d942187 100644
--- a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_ECDH.https.any.js.ini
+++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_ECDH.https.any.js.ini
@@ -1,4 +1,5 @@
[successes_ECDH.https.any.html]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -7,6 +8,7 @@
[successes_ECDH.https.any.worker.html]
+ expected: ERROR
[Untitled]
expected: FAIL
diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_ECDSA.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_ECDSA.https.any.js.ini
index cfb6b99531d..f3e09694740 100644
--- a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_ECDSA.https.any.js.ini
+++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_ECDSA.https.any.js.ini
@@ -1,4 +1,5 @@
[successes_ECDSA.https.any.html]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -7,6 +8,7 @@
[successes_ECDSA.https.any.worker.html]
+ expected: ERROR
[Untitled]
expected: FAIL
diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_HMAC.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_HMAC.https.any.js.ini
index 252866e2dc8..d68735be03b 100644
--- a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_HMAC.https.any.js.ini
+++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_HMAC.https.any.js.ini
@@ -1,4 +1,5 @@
[successes_HMAC.https.any.worker.html]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -7,6 +8,7 @@
[successes_HMAC.https.any.html]
+ expected: ERROR
[Untitled]
expected: FAIL
diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.any.js.ini
index 72051178642..ac264080061 100644
--- a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.any.js.ini
+++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.any.js.ini
@@ -1,4 +1,5 @@
[successes_RSA-OAEP.https.any.html?1-10]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -7,6 +8,7 @@
[successes_RSA-OAEP.https.any.html?131-140]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -15,6 +17,7 @@
[successes_RSA-OAEP.https.any.html?71-80]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -23,6 +26,7 @@
[successes_RSA-OAEP.https.any.html?101-110]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -31,6 +35,7 @@
[successes_RSA-OAEP.https.any.worker.html?111-120]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -39,6 +44,7 @@
[successes_RSA-OAEP.https.any.html?41-50]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -47,6 +53,7 @@
[successes_RSA-OAEP.https.any.worker.html?141-150]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -55,6 +62,7 @@
[successes_RSA-OAEP.https.any.html?121-130]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -63,6 +71,7 @@
[successes_RSA-OAEP.https.any.worker.html?151-last]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -71,6 +80,7 @@
[successes_RSA-OAEP.https.any.html?61-70]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -79,6 +89,7 @@
[successes_RSA-OAEP.https.any.worker.html?51-60]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -87,6 +98,7 @@
[successes_RSA-OAEP.https.any.html?141-150]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -95,6 +107,7 @@
[successes_RSA-OAEP.https.any.worker.html?31-40]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -103,6 +116,7 @@
[successes_RSA-OAEP.https.any.worker.html?21-30]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -111,6 +125,7 @@
[successes_RSA-OAEP.https.any.html?151-last]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -119,6 +134,7 @@
[successes_RSA-OAEP.https.any.worker.html?61-70]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -127,6 +143,7 @@
[successes_RSA-OAEP.https.any.worker.html?81-90]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -135,6 +152,7 @@
[successes_RSA-OAEP.https.any.html?111-120]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -143,6 +161,7 @@
[successes_RSA-OAEP.https.any.html?81-90]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -151,6 +170,7 @@
[successes_RSA-OAEP.https.any.worker.html?71-80]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -159,6 +179,7 @@
[successes_RSA-OAEP.https.any.html?21-30]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -167,6 +188,7 @@
[successes_RSA-OAEP.https.any.worker.html?101-110]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -175,6 +197,7 @@
[successes_RSA-OAEP.https.any.html?51-60]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -183,6 +206,7 @@
[successes_RSA-OAEP.https.any.html?91-100]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -191,6 +215,7 @@
[successes_RSA-OAEP.https.any.worker.html?41-50]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -199,6 +224,7 @@
[successes_RSA-OAEP.https.any.worker.html?1-10]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -207,6 +233,7 @@
[successes_RSA-OAEP.https.any.html?11-20]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -215,6 +242,7 @@
[successes_RSA-OAEP.https.any.html?31-40]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -223,6 +251,7 @@
[successes_RSA-OAEP.https.any.worker.html?91-100]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -231,6 +260,7 @@
[successes_RSA-OAEP.https.any.worker.html?131-140]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -239,6 +269,7 @@
[successes_RSA-OAEP.https.any.worker.html?11-20]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -247,6 +278,7 @@
[successes_RSA-OAEP.https.any.worker.html?121-130]
+ expected: ERROR
[Untitled]
expected: FAIL
diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_RSA-PSS.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_RSA-PSS.https.any.js.ini
index 1f4fd74a8db..6f41195b892 100644
--- a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_RSA-PSS.https.any.js.ini
+++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_RSA-PSS.https.any.js.ini
@@ -1,4 +1,5 @@
[successes_RSA-PSS.https.any.html?11-20]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -7,6 +8,7 @@
[successes_RSA-PSS.https.any.worker.html?11-20]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -15,6 +17,7 @@
[successes_RSA-PSS.https.any.html?31-last]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -23,6 +26,7 @@
[successes_RSA-PSS.https.any.html?1-10]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -31,6 +35,7 @@
[successes_RSA-PSS.https.any.worker.html?1-10]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -39,6 +44,7 @@
[successes_RSA-PSS.https.any.html?21-30]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -47,6 +53,7 @@
[successes_RSA-PSS.https.any.worker.html?31-last]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -55,6 +62,7 @@
[successes_RSA-PSS.https.any.worker.html?21-30]
+ expected: ERROR
[Untitled]
expected: FAIL
diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.any.js.ini
index 32bd359d068..3a180e87d76 100644
--- a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.any.js.ini
+++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.any.js.ini
@@ -1,4 +1,5 @@
[successes_RSASSA-PKCS1-v1_5.https.any.html?1-10]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -7,6 +8,7 @@
[successes_RSASSA-PKCS1-v1_5.https.any.html?31-last]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -15,6 +17,7 @@
[successes_RSASSA-PKCS1-v1_5.https.any.worker.html?11-20]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -23,6 +26,7 @@
[successes_RSASSA-PKCS1-v1_5.https.any.html?21-30]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -31,6 +35,7 @@
[successes_RSASSA-PKCS1-v1_5.https.any.worker.html?1-10]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -39,6 +44,7 @@
[successes_RSASSA-PKCS1-v1_5.https.any.worker.html?31-last]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -47,6 +53,7 @@
[successes_RSASSA-PKCS1-v1_5.https.any.html?11-20]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -55,6 +62,7 @@
[successes_RSASSA-PKCS1-v1_5.https.any.worker.html?21-30]
+ expected: ERROR
[Untitled]
expected: FAIL
diff --git a/tests/wpt/metadata/WebCryptoAPI/sign_verify/ecdsa.https.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/sign_verify/ecdsa.https.worker.js.ini
index e7adef887fa..b3828d7c0b5 100644
--- a/tests/wpt/metadata/WebCryptoAPI/sign_verify/ecdsa.https.worker.js.ini
+++ b/tests/wpt/metadata/WebCryptoAPI/sign_verify/ecdsa.https.worker.js.ini
@@ -1,4 +1,5 @@
[ecdsa.https.worker.html]
+ expected: ERROR
[Untitled]
expected: FAIL
diff --git a/tests/wpt/metadata/WebCryptoAPI/sign_verify/hmac.https.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/sign_verify/hmac.https.worker.js.ini
index c7c98e1736f..17a3910f43f 100644
--- a/tests/wpt/metadata/WebCryptoAPI/sign_verify/hmac.https.worker.js.ini
+++ b/tests/wpt/metadata/WebCryptoAPI/sign_verify/hmac.https.worker.js.ini
@@ -1,4 +1,5 @@
[hmac.https.worker.html]
+ expected: ERROR
[Untitled]
expected: FAIL
diff --git a/tests/wpt/metadata/WebCryptoAPI/sign_verify/rsa_pkcs.https.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/sign_verify/rsa_pkcs.https.worker.js.ini
index e8892f42aa3..0d631283748 100644
--- a/tests/wpt/metadata/WebCryptoAPI/sign_verify/rsa_pkcs.https.worker.js.ini
+++ b/tests/wpt/metadata/WebCryptoAPI/sign_verify/rsa_pkcs.https.worker.js.ini
@@ -1,4 +1,5 @@
[rsa_pkcs.https.worker.html]
+ expected: ERROR
[Untitled]
expected: FAIL
diff --git a/tests/wpt/metadata/WebCryptoAPI/sign_verify/rsa_pss.https.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/sign_verify/rsa_pss.https.worker.js.ini
index f115447809e..4f6b0a93f99 100644
--- a/tests/wpt/metadata/WebCryptoAPI/sign_verify/rsa_pss.https.worker.js.ini
+++ b/tests/wpt/metadata/WebCryptoAPI/sign_verify/rsa_pss.https.worker.js.ini
@@ -1,4 +1,5 @@
[rsa_pss.https.worker.html]
+ expected: ERROR
[Untitled]
expected: FAIL
diff --git a/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_ecdsa.https.html.ini b/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_ecdsa.https.html.ini
index f789cd74c71..5bbe8cdede3 100644
--- a/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_ecdsa.https.html.ini
+++ b/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_ecdsa.https.html.ini
@@ -1,5 +1,6 @@
[test_ecdsa.https.html]
type: testharness
+ expected: ERROR
[WebCryptoAPI: sign() and verify() Using ECDSA]
expected: FAIL
diff --git a/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_hmac.https.html.ini b/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_hmac.https.html.ini
index f1054ef0341..db418af39dc 100644
--- a/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_hmac.https.html.ini
+++ b/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_hmac.https.html.ini
@@ -1,5 +1,6 @@
[test_hmac.https.html]
type: testharness
+ expected: ERROR
[WebCryptoAPI: sign() and verify() Using HMAC]
expected: FAIL
diff --git a/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_rsa_pkcs.https.html.ini b/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_rsa_pkcs.https.html.ini
index 8e54405ea89..8cfea0d5511 100644
--- a/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_rsa_pkcs.https.html.ini
+++ b/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_rsa_pkcs.https.html.ini
@@ -1,5 +1,6 @@
[test_rsa_pkcs.https.html]
type: testharness
+ expected: ERROR
[WebCryptoAPI: sign() and verify() Using RSASSA-PKCS1-v1_5]
expected: FAIL
diff --git a/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_rsa_pss.https.html.ini b/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_rsa_pss.https.html.ini
index 1059fe86e4e..db290642bad 100644
--- a/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_rsa_pss.https.html.ini
+++ b/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_rsa_pss.https.html.ini
@@ -1,5 +1,6 @@
[test_rsa_pss.https.html]
type: testharness
+ expected: ERROR
[WebCryptoAPI: sign() and verify() Using RSA-PSS]
expected: FAIL
diff --git a/tests/wpt/metadata/WebCryptoAPI/wrapKey_unwrapKey/test_wrapKey_unwrapKey.https.html.ini b/tests/wpt/metadata/WebCryptoAPI/wrapKey_unwrapKey/test_wrapKey_unwrapKey.https.html.ini
index 63f8830dd0e..ea42614a1b4 100644
--- a/tests/wpt/metadata/WebCryptoAPI/wrapKey_unwrapKey/test_wrapKey_unwrapKey.https.html.ini
+++ b/tests/wpt/metadata/WebCryptoAPI/wrapKey_unwrapKey/test_wrapKey_unwrapKey.https.html.ini
@@ -1,5 +1,6 @@
[test_wrapKey_unwrapKey.https.html]
type: testharness
+ expected: ERROR
[WebCryptoAPI: wrapKey() and unwrapKey()]
expected: FAIL
diff --git a/tests/wpt/metadata/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.https.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.https.worker.js.ini
index 2ae77964437..51481123aa4 100644
--- a/tests/wpt/metadata/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.https.worker.js.ini
+++ b/tests/wpt/metadata/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.https.worker.js.ini
@@ -1,4 +1,5 @@
[wrapKey_unwrapKey.https.worker.html]
+ expected: ERROR
[Untitled]
expected: FAIL
diff --git a/tests/wpt/metadata/WebIDL/ecmascript-binding/global-immutable-prototype.any.js.ini b/tests/wpt/metadata/WebIDL/ecmascript-binding/global-immutable-prototype.any.js.ini
index 39fea350252..054e0b00a57 100644
--- a/tests/wpt/metadata/WebIDL/ecmascript-binding/global-immutable-prototype.any.js.ini
+++ b/tests/wpt/metadata/WebIDL/ecmascript-binding/global-immutable-prototype.any.js.ini
@@ -4,11 +4,13 @@
[global-immutable-prototype.any.sharedworker.html]
+ expected: ERROR
[Immutability of the global prototype chain]
expected: FAIL
[global-immutable-prototype.any.serviceworker.html]
+ expected: ERROR
[Immutability of the global prototype chain]
expected: FAIL
diff --git a/tests/wpt/metadata/css/CSS2/linebox/vertical-align-top-bottom-001.html.ini b/tests/wpt/metadata/css/CSS2/linebox/vertical-align-top-bottom-001.html.ini
index 8590ba0b818..3fa51ffd74e 100644
--- a/tests/wpt/metadata/css/CSS2/linebox/vertical-align-top-bottom-001.html.ini
+++ b/tests/wpt/metadata/css/CSS2/linebox/vertical-align-top-bottom-001.html.ini
@@ -1,4 +1,5 @@
[vertical-align-top-bottom-001.html]
+ expected: ERROR
[vertical-align-top-bottom-001]
expected: FAIL
diff --git a/tests/wpt/metadata/css/CSS2/positioning/inline-static-position-001.html.ini b/tests/wpt/metadata/css/CSS2/positioning/inline-static-position-001.html.ini
index f0b909eb1ed..f02507f83b3 100644
--- a/tests/wpt/metadata/css/CSS2/positioning/inline-static-position-001.html.ini
+++ b/tests/wpt/metadata/css/CSS2/positioning/inline-static-position-001.html.ini
@@ -1,4 +1,5 @@
[inline-static-position-001.html]
+ expected: ERROR
[CSS Test: Static positions and line wrapping]
expected: FAIL
diff --git a/tests/wpt/metadata/css/CSS2/positioning/relpos-percentage-left-in-scrollable-2.html.ini b/tests/wpt/metadata/css/CSS2/positioning/relpos-percentage-left-in-scrollable-2.html.ini
index 0736abd6467..e2607f69bb4 100644
--- a/tests/wpt/metadata/css/CSS2/positioning/relpos-percentage-left-in-scrollable-2.html.ini
+++ b/tests/wpt/metadata/css/CSS2/positioning/relpos-percentage-left-in-scrollable-2.html.ini
@@ -1,4 +1,5 @@
[relpos-percentage-left-in-scrollable-2.html]
+ expected: ERROR
[relpos-percentage-left-in-scrollable-2]
expected: FAIL
diff --git a/tests/wpt/metadata/css/CSS2/positioning/relpos-percentage-left-in-scrollable.html.ini b/tests/wpt/metadata/css/CSS2/positioning/relpos-percentage-left-in-scrollable.html.ini
index d6c749574b4..6d5530dd5f5 100644
--- a/tests/wpt/metadata/css/CSS2/positioning/relpos-percentage-left-in-scrollable.html.ini
+++ b/tests/wpt/metadata/css/CSS2/positioning/relpos-percentage-left-in-scrollable.html.ini
@@ -1,4 +1,5 @@
[relpos-percentage-left-in-scrollable.html]
+ expected: ERROR
[relpos-percentage-left-in-scrollable]
expected: FAIL
diff --git a/tests/wpt/metadata/css/CSS2/positioning/relpos-percentage-top-in-scrollable.html.ini b/tests/wpt/metadata/css/CSS2/positioning/relpos-percentage-top-in-scrollable.html.ini
index e6c121200a0..7d7251809cd 100644
--- a/tests/wpt/metadata/css/CSS2/positioning/relpos-percentage-top-in-scrollable.html.ini
+++ b/tests/wpt/metadata/css/CSS2/positioning/relpos-percentage-top-in-scrollable.html.ini
@@ -1,4 +1,5 @@
[relpos-percentage-top-in-scrollable.html]
+ expected: ERROR
[relpos-percentage-top-in-scrollable]
expected: FAIL
diff --git a/tests/wpt/metadata/css/CSS2/visufx/animation/visibility-interpolation.html.ini b/tests/wpt/metadata/css/CSS2/visufx/animation/visibility-interpolation.html.ini
index 96c5c0e6b38..7f02684f048 100644
--- a/tests/wpt/metadata/css/CSS2/visufx/animation/visibility-interpolation.html.ini
+++ b/tests/wpt/metadata/css/CSS2/visufx/animation/visibility-interpolation.html.ini
@@ -1,4 +1,5 @@
[visibility-interpolation.html]
+ expected: ERROR
[visibility interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-align/animation/column-gap-interpolation.html.ini b/tests/wpt/metadata/css/css-align/animation/column-gap-interpolation.html.ini
index 8fe5a71fd4d..d0c9b229624 100644
--- a/tests/wpt/metadata/css/css-align/animation/column-gap-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-align/animation/column-gap-interpolation.html.ini
@@ -1,4 +1,5 @@
[column-gap-interpolation.html]
+ expected: ERROR
[column-gap interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-align/animation/row-gap-interpolation.html.ini b/tests/wpt/metadata/css/css-align/animation/row-gap-interpolation.html.ini
index d7fcea800d5..0974487f792 100644
--- a/tests/wpt/metadata/css/css-align/animation/row-gap-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-align/animation/row-gap-interpolation.html.ini
@@ -1,4 +1,5 @@
[row-gap-interpolation.html]
+ expected: ERROR
[row-gap interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-backgrounds/animations/background-color-interpolation.html.ini b/tests/wpt/metadata/css/css-backgrounds/animations/background-color-interpolation.html.ini
index ca374b82142..1e54a5f1f23 100644
--- a/tests/wpt/metadata/css/css-backgrounds/animations/background-color-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-backgrounds/animations/background-color-interpolation.html.ini
@@ -1,4 +1,5 @@
[background-color-interpolation.html]
+ expected: ERROR
[background-color-interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-backgrounds/animations/background-position-interpolation.html.ini b/tests/wpt/metadata/css/css-backgrounds/animations/background-position-interpolation.html.ini
index cd4abcc999d..7f0649b1627 100644
--- a/tests/wpt/metadata/css/css-backgrounds/animations/background-position-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-backgrounds/animations/background-position-interpolation.html.ini
@@ -1,4 +1,5 @@
[background-position-interpolation.html]
+ expected: ERROR
[background-position-interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-backgrounds/animations/background-position-origin-interpolation.html.ini b/tests/wpt/metadata/css/css-backgrounds/animations/background-position-origin-interpolation.html.ini
index 2a5a51aa646..9d9724f8cc8 100644
--- a/tests/wpt/metadata/css/css-backgrounds/animations/background-position-origin-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-backgrounds/animations/background-position-origin-interpolation.html.ini
@@ -1,4 +1,5 @@
[background-position-origin-interpolation.html]
+ expected: ERROR
[background-position-origin-interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-backgrounds/animations/background-position-x-interpolation.html.ini b/tests/wpt/metadata/css/css-backgrounds/animations/background-position-x-interpolation.html.ini
index 3beb283012a..fb2d744eb50 100644
--- a/tests/wpt/metadata/css/css-backgrounds/animations/background-position-x-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-backgrounds/animations/background-position-x-interpolation.html.ini
@@ -1,4 +1,5 @@
[background-position-x-interpolation.html]
+ expected: ERROR
[background-position-x-interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-backgrounds/animations/background-position-y-interpolation.html.ini b/tests/wpt/metadata/css/css-backgrounds/animations/background-position-y-interpolation.html.ini
index 0baa50c7671..a92ca1bf0a1 100644
--- a/tests/wpt/metadata/css/css-backgrounds/animations/background-position-y-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-backgrounds/animations/background-position-y-interpolation.html.ini
@@ -1,4 +1,5 @@
[background-position-y-interpolation.html]
+ expected: ERROR
[background-position-y-interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-backgrounds/animations/background-size-interpolation.html.ini b/tests/wpt/metadata/css/css-backgrounds/animations/background-size-interpolation.html.ini
index cca534c8bbb..dd8677a8b26 100644
--- a/tests/wpt/metadata/css/css-backgrounds/animations/background-size-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-backgrounds/animations/background-size-interpolation.html.ini
@@ -1,4 +1,5 @@
[background-size-interpolation.html]
+ expected: ERROR
[background-size-interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-backgrounds/animations/border-color-interpolation.html.ini b/tests/wpt/metadata/css/css-backgrounds/animations/border-color-interpolation.html.ini
index 970058f0b3f..a39ea79eafd 100644
--- a/tests/wpt/metadata/css/css-backgrounds/animations/border-color-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-backgrounds/animations/border-color-interpolation.html.ini
@@ -1,4 +1,5 @@
[border-color-interpolation.html]
+ expected: ERROR
[border-color interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-backgrounds/animations/border-image-outset-interpolation.html.ini b/tests/wpt/metadata/css/css-backgrounds/animations/border-image-outset-interpolation.html.ini
index 96f888b78fb..3847c277f7b 100644
--- a/tests/wpt/metadata/css/css-backgrounds/animations/border-image-outset-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-backgrounds/animations/border-image-outset-interpolation.html.ini
@@ -1,4 +1,5 @@
[border-image-outset-interpolation.html]
+ expected: ERROR
[border-image-outset interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-backgrounds/animations/border-image-slice-interpolation.html.ini b/tests/wpt/metadata/css/css-backgrounds/animations/border-image-slice-interpolation.html.ini
index 7dd3d364d85..1cc3b63b10e 100644
--- a/tests/wpt/metadata/css/css-backgrounds/animations/border-image-slice-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-backgrounds/animations/border-image-slice-interpolation.html.ini
@@ -1,4 +1,5 @@
[border-image-slice-interpolation.html]
+ expected: ERROR
[border-image-slice interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-backgrounds/animations/border-image-source-interpolation.html.ini b/tests/wpt/metadata/css/css-backgrounds/animations/border-image-source-interpolation.html.ini
index 51817f63dfa..246ab3baf12 100644
--- a/tests/wpt/metadata/css/css-backgrounds/animations/border-image-source-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-backgrounds/animations/border-image-source-interpolation.html.ini
@@ -1,4 +1,5 @@
[border-image-source-interpolation.html]
+ expected: ERROR
[border-image-source interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-backgrounds/animations/border-image-width-interpolation.html.ini b/tests/wpt/metadata/css/css-backgrounds/animations/border-image-width-interpolation.html.ini
index 7f71caea3b3..66174906c6a 100644
--- a/tests/wpt/metadata/css/css-backgrounds/animations/border-image-width-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-backgrounds/animations/border-image-width-interpolation.html.ini
@@ -1,4 +1,5 @@
[border-image-width-interpolation.html]
+ expected: ERROR
[border-image-width interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-backgrounds/animations/border-radius-interpolation.html.ini b/tests/wpt/metadata/css/css-backgrounds/animations/border-radius-interpolation.html.ini
index 211695f850a..5572f3b9754 100644
--- a/tests/wpt/metadata/css/css-backgrounds/animations/border-radius-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-backgrounds/animations/border-radius-interpolation.html.ini
@@ -1,4 +1,5 @@
[border-radius-interpolation.html]
+ expected: ERROR
[border-radius interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-backgrounds/animations/border-width-interpolation.html.ini b/tests/wpt/metadata/css/css-backgrounds/animations/border-width-interpolation.html.ini
index 09fe4f7ed4b..ba1236f53f7 100644
--- a/tests/wpt/metadata/css/css-backgrounds/animations/border-width-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-backgrounds/animations/border-width-interpolation.html.ini
@@ -1,4 +1,5 @@
[border-width-interpolation.html]
+ expected: ERROR
[border-width interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-backgrounds/animations/box-shadow-interpolation.html.ini b/tests/wpt/metadata/css/css-backgrounds/animations/box-shadow-interpolation.html.ini
index 88df625ed31..2b13dd777be 100644
--- a/tests/wpt/metadata/css/css-backgrounds/animations/box-shadow-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-backgrounds/animations/box-shadow-interpolation.html.ini
@@ -1,4 +1,5 @@
[box-shadow-interpolation.html]
+ expected: ERROR
[box-shadow-interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-backgrounds/inheritance.sub.html.ini b/tests/wpt/metadata/css/css-backgrounds/inheritance.sub.html.ini
index a845c87b205..a22655943a0 100644
--- a/tests/wpt/metadata/css/css-backgrounds/inheritance.sub.html.ini
+++ b/tests/wpt/metadata/css/css-backgrounds/inheritance.sub.html.ini
@@ -1,4 +1,5 @@
[inheritance.sub.html]
+ expected: ERROR
[Inheritance of CSS Backgrounds and Borders properties]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-color/animation/color-interpolation.html.ini b/tests/wpt/metadata/css/css-color/animation/color-interpolation.html.ini
index ffb8d4d40b4..6aebd4bda19 100644
--- a/tests/wpt/metadata/css/css-color/animation/color-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-color/animation/color-interpolation.html.ini
@@ -1,4 +1,5 @@
[color-interpolation.html]
+ expected: ERROR
[color interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-color/animation/opacity-interpolation.html.ini b/tests/wpt/metadata/css/css-color/animation/opacity-interpolation.html.ini
index ffd445b07e8..eb473ba082f 100644
--- a/tests/wpt/metadata/css/css-color/animation/opacity-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-color/animation/opacity-interpolation.html.ini
@@ -1,4 +1,5 @@
[opacity-interpolation.html]
+ expected: ERROR
[opacity interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-color/parsing/color-valid.html.ini b/tests/wpt/metadata/css/css-color/parsing/color-valid.html.ini
new file mode 100644
index 00000000000..bc52d28869d
--- /dev/null
+++ b/tests/wpt/metadata/css/css-color/parsing/color-valid.html.ini
@@ -0,0 +1,7 @@
+[color-valid.html]
+ [e.style['color'\] = "fieldtext" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "field" should set the property value]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-color/parsing/system-color-valid.html.ini b/tests/wpt/metadata/css/css-color/parsing/system-color-valid.html.ini
new file mode 100644
index 00000000000..d2142a9b021
--- /dev/null
+++ b/tests/wpt/metadata/css/css-color/parsing/system-color-valid.html.ini
@@ -0,0 +1,37 @@
+[system-color-valid.html]
+ [e.style['color'\] = "HighlightText" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "ButtonFace" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "VisitedText" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "FieldText" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "Field" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "GrayText" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "ActiveText" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "ButtonText" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "Highlight" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "CanvasText" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "LinkText" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "Canvas" should set the property value]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-flexbox/animation/flex-basis-interpolation.html.ini b/tests/wpt/metadata/css/css-flexbox/animation/flex-basis-interpolation.html.ini
index 8731ceb86cd..152e807d6df 100644
--- a/tests/wpt/metadata/css/css-flexbox/animation/flex-basis-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-flexbox/animation/flex-basis-interpolation.html.ini
@@ -1,4 +1,5 @@
[flex-basis-interpolation.html]
+ expected: ERROR
[flex-basis interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-flexbox/animation/flex-grow-interpolation.html.ini b/tests/wpt/metadata/css/css-flexbox/animation/flex-grow-interpolation.html.ini
index f7414a1ecbe..1e5d4fe74f8 100644
--- a/tests/wpt/metadata/css/css-flexbox/animation/flex-grow-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-flexbox/animation/flex-grow-interpolation.html.ini
@@ -1,4 +1,5 @@
[flex-grow-interpolation.html]
+ expected: ERROR
[flex-grow interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-flexbox/animation/flex-shrink-interpolation.html.ini b/tests/wpt/metadata/css/css-flexbox/animation/flex-shrink-interpolation.html.ini
index 74f709458cc..e25706009be 100644
--- a/tests/wpt/metadata/css/css-flexbox/animation/flex-shrink-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-flexbox/animation/flex-shrink-interpolation.html.ini
@@ -1,4 +1,5 @@
[flex-shrink-interpolation.html]
+ expected: ERROR
[flex-shrink interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-flexbox/animation/order-interpolation.html.ini b/tests/wpt/metadata/css/css-flexbox/animation/order-interpolation.html.ini
index e004f85c24c..a7e52670667 100644
--- a/tests/wpt/metadata/css/css-flexbox/animation/order-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-flexbox/animation/order-interpolation.html.ini
@@ -1,4 +1,5 @@
[order-interpolation.html]
+ expected: ERROR
[order interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-flexbox/percentage-heights-009.html.ini b/tests/wpt/metadata/css/css-flexbox/percentage-heights-009.html.ini
new file mode 100644
index 00000000000..6ca87ccb8a2
--- /dev/null
+++ b/tests/wpt/metadata/css/css-flexbox/percentage-heights-009.html.ini
@@ -0,0 +1,2 @@
+[percentage-heights-009.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-fonts/animations/font-size-adjust-interpolation.html.ini b/tests/wpt/metadata/css/css-fonts/animations/font-size-adjust-interpolation.html.ini
index 0d88804e1be..123c6e59ade 100644
--- a/tests/wpt/metadata/css/css-fonts/animations/font-size-adjust-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-fonts/animations/font-size-adjust-interpolation.html.ini
@@ -1,4 +1,5 @@
[font-size-adjust-interpolation.html]
+ expected: ERROR
[font-size-adjust interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-fonts/animations/font-size-interpolation-001.html.ini b/tests/wpt/metadata/css/css-fonts/animations/font-size-interpolation-001.html.ini
index cd3b7660d6c..3cc169ca314 100644
--- a/tests/wpt/metadata/css/css-fonts/animations/font-size-interpolation-001.html.ini
+++ b/tests/wpt/metadata/css/css-fonts/animations/font-size-interpolation-001.html.ini
@@ -1,4 +1,5 @@
[font-size-interpolation-001.html]
+ expected: ERROR
[font-size interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-fonts/animations/font-size-interpolation-002.html.ini b/tests/wpt/metadata/css/css-fonts/animations/font-size-interpolation-002.html.ini
index 1f20ed1e9a7..c430b0702af 100644
--- a/tests/wpt/metadata/css/css-fonts/animations/font-size-interpolation-002.html.ini
+++ b/tests/wpt/metadata/css/css-fonts/animations/font-size-interpolation-002.html.ini
@@ -1,4 +1,5 @@
[font-size-interpolation-002.html]
+ expected: ERROR
[font-size interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-fonts/animations/font-size-interpolation-003.html.ini b/tests/wpt/metadata/css/css-fonts/animations/font-size-interpolation-003.html.ini
index 724e6c41c63..41cc7a482cb 100644
--- a/tests/wpt/metadata/css/css-fonts/animations/font-size-interpolation-003.html.ini
+++ b/tests/wpt/metadata/css/css-fonts/animations/font-size-interpolation-003.html.ini
@@ -1,4 +1,5 @@
[font-size-interpolation-003.html]
+ expected: ERROR
[font-size interpolation with zoom]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-fonts/animations/font-variation-settings-interpolation.html.ini b/tests/wpt/metadata/css/css-fonts/animations/font-variation-settings-interpolation.html.ini
index 28ab2aa6d51..e8f6869ab22 100644
--- a/tests/wpt/metadata/css/css-fonts/animations/font-variation-settings-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-fonts/animations/font-variation-settings-interpolation.html.ini
@@ -1,4 +1,5 @@
[font-variation-settings-interpolation.html]
+ expected: ERROR
[font-variation-settings interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-fonts/math-script-level-and-math-style/math-script-level-002.tentative.html.ini b/tests/wpt/metadata/css/css-fonts/math-script-level-and-math-style/math-script-level-002.tentative.html.ini
index 7eca7e70390..f84e4ebffe0 100644
--- a/tests/wpt/metadata/css/css-fonts/math-script-level-and-math-style/math-script-level-002.tentative.html.ini
+++ b/tests/wpt/metadata/css/css-fonts/math-script-level-and-math-style/math-script-level-002.tentative.html.ini
@@ -1,4 +1,5 @@
[math-script-level-002.tentative.html]
+ expected: ERROR
[<integer> ; starting from level 50]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-fonts/math-script-level-and-math-style/math-script-level-004.tentative.html.ini b/tests/wpt/metadata/css/css-fonts/math-script-level-and-math-style/math-script-level-004.tentative.html.ini
index 4db4fe6f51f..e75b5bc760f 100644
--- a/tests/wpt/metadata/css/css-fonts/math-script-level-and-math-style/math-script-level-004.tentative.html.ini
+++ b/tests/wpt/metadata/css/css-fonts/math-script-level-and-math-style/math-script-level-004.tentative.html.ini
@@ -1,4 +1,5 @@
[math-script-level-004.tentative.html]
+ expected: ERROR
[math-script-level]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-images/animations/object-position-interpolation.html.ini b/tests/wpt/metadata/css/css-images/animations/object-position-interpolation.html.ini
index 748cf761f86..c0c7c0bf2f2 100644
--- a/tests/wpt/metadata/css/css-images/animations/object-position-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-images/animations/object-position-interpolation.html.ini
@@ -1,4 +1,5 @@
[object-position-interpolation.html]
+ expected: ERROR
[object-position-interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/animations/letter-spacing-interpolation.html.ini b/tests/wpt/metadata/css/css-text/animations/letter-spacing-interpolation.html.ini
index 10720d01e2f..d36bca23c57 100644
--- a/tests/wpt/metadata/css/css-text/animations/letter-spacing-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-text/animations/letter-spacing-interpolation.html.ini
@@ -1,4 +1,5 @@
[letter-spacing-interpolation.html]
+ expected: ERROR
[letter-spacing-interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/animations/text-indent-interpolation.html.ini b/tests/wpt/metadata/css/css-text/animations/text-indent-interpolation.html.ini
index b0f38402877..a4ea398608e 100644
--- a/tests/wpt/metadata/css/css-text/animations/text-indent-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-text/animations/text-indent-interpolation.html.ini
@@ -1,4 +1,5 @@
[text-indent-interpolation.html]
+ expected: ERROR
[text-indent-interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/animations/word-spacing-interpolation.html.ini b/tests/wpt/metadata/css/css-text/animations/word-spacing-interpolation.html.ini
index 9909c7e9051..0725df56802 100644
--- a/tests/wpt/metadata/css/css-text/animations/word-spacing-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-text/animations/word-spacing-interpolation.html.ini
@@ -1,4 +1,5 @@
[word-spacing-interpolation.html]
+ expected: ERROR
[word-spacing-interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-017.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-017.html.ini
new file mode 100644
index 00000000000..b3bb55e9a17
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-017.html.ini
@@ -0,0 +1,2 @@
+[line-break-anywhere-017.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-and-white-space-005.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-and-white-space-005.html.ini
new file mode 100644
index 00000000000..b519af7ce3a
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-and-white-space-005.html.ini
@@ -0,0 +1,2 @@
+[line-break-anywhere-and-white-space-005.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-and-white-space-008.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-and-white-space-008.html.ini
new file mode 100644
index 00000000000..58968a23286
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-and-white-space-008.html.ini
@@ -0,0 +1,2 @@
+[line-break-anywhere-and-white-space-008.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-and-white-space-009.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-and-white-space-009.html.ini
new file mode 100644
index 00000000000..e791a89089f
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-and-white-space-009.html.ini
@@ -0,0 +1,2 @@
+[line-break-anywhere-and-white-space-009.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-001.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-001.html.ini
new file mode 100644
index 00000000000..151fa589805
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-001.html.ini
@@ -0,0 +1,2 @@
+[line-break-anywhere-overrides-uax-behavior-001.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-002.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-002.html.ini
new file mode 100644
index 00000000000..1a3d2f43091
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-002.html.ini
@@ -0,0 +1,2 @@
+[line-break-anywhere-overrides-uax-behavior-002.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-003.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-003.html.ini
new file mode 100644
index 00000000000..3487387fb37
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-003.html.ini
@@ -0,0 +1,2 @@
+[line-break-anywhere-overrides-uax-behavior-003.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-004.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-004.html.ini
new file mode 100644
index 00000000000..f4d0422a3bb
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-004.html.ini
@@ -0,0 +1,2 @@
+[line-break-anywhere-overrides-uax-behavior-004.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-005.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-005.html.ini
new file mode 100644
index 00000000000..24877a8d59a
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-005.html.ini
@@ -0,0 +1,2 @@
+[line-break-anywhere-overrides-uax-behavior-005.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-006.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-006.html.ini
new file mode 100644
index 00000000000..2988acb800f
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-006.html.ini
@@ -0,0 +1,2 @@
+[line-break-anywhere-overrides-uax-behavior-006.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-007.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-007.html.ini
new file mode 100644
index 00000000000..a148375d374
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-007.html.ini
@@ -0,0 +1,2 @@
+[line-break-anywhere-overrides-uax-behavior-007.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-008.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-008.html.ini
new file mode 100644
index 00000000000..5383ef5eb82
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-008.html.ini
@@ -0,0 +1,2 @@
+[line-break-anywhere-overrides-uax-behavior-008.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-009.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-009.html.ini
new file mode 100644
index 00000000000..5934f43112a
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-009.html.ini
@@ -0,0 +1,2 @@
+[line-break-anywhere-overrides-uax-behavior-009.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-010.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-010.html.ini
new file mode 100644
index 00000000000..83d18b4594d
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-010.html.ini
@@ -0,0 +1,2 @@
+[line-break-anywhere-overrides-uax-behavior-010.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-011.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-011.html.ini
new file mode 100644
index 00000000000..7cec821ea20
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-011.html.ini
@@ -0,0 +1,2 @@
+[line-break-anywhere-overrides-uax-behavior-011.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-012.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-012.html.ini
new file mode 100644
index 00000000000..fea7d4e2e5e
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-012.html.ini
@@ -0,0 +1,2 @@
+[line-break-anywhere-overrides-uax-behavior-012.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-013.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-013.html.ini
new file mode 100644
index 00000000000..24a2797efb4
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-013.html.ini
@@ -0,0 +1,2 @@
+[line-break-anywhere-overrides-uax-behavior-013.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-014.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-014.html.ini
new file mode 100644
index 00000000000..e4d69eda8d4
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-014.html.ini
@@ -0,0 +1,2 @@
+[line-break-anywhere-overrides-uax-behavior-014.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-015.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-015.html.ini
new file mode 100644
index 00000000000..a402bca6a59
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-015.html.ini
@@ -0,0 +1,2 @@
+[line-break-anywhere-overrides-uax-behavior-015.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-016.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-016.html.ini
new file mode 100644
index 00000000000..0b218fe7acb
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-016.html.ini
@@ -0,0 +1,2 @@
+[line-break-anywhere-overrides-uax-behavior-016.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-006.html.ini b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-006.html.ini
new file mode 100644
index 00000000000..487ba5fad2f
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-006.html.ini
@@ -0,0 +1,2 @@
+[overflow-wrap-anywhere-006.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-007.html.ini b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-007.html.ini
new file mode 100644
index 00000000000..270e0bf115c
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-007.html.ini
@@ -0,0 +1,2 @@
+[overflow-wrap-anywhere-007.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-008.html.ini b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-008.html.ini
new file mode 100644
index 00000000000..0cf4645059f
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-008.html.ini
@@ -0,0 +1,2 @@
+[overflow-wrap-anywhere-008.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-009.html.ini b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-009.html.ini
new file mode 100644
index 00000000000..e8ffced7a01
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-009.html.ini
@@ -0,0 +1,2 @@
+[overflow-wrap-anywhere-009.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-010.html.ini b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-010.html.ini
new file mode 100644
index 00000000000..06b8b72b342
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-010.html.ini
@@ -0,0 +1,2 @@
+[overflow-wrap-anywhere-010.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-001.html.ini b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-001.html.ini
new file mode 100644
index 00000000000..e808a9f1730
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-001.html.ini
@@ -0,0 +1,2 @@
+[overflow-wrap-anywhere-inline-001.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-002.html.ini b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-002.html.ini
new file mode 100644
index 00000000000..712f0e1b9fc
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-002.html.ini
@@ -0,0 +1,2 @@
+[overflow-wrap-anywhere-inline-002.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-003.html.ini b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-003.html.ini
new file mode 100644
index 00000000000..bde68abaad4
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-003.html.ini
@@ -0,0 +1,2 @@
+[overflow-wrap-anywhere-inline-003.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-004.html.ini b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-004.html.ini
new file mode 100644
index 00000000000..76fbf3c6de6
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-004.html.ini
@@ -0,0 +1,2 @@
+[overflow-wrap-anywhere-inline-004.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-break-word-009.html.ini b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-break-word-009.html.ini
new file mode 100644
index 00000000000..fb47feebbb9
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-break-word-009.html.ini
@@ -0,0 +1,2 @@
+[overflow-wrap-break-word-009.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-break-word-010.html.ini b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-break-word-010.html.ini
new file mode 100644
index 00000000000..da457ab8eba
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-break-word-010.html.ini
@@ -0,0 +1,2 @@
+[overflow-wrap-break-word-010.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-min-content-size-005.html.ini b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-min-content-size-005.html.ini
new file mode 100644
index 00000000000..dd7cc7b0711
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-min-content-size-005.html.ini
@@ -0,0 +1,2 @@
+[overflow-wrap-min-content-size-005.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-min-content-size-006.html.ini b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-min-content-size-006.html.ini
new file mode 100644
index 00000000000..0e1f7bd4623
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-min-content-size-006.html.ini
@@ -0,0 +1,2 @@
+[overflow-wrap-min-content-size-006.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-min-content-size-007.html.ini b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-min-content-size-007.html.ini
new file mode 100644
index 00000000000..28b5a5c70ff
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-min-content-size-007.html.ini
@@ -0,0 +1,2 @@
+[overflow-wrap-min-content-size-007.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/text-indent/percentage-value-intrinsic-size.html.ini b/tests/wpt/metadata/css/css-text/text-indent/percentage-value-intrinsic-size.html.ini
index b8d7e315d82..7e9b2037766 100644
--- a/tests/wpt/metadata/css/css-text/text-indent/percentage-value-intrinsic-size.html.ini
+++ b/tests/wpt/metadata/css/css-text/text-indent/percentage-value-intrinsic-size.html.ini
@@ -1,4 +1,5 @@
[percentage-value-intrinsic-size.html]
+ expected: ERROR
[percentage-value-intrinsic-size]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-before-first-char-014.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-before-first-char-014.html.ini
new file mode 100644
index 00000000000..683b54c4520
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-before-first-char-014.html.ini
@@ -0,0 +1,2 @@
+[break-spaces-before-first-char-014.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-before-first-char-015.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-before-first-char-015.html.ini
new file mode 100644
index 00000000000..3f4a1af7489
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-before-first-char-015.html.ini
@@ -0,0 +1,2 @@
+[break-spaces-before-first-char-015.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-before-first-char-016.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-before-first-char-016.html.ini
new file mode 100644
index 00000000000..a2be3661272
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-before-first-char-016.html.ini
@@ -0,0 +1,2 @@
+[break-spaces-before-first-char-016.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-before-first-char-017.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-before-first-char-017.html.ini
new file mode 100644
index 00000000000..12fc5765951
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-before-first-char-017.html.ini
@@ -0,0 +1,2 @@
+[break-spaces-before-first-char-017.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-before-first-char-018.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-before-first-char-018.html.ini
new file mode 100644
index 00000000000..b584d74aae3
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-before-first-char-018.html.ini
@@ -0,0 +1,2 @@
+[break-spaces-before-first-char-018.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-001.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-001.html.ini
new file mode 100644
index 00000000000..0a40eef3b5c
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-001.html.ini
@@ -0,0 +1,2 @@
+[break-spaces-with-overflow-wrap-001.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-002.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-002.html.ini
new file mode 100644
index 00000000000..8f901e2bbc3
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-002.html.ini
@@ -0,0 +1,2 @@
+[break-spaces-with-overflow-wrap-002.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-003.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-003.html.ini
new file mode 100644
index 00000000000..9099541de3f
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-003.html.ini
@@ -0,0 +1,2 @@
+[break-spaces-with-overflow-wrap-003.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-004.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-004.html.ini
new file mode 100644
index 00000000000..2de09bb7489
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-004.html.ini
@@ -0,0 +1,2 @@
+[break-spaces-with-overflow-wrap-004.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-005.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-005.html.ini
new file mode 100644
index 00000000000..a628f2c6a61
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-005.html.ini
@@ -0,0 +1,2 @@
+[break-spaces-with-overflow-wrap-005.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-006.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-006.html.ini
new file mode 100644
index 00000000000..a802a80f700
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-006.html.ini
@@ -0,0 +1,2 @@
+[break-spaces-with-overflow-wrap-006.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-007.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-007.html.ini
new file mode 100644
index 00000000000..17362d676fd
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-007.html.ini
@@ -0,0 +1,2 @@
+[break-spaces-with-overflow-wrap-007.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-008.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-008.html.ini
new file mode 100644
index 00000000000..4f3dd71e757
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-008.html.ini
@@ -0,0 +1,2 @@
+[break-spaces-with-overflow-wrap-008.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-009.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-009.html.ini
new file mode 100644
index 00000000000..41d52652db6
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-009.html.ini
@@ -0,0 +1,2 @@
+[break-spaces-with-overflow-wrap-009.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-010.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-010.html.ini
new file mode 100644
index 00000000000..e4c87cfe658
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-010.html.ini
@@ -0,0 +1,2 @@
+[break-spaces-with-overflow-wrap-010.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/pre-wrap-009.html.ini b/tests/wpt/metadata/css/css-text/white-space/pre-wrap-009.html.ini
new file mode 100644
index 00000000000..6b908f61ec1
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/pre-wrap-009.html.ini
@@ -0,0 +1,2 @@
+[pre-wrap-009.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/trailing-space-before-br-001.html.ini b/tests/wpt/metadata/css/css-text/white-space/trailing-space-before-br-001.html.ini
index 08a2433c8d4..0809c2d559a 100644
--- a/tests/wpt/metadata/css/css-text/white-space/trailing-space-before-br-001.html.ini
+++ b/tests/wpt/metadata/css/css-text/white-space/trailing-space-before-br-001.html.ini
@@ -1,4 +1,5 @@
[trailing-space-before-br-001.html]
+ expected: ERROR
[CSS Text: A sequence of collapsible spaces at the end of a line is removed]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/word-break/word-break-break-all-029.html.ini b/tests/wpt/metadata/css/css-text/word-break/word-break-break-all-029.html.ini
new file mode 100644
index 00000000000..aa320b774fd
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/word-break/word-break-break-all-029.html.ini
@@ -0,0 +1,2 @@
+[word-break-break-all-029.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/word-break/word-break-break-all-030.html.ini b/tests/wpt/metadata/css/css-text/word-break/word-break-break-all-030.html.ini
new file mode 100644
index 00000000000..d446bda392d
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/word-break/word-break-break-all-030.html.ini
@@ -0,0 +1,2 @@
+[word-break-break-all-030.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/word-break/word-break-break-all-inline-009.html.ini b/tests/wpt/metadata/css/css-text/word-break/word-break-break-all-inline-009.html.ini
new file mode 100644
index 00000000000..8b0de9552fc
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/word-break/word-break-break-all-inline-009.html.ini
@@ -0,0 +1,2 @@
+[word-break-break-all-inline-009.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/word-break/word-break-break-all-inline-010.html.ini b/tests/wpt/metadata/css/css-text/word-break/word-break-break-all-inline-010.html.ini
new file mode 100644
index 00000000000..e3b2f4c4067
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/word-break/word-break-break-all-inline-010.html.ini
@@ -0,0 +1,2 @@
+[word-break-break-all-inline-010.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transforms/animation/list-interpolation.html.ini b/tests/wpt/metadata/css/css-transforms/animation/list-interpolation.html.ini
index d8df35ad03b..9b671ea64ee 100644
--- a/tests/wpt/metadata/css/css-transforms/animation/list-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-transforms/animation/list-interpolation.html.ini
@@ -1,4 +1,5 @@
[list-interpolation.html]
+ expected: ERROR
[Animation between "scale(2) rotate(0deg) translate(100px)" and "rotate(720deg) scale(2) translate(200px)" at progress 0.25]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transforms/animation/matrix-interpolation.html.ini b/tests/wpt/metadata/css/css-transforms/animation/matrix-interpolation.html.ini
index 0f05b67d484..062dcee442c 100644
--- a/tests/wpt/metadata/css/css-transforms/animation/matrix-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-transforms/animation/matrix-interpolation.html.ini
@@ -1,4 +1,5 @@
[matrix-interpolation.html]
+ expected: ERROR
[Animation between "rotateY(360deg)" and "rotateX(720deg)" at progress 0.5]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transforms/animation/perspective-interpolation.html.ini b/tests/wpt/metadata/css/css-transforms/animation/perspective-interpolation.html.ini
index 03f2f3fe9d1..1193e3dfa5c 100644
--- a/tests/wpt/metadata/css/css-transforms/animation/perspective-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-transforms/animation/perspective-interpolation.html.ini
@@ -1,5 +1,5 @@
[perspective-interpolation.html]
- expected: CRASH
+ expected: ERROR
[ perspective interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transforms/animation/perspective-origin-interpolation.html.ini b/tests/wpt/metadata/css/css-transforms/animation/perspective-origin-interpolation.html.ini
index 304fe3cbf6f..475a3a37e29 100644
--- a/tests/wpt/metadata/css/css-transforms/animation/perspective-origin-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-transforms/animation/perspective-origin-interpolation.html.ini
@@ -1,4 +1,5 @@
[perspective-origin-interpolation.html]
+ expected: ERROR
[perspective-origin interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transforms/animation/rotate-interpolation.html.ini b/tests/wpt/metadata/css/css-transforms/animation/rotate-interpolation.html.ini
index 906dc2eaf07..c09d1696d8f 100644
--- a/tests/wpt/metadata/css/css-transforms/animation/rotate-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-transforms/animation/rotate-interpolation.html.ini
@@ -1,4 +1,5 @@
[rotate-interpolation.html]
+ expected: ERROR
[Animation between "100deg" and "180deg" at progress -1]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transforms/animation/scale-interpolation.html.ini b/tests/wpt/metadata/css/css-transforms/animation/scale-interpolation.html.ini
index 18fe2ce3054..c4daaea26d0 100644
--- a/tests/wpt/metadata/css/css-transforms/animation/scale-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-transforms/animation/scale-interpolation.html.ini
@@ -1,4 +1,5 @@
[scale-interpolation.html]
+ expected: ERROR
[Animation between "2 30 400" and "10 110 1200" at progress -1]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-001.html.ini b/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-001.html.ini
index e8fd8821a07..4ea34ca69cd 100644
--- a/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-001.html.ini
+++ b/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-001.html.ini
@@ -1,4 +1,5 @@
[transform-interpolation-001.html]
+ expected: ERROR
[transform interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-002.html.ini b/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-002.html.ini
index 8274a11ba82..ab072437844 100644
--- a/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-002.html.ini
+++ b/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-002.html.ini
@@ -1,4 +1,5 @@
[transform-interpolation-002.html]
+ expected: ERROR
[transform interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-003.html.ini b/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-003.html.ini
index 36fdde14172..eeeb89a8175 100644
--- a/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-003.html.ini
+++ b/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-003.html.ini
@@ -1,4 +1,5 @@
[transform-interpolation-003.html]
+ expected: ERROR
[transform interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-004.html.ini b/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-004.html.ini
index ca24607724d..477238cc89d 100644
--- a/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-004.html.ini
+++ b/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-004.html.ini
@@ -1,4 +1,5 @@
[transform-interpolation-004.html]
+ expected: ERROR
[transform interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-005.html.ini b/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-005.html.ini
index 79ab5ae1a0f..74b4381cf8c 100644
--- a/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-005.html.ini
+++ b/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-005.html.ini
@@ -1,4 +1,5 @@
[transform-interpolation-005.html]
+ expected: ERROR
[transform interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-006.html.ini b/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-006.html.ini
index 7f8c63ad11f..bc7061336f3 100644
--- a/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-006.html.ini
+++ b/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-006.html.ini
@@ -1,4 +1,5 @@
[transform-interpolation-006.html]
+ expected: ERROR
[transform interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transforms/animation/transform-origin-interpolation.html.ini b/tests/wpt/metadata/css/css-transforms/animation/transform-origin-interpolation.html.ini
index 28191ed3360..6c8104cccca 100644
--- a/tests/wpt/metadata/css/css-transforms/animation/transform-origin-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-transforms/animation/transform-origin-interpolation.html.ini
@@ -1,4 +1,5 @@
[transform-origin-interpolation.html]
+ expected: ERROR
[transform-origin interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transforms/animation/translate-interpolation.html.ini b/tests/wpt/metadata/css/css-transforms/animation/translate-interpolation.html.ini
index 88830acf249..bffca51359d 100644
--- a/tests/wpt/metadata/css/css-transforms/animation/translate-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-transforms/animation/translate-interpolation.html.ini
@@ -1,4 +1,5 @@
[translate-interpolation.html]
+ expected: ERROR
[Animation between "220px 240px 260px" and "300px 400px 500px" at progress -1]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transitions/animations/text-shadow-interpolation.html.ini b/tests/wpt/metadata/css/css-transitions/animations/text-shadow-interpolation.html.ini
index 6619bd4efa4..1e38244ddb7 100644
--- a/tests/wpt/metadata/css/css-transitions/animations/text-shadow-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-transitions/animations/text-shadow-interpolation.html.ini
@@ -1,4 +1,5 @@
[text-shadow-interpolation.html]
+ expected: ERROR
[text-shadow interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-ui/animation/caret-color-interpolation.html.ini b/tests/wpt/metadata/css/css-ui/animation/caret-color-interpolation.html.ini
index b5e7460ffea..8920c4dacee 100644
--- a/tests/wpt/metadata/css/css-ui/animation/caret-color-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-ui/animation/caret-color-interpolation.html.ini
@@ -1,4 +1,5 @@
[caret-color-interpolation.html]
+ expected: ERROR
[caret-color interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-ui/animation/outline-color-interpolation.html.ini b/tests/wpt/metadata/css/css-ui/animation/outline-color-interpolation.html.ini
index 2c952b88f44..cbd9d0788c0 100644
--- a/tests/wpt/metadata/css/css-ui/animation/outline-color-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-ui/animation/outline-color-interpolation.html.ini
@@ -1,4 +1,5 @@
[outline-color-interpolation.html]
+ expected: ERROR
[outline-color interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-ui/animation/outline-offset-interpolation.html.ini b/tests/wpt/metadata/css/css-ui/animation/outline-offset-interpolation.html.ini
index 95b3f144828..12a28490f5d 100644
--- a/tests/wpt/metadata/css/css-ui/animation/outline-offset-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-ui/animation/outline-offset-interpolation.html.ini
@@ -1,4 +1,5 @@
[outline-offset-interpolation.html]
+ expected: ERROR
[outline-offset interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-ui/animation/outline-width-interpolation.html.ini b/tests/wpt/metadata/css/css-ui/animation/outline-width-interpolation.html.ini
index e28aceaf698..c996d09746e 100644
--- a/tests/wpt/metadata/css/css-ui/animation/outline-width-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-ui/animation/outline-width-interpolation.html.ini
@@ -1,4 +1,5 @@
[outline-width-interpolation.html]
+ expected: ERROR
[outline-width interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-ui/inheritance.html.ini b/tests/wpt/metadata/css/css-ui/inheritance.html.ini
index 29c2c73cf2e..2acff700c53 100644
--- a/tests/wpt/metadata/css/css-ui/inheritance.html.ini
+++ b/tests/wpt/metadata/css/css-ui/inheritance.html.ini
@@ -1,4 +1,5 @@
[inheritance.html]
+ expected: ERROR
[Inheritance of CSS Basic User Interface properties]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-ui/text-overflow-023.html.ini b/tests/wpt/metadata/css/css-ui/text-overflow-023.html.ini
index a8c8c4e9460..c712fc94363 100644
--- a/tests/wpt/metadata/css/css-ui/text-overflow-023.html.ini
+++ b/tests/wpt/metadata/css/css-ui/text-overflow-023.html.ini
@@ -1,4 +1,5 @@
[text-overflow-023.html]
+ expected: ERROR
[Checks hit testing on the ellipsis]
expected: FAIL
diff --git a/tests/wpt/metadata/css/cssom-view/MediaQueryList-addListener-handleEvent.html.ini b/tests/wpt/metadata/css/cssom-view/MediaQueryList-addListener-handleEvent.html.ini
index 7b7f0e1bdf6..9997350495a 100644
--- a/tests/wpt/metadata/css/cssom-view/MediaQueryList-addListener-handleEvent.html.ini
+++ b/tests/wpt/metadata/css/cssom-view/MediaQueryList-addListener-handleEvent.html.ini
@@ -9,6 +9,3 @@
[throws if handleEvent is thruthy and not callable]
expected: NOTRUN
- [doesn't look up handleEvent method on callable event listeners]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/css/cssom-view/MediaQueryList-addListener-removeListener.html.ini b/tests/wpt/metadata/css/cssom-view/MediaQueryList-addListener-removeListener.html.ini
index 7fe95a6c291..628b1fab770 100644
--- a/tests/wpt/metadata/css/cssom-view/MediaQueryList-addListener-removeListener.html.ini
+++ b/tests/wpt/metadata/css/cssom-view/MediaQueryList-addListener-removeListener.html.ini
@@ -2,6 +2,3 @@
[listeners are called when <iframe> is resized]
expected: FAIL
- [listener that was added twice is called only once]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/css/cssom-view/elementsFromPoint-shadowroot.html.ini b/tests/wpt/metadata/css/cssom-view/elementsFromPoint-shadowroot.html.ini
index 1a43f8602aa..3cc5f4ef8dc 100644
--- a/tests/wpt/metadata/css/cssom-view/elementsFromPoint-shadowroot.html.ini
+++ b/tests/wpt/metadata/css/cssom-view/elementsFromPoint-shadowroot.html.ini
@@ -1,4 +1,5 @@
[elementsFromPoint-shadowroot.html]
+ expected: ERROR
[Untitled]
expected: FAIL
diff --git a/tests/wpt/metadata/css/cssom-view/getBoundingClientRect-empty-inline.html.ini b/tests/wpt/metadata/css/cssom-view/getBoundingClientRect-empty-inline.html.ini
index 6042e6fb0d9..41496263048 100644
--- a/tests/wpt/metadata/css/cssom-view/getBoundingClientRect-empty-inline.html.ini
+++ b/tests/wpt/metadata/css/cssom-view/getBoundingClientRect-empty-inline.html.ini
@@ -1,4 +1,5 @@
[getBoundingClientRect-empty-inline.html]
+ expected: ERROR
[getBoundingClientRect-empty-inline]
expected: FAIL
diff --git a/tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini b/tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini
deleted file mode 100644
index e6e1f29e274..00000000000
--- a/tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[matchMedia-display-none-iframe.html]
- expected: ERROR
diff --git a/tests/wpt/metadata/css/cssom-view/scroll-behavior-default-css.html.ini b/tests/wpt/metadata/css/cssom-view/scroll-behavior-default-css.html.ini
index 25fa33a4445..d7c4db59af4 100644
--- a/tests/wpt/metadata/css/cssom-view/scroll-behavior-default-css.html.ini
+++ b/tests/wpt/metadata/css/cssom-view/scroll-behavior-default-css.html.ini
@@ -1,4 +1,5 @@
[scroll-behavior-default-css.html]
+ expected: ERROR
[Testing default value of scroll-behavior]
expected: FAIL
diff --git a/tests/wpt/metadata/css/cssom-view/scroll-behavior-element.html.ini b/tests/wpt/metadata/css/cssom-view/scroll-behavior-element.html.ini
index 12d8a3aacc0..8b4fc5d7182 100644
--- a/tests/wpt/metadata/css/cssom-view/scroll-behavior-element.html.ini
+++ b/tests/wpt/metadata/css/cssom-view/scroll-behavior-element.html.ini
@@ -1,4 +1,5 @@
[scroll-behavior-element.html]
+ expected: ERROR
[Testing scrollOptions' behavior for Element.scroll* and scroll-behavior on an element]
expected: FAIL
diff --git a/tests/wpt/metadata/css/cssom/CSSStyleSheet-constructable.html.ini b/tests/wpt/metadata/css/cssom/CSSStyleSheet-constructable.html.ini
index de84b9ffb05..2522fbd811f 100644
--- a/tests/wpt/metadata/css/cssom/CSSStyleSheet-constructable.html.ini
+++ b/tests/wpt/metadata/css/cssom/CSSStyleSheet-constructable.html.ini
@@ -1,4 +1,5 @@
[CSSStyleSheet-constructable.html]
+ expected: ERROR
[CSSStyleSheet constructor and adoptedStyleSheets]
expected: FAIL
diff --git a/tests/wpt/metadata/css/cssom/computed-style-003.html.ini b/tests/wpt/metadata/css/cssom/computed-style-003.html.ini
index 380a8e3071c..31e762a1b14 100644
--- a/tests/wpt/metadata/css/cssom/computed-style-003.html.ini
+++ b/tests/wpt/metadata/css/cssom/computed-style-003.html.ini
@@ -1,4 +1,5 @@
[computed-style-003.html]
+ expected: ERROR
[CSS Test: getComputedStyle - resolved width in iframe dynamic display]
expected: FAIL
diff --git a/tests/wpt/metadata/css/cssom/computed-style-004.html.ini b/tests/wpt/metadata/css/cssom/computed-style-004.html.ini
index 9c24cfd9cc9..4fd7fd29e54 100644
--- a/tests/wpt/metadata/css/cssom/computed-style-004.html.ini
+++ b/tests/wpt/metadata/css/cssom/computed-style-004.html.ini
@@ -1,4 +1,5 @@
[computed-style-004.html]
+ expected: ERROR
[CSS Test: getComputedStyle - resolved width in nested iframes dynamic width]
expected: FAIL
diff --git a/tests/wpt/metadata/css/cssom/selectorText-modification-restyle-002.html.ini b/tests/wpt/metadata/css/cssom/selectorText-modification-restyle-002.html.ini
index d9572003e6e..137085e3a5a 100644
--- a/tests/wpt/metadata/css/cssom/selectorText-modification-restyle-002.html.ini
+++ b/tests/wpt/metadata/css/cssom/selectorText-modification-restyle-002.html.ini
@@ -1,4 +1,5 @@
[selectorText-modification-restyle-002.html]
+ expected: ERROR
[CSSOM: Modify selectorText in a shadow tree stylesheet]
expected: FAIL
diff --git a/tests/wpt/metadata/css/cssom/serialize-media-rule.html.ini b/tests/wpt/metadata/css/cssom/serialize-media-rule.html.ini
new file mode 100644
index 00000000000..913fbe04c31
--- /dev/null
+++ b/tests/wpt/metadata/css/cssom/serialize-media-rule.html.ini
@@ -0,0 +1,16 @@
+[serialize-media-rule.html]
+ [features - character case normalization]
+ expected: FAIL
+
+ [features - lexicographical sorting]
+ expected: FAIL
+
+ [type - omission of all]
+ expected: FAIL
+
+ [media query list]
+ expected: FAIL
+
+ [type - inclusion of negated all]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/filter-effects/animation/backdrop-filter-interpolation-001.html.ini b/tests/wpt/metadata/css/filter-effects/animation/backdrop-filter-interpolation-001.html.ini
index 5d7f8796d97..cb2f1b0b706 100644
--- a/tests/wpt/metadata/css/filter-effects/animation/backdrop-filter-interpolation-001.html.ini
+++ b/tests/wpt/metadata/css/filter-effects/animation/backdrop-filter-interpolation-001.html.ini
@@ -1,4 +1,5 @@
[backdrop-filter-interpolation-001.html]
+ expected: ERROR
[Animation between "hue-rotate(0deg) blur(6px)" and "hue-rotate(180deg) blur(10px)" at progress -0.5]
expected: FAIL
diff --git a/tests/wpt/metadata/css/filter-effects/animation/backdrop-filter-interpolation-002.html.ini b/tests/wpt/metadata/css/filter-effects/animation/backdrop-filter-interpolation-002.html.ini
index f577004565d..5bcb8d12b43 100644
--- a/tests/wpt/metadata/css/filter-effects/animation/backdrop-filter-interpolation-002.html.ini
+++ b/tests/wpt/metadata/css/filter-effects/animation/backdrop-filter-interpolation-002.html.ini
@@ -1,4 +1,5 @@
[backdrop-filter-interpolation-002.html]
+ expected: ERROR
[Animation between "grayscale(0) blur(0px)" and "blur(10px)" at progress -1]
expected: FAIL
diff --git a/tests/wpt/metadata/css/filter-effects/animation/backdrop-filter-interpolation-003.html.ini b/tests/wpt/metadata/css/filter-effects/animation/backdrop-filter-interpolation-003.html.ini
index eabb55d0bca..d471737879d 100644
--- a/tests/wpt/metadata/css/filter-effects/animation/backdrop-filter-interpolation-003.html.ini
+++ b/tests/wpt/metadata/css/filter-effects/animation/backdrop-filter-interpolation-003.html.ini
@@ -1,4 +1,5 @@
[backdrop-filter-interpolation-003.html]
+ expected: ERROR
[Animation between "url("#svgfilter")" and "none" at progress 0.4]
expected: FAIL
diff --git a/tests/wpt/metadata/css/filter-effects/animation/backdrop-filter-interpolation-004.html.ini b/tests/wpt/metadata/css/filter-effects/animation/backdrop-filter-interpolation-004.html.ini
index 564c9372100..77849b1233b 100644
--- a/tests/wpt/metadata/css/filter-effects/animation/backdrop-filter-interpolation-004.html.ini
+++ b/tests/wpt/metadata/css/filter-effects/animation/backdrop-filter-interpolation-004.html.ini
@@ -1,4 +1,5 @@
[backdrop-filter-interpolation-004.html]
+ expected: ERROR
["hue-rotate()" and "hue-rotate(360deg)" are valid backdrop-filter values]
expected: FAIL
diff --git a/tests/wpt/metadata/css/filter-effects/animation/filter-interpolation-001.html.ini b/tests/wpt/metadata/css/filter-effects/animation/filter-interpolation-001.html.ini
index 2f20c669201..a6dbfa24368 100644
--- a/tests/wpt/metadata/css/filter-effects/animation/filter-interpolation-001.html.ini
+++ b/tests/wpt/metadata/css/filter-effects/animation/filter-interpolation-001.html.ini
@@ -1,4 +1,5 @@
[filter-interpolation-001.html]
+ expected: ERROR
[Animation between "hue-rotate(0deg) blur(6px)" and "hue-rotate(180deg) blur(10px)" at progress -0.5]
expected: FAIL
diff --git a/tests/wpt/metadata/css/filter-effects/animation/filter-interpolation-002.html.ini b/tests/wpt/metadata/css/filter-effects/animation/filter-interpolation-002.html.ini
index e931a047283..4ea39f01976 100644
--- a/tests/wpt/metadata/css/filter-effects/animation/filter-interpolation-002.html.ini
+++ b/tests/wpt/metadata/css/filter-effects/animation/filter-interpolation-002.html.ini
@@ -1,4 +1,5 @@
[filter-interpolation-002.html]
+ expected: ERROR
[Animation between "grayscale(0) blur(0px)" and "blur(10px)" at progress -1]
expected: FAIL
diff --git a/tests/wpt/metadata/css/filter-effects/animation/filter-interpolation-003.html.ini b/tests/wpt/metadata/css/filter-effects/animation/filter-interpolation-003.html.ini
index f31c629dda3..8574d390afe 100644
--- a/tests/wpt/metadata/css/filter-effects/animation/filter-interpolation-003.html.ini
+++ b/tests/wpt/metadata/css/filter-effects/animation/filter-interpolation-003.html.ini
@@ -1,4 +1,5 @@
[filter-interpolation-003.html]
+ expected: ERROR
[Animation between "url("#svgfilter")" and "none" at progress 0.4]
expected: FAIL
diff --git a/tests/wpt/metadata/css/filter-effects/animation/filter-interpolation-004.html.ini b/tests/wpt/metadata/css/filter-effects/animation/filter-interpolation-004.html.ini
index f3f3d56398b..5739f28b2f0 100644
--- a/tests/wpt/metadata/css/filter-effects/animation/filter-interpolation-004.html.ini
+++ b/tests/wpt/metadata/css/filter-effects/animation/filter-interpolation-004.html.ini
@@ -1,4 +1,5 @@
[filter-interpolation-004.html]
+ expected: ERROR
[Animation between "saturate(0)" and "saturate()" at progress 1]
expected: FAIL
diff --git a/tests/wpt/metadata/css/selectors/scope-selector.html.ini b/tests/wpt/metadata/css/selectors/scope-selector.html.ini
index b7531ec39c3..fd84efe25e9 100644
--- a/tests/wpt/metadata/css/selectors/scope-selector.html.ini
+++ b/tests/wpt/metadata/css/selectors/scope-selector.html.ini
@@ -1,4 +1,5 @@
[scope-selector.html]
+ expected: ERROR
[scope-selector]
expected: FAIL
diff --git a/tests/wpt/metadata/css/selectors/selectors-case-sensitive-001.html.ini b/tests/wpt/metadata/css/selectors/selectors-case-sensitive-001.html.ini
index 74a463596ec..809a1d9ef46 100644
--- a/tests/wpt/metadata/css/selectors/selectors-case-sensitive-001.html.ini
+++ b/tests/wpt/metadata/css/selectors/selectors-case-sensitive-001.html.ini
@@ -1,4 +1,5 @@
[selectors-case-sensitive-001.html]
+ expected: ERROR
[Test element names are case-insensitive only in ASCII range]
expected: FAIL
diff --git a/tests/wpt/metadata/custom-elements/CustomElementRegistry.html.ini b/tests/wpt/metadata/custom-elements/CustomElementRegistry.html.ini
index a7e5de384be..4ed40c47a80 100644
--- a/tests/wpt/metadata/custom-elements/CustomElementRegistry.html.ini
+++ b/tests/wpt/metadata/custom-elements/CustomElementRegistry.html.ini
@@ -27,3 +27,9 @@
[customElements.define must get four additional callbacks on the prototype if formAssociated is converted to true]
expected: FAIL
+ [customElements.define must get "prototype", "disabledFeatures", and "formAssociated" property of the constructor]
+ expected: FAIL
+
+ [customElements.define must not throw when defining another custom element in a different global object during Get(constructor, "prototype")]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/custom-elements/form-associated/ElementInternals-accessibility.html.ini b/tests/wpt/metadata/custom-elements/form-associated/ElementInternals-accessibility.html.ini
index 7a345843157..4e156a3bee5 100644
--- a/tests/wpt/metadata/custom-elements/form-associated/ElementInternals-accessibility.html.ini
+++ b/tests/wpt/metadata/custom-elements/form-associated/ElementInternals-accessibility.html.ini
@@ -1,4 +1,5 @@
[ElementInternals-accessibility.html]
+ expected: ERROR
[ElementInternals-accessibility]
expected: FAIL
diff --git a/tests/wpt/metadata/custom-elements/form-associated/form-associated-callback.html.ini b/tests/wpt/metadata/custom-elements/form-associated/form-associated-callback.html.ini
index 1212937cf2c..b8cdaa655eb 100644
--- a/tests/wpt/metadata/custom-elements/form-associated/form-associated-callback.html.ini
+++ b/tests/wpt/metadata/custom-elements/form-associated/form-associated-callback.html.ini
@@ -1,4 +1,5 @@
[form-associated-callback.html]
+ expected: ERROR
[formAssociatedCallback, and form IDL attribute of ElementInternals]
expected: FAIL
diff --git a/tests/wpt/metadata/custom-elements/pseudo-class-defined.html.ini b/tests/wpt/metadata/custom-elements/pseudo-class-defined.html.ini
index 5b454f6f731..1739e94c1d0 100644
--- a/tests/wpt/metadata/custom-elements/pseudo-class-defined.html.ini
+++ b/tests/wpt/metadata/custom-elements/pseudo-class-defined.html.ini
@@ -1,4 +1,5 @@
[pseudo-class-defined.html]
+ expected: ERROR
[Untitled]
expected: FAIL
diff --git a/tests/wpt/metadata/custom-elements/reactions/HTMLSlotElement.html.ini b/tests/wpt/metadata/custom-elements/reactions/HTMLSlotElement.html.ini
index 45e29f22add..afa63b5fc2e 100644
--- a/tests/wpt/metadata/custom-elements/reactions/HTMLSlotElement.html.ini
+++ b/tests/wpt/metadata/custom-elements/reactions/HTMLSlotElement.html.ini
@@ -1,4 +1,5 @@
[HTMLSlotElement.html]
+ expected: ERROR
[Custom Elements: CEReactions on HTMLSlotElement interface]
expected: FAIL
diff --git a/tests/wpt/metadata/dom/events/relatedTarget.window.js.ini b/tests/wpt/metadata/dom/events/relatedTarget.window.js.ini
index 23f0c5a1de7..128a3ace13b 100644
--- a/tests/wpt/metadata/dom/events/relatedTarget.window.js.ini
+++ b/tests/wpt/metadata/dom/events/relatedTarget.window.js.ini
@@ -1,4 +1,5 @@
[relatedTarget.window.html]
+ expected: ERROR
[Untitled]
expected: FAIL
diff --git a/tests/wpt/metadata/dom/events/shadow-relatedTarget.html.ini b/tests/wpt/metadata/dom/events/shadow-relatedTarget.html.ini
index 464494a62d5..5df95591a62 100644
--- a/tests/wpt/metadata/dom/events/shadow-relatedTarget.html.ini
+++ b/tests/wpt/metadata/dom/events/shadow-relatedTarget.html.ini
@@ -1,4 +1,5 @@
[shadow-relatedTarget.html]
+ expected: ERROR
[shadow-relatedTarget]
expected: FAIL
diff --git a/tests/wpt/metadata/dom/idlharness.any.js.ini b/tests/wpt/metadata/dom/idlharness.any.js.ini
index feb1adea725..f57baac9c25 100644
--- a/tests/wpt/metadata/dom/idlharness.any.js.ini
+++ b/tests/wpt/metadata/dom/idlharness.any.js.ini
@@ -112,11 +112,13 @@
[idlharness.any.sharedworker.html]
+ expected: ERROR
[idlharness]
expected: FAIL
[idlharness.any.serviceworker.html]
+ expected: ERROR
[idlharness]
expected: FAIL
diff --git a/tests/wpt/metadata/dom/nodes/Document-contentType/contentType/contenttype_txt.html.ini b/tests/wpt/metadata/dom/nodes/Document-contentType/contentType/contenttype_txt.html.ini
deleted file mode 100644
index c3916f8555d..00000000000
--- a/tests/wpt/metadata/dom/nodes/Document-contentType/contentType/contenttype_txt.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[contenttype_txt.html]
- expected: CRASH
diff --git a/tests/wpt/metadata/dom/nodes/aria-element-reflection.tentative.html.ini b/tests/wpt/metadata/dom/nodes/aria-element-reflection.tentative.html.ini
index a1844eee9e0..aac403287a5 100644
--- a/tests/wpt/metadata/dom/nodes/aria-element-reflection.tentative.html.ini
+++ b/tests/wpt/metadata/dom/nodes/aria-element-reflection.tentative.html.ini
@@ -44,3 +44,9 @@
[aria-describedby.]
expected: FAIL
+ [Moving explicitly set elements around within the same scope, and removing from the DOM.]
+ expected: FAIL
+
+ [Moving explicitly set elements across shadow DOM boundaries.]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/encoding/idlharness.any.js.ini b/tests/wpt/metadata/encoding/idlharness.any.js.ini
index 33154a7b0ab..7675a1f79f0 100644
--- a/tests/wpt/metadata/encoding/idlharness.any.js.ini
+++ b/tests/wpt/metadata/encoding/idlharness.any.js.ini
@@ -1,4 +1,5 @@
[idlharness.any.sharedworker.html]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -161,6 +162,7 @@
[idlharness.any.serviceworker.html]
+ expected: ERROR
[idlharness]
expected: FAIL
diff --git a/tests/wpt/metadata/encoding/streams/backpressure.any.js.ini b/tests/wpt/metadata/encoding/streams/backpressure.any.js.ini
index e1b71d7aeb4..b51399b7066 100644
--- a/tests/wpt/metadata/encoding/streams/backpressure.any.js.ini
+++ b/tests/wpt/metadata/encoding/streams/backpressure.any.js.ini
@@ -1,9 +1,11 @@
[backpressure.any.serviceworker.html]
+ expected: ERROR
[backpressure]
expected: FAIL
[backpressure.any.sharedworker.html]
+ expected: ERROR
[backpressure]
expected: FAIL
diff --git a/tests/wpt/metadata/encoding/streams/decode-attributes.any.js.ini b/tests/wpt/metadata/encoding/streams/decode-attributes.any.js.ini
index 76a665146c5..9800e08b7fe 100644
--- a/tests/wpt/metadata/encoding/streams/decode-attributes.any.js.ini
+++ b/tests/wpt/metadata/encoding/streams/decode-attributes.any.js.ini
@@ -1,7 +1,9 @@
[decode-attributes.any.serviceworker.html]
+ expected: ERROR
[decode-attributes]
expected: FAIL
+
[decode-attributes.any.worker.html]
[a throwing fatal member should cause the constructor to throw]
expected: FAIL
@@ -89,6 +91,7 @@
[decode-attributes.any.sharedworker.html]
+ expected: ERROR
[decode-attributes]
expected: FAIL
@@ -177,3 +180,4 @@
[encoding attribute should have correct value for 'ascii']
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
index 935cc74fc1a..4a41d7010bd 100644
--- a/tests/wpt/metadata/encoding/streams/decode-bad-chunks.any.js.ini
+++ b/tests/wpt/metadata/encoding/streams/decode-bad-chunks.any.js.ini
@@ -51,11 +51,13 @@
[decode-bad-chunks.any.serviceworker.html]
+ expected: ERROR
[decode-bad-chunks]
expected: FAIL
[decode-bad-chunks.any.sharedworker.html]
+ expected: ERROR
[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
index 48d11586b1e..0d862d2cbdc 100644
--- a/tests/wpt/metadata/encoding/streams/decode-ignore-bom.any.js.ini
+++ b/tests/wpt/metadata/encoding/streams/decode-ignore-bom.any.js.ini
@@ -35,11 +35,15 @@
[ignoreBOM should work for encoding utf-16le, split at character 0]
expected: FAIL
+
[decode-ignore-bom.any.serviceworker.html]
+ expected: ERROR
[decode-ignore-bom]
expected: FAIL
+
[decode-ignore-bom.any.sharedworker.html]
+ expected: ERROR
[decode-ignore-bom]
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
index aca41802b4d..bdab31f0bdf 100644
--- a/tests/wpt/metadata/encoding/streams/decode-incomplete-input.any.js.ini
+++ b/tests/wpt/metadata/encoding/streams/decode-incomplete-input.any.js.ini
@@ -1,8 +1,11 @@
[decode-incomplete-input.any.serviceworker.html]
+ expected: ERROR
[decode-incomplete-input]
expected: FAIL
+
[decode-incomplete-input.any.sharedworker.html]
+ expected: ERROR
[decode-incomplete-input]
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
index 137cf1c54a2..0ba9f98e771 100644
--- a/tests/wpt/metadata/encoding/streams/decode-non-utf8.any.js.ini
+++ b/tests/wpt/metadata/encoding/streams/decode-non-utf8.any.js.ini
@@ -1,4 +1,5 @@
[decode-non-utf8.any.sharedworker.html]
+ expected: ERROR
[decode-non-utf8]
expected: FAIL
@@ -68,5 +69,7 @@
[decode-non-utf8.any.serviceworker.html]
+ expected: ERROR
[decode-non-utf8]
expected: FAIL
+
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
index 4748271bcaf..b61e013d0e5 100644
--- a/tests/wpt/metadata/encoding/streams/decode-split-character.any.js.ini
+++ b/tests/wpt/metadata/encoding/streams/decode-split-character.any.js.ini
@@ -1,8 +1,11 @@
[decode-split-character.any.serviceworker.html]
+ expected: ERROR
[decode-split-character]
expected: FAIL
+
[decode-split-character.any.sharedworker.html]
+ expected: ERROR
[decode-split-character]
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
index 1af8cbfba5f..0d9fcc85b7b 100644
--- a/tests/wpt/metadata/encoding/streams/decode-utf8.any.js.ini
+++ b/tests/wpt/metadata/encoding/streams/decode-utf8.any.js.ini
@@ -1,9 +1,11 @@
[decode-utf8.any.serviceworker.html]
+ expected: ERROR
[decode-utf8]
expected: FAIL
[decode-utf8.any.sharedworker.html]
+ expected: ERROR
[decode-utf8]
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
index 436dec1a125..6d4b935e616 100644
--- a/tests/wpt/metadata/encoding/streams/encode-bad-chunks.any.js.ini
+++ b/tests/wpt/metadata/encoding/streams/encode-bad-chunks.any.js.ini
@@ -39,9 +39,13 @@
[encode-bad-chunks.any.sharedworker.html]
+ expected: ERROR
[encode-bad-chunks]
expected: FAIL
+
[encode-bad-chunks.any.serviceworker.html]
+ expected: ERROR
[encode-bad-chunks]
expected: FAIL
+
diff --git a/tests/wpt/metadata/encoding/streams/encode-utf8.any.js.ini b/tests/wpt/metadata/encoding/streams/encode-utf8.any.js.ini
index dde8e15080f..0217ff3921c 100644
--- a/tests/wpt/metadata/encoding/streams/encode-utf8.any.js.ini
+++ b/tests/wpt/metadata/encoding/streams/encode-utf8.any.js.ini
@@ -117,9 +117,13 @@
[encode-utf8.any.sharedworker.html]
+ expected: ERROR
[encode-utf8]
expected: FAIL
+
[encode-utf8.any.serviceworker.html]
+ expected: ERROR
[encode-utf8]
expected: FAIL
+
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
index 2862a708a06..9a34cc5f946 100644
--- a/tests/wpt/metadata/encoding/streams/readable-writable-properties.any.js.ini
+++ b/tests/wpt/metadata/encoding/streams/readable-writable-properties.any.js.ini
@@ -13,11 +13,15 @@
[TextEncoderStream readable and writable properties must pass brand checks]
expected: FAIL
+
[readable-writable-properties.any.serviceworker.html]
+ expected: ERROR
[readable-writable-properties]
expected: FAIL
+
[readable-writable-properties.any.sharedworker.html]
+ expected: ERROR
[readable-writable-properties]
expected: FAIL
diff --git a/tests/wpt/metadata/eventsource/eventsource-constructor-url-bogus.any.js.ini b/tests/wpt/metadata/eventsource/eventsource-constructor-url-bogus.any.js.ini
index 471546323cc..9f12870adc2 100644
--- a/tests/wpt/metadata/eventsource/eventsource-constructor-url-bogus.any.js.ini
+++ b/tests/wpt/metadata/eventsource/eventsource-constructor-url-bogus.any.js.ini
@@ -1,4 +1,5 @@
[eventsource-constructor-url-bogus.any.sharedworker.html]
+ expected: ERROR
[EventSource: constructor (invalid URL)]
expected: FAIL
@@ -6,6 +7,7 @@
[eventsource-constructor-url-bogus.any.html]
[eventsource-constructor-url-bogus.any.serviceworker.html]
+ expected: ERROR
[EventSource: constructor (invalid URL)]
expected: FAIL
diff --git a/tests/wpt/metadata/fetch/api/abort/destroyed-context.html.ini b/tests/wpt/metadata/fetch/api/abort/destroyed-context.html.ini
index 34220250b69..88d469f589b 100644
--- a/tests/wpt/metadata/fetch/api/abort/destroyed-context.html.ini
+++ b/tests/wpt/metadata/fetch/api/abort/destroyed-context.html.ini
@@ -1,4 +1,5 @@
[destroyed-context.html]
+ expected: ERROR
[destroyed-context]
expected: FAIL
diff --git a/tests/wpt/metadata/fetch/api/abort/general.any.js.ini b/tests/wpt/metadata/fetch/api/abort/general.any.js.ini
index 10e4a5a2ec6..69e5d893134 100644
--- a/tests/wpt/metadata/fetch/api/abort/general.any.js.ini
+++ b/tests/wpt/metadata/fetch/api/abort/general.any.js.ini
@@ -5,104 +5,152 @@
[general]
expected: FAIL
+
[Aborting rejects with AbortError]
expected: FAIL
+
[Aborting rejects with AbortError - no-cors]
expected: FAIL
+
[TypeError from request constructor takes priority - RequestInit's window is not null]
expected: FAIL
+
[TypeError from request constructor takes priority - Input URL is not valid]
expected: FAIL
+
[TypeError from request constructor takes priority - Input URL has credentials]
expected: FAIL
+
[TypeError from request constructor takes priority - RequestInit's mode is navigate]
expected: FAIL
+
[TypeError from request constructor takes priority - RequestInit's referrer is invalid]
expected: FAIL
+
[TypeError from request constructor takes priority - RequestInit's method is forbidden]
expected: FAIL
+
[TypeError from request constructor takes priority - RequestInit's mode is no-cors and method is not simple]
expected: FAIL
+
[TypeError from request constructor takes priority - RequestInit's cache mode is only-if-cached and mode is not same-origin]
expected: FAIL
+
[TypeError from request constructor takes priority - Request with cache mode: only-if-cached and fetch mode cors]
expected: FAIL
+
[TypeError from request constructor takes priority - Request with cache mode: only-if-cached and fetch mode no-cors]
expected: FAIL
+
[TypeError from request constructor takes priority - Bad referrerPolicy init parameter value]
expected: FAIL
+
[TypeError from request constructor takes priority - Bad mode init parameter value]
expected: FAIL
+
[TypeError from request constructor takes priority - Bad credentials init parameter value]
expected: FAIL
+
[TypeError from request constructor takes priority - Bad cache init parameter value]
expected: FAIL
+
[TypeError from request constructor takes priority - Bad redirect init parameter value]
expected: FAIL
+
[Request objects have a signal property]
expected: FAIL
+
[Signal on request object]
expected: FAIL
+
[Signal on request object created from request object]
expected: FAIL
+
[Signal on request object created from request object, with signal on second request]
expected: FAIL
+
[Signal on request object created from request object, with signal on second request overriding another]
expected: FAIL
+
[Signal retained after unrelated properties are overridden by fetch]
expected: FAIL
+
[Signal removed by setting to null]
expected: FAIL
+
[Already aborted signal rejects immediately]
expected: FAIL
+
[Request is still 'used' if signal is aborted before fetching]
expected: FAIL
+
[response.arrayBuffer() rejects if already aborted]
expected: FAIL
+
[response.blob() rejects if already aborted]
expected: FAIL
+
[response.formData() rejects if already aborted]
expected: FAIL
+
[response.json() rejects if already aborted]
expected: FAIL
+
[response.text() rejects if already aborted]
expected: FAIL
+
[Already aborted signal does not make request]
expected: FAIL
+
[Already aborted signal can be used for many fetches]
expected: FAIL
+
[Signal can be used to abort other fetches, even if another fetch succeeded before aborting]
expected: FAIL
+
[Underlying connection is closed when aborting after receiving response]
expected: FAIL
+
[Underlying connection is closed when aborting after receiving response - no-cors]
expected: FAIL
+
[Fetch aborted & connection closed when aborted after calling response.arrayBuffer()]
expected: FAIL
+
[Fetch aborted & connection closed when aborted after calling response.blob()]
expected: FAIL
+
[Fetch aborted & connection closed when aborted after calling response.formData()]
expected: FAIL
+
[Fetch aborted & connection closed when aborted after calling response.json()]
expected: FAIL
+
[Fetch aborted & connection closed when aborted after calling response.text()]
expected: FAIL
+
[Stream errors once aborted. Underlying connection closed.]
expected: FAIL
+
[Stream errors once aborted, after reading. Underlying connection closed.]
expected: FAIL
+
[Stream will not error if body is empty. It's closed with an empty queue before it errors.]
expected: FAIL
+
[Readable stream synchronously cancels with AbortError if aborted before reading]
expected: FAIL
+
[Signal state is cloned]
expected: FAIL
+
[Clone aborts with original controller]
expected: FAIL
[TypeError from request constructor takes priority - RequestInit's method is invalid]
expected: FAIL
+
[general.any.html]
type: testharness
[Untitled]
@@ -110,107 +158,158 @@
[general]
expected: FAIL
+
[Aborting rejects with AbortError]
expected: FAIL
+
[Aborting rejects with AbortError - no-cors]
expected: FAIL
+
[TypeError from request constructor takes priority - RequestInit's window is not null]
expected: FAIL
+
[TypeError from request constructor takes priority - Input URL is not valid]
expected: FAIL
+
[TypeError from request constructor takes priority - Input URL has credentials]
expected: FAIL
+
[TypeError from request constructor takes priority - RequestInit's mode is navigate]
expected: FAIL
+
[TypeError from request constructor takes priority - RequestInit's referrer is invalid]
expected: FAIL
+
[TypeError from request constructor takes priority - RequestInit's method is forbidden]
expected: FAIL
+
[TypeError from request constructor takes priority - RequestInit's mode is no-cors and method is not simple]
expected: FAIL
+
[TypeError from request constructor takes priority - RequestInit's cache mode is only-if-cached and mode is not same-origin]
expected: FAIL
+
[TypeError from request constructor takes priority - Request with cache mode: only-if-cached and fetch mode cors]
expected: FAIL
+
[TypeError from request constructor takes priority - Request with cache mode: only-if-cached and fetch mode no-cors]
expected: FAIL
+
[TypeError from request constructor takes priority - Bad referrerPolicy init parameter value]
expected: FAIL
+
[TypeError from request constructor takes priority - Bad mode init parameter value]
expected: FAIL
+
[TypeError from request constructor takes priority - Bad credentials init parameter value]
expected: FAIL
+
[TypeError from request constructor takes priority - Bad cache init parameter value]
expected: FAIL
+
[TypeError from request constructor takes priority - Bad redirect init parameter value]
expected: FAIL
+
[TypeError from request constructor takes priority - RequestInit's method is invalid]
expected: FAIL
+
[Request objects have a signal property]
expected: FAIL
+
[Signal on request object]
expected: FAIL
+
[Signal on request object created from request object]
expected: FAIL
+
[Signal on request object created from request object, with signal on second request]
expected: FAIL
+
[Signal on request object created from request object, with signal on second request overriding another]
expected: FAIL
+
[Signal retained after unrelated properties are overridden by fetch]
expected: FAIL
+
[Signal removed by setting to null]
expected: FAIL
+
[Already aborted signal rejects immediately]
expected: FAIL
+
[Request is still 'used' if signal is aborted before fetching]
expected: FAIL
+
[response.arrayBuffer() rejects if already aborted]
expected: FAIL
+
[response.blob() rejects if already aborted]
expected: FAIL
+
[response.formData() rejects if already aborted]
expected: FAIL
+
[response.json() rejects if already aborted]
expected: FAIL
+
[response.text() rejects if already aborted]
expected: FAIL
+
[Already aborted signal does not make request]
expected: FAIL
+
[Already aborted signal can be used for many fetches]
expected: FAIL
+
[Signal can be used to abort other fetches, even if another fetch succeeded before aborting]
expected: FAIL
+
[Underlying connection is closed when aborting after receiving response]
expected: FAIL
+
[Underlying connection is closed when aborting after receiving response - no-cors]
expected: FAIL
+
[Fetch aborted & connection closed when aborted after calling response.arrayBuffer()]
expected: FAIL
+
[Fetch aborted & connection closed when aborted after calling response.blob()]
expected: FAIL
+
[Fetch aborted & connection closed when aborted after calling response.formData()]
expected: FAIL
+
[Fetch aborted & connection closed when aborted after calling response.json()]
expected: FAIL
+
[Fetch aborted & connection closed when aborted after calling response.text()]
expected: FAIL
+
[Stream errors once aborted. Underlying connection closed.]
expected: FAIL
+
[Stream errors once aborted, after reading. Underlying connection closed.]
expected: FAIL
+
[Stream will not error if body is empty. It's closed with an empty queue before it errors.]
expected: FAIL
+
[Readable stream synchronously cancels with AbortError if aborted before reading]
expected: FAIL
+
[Signal state is cloned]
expected: FAIL
+
[Clone aborts with original controller]
expected: FAIL
+
[general.any.serviceworker.html]
+ expected: ERROR
[general]
expected: FAIL
+
[general.https.any.serviceworker.html]
expected: TIMEOUT
[Untitled]
@@ -221,10 +320,10 @@
[general.any.sharedworker.html]
+ expected: ERROR
[Untitled]
expected: FAIL
[general]
expected: FAIL
-
diff --git a/tests/wpt/metadata/fetch/api/abort/keepalive.html.ini b/tests/wpt/metadata/fetch/api/abort/keepalive.html.ini
index 6c374cbc54f..31d9009742b 100644
--- a/tests/wpt/metadata/fetch/api/abort/keepalive.html.ini
+++ b/tests/wpt/metadata/fetch/api/abort/keepalive.html.ini
@@ -1,4 +1,5 @@
[keepalive.html]
+ expected: ERROR
[keepalive]
expected: FAIL
diff --git a/tests/wpt/metadata/fetch/api/basic/header-value-combining.any.js.ini b/tests/wpt/metadata/fetch/api/basic/header-value-combining.any.js.ini
index c260ef66571..56f05fbdaa5 100644
--- a/tests/wpt/metadata/fetch/api/basic/header-value-combining.any.js.ini
+++ b/tests/wpt/metadata/fetch/api/basic/header-value-combining.any.js.ini
@@ -51,11 +51,13 @@
[header-value-combining.any.serviceworker.html]
+ expected: ERROR
[header-value-combining]
expected: FAIL
[header-value-combining.any.sharedworker.html]
+ expected: ERROR
[header-value-combining]
expected: FAIL
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
index e065e3b8d06..7bdd2fc562c 100644
--- 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
@@ -1,6 +1,7 @@
[header-value-null-byte.any.html]
[header-value-null-byte.any.sharedworker.html]
+ expected: ERROR
[header-value-null-byte]
expected: FAIL
@@ -8,5 +9,7 @@
[header-value-null-byte.any.worker.html]
[header-value-null-byte.any.serviceworker.html]
+ expected: ERROR
[header-value-null-byte]
expected: FAIL
+
diff --git a/tests/wpt/metadata/fetch/api/basic/integrity.sub.any.js.ini b/tests/wpt/metadata/fetch/api/basic/integrity.sub.any.js.ini
index fa99bafd6cc..a68b5430141 100644
--- a/tests/wpt/metadata/fetch/api/basic/integrity.sub.any.js.ini
+++ b/tests/wpt/metadata/fetch/api/basic/integrity.sub.any.js.ini
@@ -1,4 +1,5 @@
[integrity.sub.any.sharedworker.html]
+ expected: ERROR
[Untitled]
expected: FAIL
diff --git a/tests/wpt/metadata/fetch/api/basic/stream-safe-creation.any.js.ini b/tests/wpt/metadata/fetch/api/basic/stream-safe-creation.any.js.ini
index 45e02e88567..5bd92400715 100644
--- a/tests/wpt/metadata/fetch/api/basic/stream-safe-creation.any.js.ini
+++ b/tests/wpt/metadata/fetch/api/basic/stream-safe-creation.any.js.ini
@@ -1,8 +1,11 @@
[stream-safe-creation.any.serviceworker.html]
+ expected: ERROR
[stream-safe-creation]
expected: FAIL
+
[stream-safe-creation.any.sharedworker.html]
+ expected: ERROR
[stream-safe-creation]
expected: FAIL
diff --git a/tests/wpt/metadata/fetch/api/idlharness.any.js.ini b/tests/wpt/metadata/fetch/api/idlharness.any.js.ini
index 60fcabdf732..7e1ca25d680 100644
--- a/tests/wpt/metadata/fetch/api/idlharness.any.js.ini
+++ b/tests/wpt/metadata/fetch/api/idlharness.any.js.ini
@@ -1,4 +1,5 @@
[idlharness.any.serviceworker.html]
+ expected: ERROR
[idlharness]
expected: FAIL
@@ -164,6 +165,7 @@
[idlharness.any.sharedworker.html]
+ expected: ERROR
[idlharness]
expected: FAIL
diff --git a/tests/wpt/metadata/fetch/api/request/destination/fetch-destination-frame.https.html.ini b/tests/wpt/metadata/fetch/api/request/destination/fetch-destination-frame.https.html.ini
new file mode 100644
index 00000000000..4f632c71918
--- /dev/null
+++ b/tests/wpt/metadata/fetch/api/request/destination/fetch-destination-frame.https.html.ini
@@ -0,0 +1,7 @@
+[fetch-destination-frame.https.html]
+ [frame fetches with a "frame" Request.destination]
+ expected: FAIL
+
+ [Initialize global state]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/fetch/api/request/destination/fetch-destination-iframe.https.html.ini b/tests/wpt/metadata/fetch/api/request/destination/fetch-destination-iframe.https.html.ini
index f7d97cc9957..feb3f79c1ec 100644
--- a/tests/wpt/metadata/fetch/api/request/destination/fetch-destination-iframe.https.html.ini
+++ b/tests/wpt/metadata/fetch/api/request/destination/fetch-destination-iframe.https.html.ini
@@ -1,7 +1,13 @@
[fetch-destination-iframe.https.html]
[Fetch destination tests for resources with no load event]
expected: FAIL
+
[Initialize global state]
expected: FAIL
+
[iframe fetches with a "document" Request.destination]
expected: FAIL
+
+ [iframe fetches with a "iframe" Request.destination]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/fetch/api/request/request-init-stream.any.js.ini b/tests/wpt/metadata/fetch/api/request/request-init-stream.any.js.ini
index 433acff7b54..9548739f4e7 100644
--- a/tests/wpt/metadata/fetch/api/request/request-init-stream.any.js.ini
+++ b/tests/wpt/metadata/fetch/api/request/request-init-stream.any.js.ini
@@ -19,6 +19,7 @@
[request-init-stream.any.sharedworker.html]
+ expected: ERROR
[request-init-stream]
expected: FAIL
@@ -44,5 +45,7 @@
[request-init-stream.any.serviceworker.html]
+ expected: ERROR
[request-init-stream]
expected: FAIL
+
diff --git a/tests/wpt/metadata/fetch/api/response/response-consume.html.ini b/tests/wpt/metadata/fetch/api/response/response-consume.html.ini
index 94ca58262d7..e21f3886737 100644
--- a/tests/wpt/metadata/fetch/api/response/response-consume.html.ini
+++ b/tests/wpt/metadata/fetch/api/response/response-consume.html.ini
@@ -73,3 +73,6 @@
[Consume response's body: from multipart form data blob to formData]
expected: FAIL
+ [Consume response's body: from text with correct multipart type to formData with BOM]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/fetch/api/response/response-from-stream.any.js.ini b/tests/wpt/metadata/fetch/api/response/response-from-stream.any.js.ini
index d55a9df46a1..ada02e692de 100644
--- a/tests/wpt/metadata/fetch/api/response/response-from-stream.any.js.ini
+++ b/tests/wpt/metadata/fetch/api/response/response-from-stream.any.js.ini
@@ -1,4 +1,5 @@
[response-from-stream.any.sharedworker.html]
+ expected: ERROR
[response-from-stream]
expected: FAIL
@@ -27,6 +28,9 @@
[Constructing a Response with a stream on which read() is called]
expected: FAIL
+
[response-from-stream.any.serviceworker.html]
+ expected: ERROR
[response-from-stream]
expected: FAIL
+
diff --git a/tests/wpt/metadata/fetch/content-type/response.window.js.ini b/tests/wpt/metadata/fetch/content-type/response.window.js.ini
index 8f3c2aded90..de468ea0db0 100644
--- a/tests/wpt/metadata/fetch/content-type/response.window.js.ini
+++ b/tests/wpt/metadata/fetch/content-type/response.window.js.ini
@@ -312,21 +312,21 @@
[<iframe>: separate response Content-Type: */* text/html]
expected: FAIL
- [<iframe>: combined response Content-Type: text/html;" text/plain]
+ [<iframe>: combined response Content-Type: */* text/html]
expected: FAIL
- [<iframe>: combined response Content-Type: */* text/html]
+ [<iframe>: separate response Content-Type: text/html;x=" text/plain]
expected: FAIL
- [<iframe>: combined response Content-Type: text/html */*]
+ [<iframe>: separate response Content-Type: text/html;" text/plain]
expected: FAIL
- [<iframe>: combined response Content-Type: text/html */*;charset=gbk]
+ [<iframe>: separate response Content-Type: text/html */*;charset=gbk]
expected: FAIL
- [<iframe>: separate response Content-Type: text/html;x=" text/plain]
+ [<iframe>: separate response Content-Type: text/plain */*]
expected: FAIL
- [<iframe>: combined response Content-Type: text/html;" \\" text/plain]
+ [<iframe>: separate response Content-Type: text/html;" \\" text/plain]
expected: FAIL
diff --git a/tests/wpt/metadata/fetch/content-type/script.window.js.ini b/tests/wpt/metadata/fetch/content-type/script.window.js.ini
index c7413d589dc..279734168dc 100644
--- a/tests/wpt/metadata/fetch/content-type/script.window.js.ini
+++ b/tests/wpt/metadata/fetch/content-type/script.window.js.ini
@@ -56,9 +56,6 @@
[separate text/javascript x/x]
expected: FAIL
- [separate text/javascript;charset=windows-1252 error text/javascript]
- expected: FAIL
-
[separate text/javascript;charset=windows-1252 text/javascript]
expected: FAIL
diff --git a/tests/wpt/metadata/fetch/cors-rfc1918/idlharness.tentative.any.js.ini b/tests/wpt/metadata/fetch/cors-rfc1918/idlharness.tentative.any.js.ini
index 7141075785f..2f1c340daf3 100644
--- a/tests/wpt/metadata/fetch/cors-rfc1918/idlharness.tentative.any.js.ini
+++ b/tests/wpt/metadata/fetch/cors-rfc1918/idlharness.tentative.any.js.ini
@@ -19,13 +19,18 @@
[WorkerGlobalScope interface: self must inherit property "addressSpace" with the proper type]
expected: FAIL
+
[idlharness.tentative.any.serviceworker.html]
+ expected: ERROR
[idlharness]
expected: FAIL
+
[idlharness.tentative.https.any.serviceworker.html]
expected: TIMEOUT
[idlharness.tentative.any.sharedworker.html]
+ expected: ERROR
[idlharness]
expected: FAIL
+
diff --git a/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch.any.js.ini b/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch.any.js.ini
index e3422dbdb00..55e4b8ec274 100644
--- a/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch.any.js.ini
+++ b/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch.any.js.ini
@@ -56,6 +56,7 @@
[fetch.any.sharedworker.html]
+ expected: ERROR
[fetch]
expected: FAIL
diff --git a/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch.https.any.js.ini b/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch.https.any.js.ini
index 2f44646bbb5..2c43b33a3a1 100644
--- a/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch.https.any.js.ini
+++ b/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch.https.any.js.ini
@@ -13,11 +13,13 @@
[fetch.https.any.serviceworker.html]
+ expected: ERROR
[fetch]
expected: FAIL
[fetch.https.any.sharedworker.html]
+ expected: ERROR
[fetch]
expected: FAIL
diff --git a/tests/wpt/metadata/fetch/metadata/font.tentative.https.sub.html.ini b/tests/wpt/metadata/fetch/metadata/font.tentative.https.sub.html.ini
index 39b898e8564..c78ebab74f5 100644
--- a/tests/wpt/metadata/fetch/metadata/font.tentative.https.sub.html.ini
+++ b/tests/wpt/metadata/fetch/metadata/font.tentative.https.sub.html.ini
@@ -1,4 +1,5 @@
[font.tentative.https.sub.html]
+ expected: ERROR
[font]
expected: FAIL
diff --git a/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/font.tentative.https.sub.html.ini b/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/font.tentative.https.sub.html.ini
index 39b898e8564..c78ebab74f5 100644
--- a/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/font.tentative.https.sub.html.ini
+++ b/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/font.tentative.https.sub.html.ini
@@ -1,4 +1,5 @@
[font.tentative.https.sub.html]
+ expected: ERROR
[font]
expected: FAIL
diff --git a/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/redirect/multiple-redirect-https-downgrade-upgrade.tentative.sub.html.ini b/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/redirect/multiple-redirect-https-downgrade-upgrade.tentative.sub.html.ini
index 70f7e987b5c..3be5dd74add 100644
--- a/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/redirect/multiple-redirect-https-downgrade-upgrade.tentative.sub.html.ini
+++ b/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/redirect/multiple-redirect-https-downgrade-upgrade.tentative.sub.html.ini
@@ -1,4 +1,5 @@
[multiple-redirect-https-downgrade-upgrade.tentative.sub.html]
+ expected: ERROR
[multiple-redirect-https-downgrade-upgrade]
expected: FAIL
diff --git a/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/redirect/redirect-http-upgrade.tentative.sub.html.ini b/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/redirect/redirect-http-upgrade.tentative.sub.html.ini
index 90c6012f913..0378fd64538 100644
--- a/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/redirect/redirect-http-upgrade.tentative.sub.html.ini
+++ b/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/redirect/redirect-http-upgrade.tentative.sub.html.ini
@@ -1,4 +1,5 @@
[redirect-http-upgrade.tentative.sub.html]
+ expected: ERROR
[redirect-http-upgrade]
expected: FAIL
diff --git a/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/redirect/redirect-https-downgrade.tentative.sub.html.ini b/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/redirect/redirect-https-downgrade.tentative.sub.html.ini
index 6b117e1204f..2a9b3161b0f 100644
--- a/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/redirect/redirect-https-downgrade.tentative.sub.html.ini
+++ b/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/redirect/redirect-https-downgrade.tentative.sub.html.ini
@@ -1,4 +1,5 @@
[redirect-https-downgrade.tentative.sub.html]
+ expected: ERROR
[redirect-https-downgrade]
expected: FAIL
diff --git a/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/sharedworker.tentative.https.sub.html.ini b/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/sharedworker.tentative.https.sub.html.ini
index 9aa11216376..9f6f794ddac 100644
--- a/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/sharedworker.tentative.https.sub.html.ini
+++ b/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/sharedworker.tentative.https.sub.html.ini
@@ -1,4 +1,5 @@
[sharedworker.tentative.https.sub.html]
+ expected: ERROR
[sharedworker]
expected: FAIL
diff --git a/tests/wpt/metadata/fetch/metadata/sharedworker.tentative.https.sub.html.ini b/tests/wpt/metadata/fetch/metadata/sharedworker.tentative.https.sub.html.ini
index 9aa11216376..9f6f794ddac 100644
--- a/tests/wpt/metadata/fetch/metadata/sharedworker.tentative.https.sub.html.ini
+++ b/tests/wpt/metadata/fetch/metadata/sharedworker.tentative.https.sub.html.ini
@@ -1,4 +1,5 @@
[sharedworker.tentative.https.sub.html]
+ expected: ERROR
[sharedworker]
expected: FAIL
diff --git a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini
index a2a0c8f8200..536384f36e1 100644
--- a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini
+++ b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini
@@ -11,9 +11,6 @@
[X-Content-Type-Options%3A%20nosniff%0C]
expected: FAIL
- [X-Content-Type-Options%3A%20'NosniFF']
- expected: FAIL
-
- [X-Content-Type-Options%3A%20%22nosniFF%22]
+ [X-Content-Type-Options%3A%20%2Cnosniff]
expected: FAIL
diff --git a/tests/wpt/metadata/hr-time/idlharness.any.js.ini b/tests/wpt/metadata/hr-time/idlharness.any.js.ini
index 154f6beb894..4f414a6521b 100644
--- a/tests/wpt/metadata/hr-time/idlharness.any.js.ini
+++ b/tests/wpt/metadata/hr-time/idlharness.any.js.ini
@@ -1,9 +1,11 @@
[idlharness.any.serviceworker.html]
+ expected: ERROR
[idlharness]
expected: FAIL
[idlharness.any.sharedworker.html]
+ expected: ERROR
[idlharness]
expected: FAIL
@@ -13,3 +15,7 @@
[idlharness]
expected: FAIL
+
+[idlharness.any.html]
+
+[idlharness.any.worker.html]
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
new file mode 100644
index 00000000000..87b07c3e670
--- /dev/null
+++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini
@@ -0,0 +1,4 @@
+[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_3.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini
index 51f8272a6de..dc2e45516de 100644
--- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_3.html.ini
+++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini
@@ -1,4 +1,4 @@
-[traverse_the_history_3.html]
+[traverse_the_history_5.html]
[Multiple history traversals, last would be aborted]
expected: FAIL
diff --git a/tests/wpt/metadata/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_access_details.sub.html.ini b/tests/wpt/metadata/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_access_details.sub.html.ini
index 83d36d0a1ab..e4f94846eb9 100644
--- a/tests/wpt/metadata/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_access_details.sub.html.ini
+++ b/tests/wpt/metadata/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_access_details.sub.html.ini
@@ -13,7 +13,7 @@
expected: NOTRUN
[Access not allowed if different-origin with no 'document.domain' modification. (Sanity check)]
- expected: FAIL
+ expected: TIMEOUT
[Access disallowed again if same-origin, both set document-domain to existing value, then one sets to parent.]
expected: NOTRUN
@@ -22,13 +22,13 @@
expected: NOTRUN
[Access allowed if same-origin and both set document.domain to existing value.]
- expected: TIMEOUT
+ expected: NOTRUN
[Access is not revoked to Document object when we stop being same effective script origin due to document.domain.]
expected: NOTRUN
[Access disallowed if same-origin but only one sets document.domain.]
- expected: FAIL
+ expected: NOTRUN
[Access evolves correctly for cross-origin objects when we join up via document.domain and then diverge again.]
expected: NOTRUN
diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/creating_browsing_context_test_01.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/creating_browsing_context_test_01.html.ini
deleted file mode 100644
index 16fa2c5cfc1..00000000000
--- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/creating_browsing_context_test_01.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[creating_browsing_context_test_01.html]
- [first argument: absolute url]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/browsers/windows/embedded-opener-remove-frame.html.ini b/tests/wpt/metadata/html/browsers/windows/embedded-opener-remove-frame.html.ini
index fd369192a02..c757b400205 100644
--- a/tests/wpt/metadata/html/browsers/windows/embedded-opener-remove-frame.html.ini
+++ b/tests/wpt/metadata/html/browsers/windows/embedded-opener-remove-frame.html.ini
@@ -1,5 +1,5 @@
[embedded-opener-remove-frame.html]
- expected: TIMEOUT
+ expected: CRASH
[opener and "removed" embedded documents]
expected: FAIL
diff --git a/tests/wpt/metadata/html/dom/usvstring-reflection.html.ini b/tests/wpt/metadata/html/dom/usvstring-reflection.https.html.ini
index b69fefe57b4..8036ce5d6a6 100644
--- a/tests/wpt/metadata/html/dom/usvstring-reflection.html.ini
+++ b/tests/wpt/metadata/html/dom/usvstring-reflection.https.html.ini
@@ -1,31 +1,28 @@
-[usvstring-reflection.html]
- [anchor : unpaired surrogate codepoint should be replaced with U+FFFD]
+[usvstring-reflection.https.html]
+ [source : unpaired surrogate codepoint should be replaced with U+FFFD]
expected: FAIL
- [area : unpaired surrogate codepoint should be replaced with U+FFFD]
+ [sendBeacon URL: unpaired surrogate codepoint should not make any exceptions.]
expected: FAIL
- [frame : unpaired surrogate codepoint should be replaced with U+FFFD]
+ [anchor : unpaired surrogate codepoint should be replaced with U+FFFD]
expected: FAIL
[iframe : unpaired surrogate codepoint should be replaced with U+FFFD]
expected: FAIL
- [source : unpaired surrogate codepoint should be replaced with U+FFFD]
+ [UnregisterPtotocolHandler URL: unpaired surrogate codepoint should not make any exceptions.]
expected: FAIL
- [sendBeacon URL: unpaired surrogate codepoint should not make any exceptions.]
+ [frame : unpaired surrogate codepoint should be replaced with U+FFFD]
expected: FAIL
[RTCDataChannel.send: unpaired surrogate codepoint should be replaced with U+FFFD.]
expected: FAIL
- [RegisterPtotocolHandler URL: unpaired surrogate codepoint should not make any exceptions.]
- expected: FAIL
-
- [USVString test relate to url]
+ [area : unpaired surrogate codepoint should be replaced with U+FFFD]
expected: FAIL
- [UnregisterPtotocolHandler URL: unpaired surrogate codepoint should not make any exceptions.]
+ [RegisterPtotocolHandler URL: unpaired surrogate codepoint should not make any exceptions.]
expected: FAIL
diff --git a/tests/wpt/metadata/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-sharedworker-success.https.html.ini b/tests/wpt/metadata/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-sharedworker-success.https.html.ini
index ae5d111a16c..f268c29af5a 100644
--- a/tests/wpt/metadata/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-sharedworker-success.https.html.ini
+++ b/tests/wpt/metadata/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-sharedworker-success.https.html.ini
@@ -1,4 +1,5 @@
[nested-sharedworker-success.https.html]
+ expected: ERROR
[nested-sharedworker-success]
expected: FAIL
diff --git a/tests/wpt/metadata/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success.https.html.ini b/tests/wpt/metadata/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success.https.html.ini
index 16464a698ff..d0ba2949658 100644
--- a/tests/wpt/metadata/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success.https.html.ini
+++ b/tests/wpt/metadata/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success.https.html.ini
@@ -2,3 +2,6 @@
[postMessaging to a dedicated sub-worker allows them to see each others' modifications]
expected: FAIL
+ [Bonus: self.crossOriginIsolated]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.js.ini b/tests/wpt/metadata/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.js.ini
index 3b954375b4c..dce40214302 100644
--- a/tests/wpt/metadata/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.js.ini
+++ b/tests/wpt/metadata/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.js.ini
@@ -2,8 +2,14 @@
[SharedArrayBuffer over BroadcastChannel without COOP+COEP]
expected: FAIL
+ [Bonus: self.crossOriginIsolated]
+ expected: FAIL
+
[no-coop-coep.https.any.html]
[SharedArrayBuffer over BroadcastChannel without COOP+COEP]
expected: FAIL
+ [Bonus: self.crossOriginIsolated]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/infrastructure/safe-passing-of-structured-data/structured_clone_bigint.html.ini b/tests/wpt/metadata/html/infrastructure/safe-passing-of-structured-data/structured_clone_bigint.html.ini
index c3a5aed5e44..ecb3e9b06e2 100644
--- a/tests/wpt/metadata/html/infrastructure/safe-passing-of-structured-data/structured_clone_bigint.html.ini
+++ b/tests/wpt/metadata/html/infrastructure/safe-passing-of-structured-data/structured_clone_bigint.html.ini
@@ -1,4 +1,5 @@
[structured_clone_bigint.html]
+ expected: ERROR
[2.7 Safe passing of structured data]
expected: FAIL
diff --git a/tests/wpt/metadata/html/interaction/focus/sequential-focus-navigation-and-the-tabindex-attribute/tabindex-getter.html.ini b/tests/wpt/metadata/html/interaction/focus/sequential-focus-navigation-and-the-tabindex-attribute/tabindex-getter.html.ini
index 56f24be109c..b020225a676 100644
--- a/tests/wpt/metadata/html/interaction/focus/sequential-focus-navigation-and-the-tabindex-attribute/tabindex-getter.html.ini
+++ b/tests/wpt/metadata/html/interaction/focus/sequential-focus-navigation-and-the-tabindex-attribute/tabindex-getter.html.ini
@@ -1,4 +1,5 @@
[tabindex-getter.html]
+ expected: ERROR
[HTML Test: tabIndex getter return value]
expected: FAIL
diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/form-controls/resets.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/form-controls/resets.html.ini
index 66eb9017221..d451152cf95 100644
--- a/tests/wpt/metadata/html/rendering/non-replaced-elements/form-controls/resets.html.ini
+++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/form-controls/resets.html.ini
@@ -1,4 +1,5 @@
[resets.html]
+ expected: ERROR
[default style resets]
expected: FAIL
diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/tables/form-in-tables.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/tables/form-in-tables.html.ini
index c85144d858a..0e5df605971 100644
--- a/tests/wpt/metadata/html/rendering/non-replaced-elements/tables/form-in-tables.html.ini
+++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/tables/form-in-tables.html.ini
@@ -1,4 +1,5 @@
[form-in-tables.html]
+ expected: ERROR
[UA style for form in table elements]
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
index e76c8d1b88d..a5be7f5d25f 100644
--- 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
@@ -1,4 +1,5 @@
[fieldset-default-style.html]
+ expected: ERROR
[fieldset default style]
expected: FAIL
diff --git a/tests/wpt/metadata/html/rendering/pixel-length-attributes.html.ini b/tests/wpt/metadata/html/rendering/pixel-length-attributes.html.ini
index fb11c5b5972..2a803ae9937 100644
--- a/tests/wpt/metadata/html/rendering/pixel-length-attributes.html.ini
+++ b/tests/wpt/metadata/html/rendering/pixel-length-attributes.html.ini
@@ -1,4 +1,5 @@
[pixel-length-attributes.html]
+ expected: ERROR
[<iframe marginheight="200%"> mapping to marginBottom]
expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini
index fc37df7e3fa..2a166bb97b7 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini
@@ -1,6 +1,6 @@
[iframe_sandbox_popups_escaping-1.html]
type: testharness
- expected: TIMEOUT
+ expected: CRASH
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini
index 5f60c78e73c..f6a7aca3306 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini
@@ -1,6 +1,5 @@
[iframe_sandbox_popups_escaping-3.html]
type: testharness
- expected: TIMEOUT
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
- expected: TIMEOUT
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini
index 9df1ac56f2a..963d4cd20ef 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini
@@ -1,6 +1,6 @@
[iframe_sandbox_popups_nonescaping-1.html]
type: testharness
- expected: TIMEOUT
+ expected: CRASH
[Check that popups from a sandboxed iframe do not escape the sandbox]
expected: NOTRUN
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini
index e440b1e38c6..dc856a3d5a3 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini
@@ -1,6 +1,5 @@
[iframe_sandbox_popups_nonescaping-3.html]
type: testharness
- expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox]
- expected: NOTRUN
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/srcdoc_process_attributes.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/srcdoc_process_attributes.html.ini
index d2ab0585208..574e63e8e33 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/srcdoc_process_attributes.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/srcdoc_process_attributes.html.ini
@@ -9,3 +9,6 @@
[Adding `srcdoc` attribute triggers attributes processing]
expected: TIMEOUT
+ [Setting `srcdoc` (via property) triggers attributes processing]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini
new file mode 100644
index 00000000000..8cc42056d34
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini
@@ -0,0 +1,10 @@
+[non-active-document.html]
+ [DOMParser]
+ expected: FAIL
+
+ [createHTMLDocument]
+ expected: FAIL
+
+ [<template>]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/semantics/forms/the-button-element/button-submit-children.html.ini b/tests/wpt/metadata/html/semantics/forms/the-button-element/button-submit-children.html.ini
deleted file mode 100644
index dbb4c200800..00000000000
--- a/tests/wpt/metadata/html/semantics/forms/the-button-element/button-submit-children.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[button-submit-children.html]
- expected: TIMEOUT
- [This test will pass if a form navigation successfully occurs when clicking a child element of a <button type=submit> element with a onclick event handler which prevents the default form submission and manually calls form.submit() instead.]
- expected: TIMEOUT
-
diff --git a/tests/wpt/metadata/html/semantics/forms/the-input-element/input-stepdown.html.ini b/tests/wpt/metadata/html/semantics/forms/the-input-element/input-stepdown.html.ini
index 46ddfb1b695..d500a0cc36d 100644
--- a/tests/wpt/metadata/html/semantics/forms/the-input-element/input-stepdown.html.ini
+++ b/tests/wpt/metadata/html/semantics/forms/the-input-element/input-stepdown.html.ini
@@ -1,5 +1,6 @@
[input-stepdown.html]
type: testharness
+ expected: ERROR
[Forms]
expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/forms/the-input-element/input-stepup.html.ini b/tests/wpt/metadata/html/semantics/forms/the-input-element/input-stepup.html.ini
index f0162971327..40487438cbf 100644
--- a/tests/wpt/metadata/html/semantics/forms/the-input-element/input-stepup.html.ini
+++ b/tests/wpt/metadata/html/semantics/forms/the-input-element/input-stepup.html.ini
@@ -1,5 +1,6 @@
[input-stepup.html]
type: testharness
+ expected: ERROR
[Forms]
expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/interactive-elements/the-details-element/toggleEvent.html.ini b/tests/wpt/metadata/html/semantics/interactive-elements/the-details-element/toggleEvent.html.ini
new file mode 100644
index 00000000000..9e522297c94
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/interactive-elements/the-details-element/toggleEvent.html.ini
@@ -0,0 +1,7 @@
+[toggleEvent.html]
+ [Calling open twice on 'details' fires only one toggle event]
+ expected: FAIL
+
+ [Setting open=true to opened 'details' element should not fire a toggle event at the 'details' element]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/semantics/interactive-elements/the-dialog-element/dialog-autofocus-just-once.html.ini b/tests/wpt/metadata/html/semantics/interactive-elements/the-dialog-element/dialog-autofocus-just-once.html.ini
new file mode 100644
index 00000000000..0892d7e70a6
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/interactive-elements/the-dialog-element/dialog-autofocus-just-once.html.ini
@@ -0,0 +1,4 @@
+[dialog-autofocus-just-once.html]
+ [An autofocus element in a dialog element should not try to get focus twice.]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/semantics/interactive-elements/the-dialog-element/dialog-focusing-steps-prevent-autofocus.html.ini b/tests/wpt/metadata/html/semantics/interactive-elements/the-dialog-element/dialog-focusing-steps-prevent-autofocus.html.ini
new file mode 100644
index 00000000000..ef83cced9b2
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/interactive-elements/the-dialog-element/dialog-focusing-steps-prevent-autofocus.html.ini
@@ -0,0 +1,4 @@
+[dialog-focusing-steps-prevent-autofocus.html]
+ [After showing a dialog, non-dialog autofocus processing won't work.]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/execution-timing/084.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/execution-timing/084.html.ini
index 6268eb738fb..d602b485be6 100644
--- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/execution-timing/084.html.ini
+++ b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/execution-timing/084.html.ini
@@ -1,5 +1,6 @@
[084.html]
type: testharness
+ expected: ERROR
[ scheduler: event listener defined by script in a removed IFRAME]
expected: FAIL
diff --git a/tests/wpt/metadata/html/webappapis/microtask-queuing/queue-microtask-exceptions.any.js.ini b/tests/wpt/metadata/html/webappapis/microtask-queuing/queue-microtask-exceptions.any.js.ini
index f1a0f0f5a60..bc0b6e224ce 100644
--- a/tests/wpt/metadata/html/webappapis/microtask-queuing/queue-microtask-exceptions.any.js.ini
+++ b/tests/wpt/metadata/html/webappapis/microtask-queuing/queue-microtask-exceptions.any.js.ini
@@ -2,16 +2,20 @@
[It rethrows exceptions]
expected: FAIL
+
[queue-microtask-exceptions.any.serviceworker.html]
+ expected: ERROR
[queue-microtask-exceptions]
expected: FAIL
+
[queue-microtask-exceptions.https.any.serviceworker.html]
[queue-microtask-exceptions]
expected: FAIL
[queue-microtask-exceptions.any.sharedworker.html]
+ expected: ERROR
[queue-microtask-exceptions]
expected: FAIL
diff --git a/tests/wpt/metadata/html/webappapis/microtask-queuing/queue-microtask.any.js.ini b/tests/wpt/metadata/html/webappapis/microtask-queuing/queue-microtask.any.js.ini
index 85d783a2a93..e9a886d8887 100644
--- a/tests/wpt/metadata/html/webappapis/microtask-queuing/queue-microtask.any.js.ini
+++ b/tests/wpt/metadata/html/webappapis/microtask-queuing/queue-microtask.any.js.ini
@@ -14,11 +14,15 @@
[It interleaves with promises as expected]
expected: FAIL
+
[queue-microtask.any.serviceworker.html]
+ expected: ERROR
[queue-microtask]
expected: FAIL
+
[queue-microtask.any.sharedworker.html]
+ expected: ERROR
[queue-microtask]
expected: FAIL
@@ -44,3 +48,4 @@
[It interleaves with promises as expected]
expected: FAIL
+
diff --git a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/requires-failure.https.any.js.ini b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/requires-failure.https.any.js.ini
index 44439df7a90..c4dc9ba7413 100644
--- a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/requires-failure.https.any.js.ini
+++ b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/requires-failure.https.any.js.ini
@@ -1,6 +1,7 @@
[requires-failure.https.any.html]
[requires-failure.https.any.serviceworker.html]
+ expected: ERROR
[requires-failure]
expected: FAIL
diff --git a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/requires-success.any.js.ini b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/requires-success.any.js.ini
index f14929079d7..f3eb22d76b4 100644
--- a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/requires-success.any.js.ini
+++ b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/requires-success.any.js.ini
@@ -4,6 +4,7 @@
[requires-success.any.sharedworker.html]
+ expected: ERROR
[requires-success]
expected: FAIL
diff --git a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.sharedworker.html.ini b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.sharedworker.html.ini
index 133e69e9d07..82989a7b7ff 100644
--- a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.sharedworker.html.ini
+++ b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.sharedworker.html.ini
@@ -1,5 +1,6 @@
[promise-rejection-events.sharedworker.html]
type: testharness
+ expected: ERROR
[Promise rejection events tests: in a shared worker context]
expected: FAIL
diff --git a/tests/wpt/metadata/offscreen-canvas/filter/offscreencanvas.filter.w.html.ini b/tests/wpt/metadata/offscreen-canvas/filter/offscreencanvas.filter.w.html.ini
index d230a9d8d17..ee22e1591de 100644
--- a/tests/wpt/metadata/offscreen-canvas/filter/offscreencanvas.filter.w.html.ini
+++ b/tests/wpt/metadata/offscreen-canvas/filter/offscreencanvas.filter.w.html.ini
@@ -1,4 +1,5 @@
[offscreencanvas.filter.w.html]
+ expected: ERROR
[offscreencanvas]
expected: FAIL
diff --git a/tests/wpt/metadata/performance-timeline/idlharness.any.js.ini b/tests/wpt/metadata/performance-timeline/idlharness.any.js.ini
index 98ad19e3cc8..00d9f1831b0 100644
--- a/tests/wpt/metadata/performance-timeline/idlharness.any.js.ini
+++ b/tests/wpt/metadata/performance-timeline/idlharness.any.js.ini
@@ -1,4 +1,5 @@
[idlharness.any.sharedworker.html]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -69,6 +70,7 @@
[idlharness.any.serviceworker.html]
+ expected: ERROR
[idlharness]
expected: FAIL
diff --git a/tests/wpt/metadata/permissions/nfc-permission.html.ini b/tests/wpt/metadata/permissions/nfc-permission.html.ini
new file mode 100644
index 00000000000..1dbf477a869
--- /dev/null
+++ b/tests/wpt/metadata/permissions/nfc-permission.html.ini
@@ -0,0 +1,4 @@
+[nfc-permission.html]
+ [Test Web NFC Permission.]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/resource-timing/resource_timing_TAO_cross_origin_redirect.html.ini b/tests/wpt/metadata/resource-timing/resource_timing_TAO_cross_origin_redirect.html.ini
index 3ce32f0f969..1ef0e5f2573 100644
--- a/tests/wpt/metadata/resource-timing/resource_timing_TAO_cross_origin_redirect.html.ini
+++ b/tests/wpt/metadata/resource-timing/resource_timing_TAO_cross_origin_redirect.html.ini
@@ -1,4 +1,5 @@
[resource_timing_TAO_cross_origin_redirect.html]
+ expected: ERROR
[This test validates the values in resource timing for a timing allowed cross-origin redirect.]
expected: FAIL
diff --git a/tests/wpt/metadata/resource-timing/resource_timing_cross_origin_redirect.html.ini b/tests/wpt/metadata/resource-timing/resource_timing_cross_origin_redirect.html.ini
index dbb2eb922f6..61626972fd2 100644
--- a/tests/wpt/metadata/resource-timing/resource_timing_cross_origin_redirect.html.ini
+++ b/tests/wpt/metadata/resource-timing/resource_timing_cross_origin_redirect.html.ini
@@ -1,4 +1,5 @@
[resource_timing_cross_origin_redirect.html]
+ expected: ERROR
[This test validates the values in resource timing for a cross-origin redirect.]
expected: FAIL
diff --git a/tests/wpt/metadata/resource-timing/resource_timing_same_origin_redirect.html.ini b/tests/wpt/metadata/resource-timing/resource_timing_same_origin_redirect.html.ini
index 8e839b27927..b9e678edbb7 100644
--- a/tests/wpt/metadata/resource-timing/resource_timing_same_origin_redirect.html.ini
+++ b/tests/wpt/metadata/resource-timing/resource_timing_same_origin_redirect.html.ini
@@ -1,4 +1,5 @@
[resource_timing_same_origin_redirect.html]
+ expected: ERROR
[This test validates the values of the redirectStart/End in resource timing for a same-origin resource redirect.]
expected: FAIL
diff --git a/tests/wpt/metadata/touch-events/touch-retargeting.html.ini b/tests/wpt/metadata/touch-events/touch-retargeting.html.ini
index 4fe791f6296..5974175fdf0 100644
--- a/tests/wpt/metadata/touch-events/touch-retargeting.html.ini
+++ b/tests/wpt/metadata/touch-events/touch-retargeting.html.ini
@@ -1,5 +1,6 @@
[touch-retargeting.html]
type: testharness
+ expected: ERROR
[TouchEvent Retargeting Tests]
expected: FAIL
diff --git a/tests/wpt/metadata/wasm/serialization/module/nested-worker-success.any.js.ini b/tests/wpt/metadata/wasm/serialization/module/nested-worker-success.any.js.ini
index c5630c0fce9..d92318b2c32 100644
--- a/tests/wpt/metadata/wasm/serialization/module/nested-worker-success.any.js.ini
+++ b/tests/wpt/metadata/wasm/serialization/module/nested-worker-success.any.js.ini
@@ -1,4 +1,5 @@
[nested-worker-success.any.sharedworker.html]
+ expected: ERROR
[nested-worker-success]
expected: FAIL
diff --git a/tests/wpt/metadata/wasm/webapi/body.any.js.ini b/tests/wpt/metadata/wasm/webapi/body.any.js.ini
index 57154b6e717..26214cdd87a 100644
--- a/tests/wpt/metadata/wasm/webapi/body.any.js.ini
+++ b/tests/wpt/metadata/wasm/webapi/body.any.js.ini
@@ -27,11 +27,13 @@
[body.any.serviceworker.html]
+ expected: ERROR
[body]
expected: FAIL
[body.any.sharedworker.html]
+ expected: ERROR
[body]
expected: FAIL
diff --git a/tests/wpt/metadata/wasm/webapi/contenttype.any.js.ini b/tests/wpt/metadata/wasm/webapi/contenttype.any.js.ini
index 2f8935cc001..4c4d0a3d18b 100644
--- a/tests/wpt/metadata/wasm/webapi/contenttype.any.js.ini
+++ b/tests/wpt/metadata/wasm/webapi/contenttype.any.js.ini
@@ -61,6 +61,7 @@
[contenttype.any.sharedworker.html]
+ expected: ERROR
[contenttype]
expected: FAIL
@@ -128,6 +129,7 @@
[contenttype.any.serviceworker.html]
+ expected: ERROR
[contenttype]
expected: FAIL
diff --git a/tests/wpt/metadata/wasm/webapi/empty-body.any.js.ini b/tests/wpt/metadata/wasm/webapi/empty-body.any.js.ini
index b28e1071f90..95576eeac19 100644
--- a/tests/wpt/metadata/wasm/webapi/empty-body.any.js.ini
+++ b/tests/wpt/metadata/wasm/webapi/empty-body.any.js.ini
@@ -25,6 +25,7 @@
[empty-body.any.sharedworker.html]
+ expected: ERROR
[empty-body]
expected: FAIL
@@ -56,6 +57,7 @@
[empty-body.any.serviceworker.html]
+ expected: ERROR
[empty-body]
expected: FAIL
diff --git a/tests/wpt/metadata/wasm/webapi/instantiateStreaming-bad-imports.any.js.ini b/tests/wpt/metadata/wasm/webapi/instantiateStreaming-bad-imports.any.js.ini
index d8787f016aa..364f9f57c4e 100644
--- a/tests/wpt/metadata/wasm/webapi/instantiateStreaming-bad-imports.any.js.ini
+++ b/tests/wpt/metadata/wasm/webapi/instantiateStreaming-bad-imports.any.js.ini
@@ -1,4 +1,5 @@
[instantiateStreaming-bad-imports.any.serviceworker.html]
+ expected: ERROR
[instantiateStreaming-bad-imports]
expected: FAIL
@@ -380,6 +381,7 @@
[instantiateStreaming-bad-imports.any.sharedworker.html]
+ expected: ERROR
[instantiateStreaming-bad-imports]
expected: FAIL
diff --git a/tests/wpt/metadata/wasm/webapi/instantiateStreaming.any.js.ini b/tests/wpt/metadata/wasm/webapi/instantiateStreaming.any.js.ini
index 112f5872ec6..5f21c19600f 100644
--- a/tests/wpt/metadata/wasm/webapi/instantiateStreaming.any.js.ini
+++ b/tests/wpt/metadata/wasm/webapi/instantiateStreaming.any.js.ini
@@ -28,11 +28,13 @@
[instantiateStreaming.any.serviceworker.html]
+ expected: ERROR
[instantiateStreaming]
expected: FAIL
[instantiateStreaming.any.sharedworker.html]
+ expected: ERROR
[instantiateStreaming]
expected: FAIL
diff --git a/tests/wpt/metadata/wasm/webapi/invalid-args.any.js.ini b/tests/wpt/metadata/wasm/webapi/invalid-args.any.js.ini
index 6cfc3265ac1..c6dd3591e4b 100644
--- a/tests/wpt/metadata/wasm/webapi/invalid-args.any.js.ini
+++ b/tests/wpt/metadata/wasm/webapi/invalid-args.any.js.ini
@@ -1,9 +1,11 @@
[invalid-args.any.serviceworker.html]
+ expected: ERROR
[invalid-args]
expected: FAIL
[invalid-args.any.sharedworker.html]
+ expected: ERROR
[invalid-args]
expected: FAIL
diff --git a/tests/wpt/metadata/wasm/webapi/invalid-code.any.js.ini b/tests/wpt/metadata/wasm/webapi/invalid-code.any.js.ini
index e86cbf84cb1..5eb0c5ef0f4 100644
--- a/tests/wpt/metadata/wasm/webapi/invalid-code.any.js.ini
+++ b/tests/wpt/metadata/wasm/webapi/invalid-code.any.js.ini
@@ -1,4 +1,5 @@
[invalid-code.any.sharedworker.html]
+ expected: ERROR
[invalid-code]
expected: FAIL
@@ -12,6 +13,7 @@
[invalid-code.any.serviceworker.html]
+ expected: ERROR
[invalid-code]
expected: FAIL
diff --git a/tests/wpt/metadata/wasm/webapi/origin.sub.any.js.ini b/tests/wpt/metadata/wasm/webapi/origin.sub.any.js.ini
index f3f8d8dba63..9382317596e 100644
--- a/tests/wpt/metadata/wasm/webapi/origin.sub.any.js.ini
+++ b/tests/wpt/metadata/wasm/webapi/origin.sub.any.js.ini
@@ -1,4 +1,5 @@
[origin.sub.any.sharedworker.html]
+ expected: ERROR
[origin]
expected: FAIL
@@ -32,6 +33,7 @@
[origin.sub.any.serviceworker.html]
+ expected: ERROR
[origin]
expected: FAIL
diff --git a/tests/wpt/metadata/wasm/webapi/rejected-arg.any.js.ini b/tests/wpt/metadata/wasm/webapi/rejected-arg.any.js.ini
index b320dbfd596..6130d73831d 100644
--- a/tests/wpt/metadata/wasm/webapi/rejected-arg.any.js.ini
+++ b/tests/wpt/metadata/wasm/webapi/rejected-arg.any.js.ini
@@ -1,4 +1,5 @@
[rejected-arg.any.sharedworker.html]
+ expected: ERROR
[rejected-arg]
expected: FAIL
@@ -12,6 +13,7 @@
[rejected-arg.any.serviceworker.html]
+ expected: ERROR
[rejected-arg]
expected: FAIL
diff --git a/tests/wpt/metadata/wasm/webapi/status.any.js.ini b/tests/wpt/metadata/wasm/webapi/status.any.js.ini
index da0cf6592e5..f0cd9279b42 100644
--- a/tests/wpt/metadata/wasm/webapi/status.any.js.ini
+++ b/tests/wpt/metadata/wasm/webapi/status.any.js.ini
@@ -49,11 +49,13 @@
[status.any.serviceworker.html]
+ expected: ERROR
[status]
expected: FAIL
[status.any.sharedworker.html]
+ expected: ERROR
[status]
expected: FAIL
diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-messageport.https.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-messageport.https.html.ini
index b43548d64fe..9326151180f 100644
--- a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-messageport.https.html.ini
+++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-messageport.https.html.ini
@@ -1,4 +1,5 @@
[audioworklet-messageport.https.html]
+ expected: ERROR
[\n Test MessagePort in AudioWorkletNode and AudioWorkletProcessor\n ]
expected: FAIL
diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-postmessage-sharedarraybuffer.https.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-postmessage-sharedarraybuffer.https.html.ini
index 476a2e87036..61640dcdaa9 100644
--- a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-postmessage-sharedarraybuffer.https.html.ini
+++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-postmessage-sharedarraybuffer.https.html.ini
@@ -1,4 +1,5 @@
[audioworklet-postmessage-sharedarraybuffer.https.html]
+ expected: ERROR
[\n Test passing SharedArrayBuffer to an AudioWorklet\n ]
expected: FAIL
diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletglobalscope-sample-rate.https.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletglobalscope-sample-rate.https.html.ini
index 303611ce2b7..2fb53d16266 100644
--- a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletglobalscope-sample-rate.https.html.ini
+++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletglobalscope-sample-rate.https.html.ini
@@ -1,4 +1,5 @@
[audioworkletglobalscope-sample-rate.https.html]
+ expected: ERROR
[\n Test sampleRate in AudioWorkletGlobalScope\n ]
expected: FAIL
diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletglobalscope-timing-info.https.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletglobalscope-timing-info.https.html.ini
index f11ad0f4626..5caa2af62cf 100644
--- a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletglobalscope-timing-info.https.html.ini
+++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletglobalscope-timing-info.https.html.ini
@@ -1,4 +1,5 @@
[audioworkletglobalscope-timing-info.https.html]
+ expected: ERROR
[\n Test currentTime and currentFrame in AudioWorkletGlobalScope\n ]
expected: FAIL
diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-onerror.https.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-onerror.https.html.ini
index f3faec26c7d..bf50e77e178 100644
--- a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-onerror.https.html.ini
+++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-onerror.https.html.ini
@@ -1,4 +1,5 @@
[audioworkletnode-onerror.https.html]
+ expected: ERROR
[\n Test onprocessorerror handler in AudioWorkletNode\n ]
expected: FAIL
diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-output-channel-count.https.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-output-channel-count.https.html.ini
index d5a0839d5dd..eef61814986 100644
--- a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-output-channel-count.https.html.ini
+++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-output-channel-count.https.html.ini
@@ -1,3 +1,5 @@
[audioworkletnode-output-channel-count.https.html]
+ expected: ERROR
[\n Test the construction of AudioWorkletNode with real-time context\n ]
expected: FAIL
+
diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/cors-check.https.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/cors-check.https.html.ini
index 7e7af0a06f4..194986e2416 100644
--- a/tests/wpt/metadata/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/cors-check.https.html.ini
+++ b/tests/wpt/metadata/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/cors-check.https.html.ini
@@ -1,4 +1,5 @@
[cors-check.https.html]
+ expected: ERROR
[\n Test if MediaElementAudioSourceNode works for cross-origin redirects with\n "cors" request mode.\n ]
expected: FAIL
diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/no-cors.https.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/no-cors.https.html.ini
index 7d508e62fbe..7c733edc836 100644
--- a/tests/wpt/metadata/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/no-cors.https.html.ini
+++ b/tests/wpt/metadata/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/no-cors.https.html.ini
@@ -1,4 +1,5 @@
[no-cors.https.html]
+ expected: ERROR
[\n Test if MediaElementAudioSourceNode works for cross-origin redirects with\n "no-cors" request mode.\n ]
expected: FAIL
diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-mediastreamaudiosourcenode-interface/mediastreamaudiosourcenode-ctor.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-mediastreamaudiosourcenode-interface/mediastreamaudiosourcenode-ctor.html.ini
index 581273c3391..701f6dc4718 100644
--- a/tests/wpt/metadata/webaudio/the-audio-api/the-mediastreamaudiosourcenode-interface/mediastreamaudiosourcenode-ctor.html.ini
+++ b/tests/wpt/metadata/webaudio/the-audio-api/the-mediastreamaudiosourcenode-interface/mediastreamaudiosourcenode-ctor.html.ini
@@ -1,4 +1,5 @@
[mediastreamaudiosourcenode-ctor.html]
+ expected: ERROR
[MediaStreamAudioSourceNode]
expected: FAIL
diff --git a/tests/wpt/metadata/webmessaging/with-ports/018.html.ini b/tests/wpt/metadata/webmessaging/with-ports/018.html.ini
deleted file mode 100644
index 663a1f8fa30..00000000000
--- a/tests/wpt/metadata/webmessaging/with-ports/018.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[018.html]
- expected: TIMEOUT
- [origin of the script that invoked the method, javascript:]
- expected: TIMEOUT
-
diff --git a/tests/wpt/metadata/webmessaging/without-ports/017.html.ini b/tests/wpt/metadata/webmessaging/without-ports/017.html.ini
deleted file mode 100644
index 064cf47545b..00000000000
--- a/tests/wpt/metadata/webmessaging/without-ports/017.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[017.html]
- expected: TIMEOUT
- [origin of the script that invoked the method, about:blank]
- expected: TIMEOUT
-
diff --git a/tests/wpt/metadata/websockets/basic-auth.any.js.ini b/tests/wpt/metadata/websockets/basic-auth.any.js.ini
index d6f36dd4c7d..da555fb8fe8 100644
--- a/tests/wpt/metadata/websockets/basic-auth.any.js.ini
+++ b/tests/wpt/metadata/websockets/basic-auth.any.js.ini
@@ -6,7 +6,9 @@
[basic-auth]
expected: FAIL
+
[basic-auth.any.serviceworker.html]
+ expected: ERROR
[Untitled]
expected: FAIL
@@ -15,8 +17,14 @@
[basic-auth.any.sharedworker.html]
+ expected: ERROR
[Untitled]
expected: FAIL
[basic-auth]
expected: FAIL
+
+
+[basic-auth.any.worker.html]
+
+[basic-auth.any.html]
diff --git a/tests/wpt/metadata/websockets/bufferedAmount-unchanged-by-sync-xhr.any.js.ini b/tests/wpt/metadata/websockets/bufferedAmount-unchanged-by-sync-xhr.any.js.ini
index 729d6ea4fdc..8d171599c15 100644
--- a/tests/wpt/metadata/websockets/bufferedAmount-unchanged-by-sync-xhr.any.js.ini
+++ b/tests/wpt/metadata/websockets/bufferedAmount-unchanged-by-sync-xhr.any.js.ini
@@ -3,6 +3,7 @@
[bufferedAmount-unchanged-by-sync-xhr.any.worker.html]
[bufferedAmount-unchanged-by-sync-xhr.any.sharedworker.html]
+ expected: ERROR
[bufferedAmount-unchanged-by-sync-xhr]
expected: FAIL
diff --git a/tests/wpt/metadata/websockets/stream-tentative/abort.any.js.ini b/tests/wpt/metadata/websockets/stream-tentative/abort.any.js.ini
index 216377372b0..9c526484c62 100644
--- a/tests/wpt/metadata/websockets/stream-tentative/abort.any.js.ini
+++ b/tests/wpt/metadata/websockets/stream-tentative/abort.any.js.ini
@@ -10,6 +10,7 @@
[abort.any.sharedworker.html]
+ expected: ERROR
[abort]
expected: FAIL
@@ -26,6 +27,7 @@
[abort.any.serviceworker.html]
+ expected: ERROR
[abort]
expected: FAIL
diff --git a/tests/wpt/metadata/websockets/stream-tentative/backpressure-receive.any.js.ini b/tests/wpt/metadata/websockets/stream-tentative/backpressure-receive.any.js.ini
index ab6827de7bc..c76d95e42f1 100644
--- a/tests/wpt/metadata/websockets/stream-tentative/backpressure-receive.any.js.ini
+++ b/tests/wpt/metadata/websockets/stream-tentative/backpressure-receive.any.js.ini
@@ -9,11 +9,13 @@
[backpressure-receive.any.serviceworker.html]
+ expected: ERROR
[backpressure-receive]
expected: FAIL
[backpressure-receive.any.sharedworker.html]
+ expected: ERROR
[backpressure-receive]
expected: FAIL
diff --git a/tests/wpt/metadata/websockets/stream-tentative/backpressure-send.any.js.ini b/tests/wpt/metadata/websockets/stream-tentative/backpressure-send.any.js.ini
index 21974da3f60..5171892af4d 100644
--- a/tests/wpt/metadata/websockets/stream-tentative/backpressure-send.any.js.ini
+++ b/tests/wpt/metadata/websockets/stream-tentative/backpressure-send.any.js.ini
@@ -1,9 +1,11 @@
[backpressure-send.any.serviceworker.html]
+ expected: ERROR
[backpressure-send]
expected: FAIL
[backpressure-send.any.sharedworker.html]
+ expected: ERROR
[backpressure-send]
expected: FAIL
diff --git a/tests/wpt/metadata/websockets/stream-tentative/close.any.js.ini b/tests/wpt/metadata/websockets/stream-tentative/close.any.js.ini
index 111c90b4779..9dff4269d37 100644
--- a/tests/wpt/metadata/websockets/stream-tentative/close.any.js.ini
+++ b/tests/wpt/metadata/websockets/stream-tentative/close.any.js.ini
@@ -171,11 +171,13 @@
[close.any.serviceworker.html]
+ expected: ERROR
[close]
expected: FAIL
[close.any.sharedworker.html]
+ expected: ERROR
[close]
expected: FAIL
diff --git a/tests/wpt/metadata/websockets/stream-tentative/constructor.any.js.ini b/tests/wpt/metadata/websockets/stream-tentative/constructor.any.js.ini
index 97e6ffb6ebc..1d88c46b1a6 100644
--- a/tests/wpt/metadata/websockets/stream-tentative/constructor.any.js.ini
+++ b/tests/wpt/metadata/websockets/stream-tentative/constructor.any.js.ini
@@ -25,6 +25,7 @@
[constructor.any.sharedworker.html]
+ expected: ERROR
[constructor]
expected: FAIL
@@ -56,6 +57,7 @@
[constructor.any.serviceworker.html]
+ expected: ERROR
[constructor]
expected: FAIL
diff --git a/tests/wpt/metadata/websockets/unload-a-document/002.html.ini b/tests/wpt/metadata/websockets/unload-a-document/002.html.ini
deleted file mode 100644
index 32213b83293..00000000000
--- a/tests/wpt/metadata/websockets/unload-a-document/002.html.ini
+++ /dev/null
@@ -1,11 +0,0 @@
-[002.html]
- type: testharness
- [WebSockets: navigating top-level browsing context with closed websocket]
- expected: FAIL
-
-
-[002.html?wss]
- type: testharness
- [WebSockets: navigating top-level browsing context with closed websocket]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/websockets/unload-a-document/004.html.ini b/tests/wpt/metadata/websockets/unload-a-document/004.html.ini
deleted file mode 100644
index 66180a29004..00000000000
--- a/tests/wpt/metadata/websockets/unload-a-document/004.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[004.html]
- type: testharness
- [WebSockets: navigating nested browsing context with closed websocket]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/workers/SharedWorker-MessageEvent-source.any.js.ini b/tests/wpt/metadata/workers/SharedWorker-MessageEvent-source.any.js.ini
index 772cdfbaf3b..d4097d8fced 100644
--- a/tests/wpt/metadata/workers/SharedWorker-MessageEvent-source.any.js.ini
+++ b/tests/wpt/metadata/workers/SharedWorker-MessageEvent-source.any.js.ini
@@ -1,4 +1,5 @@
[SharedWorker-MessageEvent-source.any.sharedworker.html]
+ expected: ERROR
[SharedWorker-MessageEvent-source]
expected: FAIL
diff --git a/tests/wpt/metadata/workers/SharedWorker-replace-EventHandler.any.js.ini b/tests/wpt/metadata/workers/SharedWorker-replace-EventHandler.any.js.ini
index fe70242a9f8..7f83ac5a8d6 100644
--- a/tests/wpt/metadata/workers/SharedWorker-replace-EventHandler.any.js.ini
+++ b/tests/wpt/metadata/workers/SharedWorker-replace-EventHandler.any.js.ini
@@ -1,4 +1,5 @@
[SharedWorker-replace-EventHandler.any.sharedworker.html]
+ expected: ERROR
[SharedWorker-replace-EventHandler]
expected: FAIL
diff --git a/tests/wpt/metadata/workers/Worker-base64.any.js.ini b/tests/wpt/metadata/workers/Worker-base64.any.js.ini
index 24bfcb85a47..461a24a085e 100644
--- a/tests/wpt/metadata/workers/Worker-base64.any.js.ini
+++ b/tests/wpt/metadata/workers/Worker-base64.any.js.ini
@@ -1,11 +1,13 @@
[Worker-base64.any.worker.html]
[Worker-base64.any.serviceworker.html]
+ expected: ERROR
[Worker-base64]
expected: FAIL
[Worker-base64.any.sharedworker.html]
+ expected: ERROR
[Worker-base64]
expected: FAIL
diff --git a/tests/wpt/metadata/workers/Worker-constructor-proto.any.js.ini b/tests/wpt/metadata/workers/Worker-constructor-proto.any.js.ini
index 5ad0eeec097..679b0b60c8b 100644
--- a/tests/wpt/metadata/workers/Worker-constructor-proto.any.js.ini
+++ b/tests/wpt/metadata/workers/Worker-constructor-proto.any.js.ini
@@ -1,4 +1,5 @@
[Worker-constructor-proto.any.sharedworker.html]
+ expected: ERROR
[Worker-constructor-proto]
expected: FAIL
@@ -9,6 +10,7 @@
[Worker-constructor-proto.any.serviceworker.html]
+ expected: ERROR
[Worker-constructor-proto]
expected: FAIL
diff --git a/tests/wpt/metadata/workers/Worker-custom-event.any.js.ini b/tests/wpt/metadata/workers/Worker-custom-event.any.js.ini
index c9c023af197..1a006e79b25 100644
--- a/tests/wpt/metadata/workers/Worker-custom-event.any.js.ini
+++ b/tests/wpt/metadata/workers/Worker-custom-event.any.js.ini
@@ -1,11 +1,13 @@
[Worker-custom-event.any.worker.html]
[Worker-custom-event.any.sharedworker.html]
+ expected: ERROR
[Worker-custom-event]
expected: FAIL
[Worker-custom-event.any.serviceworker.html]
+ expected: ERROR
[Worker-custom-event]
expected: FAIL
diff --git a/tests/wpt/metadata/workers/Worker-location.sub.any.js.ini b/tests/wpt/metadata/workers/Worker-location.sub.any.js.ini
index d9d6a40c57d..f89806c9bdb 100644
--- a/tests/wpt/metadata/workers/Worker-location.sub.any.js.ini
+++ b/tests/wpt/metadata/workers/Worker-location.sub.any.js.ini
@@ -1,4 +1,5 @@
[Worker-location.sub.any.sharedworker.html]
+ expected: ERROR
[Worker-location]
expected: FAIL
diff --git a/tests/wpt/metadata/workers/Worker-replace-event-handler.any.js.ini b/tests/wpt/metadata/workers/Worker-replace-event-handler.any.js.ini
index 6775bf5e610..cc0af1dd87d 100644
--- a/tests/wpt/metadata/workers/Worker-replace-event-handler.any.js.ini
+++ b/tests/wpt/metadata/workers/Worker-replace-event-handler.any.js.ini
@@ -1,4 +1,5 @@
[Worker-replace-event-handler.any.sharedworker.html]
+ expected: ERROR
[Worker-replace-event-handler]
expected: FAIL
@@ -6,6 +7,7 @@
[Worker-replace-event-handler.any.worker.html]
[Worker-replace-event-handler.any.serviceworker.html]
+ expected: ERROR
[Worker-replace-event-handler]
expected: FAIL
diff --git a/tests/wpt/metadata/workers/Worker-replace-global-constructor.any.js.ini b/tests/wpt/metadata/workers/Worker-replace-global-constructor.any.js.ini
index 7a5e3ec6e9b..7fc7d7d1a58 100644
--- a/tests/wpt/metadata/workers/Worker-replace-global-constructor.any.js.ini
+++ b/tests/wpt/metadata/workers/Worker-replace-global-constructor.any.js.ini
@@ -1,9 +1,11 @@
[Worker-replace-global-constructor.any.serviceworker.html]
+ expected: ERROR
[Worker-replace-global-constructor]
expected: FAIL
[Worker-replace-global-constructor.any.sharedworker.html]
+ expected: ERROR
[Worker-replace-global-constructor]
expected: FAIL
diff --git a/tests/wpt/metadata/workers/Worker-replace-self.any.js.ini b/tests/wpt/metadata/workers/Worker-replace-self.any.js.ini
index c86c0f32bbe..e68d5d861b0 100644
--- a/tests/wpt/metadata/workers/Worker-replace-self.any.js.ini
+++ b/tests/wpt/metadata/workers/Worker-replace-self.any.js.ini
@@ -1,4 +1,5 @@
[Worker-replace-self.any.sharedworker.html]
+ expected: ERROR
[Worker-replace-self]
expected: FAIL
@@ -6,6 +7,7 @@
[Worker-replace-self.any.worker.html]
[Worker-replace-self.any.serviceworker.html]
+ expected: ERROR
[Worker-replace-self]
expected: FAIL
diff --git a/tests/wpt/metadata/workers/WorkerGlobalScope-close.html.ini b/tests/wpt/metadata/workers/WorkerGlobalScope-close.html.ini
new file mode 100644
index 00000000000..fe8654e447c
--- /dev/null
+++ b/tests/wpt/metadata/workers/WorkerGlobalScope-close.html.ini
@@ -0,0 +1,4 @@
+[WorkerGlobalScope-close.html]
+ [Test sending a message after closing.]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/workers/WorkerNavigator-hardware-concurrency.any.js.ini b/tests/wpt/metadata/workers/WorkerNavigator-hardware-concurrency.any.js.ini
index 25d0a3f43b2..b7d71a85ff9 100644
--- a/tests/wpt/metadata/workers/WorkerNavigator-hardware-concurrency.any.js.ini
+++ b/tests/wpt/metadata/workers/WorkerNavigator-hardware-concurrency.any.js.ini
@@ -1,4 +1,5 @@
[WorkerNavigator-hardware-concurrency.any.sharedworker.html]
+ expected: ERROR
[WorkerNavigator-hardware-concurrency]
expected: FAIL
@@ -9,6 +10,7 @@
[WorkerNavigator-hardware-concurrency.any.serviceworker.html]
+ expected: ERROR
[WorkerNavigator-hardware-concurrency]
expected: FAIL
diff --git a/tests/wpt/metadata/workers/WorkerNavigator.any.js.ini b/tests/wpt/metadata/workers/WorkerNavigator.any.js.ini
index 65fce8b8e92..631d36c5cdd 100644
--- a/tests/wpt/metadata/workers/WorkerNavigator.any.js.ini
+++ b/tests/wpt/metadata/workers/WorkerNavigator.any.js.ini
@@ -4,11 +4,13 @@
[WorkerNavigator.any.sharedworker.html]
+ expected: ERROR
[WorkerNavigator]
expected: FAIL
[WorkerNavigator.any.serviceworker.html]
+ expected: ERROR
[WorkerNavigator]
expected: FAIL
diff --git a/tests/wpt/metadata/workers/baseurl/alpha/import-in-moduleworker.html.ini b/tests/wpt/metadata/workers/baseurl/alpha/import-in-moduleworker.html.ini
index bf2a1d61bab..bfd4d6dd2d6 100644
--- a/tests/wpt/metadata/workers/baseurl/alpha/import-in-moduleworker.html.ini
+++ b/tests/wpt/metadata/workers/baseurl/alpha/import-in-moduleworker.html.ini
@@ -1,4 +1,5 @@
[import-in-moduleworker.html]
+ expected: ERROR
[Base URL in module dedicated workers: import]
expected: FAIL
diff --git a/tests/wpt/metadata/workers/baseurl/alpha/importScripts-in-sharedworker.html.ini b/tests/wpt/metadata/workers/baseurl/alpha/importScripts-in-sharedworker.html.ini
index 59ab9326269..6891972984c 100644
--- a/tests/wpt/metadata/workers/baseurl/alpha/importScripts-in-sharedworker.html.ini
+++ b/tests/wpt/metadata/workers/baseurl/alpha/importScripts-in-sharedworker.html.ini
@@ -1,4 +1,5 @@
[importScripts-in-sharedworker.html]
+ expected: ERROR
[Base URL in classic shared workers: importScripts]
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 333edb3a26e..650c91da4a6 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,4 +1,5 @@
[sharedworker-in-worker.html]
+ expected: ERROR
[Base URL in workers: new SharedWorker()]
expected: FAIL
diff --git a/tests/wpt/metadata/workers/baseurl/alpha/xhr-in-sharedworker.html.ini b/tests/wpt/metadata/workers/baseurl/alpha/xhr-in-sharedworker.html.ini
index 0ef8c8de1a4..2025db5ee90 100644
--- a/tests/wpt/metadata/workers/baseurl/alpha/xhr-in-sharedworker.html.ini
+++ b/tests/wpt/metadata/workers/baseurl/alpha/xhr-in-sharedworker.html.ini
@@ -1,4 +1,5 @@
[xhr-in-sharedworker.html]
+ expected: ERROR
[Base URL in classic shared workers: XHR]
expected: FAIL
diff --git a/tests/wpt/metadata/workers/constructors/Worker/Worker-constructor.html.ini b/tests/wpt/metadata/workers/constructors/Worker/Worker-constructor.html.ini
new file mode 100644
index 00000000000..80f9a4f15b8
--- /dev/null
+++ b/tests/wpt/metadata/workers/constructors/Worker/Worker-constructor.html.ini
@@ -0,0 +1,2 @@
+[Worker-constructor.html]
+ expected: ERROR
diff --git a/tests/wpt/metadata/workers/examples/general.any.js.ini b/tests/wpt/metadata/workers/examples/general.any.js.ini
index 1287e5a3655..981c5011f45 100644
--- a/tests/wpt/metadata/workers/examples/general.any.js.ini
+++ b/tests/wpt/metadata/workers/examples/general.any.js.ini
@@ -1,9 +1,11 @@
[general.any.serviceworker.html]
+ expected: ERROR
[general]
expected: FAIL
[general.any.sharedworker.html]
+ expected: ERROR
[general]
expected: FAIL
diff --git a/tests/wpt/metadata/workers/examples/onconnect.any.js.ini b/tests/wpt/metadata/workers/examples/onconnect.any.js.ini
index 759a398ef7e..751dae97da4 100644
--- a/tests/wpt/metadata/workers/examples/onconnect.any.js.ini
+++ b/tests/wpt/metadata/workers/examples/onconnect.any.js.ini
@@ -1,4 +1,5 @@
[onconnect.any.sharedworker.html]
+ expected: ERROR
[onconnect]
expected: FAIL
diff --git a/tests/wpt/metadata/workers/importscripts_mime.any.js.ini b/tests/wpt/metadata/workers/importscripts_mime.any.js.ini
index 0ee29aaad0b..8591f24ce27 100644
--- a/tests/wpt/metadata/workers/importscripts_mime.any.js.ini
+++ b/tests/wpt/metadata/workers/importscripts_mime.any.js.ini
@@ -37,11 +37,13 @@
[importscripts_mime.any.sharedworker.html]
+ expected: ERROR
[importscripts_mime]
expected: FAIL
[importscripts_mime.any.serviceworker.html]
+ expected: ERROR
[importscripts_mime]
expected: FAIL
diff --git a/tests/wpt/metadata/workers/interfaces/WorkerGlobalScope/location/redirect-sharedworker.html.ini b/tests/wpt/metadata/workers/interfaces/WorkerGlobalScope/location/redirect-sharedworker.html.ini
index 3795f347c73..2ad0196c322 100644
--- a/tests/wpt/metadata/workers/interfaces/WorkerGlobalScope/location/redirect-sharedworker.html.ini
+++ b/tests/wpt/metadata/workers/interfaces/WorkerGlobalScope/location/redirect-sharedworker.html.ini
@@ -1,4 +1,5 @@
[redirect-sharedworker.html]
+ expected: ERROR
[WorkerLocation with redirects: classic shared workers]
expected: FAIL
diff --git a/tests/wpt/metadata/workers/semantics/interface-objects/003.any.js.ini b/tests/wpt/metadata/workers/semantics/interface-objects/003.any.js.ini
index 66d358167ba..bd64146590c 100644
--- a/tests/wpt/metadata/workers/semantics/interface-objects/003.any.js.ini
+++ b/tests/wpt/metadata/workers/semantics/interface-objects/003.any.js.ini
@@ -1,4 +1,5 @@
[003.any.sharedworker.html]
+ expected: ERROR
[003]
expected: FAIL
diff --git a/tests/wpt/metadata/workers/semantics/interface-objects/004.any.js.ini b/tests/wpt/metadata/workers/semantics/interface-objects/004.any.js.ini
index 00de8ef15b1..21ac10e807d 100644
--- a/tests/wpt/metadata/workers/semantics/interface-objects/004.any.js.ini
+++ b/tests/wpt/metadata/workers/semantics/interface-objects/004.any.js.ini
@@ -1,4 +1,5 @@
[004.any.sharedworker.html]
+ expected: ERROR
[004]
expected: FAIL
diff --git a/tests/wpt/metadata/xhr/idlharness.any.js.ini b/tests/wpt/metadata/xhr/idlharness.any.js.ini
index 0093adff9e3..87688415694 100644
--- a/tests/wpt/metadata/xhr/idlharness.any.js.ini
+++ b/tests/wpt/metadata/xhr/idlharness.any.js.ini
@@ -1,4 +1,9 @@
[idlharness.any.sharedworker.html]
+ expected: ERROR
[idlharness]
expected: FAIL
+
+[idlharness.any.html]
+
+[idlharness.any.worker.html]
diff --git a/tests/wpt/metadata/xhr/open-url-redirected-sharedworker-origin.htm.ini b/tests/wpt/metadata/xhr/open-url-redirected-sharedworker-origin.htm.ini
index e9d15c79bf4..2b3d973b09d 100644
--- a/tests/wpt/metadata/xhr/open-url-redirected-sharedworker-origin.htm.ini
+++ b/tests/wpt/metadata/xhr/open-url-redirected-sharedworker-origin.htm.ini
@@ -1,4 +1,5 @@
[open-url-redirected-sharedworker-origin.htm]
+ expected: ERROR
[XMLHttpRequest: redirected classic shared worker scripts, origin and referrer]
expected: FAIL
diff --git a/tests/wpt/metadata/xhr/responsexml-document-properties.htm.ini b/tests/wpt/metadata/xhr/responsexml-document-properties.htm.ini
index 38c257cee08..7a64786c665 100644
--- a/tests/wpt/metadata/xhr/responsexml-document-properties.htm.ini
+++ b/tests/wpt/metadata/xhr/responsexml-document-properties.htm.ini
@@ -1,5 +1,6 @@
[responsexml-document-properties.htm]
type: testharness
+ expected: ERROR
[domain]
expected: FAIL
diff --git a/tests/wpt/metadata/xhr/send-data-readablestream.any.js.ini b/tests/wpt/metadata/xhr/send-data-readablestream.any.js.ini
index 65a79f001ba..35b06661a34 100644
--- a/tests/wpt/metadata/xhr/send-data-readablestream.any.js.ini
+++ b/tests/wpt/metadata/xhr/send-data-readablestream.any.js.ini
@@ -21,6 +21,7 @@
[send-data-readablestream.any.sharedworker.html]
+ expected: ERROR
[send-data-readablestream]
expected: FAIL
diff --git a/tests/wpt/metadata/xhr/sync-no-timeout.any.js.ini b/tests/wpt/metadata/xhr/sync-no-timeout.any.js.ini
index ecff1270f56..43bbd78428a 100644
--- a/tests/wpt/metadata/xhr/sync-no-timeout.any.js.ini
+++ b/tests/wpt/metadata/xhr/sync-no-timeout.any.js.ini
@@ -1,7 +1,12 @@
[sync-no-timeout.any.sharedworker.html]
+ expected: ERROR
[Untitled]
expected: FAIL
[sync-no-timeout]
expected: FAIL
+
+[sync-no-timeout.any.html]
+
+[sync-no-timeout.any.worker.html]
diff --git a/tests/wpt/mozilla/meta/css/transition_calc_implicit.html.ini b/tests/wpt/mozilla/meta/css/transition_calc_implicit.html.ini
new file mode 100644
index 00000000000..dbea4f293ad
--- /dev/null
+++ b/tests/wpt/mozilla/meta/css/transition_calc_implicit.html.ini
@@ -0,0 +1,2 @@
+[transition_calc_implicit.html]
+ expected: TIMEOUT
diff --git a/tests/wpt/mozilla/meta/mozilla/animation-removed-node.html.ini b/tests/wpt/mozilla/meta/mozilla/animation-removed-node.html.ini
index b320af24162..ec6cab9857c 100644
--- a/tests/wpt/mozilla/meta/mozilla/animation-removed-node.html.ini
+++ b/tests/wpt/mozilla/meta/mozilla/animation-removed-node.html.ini
@@ -1,5 +1,6 @@
[animation-removed-node.html]
prefs: [css.animations.testing.enabled:true]
+ expected: ERROR
[animation-removed-node]
expected: FAIL
diff --git a/tests/wpt/mozilla/meta/mozilla/inline-event-listener-panic.html.ini b/tests/wpt/mozilla/meta/mozilla/inline-event-listener-panic.html.ini
new file mode 100644
index 00000000000..d2d530029d9
--- /dev/null
+++ b/tests/wpt/mozilla/meta/mozilla/inline-event-listener-panic.html.ini
@@ -0,0 +1,2 @@
+[inline-event-listener-panic.html]
+ expected: ERROR
diff --git a/tests/wpt/mozilla/meta/mozilla/interfaces.html.ini b/tests/wpt/mozilla/meta/mozilla/interfaces.html.ini
new file mode 100644
index 00000000000..378eade335e
--- /dev/null
+++ b/tests/wpt/mozilla/meta/mozilla/interfaces.html.ini
@@ -0,0 +1,4 @@
+[interfaces.html]
+ [Interfaces exposed on the window]
+ expected: FAIL
+
diff --git a/tests/wpt/mozilla/meta/mozilla/interfaces.worker.js.ini b/tests/wpt/mozilla/meta/mozilla/interfaces.worker.js.ini
new file mode 100644
index 00000000000..701d363381a
--- /dev/null
+++ b/tests/wpt/mozilla/meta/mozilla/interfaces.worker.js.ini
@@ -0,0 +1,4 @@
+[interfaces.worker.html]
+ [interfaces]
+ expected: FAIL
+
diff --git a/tests/wpt/mozilla/meta/mozilla/window_requestAnimationFrame2.html.ini b/tests/wpt/mozilla/meta/mozilla/window_requestAnimationFrame2.html.ini
index 380b6ae1998..be85f58c9b4 100644
--- a/tests/wpt/mozilla/meta/mozilla/window_requestAnimationFrame2.html.ini
+++ b/tests/wpt/mozilla/meta/mozilla/window_requestAnimationFrame2.html.ini
@@ -1,5 +1,6 @@
[window_requestAnimationFrame2.html]
type: testharness
+ expected: ERROR
[Test throwing an error inside requestAnimationFrame callback]
expected: FAIL
diff --git a/tests/wpt/web-platform-tests/CONTRIBUTING.md b/tests/wpt/web-platform-tests/CONTRIBUTING.md
index baa208e30f4..54d963d7adb 100644
--- a/tests/wpt/web-platform-tests/CONTRIBUTING.md
+++ b/tests/wpt/web-platform-tests/CONTRIBUTING.md
@@ -1,4 +1,4 @@
-All contributions are licensed under the terms of the LICENSE.md file.
+All contributions are licensed under the terms of the [3-Clause BSD License](LICENSE.md).
Documentation
-------------
diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbindex_reverse_cursor.any.js b/tests/wpt/web-platform-tests/IndexedDB/idbindex_reverse_cursor.any.js
new file mode 100644
index 00000000000..0b3c767fee1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/IndexedDB/idbindex_reverse_cursor.any.js
@@ -0,0 +1,60 @@
+// META: title=Reverse Cursor Validity
+// META: script=support-promises.js
+
+async function iterateAndReturnAllCursorResult(testCase, cursor) {
+ return new Promise((resolve, reject) => {
+ let results = [];
+ cursor.onsuccess = testCase.step_func(function(e) {
+ let cursor = e.target.result;
+ if (!cursor) {
+ resolve(results);
+ return;
+ }
+ results.push(cursor.value);
+ cursor.continue();
+ });
+ cursor.onerror = reject;
+ });
+}
+
+promise_test(async testCase => {
+ const db = await createDatabase(testCase, db => {
+ db.createObjectStore('objectStore', {keyPath: 'key'})
+ .createIndex('index', 'indexedOn');
+ });
+ const txn1 = db.transaction(['objectStore'], 'readwrite');
+ txn1.objectStore('objectStore').add({'key': 'firstItem', 'indexedOn': 3});
+ const txn2 = db.transaction(['objectStore'], 'readwrite');
+ txn2.objectStore('objectStore').put({'key': 'firstItem', 'indexedOn': -1});
+ const txn3= db.transaction(['objectStore'], 'readwrite');
+ txn3.objectStore('objectStore').add({'key': 'secondItem', 'indexedOn': 2});
+
+ const txn4 = db.transaction(['objectStore'], 'readonly');
+ cursor = txn4.objectStore('objectStore').index('index').openCursor(IDBKeyRange.bound(0, 10), "prev");
+ let results = await iterateAndReturnAllCursorResult(testCase, cursor);
+
+ assert_equals(results.length, 1);
+
+ await promiseForTransaction(testCase, txn4);
+ db.close();
+}, 'Reverse cursor sees update from separate transactions.');
+
+promise_test(async testCase => {
+ const db = await createDatabase(testCase, db => {
+ db.createObjectStore('objectStore', {keyPath: 'key'})
+ .createIndex('index', 'indexedOn');
+ });
+ const txn = db.transaction(['objectStore'], 'readwrite');
+ txn.objectStore('objectStore').add({'key': '1', 'indexedOn': 2});
+ txn.objectStore('objectStore').put({'key': '1', 'indexedOn': -1});
+ txn.objectStore('objectStore').add({'key': '2', 'indexedOn': 1});
+
+ const txn2 = db.transaction(['objectStore'], 'readonly');
+ cursor = txn2.objectStore('objectStore').index('index').openCursor(IDBKeyRange.bound(0, 10), "prev");
+ let results = await iterateAndReturnAllCursorResult(testCase, cursor);
+
+ assert_equals(1, results.length);
+
+ await promiseForTransaction(testCase, txn2);
+ db.close();
+}, 'Reverse cursor sees in-transaction update.');
diff --git a/tests/wpt/web-platform-tests/README.md b/tests/wpt/web-platform-tests/README.md
index 320176c40ce..e3ee8551ff4 100644
--- a/tests/wpt/web-platform-tests/README.md
+++ b/tests/wpt/web-platform-tests/README.md
@@ -20,9 +20,9 @@ The most important sources of information and activity are:
- [web-platform-tests.org](https://web-platform-tests.org): the documentation
website; details how to set up the project, how to write tests, how to give
and receive peer review, how to serve as an administrator, and more
-- [web-platform-tests.live](http://web-platform-tests.live): a public
- deployment of the test suite, allowing anyone to run the tests by visiting
- from an Internet-enabled browser of their choice
+- [wpt.live](http://wpt.live): a public deployment of the test suite,
+ allowing anyone to run the tests by visiting from an
+ Internet-enabled browser of their choice
- [wpt.fyi](https://wpt.fyi): an archive of test results collected from an
array of web browsers on a regular basis
- [Real-time chat room](http://irc.w3.org/?channels=testing): the
@@ -227,11 +227,9 @@ Contributing
Save the Web, Write Some Tests!
-Absolutely everyone is welcome (and even encouraged) to contribute to
-test development, so long as you fulfill the contribution requirements
-detailed in the [Contributing Guidelines][contributing]. No test is
-too small or too simple, especially if it corresponds to something for
-which you've noted an interoperability bug in a browser.
+Absolutely everyone is welcome to contribute to test development. No
+test is too small or too simple, especially if it corresponds to
+something for which you've noted an interoperability bug in a browser.
The way to contribute is just as usual:
@@ -240,9 +238,9 @@ The way to contribute is just as usual:
* Create a branch for your changes:
`git checkout -b topic`.
* Make your changes.
-* Run the lint script described below.
+* Run `./wpt lint` as described above.
* Commit locally and push that to your repo.
-* Send in a pull request based on the above.
+* Create a pull request based on the above.
Issues with web-platform-tests
------------------------------
diff --git a/tests/wpt/web-platform-tests/battery-status/battery-interface-idlharness.https.window.js b/tests/wpt/web-platform-tests/battery-status/idlharness.https.window.js
index b33c82e426c..b33c82e426c 100644
--- a/tests/wpt/web-platform-tests/battery-status/battery-interface-idlharness.https.window.js
+++ b/tests/wpt/web-platform-tests/battery-status/idlharness.https.window.js
diff --git a/tests/wpt/web-platform-tests/client-hints/accept-ch-feature-policy-navigation.https.html b/tests/wpt/web-platform-tests/client-hints/accept-ch-feature-policy-navigation.https.html
new file mode 100644
index 00000000000..dff960d2870
--- /dev/null
+++ b/tests/wpt/web-platform-tests/client-hints/accept-ch-feature-policy-navigation.https.html
@@ -0,0 +1,33 @@
+<html>
+<body>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/get-host-info.sub.js"></script>
+<script src="resources/feature-policy-navigation.js"></script>
+<script>
+(async () => {
+ await test_frame(
+ "HTTPS_REMOTE_ORIGIN",
+ "device-memory=true&dpr=false&viewport-width=false",
+ "",
+ "Client hints loaded on cross-origin iframe request with feature policy.");
+ await test_frame(
+ "HTTPS_ORIGIN",
+ "device-memory=true&dpr=false&viewport-width=true",
+ "",
+ "Client hints loaded on same-origin iframe request with feature policy.");
+ await test_frame(
+ "HTTPS_REMOTE_ORIGIN",
+ "",
+ "",
+ "Iframe trying to set Accept-CH-Lifetime.", "/client-hints/resources/iframe-accept-ch-lifetime.html");
+ await test_frame(
+ "HTTPS_REMOTE_ORIGIN",
+ "device-memory=true&dpr=false&viewport-width=false",
+ "",
+ "Client hints loaded on cross-origin iframe request with feature policy after attempting to set independently.");
+})();
+
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/client-hints/accept-ch-feature-policy-navigation.https.html.headers b/tests/wpt/web-platform-tests/client-hints/accept-ch-feature-policy-navigation.https.html.headers
new file mode 100644
index 00000000000..f9595a794d9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/client-hints/accept-ch-feature-policy-navigation.https.html.headers
@@ -0,0 +1,3 @@
+Accept-CH: Device-Memory, DPR, Viewport-Width
+Accept-CH-Lifetime: 1
+Feature-Policy: ch-device-memory *; ch-dpr 'none'; ch-viewport-width 'self'; ch-lang 'none'
diff --git a/tests/wpt/web-platform-tests/client-hints/accept-ch-no-feature-policy-navigation.https.html b/tests/wpt/web-platform-tests/client-hints/accept-ch-no-feature-policy-navigation.https.html
new file mode 100644
index 00000000000..5fb6c22f508
--- /dev/null
+++ b/tests/wpt/web-platform-tests/client-hints/accept-ch-no-feature-policy-navigation.https.html
@@ -0,0 +1,24 @@
+<html>
+<body>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/get-host-info.sub.js"></script>
+<script src="resources/feature-policy-navigation.js"></script>
+<script>
+(async () => {
+ await test_frame(
+ "HTTPS_REMOTE_ORIGIN",
+ "device-memory=false&dpr=false&viewport-width=false",
+ "",
+ "Client hints not loaded on cross-origin iframe request with no feature policy.");
+ await test_frame(
+ "HTTPS_ORIGIN",
+ "device-memory=true&dpr=true&viewport-width=true",
+ "",
+ "Client hints loaded on same-origin iframe request with no feature policy.");
+})();
+
+</script>
+</body>
+</html>
+
diff --git a/tests/wpt/web-platform-tests/client-hints/accept-ch-no-feature-policy-navigation.https.html.headers b/tests/wpt/web-platform-tests/client-hints/accept-ch-no-feature-policy-navigation.https.html.headers
new file mode 100644
index 00000000000..7eb28a000bd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/client-hints/accept-ch-no-feature-policy-navigation.https.html.headers
@@ -0,0 +1,2 @@
+Accept-CH: Device-Memory, DPR, Viewport-Width
+Accept-CH-Lifetime: 1
diff --git a/tests/wpt/web-platform-tests/client-hints/resources/accept_ch_lifetime.html.headers b/tests/wpt/web-platform-tests/client-hints/resources/accept_ch_lifetime.html.headers
index bd90f6eced0..370f9869226 100644
--- a/tests/wpt/web-platform-tests/client-hints/resources/accept_ch_lifetime.html.headers
+++ b/tests/wpt/web-platform-tests/client-hints/resources/accept_ch_lifetime.html.headers
@@ -1,3 +1,3 @@
-Accept-CH: device-memory
+Accept-CH: device-memory, DPR
Accept-CH-Lifetime: 1
Access-Control-Allow-Origin: *
diff --git a/tests/wpt/web-platform-tests/client-hints/resources/expect-client-hints-headers-iframe.py b/tests/wpt/web-platform-tests/client-hints/resources/expect-client-hints-headers-iframe.py
new file mode 100644
index 00000000000..e72d77c47d9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/client-hints/resources/expect-client-hints-headers-iframe.py
@@ -0,0 +1,21 @@
+def main(request, response):
+ """
+ Simple handler that returns an HTML response that passes when the required
+ Client Hints are received as request headers.
+ """
+ values = [ "Device-Memory", "DPR", "Viewport-Width" ]
+
+ result = "PASS"
+ log = ""
+ for value in values:
+ should = (request.GET[value.lower()] == "true")
+ present = request.headers.get(value.lower()) or request.headers.get(value)
+ log += value + " " + str(should) + " " + str(present) +", "
+ if (should and not present) or (not should and present):
+ result = "FAIL " + value + " " + str(should) + " " + str(present)
+ break
+
+ response.headers.append("Access-Control-Allow-Origin", "*")
+ body = "<script>console.log('" + log +"'); window.parent.postMessage('" + result + "', '*');</script>"
+
+ response.content = body
diff --git a/tests/wpt/web-platform-tests/client-hints/resources/feature-policy-navigation.js b/tests/wpt/web-platform-tests/client-hints/resources/feature-policy-navigation.js
new file mode 100644
index 00000000000..4487d9a4473
--- /dev/null
+++ b/tests/wpt/web-platform-tests/client-hints/resources/feature-policy-navigation.js
@@ -0,0 +1,19 @@
+const test_frame = (origin, hints, allow, message, url = "/client-hints/resources/expect-client-hints-headers-iframe.py?") => {
+ promise_test(() => {
+ return new Promise((resolve, reject) => {
+ let frame = document.createElement('iframe');
+ frame.src = get_host_info()[origin] + url + hints;
+ frame.allow = allow;
+ window.addEventListener('message', function(e) {
+ try {
+ assert_equals(typeof e.data, "string");
+ assert_equals(e.data, "PASS");
+ } catch {
+ reject(e.data);
+ }
+ resolve();
+ });
+ document.body.appendChild(frame);
+ });
+ }, message);
+}
diff --git a/tests/wpt/web-platform-tests/client-hints/resources/iframe-accept-ch-lifetime.html b/tests/wpt/web-platform-tests/client-hints/resources/iframe-accept-ch-lifetime.html
new file mode 100644
index 00000000000..693e4f94dcc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/client-hints/resources/iframe-accept-ch-lifetime.html
@@ -0,0 +1,3 @@
+<script>
+ window.parent.postMessage('PASS', '*');
+</script>
diff --git a/tests/wpt/web-platform-tests/client-hints/resources/iframe-accept-ch-lifetime.html.headers b/tests/wpt/web-platform-tests/client-hints/resources/iframe-accept-ch-lifetime.html.headers
new file mode 100644
index 00000000000..8e6dc72dda6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/client-hints/resources/iframe-accept-ch-lifetime.html.headers
@@ -0,0 +1,4 @@
+Accept-CH: DPR
+Accept-CH-Lifetime: 1
+Access-Control-Allow-Origin: *
+
diff --git a/tests/wpt/web-platform-tests/common/security-features/resources/common.sub.js b/tests/wpt/web-platform-tests/common/security-features/resources/common.sub.js
index c974e83b960..b43417b417c 100644
--- a/tests/wpt/web-platform-tests/common/security-features/resources/common.sub.js
+++ b/tests/wpt/web-platform-tests/common/security-features/resources/common.sub.js
@@ -1,5 +1,5 @@
/**
- * @fileoverview Utilities for mixed-content in Web Platform Tests.
+ * @fileoverview Utilities for mixed-content in web-platform-tests.
* @author burnik@google.com (Kristijan Burnik)
* Disclaimer: Some methods of other authors are annotated in the corresponding
* method's JSDoc.
@@ -314,19 +314,6 @@ function createRequestViaElement(tagName, attrs, parentNode) {
return createElement(tagName, attrs, parentNode, true).eventPromise;
}
-/**
- * Creates a new empty iframe and appends it to {@code document.body} .
- * @param {string} name The name and ID of the new iframe.
- * @param {boolean} doBindEvents Whether to bind load and error events.
- * @return {DOMElement} The newly created iframe.
- */
-function createHelperIframe(name, doBindEvents) {
- return createElement("iframe",
- {"name": name, "id": name},
- document.body,
- doBindEvents);
-}
-
function wrapResult(server_data) {
if (typeof(server_data) === "string") {
throw server_data;
@@ -394,7 +381,7 @@ function wrapResult(server_data) {
requestViaAudio 3 - Y -
requestViaDedicatedWorker 2 Y Y Y
requestViaFetch 2 Y Y -
- requestViaForm 3 - Y -
+ requestViaForm 2 - Y -
requestViaIframe 1 Y Y -
requestViaImage 2 Y Y -
requestViaLinkPrefetch 3 - Y -
@@ -583,18 +570,29 @@ function requestViaWorklet(type, url) {
}
/**
- * Sets the href attribute on a navigable DOM element and performs a navigation
- * by clicking it. To avoid navigating away from the current execution
- * context, a target attribute is set to point to a new helper iframe.
- * @param {DOMElement} navigableElement The navigable DOMElement
- * @param {string} url The href for the navigable element.
+ * Creates a navigable element with the name `navigableElementName`
+ * (<a>, <area>, or <form>) under `parentNode`, and
+ * performs a navigation by `trigger()` (e.g. clicking <a>).
+ * To avoid navigating away from the current execution context,
+ * a target attribute is set to point to a new helper iframe.
+ * @param {string} navigableElementName
+ * @param {object} additionalAttributes The attributes of the navigable element.
+ * @param {DOMElement} parentNode
+ * @param {function(DOMElement} trigger A callback called after the navigable
+ * element is inserted and should trigger navigation using the element.
* @return {Promise} The promise for success/error events.
*/
-function requestViaNavigable(navigableElement, url) {
- var iframe = createHelperIframe(guid(), false);
- setAttributes(navigableElement,
- {"href": url,
- "target": iframe.name});
+function requestViaNavigable(navigableElementName, additionalAttributes,
+ parentNode, trigger) {
+ const name = guid();
+
+ const iframe =
+ createElement("iframe", {"name": name, "id": name}, parentNode, false);
+
+ const navigable = createElement(
+ navigableElementName,
+ Object.assign({"target": name}, additionalAttributes),
+ parentNode, false);
const promise =
bindEvents2(window, "message", iframe, "error", window, "error")
@@ -603,7 +601,7 @@ function requestViaNavigable(navigableElement, url) {
return Promise.reject(new Error('Unexpected event.source'));
return event.data;
});
- navigableElement.click();
+ trigger(navigable);
return promise;
}
@@ -614,12 +612,11 @@ function requestViaNavigable(navigableElement, url) {
* @return {Promise} The promise for success/error events.
*/
function requestViaAnchor(url, additionalAttributes) {
- var a = createElement(
+ return requestViaNavigable(
"a",
- Object.assign({"innerHTML": "Link to resource"}, additionalAttributes),
- document.body);
-
- return requestViaNavigable(a, url);
+ Object.assign({"href": url, "innerHTML": "Link to resource"},
+ additionalAttributes),
+ document.body, a => a.click());
}
/**
@@ -629,13 +626,11 @@ function requestViaAnchor(url, additionalAttributes) {
* @return {Promise} The promise for success/error events.
*/
function requestViaArea(url, additionalAttributes) {
- var area = createElement(
- "area",
- Object.assign({}, additionalAttributes),
- document.body);
-
// TODO(kristijanburnik): Append to map and add image.
- return requestViaNavigable(area, url);
+ return requestViaNavigable(
+ "area",
+ Object.assign({"href": url}, additionalAttributes),
+ document.body, area => area.click());
}
/**
@@ -661,17 +656,11 @@ function requestViaScript(url, additionalAttributes) {
* @param {string} url The URL to submit to.
* @return {Promise} The promise for success/error events.
*/
-function requestViaForm(url) {
- var iframe = createHelperIframe(guid());
- var form = createElement("form",
- {"action": url,
- "method": "POST",
- "target": iframe.name},
- document.body);
- bindEvents(iframe);
- form.submit();
-
- return iframe.eventPromise;
+function requestViaForm(url, additionalAttributes) {
+ return requestViaNavigable(
+ "form",
+ Object.assign({"action": url, "method": "POST"}, additionalAttributes),
+ document.body, form => form.submit());
}
/**
@@ -866,7 +855,7 @@ const subresourceMap = {
invoker: requestViaFetch,
},
"form-tag": {
- path: "/common/security-features/subresource/empty.py",
+ path: "/common/security-features/subresource/document.py",
invoker: requestViaForm,
},
"iframe-tag": {
diff --git a/tests/wpt/web-platform-tests/compat/webkit-box-clamp-visibility-change-ref.html b/tests/wpt/web-platform-tests/compat/webkit-box-clamp-visibility-change-ref.html
new file mode 100644
index 00000000000..20ec3bfaf8b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/compat/webkit-box-clamp-visibility-change-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<link rel="help" href="https://crbug.com/1015987">
+<style>
+ #wb {
+ display: -webkit-box;
+ -webkit-box-orient: vertical;
+ -webkit-line-clamp: 3;
+ overflow: hidden;
+ }
+</style>
+<p>Line-clamp should be respected after removing and changing visibility.
+<div id="root" style="border: solid; width: 200px;">
+ <div id="container">
+ <p id="wb">
+ text text text text
+ text text text text
+ text text text text
+ text text text text
+ text text text text
+ text text text text
+ text text text text
+ </p>
+ </div>
+</div>
diff --git a/tests/wpt/web-platform-tests/compat/webkit-box-clamp-visibility-change.html b/tests/wpt/web-platform-tests/compat/webkit-box-clamp-visibility-change.html
new file mode 100644
index 00000000000..115fa436652
--- /dev/null
+++ b/tests/wpt/web-platform-tests/compat/webkit-box-clamp-visibility-change.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<link rel="help" href="https://crbug.com/1015987">
+<link rel="match" href="webkit-box-clamp-visibility-change-ref.html">
+<style>
+ #wb {
+ display: -webkit-box;
+ -webkit-box-orient: vertical;
+ -webkit-line-clamp: 3;
+ overflow: hidden;
+ }
+</style>
+<p>Line-clamp should be respected after removing and changing visibility.
+<div id="root" style="border: solid; width: 200px;">
+ <div id="container">
+ <p id="wb">
+ text text text text
+ text text text text
+ text text text text
+ text text text text
+ text text text text
+ text text text text
+ text text text text
+ </p>
+ </div>
+</div>
+<script>
+ const container = document.getElementById('container');
+ const root = document.getElementById('root');
+ container.remove();
+ container.style.visibility = 'hidden';
+ root.appendChild(container);
+ document.body.offsetTop;
+ container.style.visibility = '';
+</script>
diff --git a/tests/wpt/web-platform-tests/contacts/contacts-select.https.window.js b/tests/wpt/web-platform-tests/contacts/contacts-select.https.window.js
index 617dee8b7f8..c93d711ed52 100644
--- a/tests/wpt/web-platform-tests/contacts/contacts-select.https.window.js
+++ b/tests/wpt/web-platform-tests/contacts/contacts-select.https.window.js
@@ -64,13 +64,15 @@ contactsTestWithUserActivation(async (test, setSelectedContacts) => {
city: 'Scranton',
addressLine: ['Schrute Farms'],
};
+ const michaelIcons = [new Blob('image binary data'.split(''), {type: 'image/test'})];
+
// Returns two contacts with all information available.
setSelectedContacts([
{ name: ['Dwight Schrute'], email: ['dwight@schrutefarmsbnb.com'], tel: ['000-0000'], address: [dwightAddress] },
- { name: ['Michael Scott', 'Prison Mike'], email: ['michael@dundermifflin.com'] },
+ { name: ['Michael Scott', 'Prison Mike'], email: ['michael@dundermifflin.com'], icon: michaelIcons },
]);
- let results = await navigator.contacts.select(['name', 'email', 'tel', 'address'], { multiple: true });
+ let results = await navigator.contacts.select(['name', 'email', 'icon', 'tel', 'address'], { multiple: true });
assert_equals(results.length, 2);
results = results.sort((c1, c2) => JSON.stringify(c1) < JSON.stringify(c2) ? -1 : 1);
@@ -81,11 +83,17 @@ contactsTestWithUserActivation(async (test, setSelectedContacts) => {
assert_own_property(michael, 'email');
assert_own_property(michael, 'tel');
assert_own_property(michael, 'address');
+ assert_own_property(michael, 'icon');
assert_array_equals(michael.name, ['Michael Scott', 'Prison Mike']);
assert_array_equals(michael.email, ['michael@dundermifflin.com']);
assert_array_equals(michael.tel, []);
assert_array_equals(michael.address, []);
+
+ assert_equals(michael.icon.length, michaelIcons.length);
+ assert_equals(michael.icon[0].type, michaelIcons[0].type);
+ assert_equals(michael.icon[0].size, michaelIcons[0].size);
+ assert_equals(await michael.icon[0].text(), await michaelIcons[0].text());
}
{
@@ -94,10 +102,12 @@ contactsTestWithUserActivation(async (test, setSelectedContacts) => {
assert_own_property(dwight, 'email');
assert_own_property(dwight, 'tel');
assert_own_property(dwight, 'address');
+ assert_own_property(dwight, 'icon');
assert_array_equals(dwight.name, ['Dwight Schrute']);
assert_array_equals(dwight.email, ['dwight@schrutefarmsbnb.com']);
assert_array_equals(dwight.tel, ['000-0000']);
+ assert_array_equals(dwight.icon, []);
assert_equals(dwight.address.length, 1);
const selectedAddress = dwight.address[0];
diff --git a/tests/wpt/web-platform-tests/content-security-policy/README.html b/tests/wpt/web-platform-tests/content-security-policy/README.html
index 98fd5c4bf78..8986d736a0e 100644
--- a/tests/wpt/web-platform-tests/content-security-policy/README.html
+++ b/tests/wpt/web-platform-tests/content-security-policy/README.html
@@ -46,7 +46,7 @@
&lt;script&gt;
test(function() {
- asset_unreached(&#39;Unsafe inline script ran.&#39;)},
+ assert_unreached(&#39;Unsafe inline script ran.&#39;)},
&#39;Inline script in a script tag should not run without an unsafe-inline directive&#39;
);
&lt;/script&gt;
diff --git a/tests/wpt/web-platform-tests/content-security-policy/frame-src/frame-src-same-document-meta.html b/tests/wpt/web-platform-tests/content-security-policy/frame-src/frame-src-same-document-meta.html
new file mode 100644
index 00000000000..f3750b1e7d8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/content-security-policy/frame-src/frame-src-same-document-meta.html
@@ -0,0 +1,54 @@
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<html>
+<body></body>
+<script>
+ async_test(async test => {
+ // 1. Load an iframe (not blocked).
+ let iframe = document.createElement("iframe");
+ {
+ iframe.name = "theiframe";
+ iframe.src =
+ "http://www1.{{host}}/content-security-policy/support/frame.html#0";
+ let iframeLoaded = new Promise(resolve => { iframe.onload = resolve; });
+ document.body.appendChild(iframe);
+ await iframeLoaded;
+ }
+
+ // 2. Start blocking iframes using CSP frame-src 'none'.
+ {
+ let meta = document.createElement('meta');
+ meta.httpEquiv = "Content-Security-Policy";
+ meta.content = "frame-src 'none'";
+ document.getElementsByTagName('head')[0].appendChild(meta);
+ }
+
+ // 3. Blocked same-document navigation using iframe.src.
+ {
+ let violation = new Promise(resolve => {
+ window.addEventListener('securitypolicyviolation', resolve);
+ });
+ iframe.src =
+ "http://www1.{{host}}/content-security-policy/support/frame.html#1";
+ await violation;
+ }
+
+ // 4. Blocked same-document navigation using window.open.
+ {
+ let violation = new Promise(resolve => {
+ window.addEventListener('securitypolicyviolation', resolve);
+ });
+ window.open(
+ "http://www1.{{host}}/content-security-policy/support/frame.html#2",
+ "theiframe");
+ await violation;
+ }
+
+ // 5. Regression test for https://crbug.com/1018385. The browser should
+ // not crash while displaying the error page.
+ await new Promise(resolve => window.setTimeout(resolve, 1000));
+
+ test.done();
+ }, "Same-document navigations in an iframe blocked by CSP frame-src dynamically using the <meta> tag");
+</script>
+</html>
diff --git a/tests/wpt/web-platform-tests/content-security-policy/frame-src/frame-src-same-document.html b/tests/wpt/web-platform-tests/content-security-policy/frame-src/frame-src-same-document.html
new file mode 100644
index 00000000000..398d0223bcb
--- /dev/null
+++ b/tests/wpt/web-platform-tests/content-security-policy/frame-src/frame-src-same-document.html
@@ -0,0 +1,25 @@
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<html>
+<body></body>
+<script>
+ let crossOriginUrl =
+ "http://www1.{{host}}/content-security-policy/support/frame.html";
+
+ async_test(async test => {
+ test.done();
+ let iframe = document.createElement("iframe");
+ document.body.appendChild(iframe);
+
+ for(let hash of ["#0", "#1"]) {
+ let violation = new Promise(resolve => {
+ window.addEventListener('securitypolicyviolation', resolve);
+ });
+ iframe.src = crossOriginUrl + hash;
+ await violation;
+ }
+
+ test.done();
+ }, "Same-document navigation in an iframe blocked by CSP frame-src");
+</script>
+</html>
diff --git a/tests/wpt/web-platform-tests/content-security-policy/frame-src/frame-src-same-document.html.headers b/tests/wpt/web-platform-tests/content-security-policy/frame-src/frame-src-same-document.html.headers
new file mode 100644
index 00000000000..6502444407f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/content-security-policy/frame-src/frame-src-same-document.html.headers
@@ -0,0 +1 @@
+Content-Security-Policy: frame-src 'none'
diff --git a/tests/wpt/web-platform-tests/content-security-policy/generic/generic-0_1-script-src.html b/tests/wpt/web-platform-tests/content-security-policy/generic/generic-0_1-script-src.html
index 35033c3899f..b374b8b88e9 100644
--- a/tests/wpt/web-platform-tests/content-security-policy/generic/generic-0_1-script-src.html
+++ b/tests/wpt/web-platform-tests/content-security-policy/generic/generic-0_1-script-src.html
@@ -2,7 +2,7 @@
<html>
<head>
<title>default-src should cascade to script-src directive</title>
- <meta http-equiv="Content-Security-Policy" content="default-src 'self' 'unsafe-inline'; report-uri ../support/report.py?op=put&reportID={{$id}}">
+ <meta http-equiv="Content-Security-Policy" content="default-src 'self' 'unsafe-inline';">
<script src='/resources/testharness.js'></script>
<script src='/resources/testharnessreport.js'></script>
<script src='../support/siblingPath.js'></script>
diff --git a/tests/wpt/web-platform-tests/content-security-policy/generic/generic-0_10.html b/tests/wpt/web-platform-tests/content-security-policy/generic/generic-0_10.sub.html
index 5dfd9d83c7f..d4f52d8b8d1 100644
--- a/tests/wpt/web-platform-tests/content-security-policy/generic/generic-0_10.html
+++ b/tests/wpt/web-platform-tests/content-security-policy/generic/generic-0_10.sub.html
@@ -2,7 +2,7 @@
<html>
<head>
<title>test implicit port number matching (requires port 80)</title>
- <meta http-equiv="Content-Security-Policy content="script-src 'self' www.{{host}} 'unsafe-inline';">
+ <meta http-equiv="Content-Security-Policy content="script-src 'self' {{domains[www]}} 'unsafe-inline';">
<script src='/resources/testharness.js'></script>
<script src='/resources/testharnessreport.js'></script>
<script>
@@ -12,7 +12,7 @@
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
- script.src = "http://www." + location.hostname + "/content-security-policy/generic/positiveTest.js";
+ script.src = "http://{{domains[www]}}/content-security-policy/generic/positiveTest.js";
head.appendChild(script);
</script>
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/background-attachment-local/reftest.list b/tests/wpt/web-platform-tests/css/css-backgrounds/background-attachment-local/reftest.list
deleted file mode 100644
index b1d23371e3e..00000000000
--- a/tests/wpt/web-platform-tests/css/css-backgrounds/background-attachment-local/reftest.list
+++ /dev/null
@@ -1,20 +0,0 @@
-== attachment-scroll-positioning-1.html attachment-scroll-positioning-1-ref.html
-== attachment-local-positioning-1.html attachment-local-positioning-1-ref.html
-== attachment-local-positioning-2.html attachment-local-positioning-2-ref.html
-== attachment-local-positioning-3.html attachment-local-positioning-3-ref.html
-== attachment-local-positioning-4.html attachment-local-positioning-4-ref.html
-== attachment-local-positioning-5.html attachment-local-positioning-5-ref.html
-
-== attachment-local-clipping-color-1.html attachment-local-clipping-color-1-ref.html
-== attachment-local-clipping-color-2.html attachment-local-clipping-color-1-ref.html # Same ref as the previous test.
-== attachment-local-clipping-color-3.html attachment-local-clipping-color-3-ref.html
-== attachment-local-clipping-color-4.html attachment-local-clipping-color-4-ref.html
-== attachment-local-clipping-color-5.html attachment-local-clipping-color-4-ref.html # Same ref as the previous test.
-fuzzy(0-50,0-500) == attachment-local-clipping-color-6.html attachment-local-clipping-color-6-ref.html
-
-== attachment-local-clipping-image-1.html attachment-local-clipping-image-1-ref.html
-== attachment-local-clipping-image-2.html attachment-local-clipping-image-1-ref.html # Same ref as the previous test.
-== attachment-local-clipping-image-3.html attachment-local-clipping-image-3-ref.html
-== attachment-local-clipping-image-4.html attachment-local-clipping-image-4-ref.html
-== attachment-local-clipping-image-5.html attachment-local-clipping-image-4-ref.html # Same ref as the previous test.
-fuzzy(0-80,0-500) == attachment-local-clipping-image-6.html attachment-local-clipping-image-6-ref.html
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/background-size/vector/empty/reftest.list b/tests/wpt/web-platform-tests/css/css-backgrounds/background-size/vector/empty/reftest.list
deleted file mode 100644
index 8cacdc1e469..00000000000
--- a/tests/wpt/web-platform-tests/css/css-backgrounds/background-size/vector/empty/reftest.list
+++ /dev/null
@@ -1,30 +0,0 @@
-== tall--contain--height.html ref-tall-empty.html
-== tall--contain--width.html ref-tall-empty.html
-== wide--contain--height.html ref-wide-empty.html
-== wide--contain--width.html ref-wide-empty.html
-
-# Either OS X 32-bit or 10.5, judging from imprecise Tinderbox results, renders
-# these tests as empty boxes, not filled boxes. We don't really care about this
-# extreme edge case (the test exists more to test for safety against division by
-# zero), so there is no bug has been filed to fix it, although a patch would
-# probably be accepted.
-random-if(cocoaWidget) == tall--cover--height.html ref-tall-lime.html
-random-if(cocoaWidget) == tall--cover--width.html ref-tall-lime.html
-random-if(cocoaWidget) == wide--cover--height.html ref-wide-lime.html
-random-if(cocoaWidget) == wide--cover--width.html ref-wide-lime.html
-
-== zero-height-ratio-contain.html ref-tall-empty.html
-== zero-height-ratio-cover.html ref-tall-empty.html
-== zero-height-ratio-auto-auto.html ref-tall-empty.html
-== zero-height-ratio-auto-5px.html ref-tall-empty.html
-== zero-height-ratio-5px-auto.html ref-tall-empty.html
-== zero-width-ratio-contain.html ref-tall-empty.html
-== zero-width-ratio-cover.html ref-tall-empty.html
-== zero-width-ratio-auto-auto.html ref-tall-empty.html
-== zero-width-ratio-auto-5px.html ref-tall-empty.html
-== zero-width-ratio-5px-auto.html ref-tall-empty.html
-== zero-ratio-no-dimensions-contain.html ref-tall-empty.html
-== zero-ratio-no-dimensions-cover.html ref-tall-empty.html
-== zero-ratio-no-dimensions-auto-5px.html ref-tall-empty.html
-== zero-ratio-no-dimensions-5px-auto.html ref-tall-empty.html
-== zero-ratio-no-dimensions-auto-auto.html ref-tall-empty.html
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/background-size/vector/reftest.list b/tests/wpt/web-platform-tests/css/css-backgrounds/background-size/vector/reftest.list
deleted file mode 100644
index 6b9fe45f97e..00000000000
--- a/tests/wpt/web-platform-tests/css/css-backgrounds/background-size/vector/reftest.list
+++ /dev/null
@@ -1,208 +0,0 @@
-include empty/reftest.list
-
-################################################################################
-# For reference (although the wide--32px-auto* tests/names were changed to
-# avoid viewBox-directed scaling to make the scaled height less than the wide-
-# tests height):
-#
-# for ORIENTATION in tall wide; do for SIZE in 32px-auto auto-32px auto contain cover; do for VIMAGE in *.svg; do cat template.html | sed -e "s/SIZE/$(echo $SIZE | sed -e 's/-/ /')/g" | sed -e "s/VIMAGE/$VIMAGE/g" | sed -e "s/TALLWIDE/$ORIENTATION/g" | sed -e "s/ORIENTATION/$(if [ "$ORIENTATION" = "tall" ]; then echo 'width: 256px; height: 768px'; else echo 'width: 768px; height: 256px'; fi)/g" > $ORIENTATION--$SIZE--$(echo $VIMAGE | sed -e 's/.svg//').html; echo "== $ORIENTATION--$SIZE--$(echo $VIMAGE | sed -e 's/.svg//').html ###" >> reftest.list; done; echo >> reftest.list; done; done
-#
-################################################################################
-
-== tall--32px-auto--nonpercent-width-nonpercent-height.html ref-tall-lime32x64-aqua32x64.html
-== tall--32px-auto--nonpercent-width-nonpercent-height-viewbox.html ref-tall-lime32x64-aqua32x64.html
-== tall--32px-auto--nonpercent-width-omitted-height.html ref-tall-lime32x384-aqua32x384.html
-== tall--32px-auto--nonpercent-width-omitted-height-viewbox.html ref-tall-lime32x256-aqua32x256.html
-== tall--32px-auto--nonpercent-width-percent-height.html ref-tall-lime32x384-aqua32x384.html
-== tall--32px-auto--nonpercent-width-percent-height-viewbox.html ref-tall-lime32x256-aqua32x256.html
-== tall--32px-auto--omitted-width-nonpercent-height.html ref-tall-lime32x16-aqua32x16.html
-== tall--32px-auto--omitted-width-nonpercent-height-viewbox.html ref-tall-lime32x256-aqua32x256.html
-== tall--32px-auto--omitted-width-omitted-height.html ref-tall-lime32x384-aqua32x384.html
-== tall--32px-auto--omitted-width-omitted-height-viewbox.html ref-tall-lime32x256-aqua32x256.html
-== tall--32px-auto--omitted-width-percent-height.html ref-tall-lime32x384-aqua32x384.html
-== tall--32px-auto--omitted-width-percent-height-viewbox.html ref-tall-lime32x256-aqua32x256.html
-== tall--32px-auto--percent-width-nonpercent-height.html ref-tall-lime32x16-aqua32x16.html
-== tall--32px-auto--percent-width-nonpercent-height-viewbox.html ref-tall-lime32x256-aqua32x256.html
-== tall--32px-auto--percent-width-omitted-height.html ref-tall-lime32x384-aqua32x384.html
-== tall--32px-auto--percent-width-omitted-height-viewbox.html ref-tall-lime32x256-aqua32x256.html
-== tall--32px-auto--percent-width-percent-height.html ref-tall-lime32x384-aqua32x384.html
-== tall--32px-auto--percent-width-percent-height-viewbox.html ref-tall-lime32x256-aqua32x256.html
-
-== tall--auto-32px--nonpercent-width-nonpercent-height.html ref-tall-lime8x16-aqua8x16.html
-== tall--auto-32px--nonpercent-width-nonpercent-height-viewbox.html ref-tall-lime8x16-aqua8x16.html
-== tall--auto-32px--nonpercent-width-omitted-height.html ref-tall-lime8x16-aqua8x16.html
-== tall--auto-32px--nonpercent-width-omitted-height-viewbox.html ref-tall-lime2x16-aqua2x16.html
-== tall--auto-32px--nonpercent-width-percent-height.html ref-tall-lime8x16-aqua8x16.html
-== tall--auto-32px--nonpercent-width-percent-height-viewbox.html ref-tall-lime2x16-aqua2x16.html
-== tall--auto-32px--omitted-width-nonpercent-height.html ref-tall-lime256x16-aqua256x16.html
-== tall--auto-32px--omitted-width-nonpercent-height-viewbox.html ref-tall-lime2x16-aqua2x16.html
-== tall--auto-32px--omitted-width-omitted-height.html ref-tall-lime256x16-aqua256x16.html
-== tall--auto-32px--omitted-width-omitted-height-viewbox.html ref-tall-lime2x16-aqua2x16.html
-== tall--auto-32px--omitted-width-percent-height.html ref-tall-lime256x16-aqua256x16.html
-== tall--auto-32px--omitted-width-percent-height-viewbox.html ref-tall-lime2x16-aqua2x16.html
-== tall--auto-32px--percent-width-nonpercent-height.html ref-tall-lime256x16-aqua256x16.html
-== tall--auto-32px--percent-width-nonpercent-height-viewbox.html ref-tall-lime2x16-aqua2x16.html
-== tall--auto-32px--percent-width-omitted-height.html ref-tall-lime256x16-aqua256x16.html
-== tall--auto-32px--percent-width-omitted-height-viewbox.html ref-tall-lime2x16-aqua2x16.html
-== tall--auto-32px--percent-width-percent-height.html ref-tall-lime256x16-aqua256x16.html
-== tall--auto-32px--percent-width-percent-height-viewbox.html ref-tall-lime2x16-aqua2x16.html
-
-== tall--auto--nonpercent-width-nonpercent-height.html ref-tall-lime8x16-aqua8x16.html
-== tall--auto--nonpercent-width-nonpercent-height-viewbox.html ref-tall-lime8x16-aqua8x16.html
-== tall--auto--nonpercent-width-omitted-height.html ref-tall-lime8x384-aqua8x384.html
-== tall--auto--nonpercent-width-omitted-height-viewbox.html ref-tall-lime8x64-aqua8x64.html
-== tall--auto--nonpercent-width-percent-height.html ref-tall-lime8x384-aqua8x384.html
-== tall--auto--nonpercent-width-percent-height-viewbox.html ref-tall-lime8x64-aqua8x64.html
-== tall--auto--omitted-width-nonpercent-height.html ref-tall-lime256x16-aqua256x16.html
-== tall--auto--omitted-width-nonpercent-height-viewbox.html ref-tall-lime2x16-aqua2x16.html
-== tall--auto--omitted-width-omitted-height.html ref-tall-lime256x384-aqua256x384.html
-== tall--auto--omitted-width-omitted-height-viewbox.html ref-tall-lime48x384-aqua48x384.html
-== tall--auto--omitted-width-percent-height.html ref-tall-lime256x384-aqua256x384.html
-== tall--auto--omitted-width-percent-height-viewbox.html ref-tall-lime48x384-aqua48x384.html
-== tall--auto--percent-width-nonpercent-height.html ref-tall-lime256x16-aqua256x16.html
-== tall--auto--percent-width-nonpercent-height-viewbox.html ref-tall-lime2x16-aqua2x16.html
-== tall--auto--percent-width-omitted-height.html ref-tall-lime256x384-aqua256x384.html
-== tall--auto--percent-width-omitted-height-viewbox.html ref-tall-lime48x384-aqua48x384.html
-== tall--auto--percent-width-percent-height.html ref-tall-lime256x384-aqua256x384.html
-== tall--auto--percent-width-percent-height-viewbox.html ref-tall-lime48x384-aqua48x384.html
-
-== tall--contain--nonpercent-width-nonpercent-height.html ref-tall-lime192x384-aqua192x384.html
-== tall--contain--nonpercent-width-nonpercent-height-viewbox.html ref-tall-lime192x384-aqua192x384.html
-== tall--contain--nonpercent-width-omitted-height.html ref-tall-lime256x384-aqua256x384.html
-== tall--contain--nonpercent-width-omitted-height-viewbox.html ref-tall-lime48x384-aqua48x384.html
-== tall--contain--nonpercent-width-percent-height.html ref-tall-lime256x384-aqua256x384.html
-== tall--contain--nonpercent-width-percent-height-viewbox.html ref-tall-lime48x384-aqua48x384.html
-== tall--contain--omitted-width-nonpercent-height.html ref-tall-lime256x384-aqua256x384.html
-== tall--contain--omitted-width-nonpercent-height-viewbox.html ref-tall-lime48x384-aqua48x384.html
-== tall--contain--omitted-width-omitted-height.html ref-tall-lime256x384-aqua256x384.html
-== tall--contain--omitted-width-omitted-height-viewbox.html ref-tall-lime48x384-aqua48x384.html
-== tall--contain--omitted-width-percent-height.html ref-tall-lime256x384-aqua256x384.html
-== tall--contain--omitted-width-percent-height-viewbox.html ref-tall-lime48x384-aqua48x384.html
-== tall--contain--percent-width-nonpercent-height.html ref-tall-lime256x384-aqua256x384.html
-== tall--contain--percent-width-nonpercent-height-viewbox.html ref-tall-lime48x384-aqua48x384.html
-== tall--contain--percent-width-omitted-height.html ref-tall-lime256x384-aqua256x384.html
-== tall--contain--percent-width-omitted-height-viewbox.html ref-tall-lime48x384-aqua48x384.html
-== tall--contain--percent-width-percent-height.html ref-tall-lime256x384-aqua256x384.html
-== tall--contain--percent-width-percent-height-viewbox.html ref-tall-lime48x384-aqua48x384.html
-
-# We smear the background image when scaling it in these two tests...
-fails == tall--cover--nonpercent-width-nonpercent-height.html ref-tall-lime256x512-aqua256x256.html
-fails == tall--cover--nonpercent-width-nonpercent-height-viewbox.html ref-tall-lime256x512-aqua256x256.html
-
-# ...but we don't in identical tests with image-rendering: -moz-crisp-edges.
-== tall--cover--nonpercent-width-nonpercent-height--crisp.html ref-tall-lime256x512-aqua256x256.html
-== tall--cover--nonpercent-width-nonpercent-height-viewbox--crisp.html ref-tall-lime256x512-aqua256x256.html
-
-== tall--cover--nonpercent-width-omitted-height.html ref-tall-lime256x384-aqua256x384.html
-== tall--cover--nonpercent-width-omitted-height-viewbox.html ref-tall-lime256x768.html
-== tall--cover--nonpercent-width-percent-height.html ref-tall-lime256x384-aqua256x384.html
-== tall--cover--nonpercent-width-percent-height-viewbox.html ref-tall-lime256x768.html
-== tall--cover--omitted-width-nonpercent-height.html ref-tall-lime256x384-aqua256x384.html
-== tall--cover--omitted-width-nonpercent-height-viewbox.html ref-tall-lime256x768.html
-== tall--cover--omitted-width-omitted-height.html ref-tall-lime256x384-aqua256x384.html
-== tall--cover--omitted-width-omitted-height-viewbox.html ref-tall-lime256x768.html
-== tall--cover--omitted-width-percent-height.html ref-tall-lime256x384-aqua256x384.html
-== tall--cover--omitted-width-percent-height-viewbox.html ref-tall-lime256x768.html
-== tall--cover--percent-width-nonpercent-height.html ref-tall-lime256x384-aqua256x384.html
-== tall--cover--percent-width-nonpercent-height-viewbox.html ref-tall-lime256x768.html
-== tall--cover--percent-width-omitted-height.html ref-tall-lime256x384-aqua256x384.html
-== tall--cover--percent-width-omitted-height-viewbox.html ref-tall-lime256x768.html
-== tall--cover--percent-width-percent-height.html ref-tall-lime256x384-aqua256x384.html
-== tall--cover--percent-width-percent-height-viewbox.html ref-tall-lime256x768.html
-
-== wide--12px-auto--nonpercent-width-nonpercent-height.html ref-wide-lime12x24-aqua12x24.html
-== wide--12px-auto--nonpercent-width-nonpercent-height-viewbox.html ref-wide-lime12x24-aqua12x24.html
-== wide--12px-auto--nonpercent-width-omitted-height.html ref-wide-lime12x128-aqua12x128.html
-== wide--12px-auto--nonpercent-width-omitted-height-viewbox.html ref-wide-lime12x96-aqua12x96.html
-== wide--12px-auto--nonpercent-width-percent-height.html ref-wide-lime12x128-aqua12x128.html
-== wide--12px-auto--nonpercent-width-percent-height-viewbox.html ref-wide-lime12x96-aqua12x96.html
-== wide--12px-auto--omitted-width-nonpercent-height.html ref-wide-lime12x16-aqua12x16.html
-== wide--12px-auto--omitted-width-nonpercent-height-viewbox.html ref-wide-lime12x96-aqua12x96.html
-== wide--12px-auto--omitted-width-omitted-height.html ref-wide-lime12x128-aqua12x128.html
-== wide--12px-auto--omitted-width-omitted-height-viewbox.html ref-wide-lime12x96-aqua12x96.html
-== wide--12px-auto--omitted-width-percent-height.html ref-wide-lime12x128-aqua12x128.html
-== wide--12px-auto--omitted-width-percent-height-viewbox.html ref-wide-lime12x96-aqua12x96.html
-== wide--12px-auto--percent-width-nonpercent-height.html ref-wide-lime12x16-aqua12x16.html
-== wide--12px-auto--percent-width-nonpercent-height-viewbox.html ref-wide-lime12x96-aqua12x96.html
-== wide--12px-auto--percent-width-omitted-height.html ref-wide-lime12x128-aqua12x128.html
-== wide--12px-auto--percent-width-omitted-height-viewbox.html ref-wide-lime12x96-aqua12x96.html
-== wide--12px-auto--percent-width-percent-height.html ref-wide-lime12x128-aqua12x128.html
-== wide--12px-auto--percent-width-percent-height-viewbox.html ref-wide-lime12x96-aqua12x96.html
-
-== wide--auto-32px--nonpercent-width-nonpercent-height.html ref-wide-lime8x16-aqua8x16.html
-== wide--auto-32px--nonpercent-width-nonpercent-height-viewbox.html ref-wide-lime8x16-aqua8x16.html
-== wide--auto-32px--nonpercent-width-omitted-height.html ref-wide-lime8x16-aqua8x16.html
-== wide--auto-32px--nonpercent-width-omitted-height-viewbox.html ref-wide-lime2x16-aqua2x16.html
-== wide--auto-32px--nonpercent-width-percent-height.html ref-wide-lime8x16-aqua8x16.html
-== wide--auto-32px--nonpercent-width-percent-height-viewbox.html ref-wide-lime2x16-aqua2x16.html
-== wide--auto-32px--omitted-width-nonpercent-height.html ref-wide-lime768x16-aqua768x16.html
-== wide--auto-32px--omitted-width-nonpercent-height-viewbox.html ref-wide-lime2x16-aqua2x16.html
-== wide--auto-32px--omitted-width-omitted-height.html ref-wide-lime768x16-aqua768x16.html
-== wide--auto-32px--omitted-width-omitted-height-viewbox.html ref-wide-lime2x16-aqua2x16.html
-== wide--auto-32px--omitted-width-percent-height.html ref-wide-lime768x16-aqua768x16.html
-== wide--auto-32px--omitted-width-percent-height-viewbox.html ref-wide-lime2x16-aqua2x16.html
-== wide--auto-32px--percent-width-nonpercent-height.html ref-wide-lime768x16-aqua768x16.html
-== wide--auto-32px--percent-width-nonpercent-height-viewbox.html ref-wide-lime2x16-aqua2x16.html
-== wide--auto-32px--percent-width-omitted-height.html ref-wide-lime768x16-aqua768x16.html
-== wide--auto-32px--percent-width-omitted-height-viewbox.html ref-wide-lime2x16-aqua2x16.html
-== wide--auto-32px--percent-width-percent-height.html ref-wide-lime768x16-aqua768x16.html
-== wide--auto-32px--percent-width-percent-height-viewbox.html ref-wide-lime2x16-aqua2x16.html
-
-== wide--auto--nonpercent-width-nonpercent-height.html ref-wide-lime8x16-aqua8x16.html
-== wide--auto--nonpercent-width-nonpercent-height-viewbox.html ref-wide-lime8x16-aqua8x16.html
-== wide--auto--nonpercent-width-omitted-height.html ref-wide-lime8x128-aqua8x128.html
-== wide--auto--nonpercent-width-omitted-height-viewbox.html ref-wide-lime8x64-aqua8x64.html
-== wide--auto--nonpercent-width-percent-height.html ref-wide-lime8x128-aqua8x128.html
-== wide--auto--nonpercent-width-percent-height-viewbox.html ref-wide-lime8x64-aqua8x64.html
-== wide--auto--omitted-width-nonpercent-height.html ref-wide-lime768x16-aqua768x16.html
-== wide--auto--omitted-width-nonpercent-height-viewbox.html ref-wide-lime2x16-aqua2x16.html
-== wide--auto--omitted-width-omitted-height.html ref-wide-lime768x128-aqua768x128.html
-== wide--auto--omitted-width-omitted-height-viewbox.html ref-wide-lime16x128-aqua16x128.html
-== wide--auto--omitted-width-percent-height.html ref-wide-lime768x128-aqua768x128.html
-== wide--auto--omitted-width-percent-height-viewbox.html ref-wide-lime16x128-aqua16x128.html
-== wide--auto--percent-width-nonpercent-height.html ref-wide-lime768x16-aqua768x16.html
-== wide--auto--percent-width-nonpercent-height-viewbox.html ref-wide-lime2x16-aqua2x16.html
-== wide--auto--percent-width-omitted-height.html ref-wide-lime768x128-aqua768x128.html
-== wide--auto--percent-width-omitted-height-viewbox.html ref-wide-lime16x128-aqua16x128.html
-== wide--auto--percent-width-percent-height.html ref-wide-lime768x128-aqua768x128.html
-== wide--auto--percent-width-percent-height-viewbox.html ref-wide-lime16x128-aqua16x128.html
-
-== wide--contain--nonpercent-width-nonpercent-height.html ref-wide-lime64x128-aqua64x128.html
-== wide--contain--nonpercent-width-nonpercent-height-viewbox.html ref-wide-lime64x128-aqua64x128.html
-== wide--contain--nonpercent-width-omitted-height.html ref-wide-lime768x128-aqua768x128.html
-== wide--contain--nonpercent-width-omitted-height-viewbox.html ref-wide-lime16x128-aqua16x128.html
-== wide--contain--nonpercent-width-percent-height.html ref-wide-lime768x128-aqua768x128.html
-== wide--contain--nonpercent-width-percent-height-viewbox.html ref-wide-lime16x128-aqua16x128.html
-== wide--contain--omitted-width-nonpercent-height.html ref-wide-lime768x128-aqua768x128.html
-== wide--contain--omitted-width-nonpercent-height-viewbox.html ref-wide-lime16x128-aqua16x128.html
-== wide--contain--omitted-width-omitted-height.html ref-wide-lime768x128-aqua768x128.html
-== wide--contain--omitted-width-omitted-height-viewbox.html ref-wide-lime16x128-aqua16x128.html
-== wide--contain--omitted-width-percent-height.html ref-wide-lime768x128-aqua768x128.html
-== wide--contain--omitted-width-percent-height-viewbox.html ref-wide-lime16x128-aqua16x128.html
-== wide--contain--percent-width-nonpercent-height.html ref-wide-lime768x128-aqua768x128.html
-== wide--contain--percent-width-nonpercent-height-viewbox.html ref-wide-lime16x128-aqua16x128.html
-== wide--contain--percent-width-omitted-height.html ref-wide-lime768x128-aqua768x128.html
-== wide--contain--percent-width-omitted-height-viewbox.html ref-wide-lime16x128-aqua16x128.html
-== wide--contain--percent-width-percent-height.html ref-wide-lime768x128-aqua768x128.html
-== wide--contain--percent-width-percent-height-viewbox.html ref-wide-lime16x128-aqua16x128.html
-
-== wide--cover--nonpercent-width-nonpercent-height.html ref-wide-lime768x256.html
-== wide--cover--nonpercent-width-nonpercent-height-viewbox.html ref-wide-lime768x256.html
-== wide--cover--nonpercent-width-omitted-height.html ref-wide-lime768x128-aqua768x128.html
-== wide--cover--nonpercent-width-omitted-height-viewbox.html ref-wide-lime768x256.html
-== wide--cover--nonpercent-width-percent-height.html ref-wide-lime768x128-aqua768x128.html
-== wide--cover--nonpercent-width-percent-height-viewbox.html ref-wide-lime768x256.html
-== wide--cover--omitted-width-nonpercent-height.html ref-wide-lime768x128-aqua768x128.html
-== wide--cover--omitted-width-nonpercent-height-viewbox.html ref-wide-lime768x256.html
-== wide--cover--omitted-width-omitted-height.html ref-wide-lime768x128-aqua768x128.html
-== wide--cover--omitted-width-omitted-height-viewbox.html ref-wide-lime768x256.html
-== wide--cover--omitted-width-percent-height.html ref-wide-lime768x128-aqua768x128.html
-== wide--cover--omitted-width-percent-height-viewbox.html ref-wide-lime768x256.html
-== wide--cover--percent-width-nonpercent-height.html ref-wide-lime768x128-aqua768x128.html
-== wide--cover--percent-width-nonpercent-height-viewbox.html ref-wide-lime768x256.html
-== wide--cover--percent-width-omitted-height.html ref-wide-lime768x128-aqua768x128.html
-== wide--cover--percent-width-omitted-height-viewbox.html ref-wide-lime768x256.html
-== wide--cover--percent-width-percent-height.html ref-wide-lime768x128-aqua768x128.html
-== wide--cover--percent-width-percent-height-viewbox.html ref-wide-lime768x256.html
-
-== diagonal-percentage-vector-background.html diagonal-percentage-vector-background-ref.html
diff --git a/tests/wpt/web-platform-tests/css/css-color/parsing/color-valid.html b/tests/wpt/web-platform-tests/css/css-color/parsing/color-valid.html
index 48e97561f40..62df82623a4 100644
--- a/tests/wpt/web-platform-tests/css/css-color/parsing/color-valid.html
+++ b/tests/wpt/web-platform-tests/css/css-color/parsing/color-valid.html
@@ -28,6 +28,8 @@ test_valid_value("color", "rgb(-2, 3, 4)", "rgb(0, 3, 4)");
test_valid_value("color", "rgb(100, 200, 300)", "rgb(100, 200, 255)");
test_valid_value("color", "rgb(20, 10, 0, -10)", "rgba(20, 10, 0, 0)"); // Not supported by Edge/Safari.
test_valid_value("color", "rgb(100%, 200%, 300%)", "rgb(255, 255, 255)");
+test_valid_value("color", "field");
+test_valid_value("color", "fieldtext");
</script>
</body>
</html>
diff --git a/tests/wpt/web-platform-tests/css/css-color/parsing/system-color-valid.html b/tests/wpt/web-platform-tests/css/css-color/parsing/system-color-valid.html
new file mode 100644
index 00000000000..9d93bd4a21d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-color/parsing/system-color-valid.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Color Module Level 4: parsing system color keywords</title>
+<link rel="help" href="https://drafts.csswg.org/css-color-4/#css-system-colors">
+<meta name="assert" content="system color keyword support">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("color", "ActiveText", "activetext");
+test_valid_value("color", "ButtonFace", "buttonface");
+test_valid_value("color", "ButtonText", "buttontext");
+test_valid_value("color", "Canvas", "canvas");
+test_valid_value("color", "CanvasText", "canvastext");
+test_valid_value("color", "Field", "field");
+test_valid_value("color", "FieldText", "fieldtext");
+test_valid_value("color", "GrayText", "graytext");
+test_valid_value("color", "Highlight", "highlight");
+test_valid_value("color", "HighlightText", "highlighttext");
+test_valid_value("color", "LinkText", "linktext");
+test_valid_value("color", "VisitedText", "visitedtext");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/percentage-heights-008.html b/tests/wpt/web-platform-tests/css/css-flexbox/percentage-heights-008.html
new file mode 100644
index 00000000000..732f94199b5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-flexbox/percentage-heights-008.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<title>Fixed indefinite heights</title>
+<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#definite-sizes">
+<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
+<meta name="flags" content="" />
+<meta name="assert" content="Percent height flex items in a nested column flexbox have height resolved to auto." />
+
+<style>
+.column-flexbox {
+ display: flex;
+ flex-direction: column;
+}
+
+#percent-height-item {
+ height: 50%;
+ background: red;
+}
+
+#fixed-height-item {
+ height: 100px;
+ width: 100px;
+ background: green;
+}
+</style>
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+
+<div class=column-flexbox>
+ <div class=column-flexbox>
+ <div id=fixed-height-item></div>
+ <div id=percent-height-item></div>
+ </div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/percentage-heights-009.html b/tests/wpt/web-platform-tests/css/css-flexbox/percentage-heights-009.html
new file mode 100644
index 00000000000..b3de59562bc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-flexbox/percentage-heights-009.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<title>height: 100% should not be considered indefinite on a second flex item (triggers an obscure bug in Blink)</title>
+<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#definite-sizes" />
+<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1019138" />
+<link rel="match" href="../reference/ref-filled-green-100px-square.xht" />
+<style type="text/css">
+.container {
+ height: 100px;
+ width: 100px;
+}
+.flexbox {
+ background: red;
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+}
+.first-item {
+ background: green;
+ display: flex;
+}
+.second-item {
+ /* This should not be considered indefinite */
+ height: 100%;
+ background: green;
+}
+</style>
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div class="container">
+ <div class="flexbox">
+ <div class="first-item">
+ <div style="width: 100px; height: 20px;"></div>
+ </div>
+ <div class="second-item">
+ </div>
+ </div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/percentage-padding-001.html b/tests/wpt/web-platform-tests/css/css-flexbox/percentage-padding-001.html
new file mode 100644
index 00000000000..8bba5d60f5c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-flexbox/percentage-padding-001.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<script src='/resources/testharness.js'></script>
+<script src='/resources/testharnessreport.js'></script>
+<script src='/resources/check-layout-th.js'></script>
+<link rel="author" title="David Grogan" href="dgrogan@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-box-3/#padding-physical" title="Percentages line">
+<meta name="flags" content="" />
+<meta name="assert" content="item's padding is resolved against parent's size, not item's" />
+
+<style>
+x-flexbox {
+ display: flex;
+ height: 50px;
+ width: 500px;
+}
+
+x-item {
+ padding-left: 10%;
+ background: blue;
+ position: relative; /* Just so offsetLeft returns distance between x-item and div */
+}
+
+div {
+ height: 50px;
+ width: 50px;
+ background: orange;
+}
+</style>
+
+If the item's % padding is calculated correctly, there is a blue square on the left and an orange square on the right, both 50x50.
+
+<x-flexbox>
+ <x-item>
+ <div data-offset-x=50></div>
+ </x-item>
+</x-flexbox>
+
+<script>
+checkLayout('x-flexbox');
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/reference/ttwf-reftest-flex-order-ref.html b/tests/wpt/web-platform-tests/css/css-flexbox/reference/ttwf-reftest-flex-order-ref.html
deleted file mode 100644
index 6cddecece86..00000000000
--- a/tests/wpt/web-platform-tests/css/css-flexbox/reference/ttwf-reftest-flex-order-ref.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <title>CSS Flexible Box Test: order proprety - value</title>
- <link rel="author" title="haosdent" href="mailto:haosdent@gmail.com">
- <style type="text/css">
- .container {
- position: relative;
- height: 6em;
- background: red;
- margin: 1em;
- border: 1px solid black;
- }
- span {
- height: 2em;
- display: inline-block;
- background: green;
- color: white;
- margin: 1em;
- width: 8em;
- }
- </style>
-</head>
-<body>
- <p>The test passed if all the cells are reversed.</p>
- <div class="container">
- <span class="first">forth</span><span class="second">third</span><span class="third">second</span><span class="forth">first</span>
- </div>
-</body>
-</html>
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/ttwf-reftest-flex-order.html b/tests/wpt/web-platform-tests/css/css-flexbox/ttwf-reftest-flex-order.html
deleted file mode 100644
index 2edac404b6d..00000000000
--- a/tests/wpt/web-platform-tests/css/css-flexbox/ttwf-reftest-flex-order.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <title>CSS Flexible Box Test: order proprety - value</title>
- <link rel="author" title="haosdent" href="mailto:haosdent@gmail.com">
- <link rel="help" href="http://www.w3.org/TR/css-flexbox-1/#order-property">
- <link rel="match" href="reference/ttwf-reftest-flex-order-ref.html">
- <meta name="assert" content="Statement describing what the test case is asserting">
- <style type="text/css">
- .container {
- position: relative;
- height: 6em;
- display: flex;
- background: red;
- margin: 1em;
- border: 1px solid black;
- }
- span {
- height: 2em;
- display: inline-block;
- background: green;
- color: white;
- margin: 1em;
- width: 8em;
- }
- .first {
- order: 1;
- }
- .second {
- order: 2;
- }
- .third {
- order: 3;
- }
- .forth {
- order: 4;
- }
- </style>
-</head>
-<body>
- <p>The test passed if all the cells are reversed.</p>
- <div class="container">
- <span class="forth">first</span>
- <span class="third">second</span>
- <span class="second">third</span>
- <span class="first">forth</span>
- </div>
-</body>
-</html>
diff --git a/tests/wpt/web-platform-tests/css/css-fonts/generic-family-keywords-001.html b/tests/wpt/web-platform-tests/css/css-fonts/generic-family-keywords-001.html
new file mode 100644
index 00000000000..aa9fb5a6a03
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-fonts/generic-family-keywords-001.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<title>CSS Test: Test generic family keywords do not match @font-face</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#family-name-syntax">
+<link rel="author" title="Koji Ishii" href="mailto:kojii@chromium.com">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+div {
+ font-size: 10px;
+}
+</style>
+<template id="fonts">
+<style>
+@font-face {
+ font-family: system-ui;
+ src: local(Ahem), url('/fonts/Ahem.ttf');
+}
+</style>
+</template>
+<body onload="onLoad()">
+ <div><span id="system-ui" style="font-family: system-ui">00000</span></div>
+<script>
+function onLoad() {
+ test(() => {
+ let element = document.getElementById('system-ui');
+ let expected_width = element.offsetWidth;
+
+ // Insert the @font-face rule.
+ let template = document.getElementById('fonts');
+ document.documentElement.appendChild(template.content.cloneNode(true));
+
+ assert_equals(element.offsetWidth, expected_width);
+ });
+};
+</script>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-margin-border-padding-vertical-lr.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-margin-border-padding-vertical-lr.html
new file mode 100644
index 00000000000..9c9e944df04
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-margin-border-padding-vertical-lr.html
@@ -0,0 +1,240 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Grid Layout test: box model parts and alignment properties, vertical-LR writing mode</title>
+<link rel="author" title="Rossana Monteriso" href="mailto:rmonteriso@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-align-3/">
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-4/#propdef-writing-mode">
+<meta name="assert" content="This test checks that the 'margin', 'border' and 'padding' properties are applied together correctly for 'align' and 'justify' properties on vertical-LR grids, in both LTR and RTL directions.">
+<meta name="flags" content="ahem">
+<link rel="stylesheet" href="/css/support/grid.css">
+<link rel="stylesheet" href="/css/support/alignment.css">
+<link rel="stylesheet" href="/css/support/width-keyword-classes.css">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+
+<style>
+
+.grid {
+ grid-template-columns: 100px 200px;
+ grid-template-rows: 200px 200px;
+ padding: 10px 15px 20px 30px;
+ border-width: 5px 10px 15px 20px;
+ border-style: dotted;
+ border-color: blue;
+ position: relative;
+}
+
+.cell {
+ width: 20px;
+ height: 40px;
+ margin: 4px 8px 12px 16px;
+}
+</style>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+<body onload="checkLayout('.grid')">
+
+<p>This test checks that the 'margin', 'border' and 'padding' properties are applied together correctly for 'align' and 'justify' properties on vertical-LR grids.</p>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: LTR | align-items: 'auto' | justify-items: 'auto'</p>
+ <div class="grid fit-content verticalLR" data-expected-width="475" data-expected-height="350">
+ <div class="cell firstRowFirstColumn" data-offset-x="46" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div>
+ <div class="cell firstRowSecondColumn" data-offset-x="46" data-offset-y="114" data-expected-width="20" data-expected-height="40"></div>
+ <div class="cell secondRowFirstColumn" data-offset-x="246" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div>
+ <div class="cell secondRowSecondColumn" data-offset-x="246" data-offset-y="114" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: LTR | align-items: 'center' | justify-items: 'center'</p>
+ <div class="grid fit-content verticalLR itemsCenter" data-expected-width="475" data-expected-height="350">
+ <div class="firstRowFirstColumn cell" data-offset-x="124" data-offset-y="36" data-expected-width="20" data-expected-height="40"></div>
+ <div class="selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div>
+ <div class="selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div>
+ <div class="cell secondRowSecondColumn" data-offset-x="324" data-offset-y="186" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: LTR | align-items: 'end' | justify-items: 'end'</p>
+ <div class="grid fit-content verticalLR itemsEnd" data-expected-width="475" data-expected-height="350">
+ <div class="cell firstRowFirstColumn" data-offset-x="202" data-offset-y="58" data-expected-width="20" data-expected-height="40"></div>
+ <div class="selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div>
+ <div class="selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div>
+ <div class="cell secondRowSecondColumn" data-offset-x="402" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: LTR | align-items: 'left' | justify-items: 'left'</p>
+ <div class="grid fit-content verticalLR itemsLeft" data-expected-width="475" data-expected-height="350">
+ <div class="cell firstRowFirstColumn" data-offset-x="46" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div>
+ <div class="selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div>
+ <div class="selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div>
+ <div class="cell secondRowSecondColumn" data-offset-x="246" data-offset-y="114" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: LTR | align-items: 'start' | justify-items: 'right'</p>
+ <div class="grid fit-content verticalLR alignItemsStart justifyItemsRight" data-expected-width="475" data-expected-height="350">
+ <div class="cell firstRowFirstColumn" data-offset-x="46" data-offset-y="58" data-expected-width="20" data-expected-height="40"></div>
+ <div class="selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div>
+ <div class="selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div>
+ <div class="cell secondRowSecondColumn" data-offset-x="246" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: LTR (ortho) | align-items: 'self-start' (vertical-lr) | justify-items: 'self-start' (direction: rtl)</p>
+ <div class="grid fit-content directionLTR verticalLR itemsSelfStart" data-expected-width="475" data-expected-height="350">
+ <div class="directionRTL cell firstRowFirstColumn" data-offset-x="46" data-offset-y="58" data-expected-width="20" data-expected-height="40"></div>
+ <div class="directionRTL selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div>
+ <div class="directionRTL selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div>
+ <div class="directionRTL cell secondRowSecondColumn" data-offset-x="246" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: LTR (ortho) | align-items: 'self-end' (vertical-lr) | justify-items: 'self-end' (direction: rtl)</p>
+ <div class="grid fit-content directionLTR verticalLR itemsSelfEnd" data-expected-width="475" data-expected-height="350">
+ <div class="directionRTL cell firstRowFirstColumn" data-offset-x="202" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div>
+ <div class="directionRTL selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div>
+ <div class="directionRTL selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div>
+ <div class="directionRTL cell secondRowSecondColumn" data-offset-x="402" data-offset-y="114" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: LTR (parall) | align-items: 'self-start' | justify-items: 'self-start'</p>
+ <div class="grid fit-content directionLTR verticalLR itemsSelfStart" data-expected-width="475" data-expected-height="350">
+ <div class="directionLTR cell firstRowFirstColumn" data-offset-x="46" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div>
+ <div class="directionLTR selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div>
+ <div class="directionLTR selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div>
+ <div class="directionLTR cell secondRowSecondColumn" data-offset-x="246" data-offset-y="114" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: LTR (parall) | align-items: 'self-end' | justify-items: 'self-end'</p>
+ <div class="grid fit-content directionLTR verticalLR itemsSelfEnd" data-expected-width="475" data-expected-height="350">
+ <div class="directionLTR cell firstRowFirstColumn" data-offset-x="202" data-offset-y="58" data-expected-width="20" data-expected-height="40"></div>
+ <div class="directionLTR selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div>
+ <div class="directionLTR selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div>
+ <div class="directionLTR cell secondRowSecondColumn" data-offset-x="402" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<!-- RTL direction. -->
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: RTL | align-items: 'auto' | justify-items: 'auto'</p>
+ <div class="grid fit-content verticalLR directionRTL" data-expected-width="475" data-expected-height="350">
+ <div class="cell firstRowFirstColumn" data-offset-x="46" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div>
+ <div class="cell firstRowSecondColumn" data-offset-x="46" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div>
+ <div class="cell secondRowFirstColumn" data-offset-x="246" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div>
+ <div class="cell secondRowSecondColumn" data-offset-x="246" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: RTL | align-items: 'center' | justify-items: 'center'</p>
+ <div class="grid fit-content verticalLR directionRTL itemsCenter" data-expected-width="475" data-expected-height="350">
+ <div class="cell firstRowFirstColumn" data-offset-x="124" data-offset-y="236" data-expected-width="20" data-expected-height="40"></div>
+ <div class="selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div>
+ <div class="selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div>
+ <div class="cell secondRowSecondColumn" data-offset-x="324" data-offset-y="86" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: RTL | align-items: 'end' | justify-items: 'end'</p>
+ <div class="grid fit-content verticalLR directionRTL itemsEnd" data-expected-width="475" data-expected-height="350">
+ <div class="cell firstRowFirstColumn" data-offset-x="202" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div>
+ <div class="selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div>
+ <div class="selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div>
+ <div class="cell secondRowSecondColumn" data-offset-x="402" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: RTL | align-items: 'start' | justify-items: 'left'</p>
+ <div class="grid fit-content verticalLR directionRTL alignItemsStart justifyItemsLeft" data-expected-width="475" data-expected-height="350">
+ <div class="cell firstRowFirstColumn" data-offset-x="46" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div>
+ <div class="selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div>
+ <div class="selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div>
+ <div class="cell secondRowSecondColumn" data-offset-x="246" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: RTL | align-items: 'start' | justify-items: 'right'</p>
+ <div class="grid fit-content verticalLR directionRTL alignItemsStart justifyItemsRight" data-expected-width="475" data-expected-height="350">
+ <div class="cell firstRowFirstColumn" data-offset-x="46" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div>
+ <div class="selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div>
+ <div class="selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div>
+ <div class="cell secondRowSecondColumn" data-offset-x="246" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: RTL (ortho) | align-items: 'self-start' (vertical-lr) | justify-items: 'self-start' (direction: ltr)</p>
+ <div class="grid fit-content verticalLR directionRTL itemsSelfStart" data-expected-width="475" data-expected-height="350">
+ <div class="directionLTR cell firstRowFirstColumn" data-offset-x="46" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div>
+ <div class="directionLTR selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div>
+ <div class="directionLTR selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div>
+ <div class="directionLTR cell secondRowSecondColumn" data-offset-x="246" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: RTL (ortho) | align-items: 'self-end' (vertical-lr) | justify-items: 'self-end' (direction: ltr)</p>
+ <div class="grid fit-content verticalLR directionRTL itemsSelfEnd" data-expected-width="475" data-expected-height="350">
+ <div class="directionLTR cell firstRowFirstColumn" data-offset-x="202" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div>
+ <div class="directionLTR selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div>
+ <div class="directionLTR selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div>
+ <div class="directionLTR cell secondRowSecondColumn" data-offset-x="402" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: RTL (parall) | align-items: 'self-start' | justify-items: 'self-start'</p>
+ <div class="grid fit-content verticalLR directionRTL itemsSelfStart" data-expected-width="475" data-expected-height="350">
+ <div class="directionRTL cell firstRowFirstColumn" data-offset-x="46" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div>
+ <div class="directionRTL selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div>
+ <div class="directionRTL selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div>
+ <div class="directionRTL cell secondRowSecondColumn" data-offset-x="246" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: RTL (parall) | align-items: 'self-end' | justify-items: 'self-end'</p>
+ <div class="grid fit-content verticalLR directionRTL itemsSelfEnd" data-expected-width="475" data-expected-height="350">
+ <div class="directionRTL cell firstRowFirstColumn" data-offset-x="202" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div>
+ <div class="directionRTL selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div>
+ <div class="directionRTL selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div>
+ <div class="directionRTL cell secondRowSecondColumn" data-offset-x="402" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-margin-border-padding-vertical-rl.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-margin-border-padding-vertical-rl.html
new file mode 100644
index 00000000000..f7698e45df3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-margin-border-padding-vertical-rl.html
@@ -0,0 +1,241 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Grid Layout test: box model parts and alignment properties, vertical-RL writing mode</title>
+<link rel="author" title="Rossana Monteriso" href="mailto:rmonteriso@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-align-3/">
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-4/#propdef-writing-mode">
+<meta name="assert" content="This test checks that the 'margin', 'border' and 'padding' properties are applied together correctly for 'align' and 'justify' properties on vertical-RL grids, in both LTR and RTL directions.">
+<meta name="flags" content="ahem">
+<link rel="stylesheet" href="/css/support/grid.css">
+<link rel="stylesheet" href="/css/support/alignment.css">
+<link rel="stylesheet" href="/css/support/width-keyword-classes.css">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+
+<style>
+
+.grid {
+ grid-template-columns: 100px 200px;
+ grid-template-rows: 200px 200px;
+ padding: 10px 15px 20px 30px;
+ border-width: 5px 10px 15px 20px;
+ border-style: dotted;
+ border-color: blue;
+ position: relative;
+}
+
+.cell {
+ width: 20px;
+ height: 40px;
+ margin: 4px 8px 12px 16px;
+}
+</style>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+<body onload="checkLayout('.grid')">
+
+<p>This test checks that the 'margin', 'border' and 'padding' properties are applied together correctly for 'align' and 'justify' properties on vertical-RL grids.</p>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: LTR | align-items: 'auto' | justify-items: 'auto'</p>
+ <div class="grid fit-content verticalRL" data-expected-width="475" data-expected-height="350">
+ <div class="cell firstRowFirstColumn" data-offset-x="402" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div>
+ <div class="cell firstRowSecondColumn" data-offset-x="402" data-offset-y="114" data-expected-width="20" data-expected-height="40"></div>
+ <div class="cell secondRowFirstColumn" data-offset-x="202" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div>
+ <div class="cell secondRowSecondColumn" data-offset-x="202" data-offset-y="114" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: LTR | align-items: 'center' | justify-items: 'center'</p>
+ <div class="grid fit-content verticalRL itemsCenter" data-expected-width="475" data-expected-height="350">
+ <div class="firstRowFirstColumn cell" data-offset-x="324" data-offset-y="36" data-expected-width="20" data-expected-height="40"></div>
+ <div class="selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div>
+ <div class="selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div>
+ <div class="cell secondRowSecondColumn" data-offset-x="124" data-offset-y="186" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: LTR | align-items: 'end' | justify-items: 'end'</p>
+ <div class="grid fit-content verticalRL itemsEnd" data-expected-width="475" data-expected-height="350">
+ <div class="cell firstRowFirstColumn" data-offset-x="246" data-offset-y="58" data-expected-width="20" data-expected-height="40"></div>
+ <div class="selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div>
+ <div class="selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div>
+ <div class="cell secondRowSecondColumn" data-offset-x="46" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: LTR | align-items: 'left' | justify-items: 'left'</p>
+ <div class="grid fit-content verticalRL itemsLeft" data-expected-width="475" data-expected-height="350">
+ <div class="cell firstRowFirstColumn" data-offset-x="402" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div>
+ <div class="selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div>
+ <div class="selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div>
+ <div class="cell secondRowSecondColumn" data-offset-x="202" data-offset-y="114" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: LTR | align-items: 'start' | justify-items: 'right'</p>
+ <div class="grid fit-content verticalRL alignItemsStart justifyItemsRight" data-expected-width="475" data-expected-height="350">
+ <div class="cell firstRowFirstColumn" data-offset-x="402" data-offset-y="58" data-expected-width="20" data-expected-height="40"></div>
+ <div class="selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div>
+ <div class="selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div>
+ <div class="cell secondRowSecondColumn" data-offset-x="202" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: LTR (ortho) | align-items: 'self-start' (vertical-rl) | justify-items: 'self-start' (direction: rtl)</p>
+ <div class="grid fit-content directionLTR verticalRL itemsSelfStart" data-expected-width="475" data-expected-height="350">
+ <div class="directionRTL cell firstRowFirstColumn" data-offset-x="402" data-offset-y="58" data-expected-width="20" data-expected-height="40"></div>
+ <div class="directionRTL selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div>
+ <div class="directionRTL selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div>
+ <div class="directionRTL cell secondRowSecondColumn" data-offset-x="202" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: LTR (ortho) | align-items: 'self-end' (vertical-rl) | justify-items: 'self-end' (direction: rtl)</p>
+ <div class="grid fit-content directionLTR verticalRL itemsSelfEnd" data-expected-width="475" data-expected-height="350">
+ <div class="directionRTL cell firstRowFirstColumn" data-offset-x="246" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div>
+ <div class="directionRTL selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div>
+ <div class="directionRTL selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div>
+ <div class="directionRTL cell secondRowSecondColumn" data-offset-x="46" data-offset-y="114" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: LTR (parall) | align-items: 'self-start' | justify-items: 'self-start'</p>
+ <div class="grid fit-content directionLTR verticalRL itemsSelfStart" data-expected-width="475" data-expected-height="350">
+ <div class="directionLTR cell firstRowFirstColumn" data-offset-x="402" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div>
+ <div class="directionLTR selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div>
+ <div class="directionLTR selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div>
+ <div class="directionLTR cell secondRowSecondColumn" data-offset-x="202" data-offset-y="114" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: LTR (parall) | align-items: 'self-end' | justify-items: 'self-end'</p>
+ <div class="grid fit-content directionLTR verticalRL itemsSelfEnd" data-expected-width="475" data-expected-height="350">
+ <div class="directionLTR cell firstRowFirstColumn" data-offset-x="246" data-offset-y="58" data-expected-width="20" data-expected-height="40"></div>
+ <div class="directionLTR selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div>
+ <div class="directionLTR selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div>
+ <div class="directionLTR cell secondRowSecondColumn" data-offset-x="46" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+
+<!-- RTL direction. -->
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: RTL | align-items: 'auto' | justify-items: 'auto'</p>
+ <div class="grid fit-content directionRTL verticalRL" data-expected-width="475" data-expected-height="350">
+ <div class="cell firstRowFirstColumn" data-offset-x="402" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div>
+ <div class="cell firstRowSecondColumn" data-offset-x="402" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div>
+ <div class="cell secondRowFirstColumn" data-offset-x="202" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div>
+ <div class="cell secondRowSecondColumn" data-offset-x="202" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: RTL | align-items: 'center' | justify-items: 'center'</p>
+ <div class="grid fit-content directionRTL verticalRL itemsCenter" data-expected-width="475" data-expected-height="350">
+ <div class="cell firstRowFirstColumn" data-offset-x="324" data-offset-y="236" data-expected-width="20" data-expected-height="40"></div>
+ <div class="selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div>
+ <div class="selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div>
+ <div class="cell secondRowSecondColumn" data-offset-x="124" data-offset-y="86" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: RTL | align-items: 'end' | justify-items: 'end'</p>
+ <div class="grid fit-content directionRTL verticalRL itemsEnd" data-expected-width="475" data-expected-height="350">
+ <div class="cell firstRowFirstColumn" data-offset-x="246" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div>
+ <div class="selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div>
+ <div class="selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div>
+ <div class="cell secondRowSecondColumn" data-offset-x="46" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: RTL | align-items: 'start' | justify-items: 'left'</p>
+ <div class="grid fit-content directionRTL verticalRL alignItemsStart justifyItemsLeft" data-expected-width="475" data-expected-height="350">
+ <div class="cell firstRowFirstColumn" data-offset-x="402" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div>
+ <div class="selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div>
+ <div class="selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div>
+ <div class="cell secondRowSecondColumn" data-offset-x="202" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: RTL | align-items: 'start' | justify-items: 'right'</p>
+ <div class="grid fit-content directionRTL verticalRL alignItemsStart justifyItemsRight" data-expected-width="475" data-expected-height="350">
+ <div class="cell firstRowFirstColumn" data-offset-x="402" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div>
+ <div class="selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div>
+ <div class="selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div>
+ <div class="cell secondRowSecondColumn" data-offset-x="202" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: RTL (ortho) | align-items: 'self-start' (vertical-rl) | justify-items: 'self-start' (direction: ltr)</p>
+ <div class="grid fit-content directionRTL verticalRL itemsSelfStart" data-expected-width="475" data-expected-height="350">
+ <div class="directionLTR cell firstRowFirstColumn" data-offset-x="402" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div>
+ <div class="directionLTR selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div>
+ <div class="directionLTR selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div>
+ <div class="directionLTR cell secondRowSecondColumn" data-offset-x="202" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: RTL (ortho) | align-items: 'self-end' (vertical-rl) | justify-items: 'self-end' (direction: ltr)</p>
+ <div class="grid fit-content directionRTL verticalRL itemsSelfEnd" data-expected-width="475" data-expected-height="350">
+ <div class="directionLTR cell firstRowFirstColumn" data-offset-x="246" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div>
+ <div class="directionLTR selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div>
+ <div class="directionLTR selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div>
+ <div class="directionLTR cell secondRowSecondColumn" data-offset-x="46" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: RTL (parall) | align-items: 'self-start' | justify-items: 'self-start'</p>
+ <div class="grid fit-content directionRTL verticalRL itemsSelfStart" data-expected-width="475" data-expected-height="350">
+ <div class="directionRTL cell firstRowFirstColumn" data-offset-x="402" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div>
+ <div class="directionRTL selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div>
+ <div class="directionRTL selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div>
+ <div class="directionRTL cell secondRowSecondColumn" data-offset-x="202" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: RTL (parall) | align-items: 'self-end' | justify-items: 'self-end'</p>
+ <div class="grid fit-content directionRTL verticalRL itemsSelfEnd" data-expected-width="475" data-expected-height="350">
+ <div class="directionRTL cell firstRowFirstColumn" data-offset-x="246" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div>
+ <div class="directionRTL selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div>
+ <div class="directionRTL selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div>
+ <div class="directionRTL cell secondRowSecondColumn" data-offset-x="46" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-margin-border-padding.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-margin-border-padding.html
new file mode 100644
index 00000000000..9cdce092cc3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-margin-border-padding.html
@@ -0,0 +1,239 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Grid Layout test: box model parts and alignment properties</title>
+<link rel="author" title="Rossana Monteriso" href="mailto:rmonteriso@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-align-3/">
+<meta name="assert" content="This test checks that the 'margin', 'border' and 'padding' properties are applied together correctly for 'align' and 'justify' properties, in both LTR and RTL directions.">
+<meta name="flags" content="ahem">
+<link rel="stylesheet" href="/css/support/grid.css">
+<link rel="stylesheet" href="/css/support/alignment.css">
+<link rel="stylesheet" href="/css/support/width-keyword-classes.css">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+
+<style>
+
+.grid {
+ grid-template-columns: 100px 200px;
+ grid-template-rows: 200px 200px;
+ padding: 10px 15px 20px 30px;
+ border-width: 5px 10px 15px 20px;
+ border-style: dotted;
+ border-color: blue;
+ position: relative;
+}
+
+.cell {
+ width: 20px;
+ height: 40px;
+ margin: 4px 8px 12px 16px;
+}
+</style>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+<body onload="checkLayout('.grid')">
+
+<p>This test checks that the 'margin', 'border' and 'padding' properties are applied together correctly for 'align' and 'justify' properties.</p>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: LTR | align-items: 'auto' | justify-items: 'auto'</p>
+ <div class="grid fit-content" data-expected-width="375" data-expected-height="450">
+ <div class="cell firstRowFirstColumn" data-offset-x="46" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div>
+ <div class="cell firstRowSecondColumn" data-offset-x="146" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div>
+ <div class="cell secondRowFirstColumn" data-offset-x="46" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div>
+ <div class="cell secondRowSecondColumn" data-offset-x="146" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: LTR | align-items: 'center' | justify-items: 'center'</p>
+ <div class="grid fit-content itemsCenter" data-expected-width="375" data-expected-height="450">
+ <div class="firstRowFirstColumn cell" data-offset-x="74" data-offset-y="86" data-expected-width="20" data-expected-height="40"></div>
+ <div class="selfStretch firstRowSecondColumn" data-offset-x="130" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div>
+ <div class="selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div>
+ <div class="cell secondRowSecondColumn" data-offset-x="224" data-offset-y="286" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: LTR | align-items: 'end' | justify-items: 'end'</p>
+ <div class="grid fit-content itemsEnd" data-expected-width="375" data-expected-height="450">
+ <div class="cell firstRowFirstColumn" data-offset-x="102" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div>
+ <div class="selfStretch firstRowSecondColumn" data-offset-x="130" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div>
+ <div class="selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div>
+ <div class="cell secondRowSecondColumn" data-offset-x="302" data-offset-y="358" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: LTR | align-items: 'start' | justify-items: 'left'</p>
+ <div class="grid fit-content alignItemsStart justifyItemsLeft" data-expected-width="375" data-expected-height="450">
+ <div class="cell firstRowFirstColumn" data-offset-x="46" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div>
+ <div class="selfStretch firstRowSecondColumn" data-offset-x="130" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div>
+ <div class="selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div>
+ <div class="cell secondRowSecondColumn" data-offset-x="146" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: LTR | align-items: 'start' | justify-items: 'right'</p>
+ <div class="grid fit-content alignItemsStart justifyItemsRight" data-expected-width="375" data-expected-height="450">
+ <div class="cell firstRowFirstColumn" data-offset-x="102" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div>
+ <div class="selfStretch firstRowSecondColumn" data-offset-x="130" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div>
+ <div class="selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div>
+ <div class="cell secondRowSecondColumn" data-offset-x="302" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: LTR (ortho) | align-items: 'self-start' | justify-items: 'self-start'</p>
+ <div class="grid fit-content directionLTR itemsSelfStart" data-expected-width="375" data-expected-height="450">
+ <div class="directionRTL cell firstRowFirstColumn" data-offset-x="102" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div>
+ <div class="directionRTL selfStretch firstRowSecondColumn" data-offset-x="130" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div>
+ <div class="directionRTL selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div>
+ <div class="directionRTL cell secondRowSecondColumn" data-offset-x="302" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: LTR (ortho) | align-items: 'self-end' | justify-items: 'self-end'</p>
+ <div class="grid fit-content directionLTR itemsSelfEnd" data-expected-width="375" data-expected-height="450">
+ <div class="directionRTL cell firstRowFirstColumn" data-offset-x="46" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div>
+ <div class="directionRTL selfStretch firstRowSecondColumn" data-offset-x="130" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div>
+ <div class="directionRTL selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div>
+ <div class="directionRTL cell secondRowSecondColumn" data-offset-x="146" data-offset-y="358" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: LTR (parall) | align-items: 'self-start' | justify-items: 'self-start'</p>
+ <div class="grid fit-content directionLTR itemsSelfStart" data-expected-width="375" data-expected-height="450">
+ <div class="directionLTR cell firstRowFirstColumn" data-offset-x="46" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div>
+ <div class="directionLTR selfStretch firstRowSecondColumn" data-offset-x="130" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div>
+ <div class="directionLTR selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div>
+ <div class="directionLTR cell secondRowSecondColumn" data-offset-x="146" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: LTR - (parall) | align-items: 'self-end' | justify-items: 'self-end'</p>
+ <div class="grid fit-content directionLTR itemsSelfEnd" data-expected-width="375" data-expected-height="450">
+ <div class="directionLTR cell firstRowFirstColumn" data-offset-x="102" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div>
+ <div class="directionLTR selfStretch firstRowSecondColumn" data-offset-x="130" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div>
+ <div class="directionLTR selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div>
+ <div class="directionLTR cell secondRowSecondColumn" data-offset-x="302" data-offset-y="358" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<!-- RTL direction. -->
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: RTL | align-items: 'auto' | justify-items: 'auto'</p>
+ <div class="grid fit-content directionRTL" data-expected-width="375" data-expected-height="450">
+ <div class="cell firstRowFirstColumn" data-offset-x="302" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div>
+ <div class="cell firstRowSecondColumn" data-offset-x="202" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div>
+ <div class="cell secondRowFirstColumn" data-offset-x="302" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div>
+ <div class="cell secondRowSecondColumn" data-offset-x="202" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: RTL | align-items: 'center' | justify-items: 'center'</p>
+ <div class="grid fit-content directionRTL itemsCenter" data-expected-width="375" data-expected-height="450">
+ <div class="cell firstRowFirstColumn" data-offset-x="274" data-offset-y="86" data-expected-width="20" data-expected-height="40"></div>
+ <div class="selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div>
+ <div class="selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div>
+ <div class="cell secondRowSecondColumn" data-offset-x="124" data-offset-y="286" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: RTL | align-items: 'end' | justify-items: 'end'</p>
+ <div class="grid fit-content directionRTL itemsEnd" data-expected-width="375" data-expected-height="450">
+ <div class="cell firstRowFirstColumn" data-offset-x="246" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div>
+ <div class="selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div>
+ <div class="selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div>
+ <div class="cell secondRowSecondColumn" data-offset-x="46" data-offset-y="358" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: RTL | align-items: 'start' | justify-items: 'left'</p>
+ <div class="grid fit-content directionRTL alignItemsStart justifyItemsLeft" data-expected-width="375" data-expected-height="450">
+ <div class="cell firstRowFirstColumn" data-offset-x="246" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div>
+ <div class="selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div>
+ <div class="selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div>
+ <div class="cell secondRowSecondColumn" data-offset-x="46" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: RTL | align-items: 'start' | justify-items: 'right'</p>
+ <div class="grid fit-content directionRTL alignItemsStart justifyItemsRight" data-expected-width="375" data-expected-height="450">
+ <div class="cell firstRowFirstColumn" data-offset-x="302" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div>
+ <div class="selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div>
+ <div class="selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div>
+ <div class="cell secondRowSecondColumn" data-offset-x="202" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: RTL (ortho) | align-items: 'self-start' | justify-items: 'self-start'</p>
+ <div class="grid fit-content directionRTL itemsSelfStart" data-expected-width="375" data-expected-height="450">
+ <div class="directionLTR cell firstRowFirstColumn" data-offset-x="246" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div>
+ <div class="directionLTR selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div>
+ <div class="directionLTR selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div>
+ <div class="directionLTR cell secondRowSecondColumn" data-offset-x="46" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: RTL (ortho) | align-items: 'self-end' | justify-items: 'self-end'</p>
+ <div class="grid fit-content directionRTL itemsSelfEnd" data-expected-width="375" data-expected-height="450">
+ <div class="directionLTR cell firstRowFirstColumn" data-offset-x="302" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div>
+ <div class="directionLTR selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div>
+ <div class="directionLTR selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div>
+ <div class="directionLTR cell secondRowSecondColumn" data-offset-x="202" data-offset-y="358" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: RTL (parall) | align-items: 'self-start' | justify-items: 'self-start'</p>
+ <div class="grid fit-content directionRTL itemsSelfStart" data-expected-width="375" data-expected-height="450">
+ <div class="directionRTL cell firstRowFirstColumn" data-offset-x="302" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div>
+ <div class="directionRTL selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div>
+ <div class="directionRTL selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div>
+ <div class="directionRTL cell secondRowSecondColumn" data-offset-x="202" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div>
+ <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br>
+ direction: RTL (parall) | align-items: 'self-end' | justify-items: 'self-end'</p>
+ <div class="grid fit-content directionRTL itemsSelfEnd" data-expected-width="375" data-expected-height="450">
+ <div class="directionRTL cell firstRowFirstColumn" data-offset-x="246" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div>
+ <div class="directionRTL selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div>
+ <div class="directionRTL selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div>
+ <div class="directionRTL cell secondRowSecondColumn" data-offset-x="46" data-offset-y="358" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-overflow.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-overflow.html
new file mode 100644
index 00000000000..f0d94198aff
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-overflow.html
@@ -0,0 +1,134 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Grid Layout Test: overflow for justify and align</title>
+<link rel="author" title="Rossana Monteriso" href="mailto:rmonteriso@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#overflow-values">
+<meta name="assert" content="This test checks that both safe and unsafe overflow positions are applied correctly for align-items and justify-items properties.">
+<meta name="flags" content="ahem">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<link rel="stylesheet" href="/css/support/grid.css">
+<link rel="stylesheet" href="/css/support/alignment.css">
+<link rel="stylesheet" href="/css/support/width-keyword-classes.css">
+
+<style>
+
+.grid {
+ grid-template-columns: 150px 150px;
+ grid-template-rows: 120px 120px 120px;
+ margin-bottom: 20px;
+}
+.cellOverflowWidth {
+ width: 180px;
+ height: 40px;
+}
+.cellOverflowHeight {
+ width: 50px;
+ height: 150px;
+}
+.cellWithNoOverflow {
+ width: 50px;
+ height: 40px;
+}
+.thirdRowFirstColumn {
+ background-color: green;
+ grid-column: 1;
+ grid-row: 3;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+<body onload="checkLayout('.grid')">
+
+<p>This test checks that the 'overflow' keyword is applied correctly for 'align' and 'justify' properties.</p>
+
+<div style="position: relative">
+ <div class="grid fit-content alignItemsCenter justifyItemsCenter" data-expected-width="300" data-expected-height="360">
+ <div class="cellOverflowWidth firstRowFirstColumn" data-offset-x="-15" data-offset-y="40" data-expected-width="180" data-expected-height="40"></div>
+ <div class="cellWithNoOverflow secondRowFirstColumn" data-offset-x="50" data-offset-y="160" data-expected-width="50" data-expected-height="40"></div>
+ <div class="cellWithNoOverflow thirdRowFirstColumn" data-offset-x="50" data-offset-y="280" data-expected-width="50" data-expected-height="40"></div>
+ <div class="cellWithNoOverflow firstRowSecondColumn" data-offset-x="200" data-offset-y="40" data-expected-width="50" data-expected-height="40"></div>
+ <div class="cellOverflowWidth secondRowSecondColumn" data-offset-x="135" data-offset-y="160" data-expected-width="180" data-expected-height="40"></div>
+ <div class="cellWithNoOverflow thirdRowSecondColumn" data-offset-x="200" data-offset-y="280" data-expected-width="50" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <div class="grid fit-content alignItemsUnsafeCenter justifyItemsUnsafeCenter" data-expected-width="300" data-expected-height="360">
+ <div class="cellOverflowHeight firstRowFirstColumn" data-offset-x="50" data-offset-y="-15" data-expected-width="50" data-expected-height="150"></div>
+ <div class="cellWithNoOverflow secondRowFirstColumn" data-offset-x="50" data-offset-y="160" data-expected-width="50" data-expected-height="40"></div>
+ <div class="cellWithNoOverflow thirdRowFirstColumn" data-offset-x="50" data-offset-y="280" data-expected-width="50" data-expected-height="40"></div>
+ <div class="cellWithNoOverflow firstRowSecondColumn" data-offset-x="200" data-offset-y="40" data-expected-width="50" data-expected-height="40"></div>
+ <div class="cellOverflowHeight secondRowSecondColumn" data-offset-x="200" data-offset-y="105" data-expected-width="50" data-expected-height="150"></div>
+ <div class="cellWithNoOverflow thirdRowSecondColumn" data-offset-x="200" data-offset-y="280" data-expected-width="50" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <div class="grid fit-content alignItemsSafeCenter justifyItemsSafeCenter" data-expected-width="300" data-expected-height="360">
+ <div class="cellOverflowWidth firstRowFirstColumn" data-offset-x="0" data-offset-y="40" data-expected-width="180" data-expected-height="40"></div>
+ <div class="cellWithNoOverflow secondRowFirstColumn" data-offset-x="50" data-offset-y="160" data-expected-width="50" data-expected-height="40"></div>
+ <div class="cellWithNoOverflow thirdRowFirstColumn" data-offset-x="50" data-offset-y="280" data-expected-width="50" data-expected-height="40"></div>
+ <div class="cellWithNoOverflow firstRowSecondColumn" data-offset-x="200" data-offset-y="40" data-expected-width="50" data-expected-height="40"></div>
+ <div class="cellOverflowWidth secondRowSecondColumn" data-offset-x="150" data-offset-y="160" data-expected-width="180" data-expected-height="40"></div>
+ <div class="cellWithNoOverflow thirdRowSecondColumn" data-offset-x="200" data-offset-y="280" data-expected-width="50" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <div class="grid fit-content alignItemsSafeCenter justifyItemsSafeCenter" data-expected-width="300" data-expected-height="360">
+ <div class="cellOverflowHeight firstRowFirstColumn" data-offset-x="50" data-offset-y="0" data-expected-width="50" data-expected-height="150"></div>
+ <div class="cellWithNoOverflow secondRowFirstColumn" data-offset-x="50" data-offset-y="160" data-expected-width="50" data-expected-height="40"></div>
+ <div class="cellWithNoOverflow thirdRowFirstColumn" data-offset-x="50" data-offset-y="280" data-expected-width="50" data-expected-height="40"></div>
+ <div class="cellWithNoOverflow firstRowSecondColumn" data-offset-x="200" data-offset-y="40" data-expected-width="50" data-expected-height="40"></div>
+ <div class="cellOverflowHeight secondRowSecondColumn alignSelfCenterSafe justifySelfCenterSafe" data-offset-x="200" data-offset-y="120" data-expected-width="50" data-expected-height="150"></div>
+ <div class="cellWithNoOverflow thirdRowSecondColumn" data-offset-x="200" data-offset-y="280" data-expected-width="50" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <div class="grid fit-content alignItemsEnd justifyItemsEnd" data-expected-width="300" data-expected-height="360">
+ <div class="cellOverflowWidth firstRowFirstColumn" data-offset-x="-30" data-offset-y="80" data-expected-width="180" data-expected-height="40"></div>
+ <div class="cellWithNoOverflow secondRowFirstColumn justifySelfCenter" data-offset-x="50" data-offset-y="200" data-expected-width="50" data-expected-height="40"></div>
+ <div class="cellWithNoOverflow thirdRowFirstColumn" data-offset-x="100" data-offset-y="320" data-expected-width="50" data-expected-height="40"></div>
+ <div class="cellWithNoOverflow firstRowSecondColumn" data-offset-x="250" data-offset-y="80" data-expected-width="50" data-expected-height="40"></div>
+ <div class="cellOverflowWidth secondRowSecondColumn" data-offset-x="120" data-offset-y="200" data-expected-width="180" data-expected-height="40"></div>
+ <div class="cellWithNoOverflow thirdRowSecondColumn" data-offset-x="250" data-offset-y="320" data-expected-width="50" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <div class="grid fit-content alignItemsUnsafeEnd justifyItemsUnsafeEnd" data-expected-width="300" data-expected-height="360">
+ <div class="cellOverflowHeight firstRowFirstColumn" data-offset-x="100" data-offset-y="-30" data-expected-width="50" data-expected-height="150"></div>
+ <div class="cellWithNoOverflow secondRowFirstColumn" data-offset-x="100" data-offset-y="200" data-expected-width="50" data-expected-height="40"></div>
+ <div class="cellWithNoOverflow thirdRowFirstColumn" data-offset-x="100" data-offset-y="320" data-expected-width="50" data-expected-height="40"></div>
+ <div class="cellWithNoOverflow firstRowSecondColumn alignSelfCenter" data-offset-x="250" data-offset-y="40" data-expected-width="50" data-expected-height="40"></div>
+ <div class="cellOverflowHeight secondRowSecondColumn" data-offset-x="250" data-offset-y="90" data-expected-width="50" data-expected-height="150"></div>
+ <div class="cellWithNoOverflow thirdRowSecondColumn" data-offset-x="250" data-offset-y="320" data-expected-width="50" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <div class="grid fit-content alignItemsSafeEnd justifyItemsSafeEnd" data-expected-width="300" data-expected-height="360">
+ <div class="cellOverflowWidth firstRowFirstColumn" data-offset-x="0" data-offset-y="80" data-expected-width="180" data-expected-height="40"></div>
+ <div class="cellWithNoOverflow secondRowFirstColumn justifySelfUnsafeCenter" data-offset-x="50" data-offset-y="200" data-expected-width="50" data-expected-height="40"></div>
+ <div class="cellWithNoOverflow thirdRowFirstColumn" data-offset-x="100" data-offset-y="320" data-expected-width="50" data-expected-height="40"></div>
+ <div class="cellWithNoOverflow firstRowSecondColumn" data-offset-x="250" data-offset-y="80" data-expected-width="50" data-expected-height="40"></div>
+ <div class="cellOverflowWidth secondRowSecondColumn" data-offset-x="150" data-offset-y="200" data-expected-width="180" data-expected-height="40"></div>
+ <div class="cellWithNoOverflow thirdRowSecondColumn" data-offset-x="250" data-offset-y="320" data-expected-width="50" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <div class="grid fit-content alignItemsSafeEnd justifyItemsSafeEnd" data-expected-width="300" data-expected-height="360">
+ <div class="cellOverflowHeight firstRowFirstColumn" data-offset-x="100" data-offset-y="0" data-expected-width="50" data-expected-height="150"></div>
+ <div class="cellWithNoOverflow secondRowFirstColumn" data-offset-x="100" data-offset-y="200" data-expected-width="50" data-expected-height="40"></div>
+ <div class="cellWithNoOverflow thirdRowFirstColumn" data-offset-x="100" data-offset-y="320" data-expected-width="50" data-expected-height="40"></div>
+ <div class="cellWithNoOverflow firstRowSecondColumn alignSelfUnsafeCenter" data-offset-x="250" data-offset-y="40" data-expected-width="50" data-expected-height="40"></div>
+ <div class="cellOverflowHeight secondRowSecondColumn" data-offset-x="250" data-offset-y="120" data-expected-width="50" data-expected-height="150"></div>
+ <div class="cellWithNoOverflow thirdRowSecondColumn" data-offset-x="250" data-offset-y="320" data-expected-width="50" data-expected-height="40"></div>
+ </div>
+</div>
+
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-stretch-with-orthogonal-flows.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-stretch-with-orthogonal-flows.html
new file mode 100644
index 00000000000..c8fd3400060
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-stretch-with-orthogonal-flows.html
@@ -0,0 +1,124 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Grid Layout test:align stretch with orthogonal flows</title>
+<link rel="author" title="Rossana Monteriso" href="mailto:rmonteriso@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-4/#orthogonal-flows">
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#distribution-values">
+<meta name="assert" content="This test checks that stretching alignment works as expected with orthogonal flows, in horizontal and vertical writing mode.">
+<meta name="flags" content="ahem">
+<link rel="stylesheet" href="/css/support/grid.css">
+<link rel="stylesheet" href="/css/support/alignment.css">
+<link rel="stylesheet" href="/css/support/width-keyword-classes.css">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+
+<style>
+
+.container {
+ position: relative;
+}
+.grid {
+ grid-template-columns: 100px 100px;
+ grid-template-rows: 150px 150px;
+ font: 10px/1 ahem;
+ margin-bottom: 20px;
+}
+.widthAndHeightSet {
+ width: 20px;
+ height: 40px;
+}
+.onlyWidthSet { width: 20px; }
+.onlyHeightSet { height: 40px; }
+.maxHeight { max-height: 160px; }
+.maxWidth { max-width: 90px; }
+.minWidth { min-width: 120px; }
+.minHeight { min-height: 220px; }
+.topAutoMargin { margin-top: auto; }
+.bottomAutoMargin { margin-bottom: auto; }
+.leftAutoMargin { margin-left: auto; }
+.rightAutoMargin { margin-right: auto; }
+</style>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+<body onload="checkLayout('.grid')">
+
+<p>This test checks that stretching alignment works as expected with orthogonal flows.</p>
+
+<p>HORIZONTAL vs VERTICAL-RL</p>
+<div class="container">
+ <div class="grid fit-content" data-expected-width="200" data-expected-height="300">
+ <div class="verticalRL firstRowFirstColumn selfStretch widthAndHeightSet" data-expected-width="20" data-expected-height="40">XXX</div>
+ <div class="verticalRL firstRowSecondColumn selfStretch onlyWidthSet" data-expected-width="20" data-expected-height="150">XXX</div>
+ <div class="verticalRL secondRowFirstColumn selfStretch onlyHeightSet" data-expected-width="100" data-expected-height="40">XXX</div>
+ <div class="verticalRL secondRowSecondColumn selfSelfStart" data-expected-width="10" data-expected-height="30">XXX</div>
+ </div>
+</div>
+
+<div class="container">
+ <div class="grid fit-content" data-expected-width="200" data-expected-height="300">
+ <div class="verticalRL firstRowFirstColumn selfStretch bottomAutoMargin" data-expected-width="100" data-expected-height="30">XXX</div>
+ <div class="verticalRL firstRowSecondColumn selfStretch leftAutoMargin" data-expected-width="10" data-expected-height="150">XXX</div>
+ <div class="verticalRL secondRowFirstColumn selfStretch topAutoMargin" data-expected-width="100" data-expected-height="30">XXX</div>
+ <div class="verticalRL secondRowSecondColumn selfStretch rightAutoMargin" data-expected-width="10" data-expected-height="150">XXX</div>
+ </div>
+</div>
+
+<p>HORIZONTAL vs VERTICAL-LR</p>
+<div class="container">
+ <div class="grid fit-content" data-expected-width="200" data-expected-height="300">
+ <div class="verticalLR firstRowFirstColumn selfStretch widthAndHeightSet" data-expected-width="20" data-expected-height="40">XXX</div>
+ <div class="verticalLR firstRowSecondColumn selfStretch onlyWidthSet" data-expected-width="20" data-expected-height="150">XXX</div>
+ <div class="verticalLR secondRowFirstColumn selfStretch onlyHeightSet" data-expected-width="100" data-expected-height="40">XXX</div>
+ <div class="verticalLR secondRowSecondColumn selfSelfStart" data-expected-width="10" data-expected-height="30">XXX</div>
+ </div>
+</div>
+<div class="container">
+ <div class="grid fit-content" data-expected-width="200" data-expected-height="300">
+ <div class="verticalLR firstRowFirstColumn selfStretch bottomAutoMargin" data-expected-width="100" data-expected-height="30">XXX</div>
+ <div class="verticalLR firstRowSecondColumn selfStretch leftAutoMargin" data-expected-width="10" data-expected-height="150">XXX</div>
+ <div class="verticalLR secondRowFirstColumn selfStretch topAutoMargin" data-expected-width="100" data-expected-height="30">XXX</div>
+ <div class="verticalLR secondRowSecondColumn selfStretch rightAutoMargin" data-expected-width="10" data-expected-height="150">XXX</div>
+ </div>
+</div>
+
+<p>VERTICAL-RL vs HORIZONTAL</p>
+<div class="container">
+ <div class="grid fit-content verticalRL" data-expected-width="300" data-expected-height="200">
+ <div class="horizontalTB firstRowFirstColumn selfStretch widthAndHeightSet" data-expected-width="20" data-expected-height="40">XXX</div>
+ <div class="horizontalTB firstRowSecondColumn selfStretch onlyWidthSet" data-expected-width="20" data-expected-height="100">XXX</div>
+ <div class="horizontalTB secondRowFirstColumn selfStretch onlyHeightSet" data-expected-width="150" data-expected-height="40">XXX</div>
+ <div class="horizontalTB secondRowSecondColumn selfSelfStart" data-expected-width="30" data-expected-height="10">XXX</div>
+ </div>
+</div>
+<div class="container">
+ <div class="grid fit-content verticalRL" data-expected-width="300" data-expected-height="200">
+ <div class="horizontalTB firstRowFirstColumn selfStretch bottomAutoMargin" data-expected-width="150" data-expected-height="10">XXX</div>
+ <div class="horizontalTB firstRowSecondColumn selfStretch leftAutoMargin" data-expected-width="30" data-expected-height="100">XXX</div>
+ <div class="horizontalTB secondRowFirstColumn selfStretch topAutoMargin" data-expected-width="150" data-expected-height="10">XXX</div>
+ <div class="horizontalTB secondRowSecondColumn selfStretch rightAutoMargin" data-expected-width="30" data-expected-height="100">XXX</div>
+ </div>
+</div>
+
+<p>VERTICAL-LR vs HORIZONTAL</p>
+<div class="container">
+ <div class="grid fit-content verticalLR" data-expected-width="300" data-expected-height="200">
+ <div class="horizontalTB firstRowFirstColumn selfStretch widthAndHeightSet" data-expected-width="20" data-expected-height="40">XXX</div>
+ <div class="horizontalTB firstRowSecondColumn selfStretch onlyWidthSet" data-expected-width="20" data-expected-height="100">XXX</div>
+ <div class="horizontalTB secondRowFirstColumn selfStretch onlyHeightSet" data-expected-width="150" data-expected-height="40">XXX</div>
+ <div class="horizontalTB secondRowSecondColumn selfSelfStart" data-expected-width="30" data-expected-height="10">XXX</div>
+ </div>
+</div>
+<div class="container">
+ <div class="grid fit-content verticalLR" data-expected-width="300" data-expected-height="200">
+ <div class="horizontalTB firstRowFirstColumn selfStretch bottomAutoMargin" data-expected-width="150" data-expected-height="10">XXX</div>
+ <div class="horizontalTB firstRowSecondColumn selfStretch leftAutoMargin" data-expected-width="30" data-expected-height="100">XXX</div>
+ <div class="horizontalTB secondRowFirstColumn selfStretch topAutoMargin" data-expected-width="150" data-expected-height="10">XXX</div>
+ <div class="horizontalTB secondRowSecondColumn selfStretch rightAutoMargin" data-expected-width="30" data-expected-height="100">XXX</div>
+ </div>
+</div>
+
+<div id="log"></div>
+
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-lists/list-inside-contain.html b/tests/wpt/web-platform-tests/css/css-lists/list-inside-contain.html
new file mode 100644
index 00000000000..70e25b8644e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-lists/list-inside-contain.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<head>
+ <meta charset="utf-8">
+ <title>CSS Lists: list inside a contain ul</title>
+ <link rel=help href="https://www.w3.org/TR/CSS22/generate.html#lists">
+ <link rel="help" href="http://crbug.com/1004764">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+
+ <style>
+ ul { contain: size layout; }
+ li { list-style: inside; columns: 1; background-image: url(#svgvar00008); }
+ </style>
+</head>
+
+<script>
+setup({ single_test: true });
+
+function changeBackground() {
+ document.getElementById("target").style.setProperty("background", "url(data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7) no-repeat scroll top right");
+
+ done();
+}
+</script>
+
+<body onload=requestAnimationFrame(changeBackground)>
+ <p>PASS if no crash or DCHECK failure.</p>
+ <ul>
+ <li id="target">
+ </li>
+ </ul>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-lists/ol-change-display-type-ref.html b/tests/wpt/web-platform-tests/css/css-lists/ol-change-display-type-ref.html
new file mode 100644
index 00000000000..a10bc17899f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-lists/ol-change-display-type-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<link rel=help href="https://crbug.com/1020669">
+<style>
+ .item {
+ display: list-item;
+ }
+ .item:after {
+ content: counter(section);
+ display: list-item;
+ }
+ .table-header {
+ display: table-header-group;
+ }
+</style>
+<body>
+ <ol reversed="reversed">
+ <span class="table-header">
+ <figure class="item"></figure>
+ </span>
+ </ol>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-lists/ol-change-display-type.html b/tests/wpt/web-platform-tests/css/css-lists/ol-change-display-type.html
new file mode 100644
index 00000000000..e711cfef5dd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-lists/ol-change-display-type.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Lists: Change display type of reverse ol list element.</title>
+<link rel=help href="https://crbug.com/1020669">
+<link rel=match href="ol-change-display-type-ref.html">
+<style>
+ .item {
+ display: list-item;
+ }
+ .item:after {
+ content: counter(section);
+ display: list-item;
+ }
+ .table-header {
+ display: table-header-group;
+ }
+</style>
+<body>
+ <ol reversed="reversed">
+ <span id="span">
+ <figure class="item"></figure>
+ </span>
+ </ol>
+</body>
+<script>
+ document.body.offsetTop;
+ document.getElementById('span').setAttribute('class', 'table-header');
+</script>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-overflow/dynamic-visible-to-clip-001.html b/tests/wpt/web-platform-tests/css/css-overflow/dynamic-visible-to-clip-001.html
index 08114d73b8b..b97701bfb29 100644
--- a/tests/wpt/web-platform-tests/css/css-overflow/dynamic-visible-to-clip-001.html
+++ b/tests/wpt/web-platform-tests/css/css-overflow/dynamic-visible-to-clip-001.html
@@ -1,4 +1,5 @@
<!doctype html>
+<html class="reftest-wait">
<meta charset="utf-8">
<title>Overflow areas are updated when dynamically changed to overflow: clip</title>
<link rel="help" href="https://drafts.csswg.org/css-overflow/#valdef-overflow-clip">
@@ -30,7 +31,10 @@
onload = function() {
let target = document.getElementById("target");
window.unused = target.getBoundingClientRect(); // Update layout
- target.style.overflow = "-moz-hidden-unscrollable";
- target.style.overflow = "clip";
+ requestAnimationFrame(() => requestAnimationFrame(() => {
+ target.style.overflow = "-moz-hidden-unscrollable";
+ target.style.overflow = "clip";
+ document.documentElement.removeAttribute("class");
+ }));
}
</script>
diff --git a/tests/wpt/web-platform-tests/css/css-pseudo/first-line-with-before-after-ref.html b/tests/wpt/web-platform-tests/css/css-pseudo/first-line-with-before-after-ref.html
new file mode 100644
index 00000000000..fcee7995052
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-pseudo/first-line-with-before-after-ref.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<style>
+ #target::first-line { font-size: 150%; }
+</style>
+
+<div id="target"><span style='color:red'>red</span> <span style='color:green'>green</span> <span style='color:blue'>blue</span><br />
+ <span style='color:red'>red</span> <span style='color:green'>green</span> <span style='color:blue'>blue</span>
+</div>
+
+<p>Both lines above (inside and outside <code>::first-line</code>) should have the same colors.</p>
diff --git a/tests/wpt/web-platform-tests/css/css-pseudo/first-line-with-before-after.html b/tests/wpt/web-platform-tests/css/css-pseudo/first-line-with-before-after.html
new file mode 100644
index 00000000000..f91a22a4a7d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-pseudo/first-line-with-before-after.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<title>::before and ::after styles should apply inside ::first-line</title>
+<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#generated-content">
+<link rel="match" href="first-line-with-before-after-ref.html">
+<style>
+ #target::first-line {
+ font-size: 150%;
+ }
+ #target::before, #child2::before {
+ content: "red ";
+ color: red;
+ }
+ #child1, #child2 {
+ color: green;
+ }
+ #child1::after, #target::after {
+ content: " blue";
+ color: blue;
+ }
+</style>
+
+<div id="target">
+ <span id='child1'>green</span>
+ <br />
+ <span id='child2'>green</span>
+</div>
+
+<p>Both lines above (inside and outside <code>::first-line</code>) should have the same colors.</p>
diff --git a/tests/wpt/web-platform-tests/css/css-scroll-anchoring/README.md b/tests/wpt/web-platform-tests/css/css-scroll-anchoring/README.md
index 8ce2a95c620..78f1387bdf4 100644
--- a/tests/wpt/web-platform-tests/css/css-scroll-anchoring/README.md
+++ b/tests/wpt/web-platform-tests/css/css-scroll-anchoring/README.md
@@ -1,4 +1,4 @@
-## Scroll Anchoring Web Platform Tests
+## Scroll Anchoring Test Suite
Scroll anchoring adjusts the scroll position to prevent visible jumps (or
"reflows") when content changes above the viewport.
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-001-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-001-ref.html
new file mode 100644
index 00000000000..d4f0281ae48
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-001-ref.html
@@ -0,0 +1,14 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: unsized div</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+
+<style>
+#target {
+ background: lightblue;
+ height: 222px;
+}
+</style>
+
+<div id=target></div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-001.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-001.html
new file mode 100644
index 00000000000..4d17602a95f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-001.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: unsized div</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<link rel="match" href="intrinsic-size-001-ref.html">
+<meta name="assert" content="intrinsic-size is used to size the div as if it had a single child of this size">
+
+<style>
+#target {
+ background: lightblue;
+ intrinsic-size: 111px 222px;
+}
+</style>
+
+<div id=target></div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-002-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-002-ref.html
new file mode 100644
index 00000000000..ab847fc36e5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-002-ref.html
@@ -0,0 +1,21 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: div with max-content parent</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+
+<style>
+#border {
+ width: max-content;
+ border: 1px solid black;
+}
+#target {
+ background: lightblue;
+ width: 111px;
+ height: 222px;
+}
+</style>
+
+<div id=border>
+ <div id=target></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-002.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-002.html
new file mode 100644
index 00000000000..55f20949412
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-002.html
@@ -0,0 +1,22 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: div with max-content parent</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<link rel="match" href="intrinsic-size-002-ref.html">
+<meta name="assert" content="intrinsic-size is used to size the div, with parent's max-content width respecting it">
+
+<style>
+#border {
+ width: max-content;
+ border: 1px solid black;
+}
+#target {
+ background: lightblue;
+ intrinsic-size: 111px 222px;
+}
+</style>
+
+<div id=border>
+ <div id=target></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-003-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-003-ref.html
new file mode 100644
index 00000000000..6a2d0514989
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-003-ref.html
@@ -0,0 +1,15 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: width specified</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+
+<style>
+#target {
+ background: lightblue;
+ width: 50px;
+ height: 222px;
+}
+</style>
+
+<div id=target></div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-003.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-003.html
new file mode 100644
index 00000000000..3dd41ba1d2c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-003.html
@@ -0,0 +1,17 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: width specified</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<link rel="match" href="intrinsic-size-003-ref.html">
+<meta name="assert" content="intrinsic-size's width is ignored if width is specified">
+
+<style>
+#target {
+ background: lightblue;
+ intrinsic-size: 111px 222px;
+ width: 50px;
+}
+</style>
+
+<div id=target></div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-004-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-004-ref.html
new file mode 100644
index 00000000000..6e710943de9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-004-ref.html
@@ -0,0 +1,15 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: width is min-content</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+
+<style>
+#target {
+ background: lightblue;
+ width: 111px;
+ height: 222px;
+}
+</style>
+
+<div id=target></div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-004.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-004.html
new file mode 100644
index 00000000000..9cce7ae25fc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-004.html
@@ -0,0 +1,17 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: width is min-content</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<link rel="match" href="intrinsic-size-004-ref.html">
+<meta name="assert" content="div is sized to intrinsic-width if width is min-content">
+
+<style>
+#target {
+ background: lightblue;
+ intrinsic-size: 111px 222px;
+ width: min-content;
+}
+</style>
+
+<div id=target></div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-005-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-005-ref.html
new file mode 100644
index 00000000000..950f7190cac
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-005-ref.html
@@ -0,0 +1,15 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: width is max-content</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+
+<style>
+#target {
+ background: lightblue;
+ width: 111px;
+ height: 222px;
+}
+</style>
+
+<div id=target></div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-005.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-005.html
new file mode 100644
index 00000000000..92b777d22e0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-005.html
@@ -0,0 +1,17 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: width is max-content</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<link rel="match" href="intrinsic-size-004-ref.html">
+<meta name="assert" content="div is sized to intrinsic-width if width is max-content">
+
+<style>
+#target {
+ background: lightblue;
+ intrinsic-size: 111px 222px;
+ width: max-content;
+}
+</style>
+
+<div id=target></div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-006-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-006-ref.html
new file mode 100644
index 00000000000..d545093e2db
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-006-ref.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: unsized div, intrinsic-size is small</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+
+<style>
+#target {
+ background: lightblue;
+ height: 6px;
+ contain: size;
+}
+</style>
+
+<div id=target>Lorem ipsum</div>
+
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-006.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-006.html
new file mode 100644
index 00000000000..82c6e8eef85
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-006.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: unsized div, intrinsic-size is small</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<link rel="match" href="intrinsic-size-006-ref.html">
+<meta name="assert" content="content dimensions are ignored if intrinsic-size is specified">
+
+<style>
+#target {
+ background: lightblue;
+ intrinsic-size: 5px 6px;
+}
+</style>
+
+<div id=target>Lorem ipsum</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-007-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-007-ref.html
new file mode 100644
index 00000000000..6b3f63685ac
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-007-ref.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: div with border</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+
+<style>
+#border {
+ border: 1px solid blue;
+ width: max-content;
+}
+
+#target {
+ background: lightblue;
+ box-sizing: content-box;
+ width: 55px;
+ height: 66px;
+
+ border-style: solid;
+ border-color: black;
+ border-width: 2px 3px 5px 7px;
+}
+</style>
+
+<div id=border>
+ <div id=target></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-007.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-007.html
new file mode 100644
index 00000000000..85fcae6cd91
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-007.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: div with border</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<link rel="match" href="intrinsic-size-007-ref.html">
+<meta name="assert" content="intrinsic-size sizes the content box, not the border box">
+
+<style>
+#border {
+ border: 1px solid blue;
+ width: max-content;
+}
+
+#target {
+ background: lightblue;
+ intrinsic-size: 55px 66px;
+ border-style: solid;
+ border-color: black;
+ border-width: 2px 3px 5px 7px;
+}
+</style>
+
+<div id=border>
+ <div id=target></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-008-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-008-ref.html
new file mode 100644
index 00000000000..5c6186fd48c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-008-ref.html
@@ -0,0 +1,37 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: writing modes</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+
+<style>
+.border {
+ border: 1px solid blue;
+ width: max-content;
+ margin: 5px;
+}
+
+.box {
+ background: lightblue;
+ box-sizing: content-box;
+ width: 55px;
+ height: 66px;
+ border-style: solid;
+ border-color: black;
+ border-width: 2px 3px 5px 7px;
+ padding: 11px 13px 17px 19px;
+}
+.verticalrl {
+ writing-mode: vertical-rl;
+}
+.verticallr {
+ writing-mode: vertical-lr;
+}
+.horizontaltb {
+ writing-mode: horizontal-tb;
+}
+</style>
+
+<div class=border><div class="box verticalrl">Lorem</div></div>
+<div class=border><div class="box verticallr">Ipsum</div></div>
+<div class=border><div class="box horizontaltb">Dolor</div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-008.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-008.html
new file mode 100644
index 00000000000..f3b344f6b0a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-008.html
@@ -0,0 +1,37 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: writing modes</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<link rel="match" href="intrinsic-size-008-ref.html">
+<meta name="assert" content="intrinsic-size specifies physical dimensions, and respects writing modes">
+
+<style>
+.border {
+ border: 1px solid blue;
+ width: max-content;
+ margin: 5px;
+}
+
+.box {
+ background: lightblue;
+ intrinsic-size: 55px 66px;
+ border-style: solid;
+ border-color: black;
+ border-width: 2px 3px 5px 7px;
+ padding: 11px 13px 17px 19px;
+}
+.verticalrl {
+ writing-mode: vertical-rl;
+}
+.verticallr {
+ writing-mode: vertical-lr;
+}
+.horizontaltb {
+ writing-mode: horizontal-tb;
+}
+</style>
+
+<div class=border><div class="box verticalrl">Lorem</div></div>
+<div class=border><div class="box verticallr">Ipsum</div></div>
+<div class=border><div class="box horizontaltb">Dolor</div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-009-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-009-ref.html
new file mode 100644
index 00000000000..223e0c8a33a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-009-ref.html
@@ -0,0 +1,23 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: select multiple</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+
+<style>
+.border {
+ border: 1px solid blue;
+ width: max-content;
+ margin: 5px;
+}
+
+select {
+ background: lightblue;
+ box-sizing: content-box;
+ width: 55px;
+ height: 66px;
+ overflow: visible;
+}
+</style>
+
+<select multiple></select>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-009.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-009.html
new file mode 100644
index 00000000000..06a02fe78bd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-009.html
@@ -0,0 +1,23 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: select multiple</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<link rel="match" href="intrinsic-size-009-ref.html">
+<meta name="assert" content="intrinsic-size sizes select multiple">
+
+<style>
+.border {
+ border: 1px solid blue;
+ width: max-content;
+ margin: 5px;
+}
+
+select {
+ intrinsic-size: 55px 66px;
+ background: lightblue;
+ overflow: visible;
+}
+</style>
+
+<select multiple></select>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-010-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-010-ref.html
new file mode 100644
index 00000000000..eaaa0977f13
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-010-ref.html
@@ -0,0 +1,39 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: flex row</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+
+<style>
+#flex {
+ display: flex;
+ flex-direction: row;
+ width: 500px;
+ height: 100px;
+}
+.item {
+ border: 1px solid black;
+ box-sizing: content-box;
+}
+#one {
+ background: lightblue;
+ width: 55px;
+ flex-grow: 3;
+}
+#two {
+ background: lightgreen;
+ width: 66px;
+ flex-grow: 2;
+}
+#three {
+ background: lightgrey;
+ width: 77px;
+ flex-grow: 1;
+}
+</style>
+
+<div id=flex>
+ <div class=item id=one></div>
+ <div class=item id=two></div>
+ <div class=item id=three></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-010.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-010.html
new file mode 100644
index 00000000000..eea76ffb073
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-010.html
@@ -0,0 +1,40 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: flex row</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<link rel="match" href="intrinsic-size-010-ref.html">
+<meta name="assert" content="items are flexed correctly when they are sized by intrinsic-size in a flex row">
+
+<style>
+#flex {
+ display: flex;
+ flex-direction: row;
+ width: 500px;
+ height: 100px;
+}
+.item {
+ border: 1px solid black;
+}
+#one {
+ background: lightblue;
+ intrinsic-size: 55px 11px;
+ flex-grow: 3;
+}
+#two {
+ background: lightgreen;
+ intrinsic-size: 66px 22px;
+ flex-grow: 2;
+}
+#three {
+ background: lightgrey;
+ intrinsic-size: 77px 33px;
+ flex-grow: 1;
+}
+</style>
+
+<div id=flex>
+ <div class=item id=one></div>
+ <div class=item id=two></div>
+ <div class=item id=three></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-011-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-011-ref.html
new file mode 100644
index 00000000000..29d1f4e2d1a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-011-ref.html
@@ -0,0 +1,39 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: flex column</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+
+<style>
+#flex {
+ display: flex;
+ flex-direction: column;
+ width: 100px;
+ height: 200px;
+}
+.item {
+ border: 1px solid black;
+ box-sizing: content-box;
+}
+#one {
+ background: lightblue;
+ height: 11px;
+ flex-grow: 3;
+}
+#two {
+ background: lightgreen;
+ height: 22px;
+ flex-grow: 2;
+}
+#three {
+ background: lightgrey;
+ height: 33px;
+ flex-grow: 1;
+}
+</style>
+
+<div id=flex>
+ <div class=item id=one></div>
+ <div class=item id=two></div>
+ <div class=item id=three></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-011.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-011.html
new file mode 100644
index 00000000000..c7888f906f8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-011.html
@@ -0,0 +1,40 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: flex column</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<link rel="match" href="intrinsic-size-011-ref.html">
+<meta name="assert" content="items are flexed correctly when they are sized by intrinsic-size in a flex column">
+
+<style>
+#flex {
+ display: flex;
+ flex-direction: column;
+ width: 100px;
+ height: 200px;
+}
+.item {
+ border: 1px solid black;
+}
+#one {
+ background: lightblue;
+ intrinsic-size: 55px 11px;
+ flex-grow: 3;
+}
+#two {
+ background: lightgreen;
+ intrinsic-size: 66px 22px;
+ flex-grow: 2;
+}
+#three {
+ background: lightgrey;
+ intrinsic-size: 77px 33px;
+ flex-grow: 1;
+}
+</style>
+
+<div id=flex>
+ <div class=item id=one></div>
+ <div class=item id=two></div>
+ <div class=item id=three></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-012-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-012-ref.html
new file mode 100644
index 00000000000..ed9857aa256
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-012-ref.html
@@ -0,0 +1,14 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: replaced content</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+
+<style>
+#target {
+ width: 100px;
+ height: 200px;
+}
+</style>
+
+<img id=target src="resources/dice.png"></img>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-012.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-012.html
new file mode 100644
index 00000000000..889b07ace92
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-012.html
@@ -0,0 +1,15 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: replaced content</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<link rel="match" href="intrinsic-size-012-ref.html">
+<meta name="assert" content="intrinsic-size overrides replaced content's intrinsic dimensions">
+
+<style>
+#target {
+ intrinsic-size: 100px 200px;
+}
+</style>
+
+<img id=target src="resources/dice.png"></img>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-013-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-013-ref.html
new file mode 100644
index 00000000000..9f8334c03d5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-013-ref.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: intrinsic-size changes</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+
+<style>
+#border {
+ width: max-content;
+ border: 1px solid black;
+}
+#border > div {
+ width: 77px;
+ height: 88px;
+}
+</style>
+
+<div id=border><div id=target></div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-013.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-013.html
new file mode 100644
index 00000000000..1082100012f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-013.html
@@ -0,0 +1,32 @@
+<!doctype html>
+<html class="reftest-wait">
+<meta charset="utf8">
+<title>CSS intrinsic-size: intrinsic-size changes.</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<link rel="match" href="intrinsic-size-013-ref.html">
+<meta name="assert" content="changes in intrinsic-size cause reflow">
+<script src="/common/reftest-wait.js"></script>
+
+<style>
+#border {
+ width: max-content;
+ border: 1px solid black;
+}
+#border > div {
+ intrinsic-size: 55px 66px;
+}
+</style>
+
+<div id=border><div id=target></div></div>
+
+<script>
+function changeStyle() {
+ document.getElementById("target").style = "intrinsic-size: 77px 88px;";
+ requestAnimationFrame(takeScreenshot);
+}
+
+onload = () => requestAnimationFrame(() => requestAnimationFrame(changeStyle));
+
+</script>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-014-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-014-ref.html
new file mode 100644
index 00000000000..66c10824893
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-014-ref.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: fieldset</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+
+<style>
+fieldset {
+ box-sizing: content-box;
+ width: 111px;
+ height: 222px;
+}
+</style>
+
+<fieldset>
+ <legend>This is a legend</legend>
+ This is some content.
+</fieldset>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-014.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-014.html
new file mode 100644
index 00000000000..4dd45a2da40
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-014.html
@@ -0,0 +1,19 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: fieldset</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<link rel="match" href="intrinsic-size-014-ref.html">
+<meta name="assert" content="intrinsic-size sizes fieldsets">
+
+<style>
+fieldset {
+ width: max-content;
+ intrinsic-size: 111px 222px;
+}
+</style>
+
+<fieldset>
+ <legend>This is a legend</legend>
+ This is some content.
+</fieldset>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-015-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-015-ref.html
new file mode 100644
index 00000000000..ae65a3b5ca5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-015-ref.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS intrinsic-size: inline flex</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-contain-1/#containment-size">
+<style>
+div {
+ display: inline-flex;
+ border: 5px solid green;
+ width: 111px;
+ height: 222px;
+ box-sizing: content-box;
+}
+</style>
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-015.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-015.html
new file mode 100644
index 00000000000..5ca5e49992e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-015.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS intrinsic-size: inline flex</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-contain-1/#containment-size">
+<link rel="match" href="intrinsic-size-015-ref.html">
+<meta name="assert" content="intrinsic-size sizes an inline-flex element">
+<style>
+div {
+ display: inline-flex;
+ border: 5px solid green;
+ intrinsic-size: 111px 222px;
+ color: transparent;
+}
+</style>
+
+<div>test</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-016-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-016-ref.html
new file mode 100644
index 00000000000..f80510f6306
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-016-ref.html
@@ -0,0 +1,39 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: flex row, items with size containment (ref)</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+
+<style>
+#flex {
+ display: flex;
+ flex-direction: row;
+ width: 500px;
+ height: 100px;
+}
+.item {
+ border: 1px solid black;
+ box-sizing: content-box;
+}
+#one {
+ background: lightblue;
+ width: 55px;
+ flex-grow: 3;
+}
+#two {
+ background: lightgreen;
+ width: 66px;
+ flex-grow: 2;
+}
+#three {
+ background: lightgrey;
+ width: 77px;
+ flex-grow: 1;
+}
+</style>
+
+<div id=flex>
+ <div class=item id=one></div>
+ <div class=item id=two></div>
+ <div class=item id=three></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-016.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-016.html
new file mode 100644
index 00000000000..ce6ac5c56e4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-016.html
@@ -0,0 +1,41 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: flex row, items with size containment</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<link rel="match" href="intrinsic-size-016-ref.html">
+<meta name="assert" content="intrinsic-size take 'priority' over size-containment in flex">
+
+<style>
+#flex {
+ display: flex;
+ flex-direction: row;
+ width: 500px;
+ height: 100px;
+}
+.item {
+ border: 1px solid black;
+ contain: size;
+}
+#one {
+ background: lightblue;
+ intrinsic-size: 55px 11px;
+ flex-grow: 3;
+}
+#two {
+ background: lightgreen;
+ intrinsic-size: 66px 22px;
+ flex-grow: 2;
+}
+#three {
+ background: lightgrey;
+ intrinsic-size: 77px 33px;
+ flex-grow: 1;
+}
+</style>
+
+<div id=flex>
+ <div class=item id=one></div>
+ <div class=item id=two></div>
+ <div class=item id=three></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-017-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-017-ref.html
new file mode 100644
index 00000000000..553451a7075
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-017-ref.html
@@ -0,0 +1,17 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: replaced content (vertical-lr)</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+
+<style>
+body {
+ writing-mode: vertical-lr;
+}
+#target {
+ width: 100px;
+ height: 200px;
+}
+</style>
+
+<img id=target src="resources/dice.png"></img>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-017.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-017.html
new file mode 100644
index 00000000000..5e2122f34ec
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-017.html
@@ -0,0 +1,20 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: replaced content (vertical-lr)</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<link rel="match" href="intrinsic-size-017-ref.html">
+<meta name="assert" content="intrinsic-size specifies physical dimensions on replaced content">
+
+<style>
+body {
+ writing-mode: vertical-lr;
+}
+#target {
+ intrinsic-size: 100px 200px;
+ inline-size: min-content;
+ block-size: auto;
+}
+</style>
+
+<img id=target src="resources/dice.png"></img>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-018-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-018-ref.html
new file mode 100644
index 00000000000..17261caa8af
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-018-ref.html
@@ -0,0 +1,15 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: sized div</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+
+<style>
+#target {
+ background: lightblue;
+ width: 55px;
+ height: 66px;
+}
+</style>
+
+<div id=target></div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-018.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-018.html
new file mode 100644
index 00000000000..68931834d63
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-018.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: sized div</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<link rel="match" href="intrinsic-size-018-ref.html">
+<meta name="assert" content="width / height ignore intrinsic-size">
+
+<style>
+#target {
+ background: lightblue;
+ width: 55px;
+ height: 66px;
+ intrinsic-size: 111px 222px;
+}
+</style>
+
+<div id=target></div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-019-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-019-ref.html
new file mode 100644
index 00000000000..8e55d7b02f9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-019-ref.html
@@ -0,0 +1,15 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: div with fit-content width</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+
+<style>
+#target {
+ background: lightblue;
+ width: 111px;
+ height: 222px;
+}
+</style>
+
+<div id=target></div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-019.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-019.html
new file mode 100644
index 00000000000..cae8e0739fe
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-019.html
@@ -0,0 +1,17 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: div with fit-content width</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<link rel="match" href="intrinsic-size-019-ref.html">
+<meta name="assert" content="div is sized to intrinsic-width when width is fit-content">
+
+<style>
+#target {
+ background: lightblue;
+ intrinsic-size: 111px 222px;
+ width: fit-content;
+}
+</style>
+
+<div id=target></div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-020-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-020-ref.html
new file mode 100644
index 00000000000..1ee5ba8376d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-020-ref.html
@@ -0,0 +1,14 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: replaced content (min-content)</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+
+<style>
+#target {
+ width: 100px;
+ height: 200px;
+}
+</style>
+
+<img id=target src="resources/dice.png"></img>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-020.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-020.html
new file mode 100644
index 00000000000..a7286ce1054
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-020.html
@@ -0,0 +1,17 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: replaced content (min-content)</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<link rel="match" href="intrinsic-size-020-ref.html">
+<meta name="assert" content="replaced content is sized to intrinsic-width when width is min-content">
+
+<style>
+#target {
+ intrinsic-size: 100px 200px;
+ inline-size: min-content;
+ block-size: auto;
+}
+</style>
+
+<img id=target src="resources/dice.png"></img>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-021-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-021-ref.html
new file mode 100644
index 00000000000..35db43fcf44
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-021-ref.html
@@ -0,0 +1,41 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: flex row, flex height based on children</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+
+<style>
+#flex {
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ align-items: flex-start;
+ width: 250px;
+}
+.item {
+ border: 1px solid black;
+ box-sizing: content-box;
+}
+#one {
+ background: lightblue;
+ width: 55px;
+ height: 21px;
+}
+#two {
+ background: lightgreen;
+ width: 66px;
+ height: 42px;
+}
+#three {
+ background: lightgrey;
+ align-self: stretch;
+ width: 77px;
+ height: 63px;
+}
+</style>
+
+<div id=flex>
+ <div class=item id=one></div>
+ <div class=item id=two></div>
+ <div class=item id=three></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-021.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-021.html
new file mode 100644
index 00000000000..04591924f65
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-021.html
@@ -0,0 +1,39 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: flex row, flex height based on children</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<link rel="match" href="intrinsic-size-021-ref.html">
+<meta name="assert" content="flex container is sized by the largest intrinsic-height of content, even with align-self: stretch">
+
+<style>
+#flex {
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ align-items: flex-start;
+ width: 250px;
+}
+.item {
+ border: 1px solid black;
+}
+#one {
+ background: lightblue;
+ intrinsic-size: 55px 21px;
+}
+#two {
+ background: lightgreen;
+ intrinsic-size: 66px 42px;
+}
+#three {
+ background: lightgrey;
+ align-self: stretch;
+ intrinsic-size: 77px 63px;
+}
+</style>
+
+<div id=flex>
+ <div class=item id=one></div>
+ <div class=item id=two></div>
+ <div class=item id=three></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-022-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-022-ref.html
new file mode 100644
index 00000000000..b0df1992834
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-022-ref.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: grid definite size</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+
+<style>
+#grid {
+ border: 3px solid black;
+ display: grid;
+ grid-template: 55px 66px / 77px 88px;
+ box-sizing: content-box;
+ width: 70px;
+ height: 80px;
+ background: lightblue;
+ grid-gap: 5px;
+}
+.item {
+ background: lightgreen;
+ opacity: 0.5;
+ height: 100%;
+}
+</style>
+
+<div id=grid>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-022.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-022.html
new file mode 100644
index 00000000000..3593b9cce38
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-022.html
@@ -0,0 +1,31 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: grid definite size</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<link rel="match" href="intrinsic-size-022-ref.html">
+<meta name="assert" content="grid container is sized by intrinsic-size, even if definite track sizes overflow">
+
+<style>
+#grid {
+ border: 3px solid black;
+ display: grid;
+ grid-template: 55px 66px / 77px 88px;
+ intrinsic-size: 70px 80px;
+ width: max-content;
+ background: lightblue;
+ grid-gap: 5px;
+}
+.item {
+ background: lightgreen;
+ opacity: 0.5;
+ height: 100%;
+}
+</style>
+
+<div id=grid>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-023-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-023-ref.html
new file mode 100644
index 00000000000..800e4ae7064
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-023-ref.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: grid indefinite size</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+
+<style>
+#grid {
+ border: 3px solid black;
+ display: grid;
+ grid-template: 1fr 2fr / 3fr 4fr;
+ box-sizing: content-box;
+ width: 70px;
+ height: 80px;
+ background: lightblue;
+ grid-gap: 5px;
+}
+.item {
+ background: lightgreen;
+ height: 100%;
+}
+</style>
+
+<div id=grid>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-023.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-023.html
new file mode 100644
index 00000000000..c64ef66a03f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-023.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: grid indefinite size</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<link rel="match" href="intrinsic-size-023-ref.html">
+<meta name="assert" content="grid container is sized by intrinsic-size, with fr-tracks using that space">
+
+<style>
+#grid {
+ border: 3px solid black;
+ display: grid;
+ grid-template: 1fr 2fr / 3fr 4fr;
+ intrinsic-size: 70px 80px;
+ width: max-content;
+ background: lightblue;
+ grid-gap: 5px;
+}
+.item {
+ background: lightgreen;
+ height: 100%;
+}
+</style>
+
+<div id=grid>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-024-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-024-ref.html
new file mode 100644
index 00000000000..02ec85a0084
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-024-ref.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: grid definite size, large size</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+
+<style>
+#grid {
+ border: 3px solid black;
+ display: grid;
+ grid-template: 55px 66px / 77px 88px;
+ box-sizing: content-box;
+ width: 200px;
+ height: 300px;
+ background: lightblue;
+ grid-gap: 5px;
+}
+.item {
+ background: lightgreen;
+ opacity: 0.5;
+ height: 100%;
+}
+</style>
+
+<div id=grid>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-024.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-024.html
new file mode 100644
index 00000000000..b11317d96b0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-024.html
@@ -0,0 +1,31 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: grid definite size, large size</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<link rel="match" href="intrinsic-size-024-ref.html">
+<meta name="assert" content="intrinsic-size sizes grid container, even if definite tracks are smaller">
+
+<style>
+#grid {
+ border: 3px solid black;
+ display: grid;
+ grid-template: 55px 66px / 77px 88px;
+ intrinsic-size: 200px 300px;
+ width: max-content;
+ background: lightblue;
+ grid-gap: 5px;
+}
+.item {
+ background: lightgreen;
+ opacity: 0.5;
+ height: 100%;
+}
+</style>
+
+<div id=grid>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-025-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-025-ref.html
new file mode 100644
index 00000000000..60d5cc9cd9a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-025-ref.html
@@ -0,0 +1,56 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: grid indefinite size, auto-fit</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+
+<style>
+.grid {
+ border: 3px solid black;
+ display: grid;
+ width: 70px;
+ height: 80px;
+ box-sizing: content-box;
+ background: lightblue;
+ grid-gap: 5px;
+}
+.one {
+ grid-template: repeat(auto-fit, 10px) / 3fr 4fr;
+}
+.two {
+ grid-template: 1fr 2fr / repeat(auto-fit, 15px);
+}
+.three {
+ grid-template: repeat(auto-fit, 10px) / repeat(auto-fit, 15px);
+}
+
+.item {
+ background: green;
+ height: 100%;
+}
+</style>
+
+<div class="grid one">
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+</div>
+<div class="grid two">
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+</div>
+<div class="grid three">
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-025.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-025.html
new file mode 100644
index 00000000000..ab9c56fc528
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-025.html
@@ -0,0 +1,57 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: grid indefinite size, auto-fit</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<link rel="match" href="intrinsic-size-025-ref.html">
+<meta name="assert" content="definite size auto-fit uses intrinsic-size for the available space">
+
+<style>
+.grid {
+ border: 3px solid black;
+ display: grid;
+ intrinsic-size: 70px 80px;
+ width: max-content;
+ background: lightblue;
+ grid-gap: 5px;
+}
+.one {
+ grid-template: repeat(auto-fit, 10px) / 3fr 4fr;
+}
+.two {
+ grid-template: 1fr 2fr / repeat(auto-fit, 15px);
+}
+.three {
+ grid-template: repeat(auto-fit, 10px) / repeat(auto-fit, 15px);
+}
+
+.item {
+ background: green;
+ height: 100%;
+}
+</style>
+
+<div class="grid one">
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+</div>
+<div class="grid two">
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+</div>
+<div class="grid three">
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-026-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-026-ref.html
new file mode 100644
index 00000000000..2e456b43422
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-026-ref.html
@@ -0,0 +1,53 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: grid auto-fit, min- max- size interactions</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+
+<style>
+.grid {
+ display: inline-grid;
+ border: 1px solid black;
+ grid-template-columns: repeat(auto-fit, 100px);
+}
+.one {
+ width: 200px;
+}
+.two {
+ width: 200px;
+}
+.three {
+ width: 200px;
+}
+.four {
+ width: 150px;
+}
+.item {
+ background: green;
+ height: 100%;
+}
+</style>
+
+<p>min-width larger than intrinsic-width:
+<div class="grid one">
+ <div class="item">one</div>
+ <div class="item">two</div>
+</div>
+
+<p>min-width smaller than intrinsic-width:
+<div class="grid two">
+ <div class="item">one</div>
+ <div class="item">two</div>
+</div>
+
+<p>max-width ignored since min-width is larger:
+<div class="grid three">
+ <div class="item">one</div>
+ <div class="item">two</div>
+</div>
+
+<p>min-width shrinks grid since it overrides intrinsic-width:
+<div class="grid four">
+ <div class="item">one</div>
+ <div class="item">two</div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-026.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-026.html
new file mode 100644
index 00000000000..100f542b783
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-026.html
@@ -0,0 +1,61 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: grid auto-fit, min- max- size interactions</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<link rel="match" href="intrinsic-size-026-ref.html">
+<meta name="assert" content="auto-fit columns, with intrinsic-size interacting with min- and max- width">
+
+<style>
+.grid {
+ display: inline-grid;
+ border: 1px solid black;
+ grid-template-columns: repeat(auto-fit, 100px);
+}
+.one {
+ intrinsic-width: 100px;
+ min-width: 200px;
+}
+.two {
+ intrinsic-width: 200px;
+ min-width: 100px;
+}
+.three {
+ intrinsic-width: 100px;
+ min-width: 200px;
+ max-width: 150px;
+}
+.four {
+ intrinsic-width: 200px;
+ min-width: 100px;
+ max-width: 150px;
+}
+.item {
+ background: green;
+ height: 100%;
+}
+</style>
+
+<p>min-width larger than intrinsic-width:
+<div class="grid one">
+ <div class="item">one</div>
+ <div class="item">two</div>
+</div>
+
+<p>min-width smaller than intrinsic-width:
+<div class="grid two">
+ <div class="item">one</div>
+ <div class="item">two</div>
+</div>
+
+<p>max-width ignored since min-width is larger:
+<div class="grid three">
+ <div class="item">one</div>
+ <div class="item">two</div>
+</div>
+
+<p>min-width shrinks grid since it overrides intrinsic-width:
+<div class="grid four">
+ <div class="item">one</div>
+ <div class="item">two</div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-001-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-001-ref.html
new file mode 100644
index 00000000000..99e86d0c38f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-001-ref.html
@@ -0,0 +1,37 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: intrinsic-width auto</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+
+<style>
+body > div {
+ box-sizing: content-box;
+ border: 1px solid black;
+ width: max-content;
+ height: 111px;
+}
+#one {
+ overflow: hidden;
+ width: 0px;
+}
+#two {
+ overflow-x: scroll;
+ height: auto;
+}
+#two > div {
+ height: 111px;
+}
+#three {
+ height: auto;
+}
+#three > div {
+ height: 111px;
+}
+</style>
+
+<div id=one></div>
+<br>
+<div id=two><div></div></div>
+<br>
+<div id=three><div>Lorem ipsum</div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-001.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-001.html
new file mode 100644
index 00000000000..9c2dac07da2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-001.html
@@ -0,0 +1,34 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: intrinsic-width auto</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<link rel="match" href="intrinsic-size-with-auto-001-ref.html">
+<meta name="assert" content="intrinsic-size auto is treated as 0 when overflow is not 'visible'">
+
+<style>
+div {
+ width: max-content;
+ intrinsic-size: auto 111px;
+ border: 1px solid black;
+}
+#one {
+ overflow: hidden;
+}
+#two {
+ overflow-x: scroll;
+}
+/* We can't have overflow-x: visible without overflow-y not being visible and vice versa
+ (see Computed value in https://www.w3.org/TR/css-overflow-3/#overflow-properties).
+ Hence, we set both overflow directions.
+*/
+#three {
+ overflow: visible;
+}
+</style>
+
+<div id=one>Lorem ipsum</div>
+<br>
+<div id=two>Lorem ipsum</div>
+<br>
+<div id=three>Lorem ipsum</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-002-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-002-ref.html
new file mode 100644
index 00000000000..70a245469b7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-002-ref.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: intrinsic-width auto</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+
+<style>
+body > div {
+ box-sizing: content-box;
+ border: 1px solid black;
+ width: 111px;
+}
+#one {
+ overflow: hidden;
+ height: 0px;
+}
+#two {
+ overflow-y: scroll;
+ width: max-content;
+}
+#two > div {
+ width: 111px;
+}
+</style>
+
+<div id=one></div>
+<br>
+<div id=two><div></div></div>
+<br>
+<div id=three>Lorem ipsum</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-002.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-002.html
new file mode 100644
index 00000000000..5b3902455bd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-002.html
@@ -0,0 +1,34 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: intrinsic-width auto</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<link rel="match" href="intrinsic-size-with-auto-002-ref.html">
+<meta name="assert" content="intrinsic-size auto is treated as 0 when overflow is not 'visible'">
+
+<style>
+div {
+ width: max-content;
+ intrinsic-size: 111px auto;
+ border: 1px solid black;
+}
+#one {
+ overflow: hidden;
+}
+#two {
+ overflow-y: scroll;
+}
+/* We can't have overflow-x: visible without overflow-y not being visible and vice versa
+ (see Computed value in https://www.w3.org/TR/css-overflow-3/#overflow-properties).
+ Hence, we set both overflow directions.
+*/
+#three {
+ overflow: visible;
+}
+</style>
+
+<div id=one>Lorem ipsum</div>
+<br>
+<div id=two>Lorem ipsum</div>
+<br>
+<div id=three>Lorem ipsum</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-003-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-003-ref.html
new file mode 100644
index 00000000000..246a5bad51e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-003-ref.html
@@ -0,0 +1,37 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: replaced content with auto</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+
+<style>
+img {
+ border: 1px solid black;
+ box-sizing: content-box;
+}
+#target1 {
+ height: 200px;
+ /* the source img is 320x240, and the intrinsic size only adjusted the height */
+ width: 320px;
+}
+#target2 {
+ width: 100px;
+ /* the source img is 320x240, and the intrinsic size only adjusted the width */
+ height: 240px;
+}
+#target3 {
+ width: 0px;
+ height: 200px;
+ overflow: hidden;
+}
+#target4 {
+ width: 100px;
+ height: 0px;
+ overflow: hidden;
+}
+</style>
+
+<img id=target1 src="resources/dice.png"></img>
+<img id=target2 src="resources/dice.png"></img>
+<img id=target3 src="resources/dice.png"></img>
+<img id=target4 src="resources/dice.png"></img>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-003.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-003.html
new file mode 100644
index 00000000000..07ec0326787
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-003.html
@@ -0,0 +1,32 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: replaced content with auto</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<link rel="match" href="intrinsic-size-with-auto-003-ref.html">
+<meta name="assert" content="intrinsic-size auto is treated as 0 when overflow is not 'visible'">
+
+<style>
+img {
+ border: 1px solid black;
+}
+#target1 {
+ intrinsic-size: auto 200px;
+}
+#target2 {
+ intrinsic-size: 100px auto;
+}
+#target3 {
+ intrinsic-size: auto 200px;
+ overflow: hidden;
+}
+#target4 {
+ intrinsic-size: 100px auto;
+ overflow: hidden;
+}
+</style>
+
+<img id=target1 src="resources/dice.png"></img>
+<img id=target2 src="resources/dice.png"></img>
+<img id=target3 src="resources/dice.png"></img>
+<img id=target4 src="resources/dice.png"></img>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-001-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-001-ref.html
new file mode 100644
index 00000000000..39c6abdcf8e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-001-ref.html
@@ -0,0 +1,15 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: intrinsic-width legacy</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+
+<style>
+#target {
+ background: lightblue;
+ width: max-content;
+ height: 222px;
+}
+</style>
+
+<div id=target>Lorem ipsum</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-001.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-001.html
new file mode 100644
index 00000000000..df662e5c7f1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-001.html
@@ -0,0 +1,17 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: intrinsic-width legacy</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<link rel="match" href="intrinsic-size-with-legacy-001-ref.html">
+<meta name="assert" content="intrinsic-size legacy is treated the same as if it was not specified.">
+
+<style>
+#target {
+ background: lightblue;
+ width: max-content;
+ intrinsic-size: legacy 222px;
+}
+</style>
+
+<div id=target>Lorem ipsum</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-002-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-002-ref.html
new file mode 100644
index 00000000000..535915a7a7b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-002-ref.html
@@ -0,0 +1,41 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: flex with legacy intrinsic dimensions</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+
+<style>
+#flex {
+ display: flex;
+ flex-direction: column;
+ height: 500px;
+}
+.item {
+ width: max-content;
+}
+#one {
+ background: lightblue;
+ flex-grow: 3;
+}
+#one > div {
+ height: 222px;
+}
+#two {
+ background: lightgreen;
+ width: 333px;
+ flex-grow: 2;
+}
+#three {
+ background: lightgrey;
+ flex-grow: 1;
+}
+#three > div {
+ height: 444px;
+}
+</style>
+
+<div id=flex>
+ <div class=item id=one><div>Lorem ipsum</div></div>
+ <div class=item id=two>dolor sit amet</div>
+ <div class=item id=three><div>consectetur adipiscing elit</div></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-002.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-002.html
new file mode 100644
index 00000000000..66d008ce6ce
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-002.html
@@ -0,0 +1,39 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: flex with legacy intrinsic dimensions</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<link rel="match" href="intrinsic-size-with-legacy-002-ref.html">
+<meta name="assert" content="intrinsic-size legacy is treated the same as if it was not specified.">
+
+<style>
+#flex {
+ display: flex;
+ flex-direction: column;
+ height: 500px;
+}
+.item {
+ width: max-content;
+}
+#one {
+ background: lightblue;
+ intrinsic-size: legacy 222px;
+ flex-grow: 3;
+}
+#two {
+ background: lightgreen;
+ intrinsic-size: 333px legacy;
+ flex-grow: 2;
+}
+#three {
+ background: lightgrey;
+ intrinsic-size: legacy 444px;
+ flex-grow: 1;
+}
+</style>
+
+<div id=flex>
+ <div class=item id=one>Lorem ipsum</div>
+ <div class=item id=two>dolor sit amet</div>
+ <div class=item id=three>consectetur adipiscing elit</div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-003-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-003-ref.html
new file mode 100644
index 00000000000..eb6394fe284
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-003-ref.html
@@ -0,0 +1,20 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: select multiple with legacy sizing</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+
+<style>
+#one {
+ box-sizing: content-box;
+ height: 222px;
+}
+#two {
+ box-sizing: content-box;
+ width: 111px;
+ overflow: visible;
+}
+</style>
+
+<select multiple id=one></select>
+<select multiple id=two></select>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-003.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-003.html
new file mode 100644
index 00000000000..90e4f53bf64
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-003.html
@@ -0,0 +1,20 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: select multiple with legacy sizing</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<link rel="match" href="intrinsic-size-with-legacy-003-ref.html">
+<meta name="assert" content="intrinsic-size legacy is treated the same as if it was not specified.">
+
+<style>
+#one {
+ intrinsic-size: legacy 222px;
+}
+#two {
+ intrinsic-size: 111px legacy;
+ overflow: visible;
+}
+</style>
+
+<select multiple id=one></select>
+<select multiple id=two></select>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-004-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-004-ref.html
new file mode 100644
index 00000000000..d5e7c9ff9bb
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-004-ref.html
@@ -0,0 +1,25 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: replaced content with legacy</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+
+<style>
+img {
+ border: 1px solid black;
+ box-sizing: content-box;
+}
+#target1 {
+ height: 200px;
+ /* the source img is 320x240, and the intrinsic size only adjusted the height */
+ width: 320px;
+}
+#target2 {
+ width: 100px;
+ /* the source img is 320x240, and the intrinsic size only adjusted the width */
+ height: 240px;
+}
+</style>
+
+<img id=target1 src="resources/dice.png"></img>
+<img id=target2 src="resources/dice.png"></img>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-004.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-004.html
new file mode 100644
index 00000000000..dfeed45d73b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-004.html
@@ -0,0 +1,22 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: replaced content with legacy</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<link rel="match" href="intrinsic-size-with-legacy-004-ref.html">
+<meta name="assert" content="intrinsic-size legacy is treated the same as if it was not specified.">
+
+<style>
+img {
+ border: 1px solid black;
+}
+#target1 {
+ intrinsic-size: legacy 200px;
+}
+#target2 {
+ intrinsic-size: 100px legacy;
+}
+</style>
+
+<img id=target1 src="resources/dice.png"></img>
+<img id=target2 src="resources/dice.png"></img>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-005-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-005-ref.html
new file mode 100644
index 00000000000..c23984f5f1a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-005-ref.html
@@ -0,0 +1,36 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: grid definite size with legacy</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+
+<style>
+.grid {
+ border: 3px solid black;
+ display: grid;
+ grid-template: 55px 66px / 77px 88px;
+ box-sizing: content-box;
+ width: 70px;
+ height: 80px;
+ background: lightblue;
+ grid-gap: 5px;
+}
+.item {
+ background: lightgreen;
+ opacity: 0.5;
+ height: 100%;
+}
+</style>
+
+<div class=grid>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+</div>
+<div class=grid>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-005.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-005.html
new file mode 100644
index 00000000000..baf9bef3aca
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-005.html
@@ -0,0 +1,44 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: grid definite size with legacy</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<link rel="match" href="intrinsic-size-with-legacy-005-ref.html">
+<meta name="assert" content="intrinsic-size legacy is treated the same as if it was not specified.">
+
+<style>
+.grid {
+ border: 3px solid black;
+ display: grid;
+ grid-template: 55px 66px / 77px 88px;
+ background: lightblue;
+ grid-gap: 5px;
+}
+.one {
+ intrinsic-size: legacy 80px;
+ width: 70px;
+}
+.two {
+ intrinsic-size: 70px legacy;
+ height: 80px;
+ width: min-content;
+}
+.item {
+ background: lightgreen;
+ opacity: 0.5;
+ height: 100%;
+}
+</style>
+
+<div class="grid one">
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+</div>
+<div class="grid two">
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-006-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-006-ref.html
new file mode 100644
index 00000000000..9b9e25d3c8d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-006-ref.html
@@ -0,0 +1,35 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: grid indefinite size with legacy</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+
+<style>
+.grid {
+ border: 3px solid black;
+ display: grid;
+ grid-template: 1fr 2fr / 3fr 4fr;
+ box-sizing: content-box;
+ width: 70px;
+ height: 80px;
+ background: lightblue;
+ grid-gap: 5px;
+}
+.item {
+ background: lightgreen;
+ height: 100%;
+}
+</style>
+
+<div class=grid>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+</div>
+<div class=grid>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-006.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-006.html
new file mode 100644
index 00000000000..41ef1fddc19
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-006.html
@@ -0,0 +1,43 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: grid indefinite size with legacy</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<link rel="match" href="intrinsic-size-with-legacy-006-ref.html">
+<meta name="assert" content="intrinsic-size legacy is treated the same as if it was not specified.">
+
+<style>
+.grid {
+ border: 3px solid black;
+ display: grid;
+ grid-template: 1fr 2fr / 3fr 4fr;
+ background: lightblue;
+ grid-gap: 5px;
+}
+.one {
+ intrinsic-size: legacy 80px;
+ width: 70px;
+}
+.two {
+ intrinsic-size: 70px legacy;
+ width: min-content;
+ height: 80px;
+}
+.item {
+ background: lightgreen;
+ height: 100%;
+}
+</style>
+
+<div class="grid one">
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+</div>
+<div class="grid two">
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-007-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-007-ref.html
new file mode 100644
index 00000000000..6894b4643ad
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-007-ref.html
@@ -0,0 +1,35 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: grid definite size, large size with legacy</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+
+<style>
+.grid {
+ border: 3px solid black;
+ display: grid;
+ grid-template: 55px 66px / 77px 88px;
+ box-sizing: content-box;
+ width: 200px;
+ height: 300px;
+ background: lightblue;
+ grid-gap: 5px;
+}
+.item {
+ background: lightgreen;
+ height: 100%;
+}
+</style>
+
+<div class=grid>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+</div>
+<div class=grid>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-007.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-007.html
new file mode 100644
index 00000000000..df2c57b5d8a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-007.html
@@ -0,0 +1,43 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: grid definite size, large size with legacy</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<link rel="match" href="intrinsic-size-with-legacy-007-ref.html">
+<meta name="assert" content="intrinsic-size legacy is treated the same as if it was not specified.">
+
+<style>
+.grid {
+ border: 3px solid black;
+ display: grid;
+ grid-template: 55px 66px / 77px 88px;
+ background: lightblue;
+ grid-gap: 5px;
+}
+.one {
+ intrinsic-size: legacy 300px;
+ width: 200px;
+}
+.two {
+ intrinsic-size: 200px legacy;
+ width: max-content;
+ height: 300px;
+}
+.item {
+ background: lightgreen;
+ height: 100%;
+}
+</style>
+
+<div class="grid one">
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+</div>
+<div class="grid two">
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-008-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-008-ref.html
new file mode 100644
index 00000000000..5cce1902759
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-008-ref.html
@@ -0,0 +1,80 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: grid indefinite size, auto-fit with legacy</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+
+<style>
+.grid {
+ border: 3px solid black;
+ display: grid;
+ width: 70px;
+ height: 80px;
+ box-sizing: content-box;
+ background: lightblue;
+ grid-gap: 5px;
+}
+.one {
+ grid-template: repeat(auto-fit, 10px) / 3fr 4fr;
+}
+.two {
+ grid-template: 1fr 2fr / repeat(auto-fit, 15px);
+}
+.three {
+ grid-template: repeat(auto-fit, 10px) / repeat(auto-fit, 15px);
+}
+
+.item {
+ background: green;
+ height: 100%;
+}
+</style>
+
+<div class="grid one">
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+</div>
+<div class="grid two">
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+</div>
+<div class="grid three">
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+</div>
+<div class="grid one">
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+</div>
+<div class="grid two">
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+</div>
+<div class="grid three">
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-008.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-008.html
new file mode 100644
index 00000000000..45b8fbdd244
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-008.html
@@ -0,0 +1,87 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS intrinsic-size: grid indefinite size, auto-fit with legacy</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<link rel="match" href="intrinsic-size-with-legacy-008-ref.html">
+<meta name="assert" content="intrinsic-size legacy is treated the same as if it was not specified.">
+
+<style>
+.grid {
+ border: 3px solid black;
+ display: grid;
+ background: lightblue;
+ grid-gap: 5px;
+}
+.one {
+ grid-template: repeat(auto-fit, 10px) / 3fr 4fr;
+}
+.two {
+ grid-template: 1fr 2fr / repeat(auto-fit, 15px);
+}
+.three {
+ grid-template: repeat(auto-fit, 10px) / repeat(auto-fit, 15px);
+}
+.width {
+ intrinsic-size: 70px legacy;
+ width: max-content;
+ height: 80px;
+}
+.height {
+ intrinsic-size: legacy 80px;
+ width: 70px;
+}
+.item {
+ background: green;
+ height: 100%;
+}
+</style>
+
+<div class="grid one width">
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+</div>
+<div class="grid two width">
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+</div>
+<div class="grid three width">
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+</div>
+<div class="grid one height">
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+</div>
+<div class="grid two height">
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+</div>
+<div class="grid three height">
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+ <div class=item></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-block-size-computed.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-block-size-computed.html
new file mode 100644
index 00000000000..e9a073ca2aa
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-block-size-computed.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Intrinsic Size Test: intrinsic-block-size with computed values</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<meta name="assert" content="intrinsic-block-size supports the full grammar 'auto | legacy | <length>'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+</head>
+<body>
+<div id=target></div>
+<div id=scratch></div>
+<script>
+
+function length_ref(length) {
+ document.getElementById("scratch").style.width = length;
+ return getComputedStyle(document.getElementById("scratch")).getPropertyValue("width");
+}
+
+test_computed_value("intrinsic-block-size", "auto");
+test_computed_value("intrinsic-block-size", "legacy");
+test_computed_value("intrinsic-block-size", "1px");
+test_computed_value("intrinsic-block-size", "2vw", length_ref("2vw"));
+</script>
+</body>
+</html>
+
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-block-size-invalid.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-block-size-invalid.html
new file mode 100644
index 00000000000..1b6cba20f88
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-block-size-invalid.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Intrinsic Size Test: intrinsic-block-size with invalid values</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<meta name="assert" content="intrinsic-block-size supports the full grammar 'auto | legacy | <length>'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("intrinsic-block-size", "none");
+test_invalid_value("intrinsic-block-size", "10%");
+test_invalid_value("intrinsic-block-size", "-1px");
+</script>
+</body>
+</html>
+
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-block-size-valid.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-block-size-valid.html
new file mode 100644
index 00000000000..b34c73b230f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-block-size-valid.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Intrinsic Size Test: intrinsic-block-size with valid values</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<meta name="assert" content="intrinsic-block-size supports the full grammar 'auto | legacy | <length>'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("intrinsic-block-size", "auto");
+test_valid_value("intrinsic-block-size", "legacy");
+test_valid_value("intrinsic-block-size", "1px");
+test_valid_value("intrinsic-block-size", "2vw");
+</script>
+</body>
+</html>
+
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-height-computed.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-height-computed.html
new file mode 100644
index 00000000000..6f95274c637
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-height-computed.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Intrinsic Size Test: intrinsic-height with computed values</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<meta name="assert" content="intrinsic-height supports the full grammar 'auto | legacy | <length>'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+</head>
+<body>
+<div id=target></div>
+<div id=scratch></div>
+<script>
+
+function length_ref(length) {
+ document.getElementById("scratch").style.width = length;
+ return getComputedStyle(document.getElementById("scratch")).getPropertyValue("width");
+}
+
+test_computed_value("intrinsic-height", "auto");
+test_computed_value("intrinsic-height", "legacy");
+test_computed_value("intrinsic-height", "1px");
+test_computed_value("intrinsic-height", "2vw", length_ref("2vw"));
+</script>
+</body>
+</html>
+
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-height-invalid.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-height-invalid.html
new file mode 100644
index 00000000000..1f801124a2b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-height-invalid.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Intrinsic Size Test: intrinsic-height with invalid values</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<meta name="assert" content="intrinsic-height supports the full grammar 'auto | legacy | <length>'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("intrinsic-height", "none");
+test_invalid_value("intrinsic-height", "10%");
+test_invalid_value("intrinsic-height", "-1px");
+</script>
+</body>
+</html>
+
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-height-valid.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-height-valid.html
new file mode 100644
index 00000000000..e4614762118
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-height-valid.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Intrinsic Size Test: intrinsic-height with valid values</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<meta name="assert" content="intrinsic-height supports the full grammar 'auto | legacy | <length>'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("intrinsic-height", "auto");
+test_valid_value("intrinsic-height", "legacy");
+test_valid_value("intrinsic-height", "1px");
+test_valid_value("intrinsic-height", "2vw");
+</script>
+</body>
+</html>
+
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-inline-size-computed.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-inline-size-computed.html
new file mode 100644
index 00000000000..c53a77e5631
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-inline-size-computed.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Intrinsic Size Test: intrinsic-inline-size with computed values</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<meta name="assert" content="intrinsic-inline-size supports the full grammar 'auto | legacy | <length>'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+</head>
+<body>
+<div id=target></div>
+<div id=scratch></div>
+<script>
+
+function length_ref(length) {
+ document.getElementById("scratch").style.width = length;
+ return getComputedStyle(document.getElementById("scratch")).getPropertyValue("width");
+}
+
+test_computed_value("intrinsic-inline-size", "auto");
+test_computed_value("intrinsic-inline-size", "legacy");
+test_computed_value("intrinsic-inline-size", "1px");
+test_computed_value("intrinsic-inline-size", "2vw", length_ref("2vw"));
+</script>
+</body>
+</html>
+
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-inline-size-invalid.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-inline-size-invalid.html
new file mode 100644
index 00000000000..6ad224d11d3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-inline-size-invalid.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Intrinsic Size Test: intrinsic-inline-size with invalid values</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<meta name="assert" content="intrinsic-inline-size supports the full grammar 'auto | legacy | <length>'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("intrinsic-inline-size", "none");
+test_invalid_value("intrinsic-inline-size", "10%");
+test_invalid_value("intrinsic-inline-size", "-1px");
+</script>
+</body>
+</html>
+
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-inline-size-valid.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-inline-size-valid.html
new file mode 100644
index 00000000000..ad5aef95dca
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-inline-size-valid.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Intrinsic Size Test: intrinsic-inline-size with valid values</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<meta name="assert" content="intrinsic-inline-size supports the full grammar 'auto | legacy | <length>'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("intrinsic-inline-size", "auto");
+test_valid_value("intrinsic-inline-size", "legacy");
+test_valid_value("intrinsic-inline-size", "1px");
+test_valid_value("intrinsic-inline-size", "2vw");
+</script>
+</body>
+</html>
+
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-size-computed.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-size-computed.html
new file mode 100644
index 00000000000..29be33d4a3d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-size-computed.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Intrinsic Size Test: intrinsic-size with computed values</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<meta name="assert" content="intrinsic-size supports the full grammar '[auto | legacy | <length>]{1,2}'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+</head>
+<body>
+<div id=target></div>
+<div id=scratch></div>
+<script>
+
+function length_ref(length) {
+ document.getElementById("scratch").style.width = length;
+ return getComputedStyle(document.getElementById("scratch")).getPropertyValue("width");
+}
+
+test_computed_value("intrinsic-size", "auto");
+test_computed_value("intrinsic-size", "legacy");
+test_computed_value("intrinsic-size", "legacy auto");
+test_computed_value("intrinsic-size", "auto legacy");
+test_computed_value("intrinsic-size", "1px");
+test_computed_value("intrinsic-size", "1px auto");
+test_computed_value("intrinsic-size", "1px legacy");
+test_computed_value("intrinsic-size", "auto 1px");
+test_computed_value("intrinsic-size", "legacy 1px");
+test_computed_value("intrinsic-size", "2vw 3px", length_ref("2vw") + " 3px");
+test_computed_value("intrinsic-size", "2px 3vh", "2px " + length_ref("3vh"));
+test_computed_value("intrinsic-size", "5px 5px", "5px");
+</script>
+</body>
+</html>
+
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-size-invalid.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-size-invalid.html
new file mode 100644
index 00000000000..b4cb2dbffd2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-size-invalid.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Intrinsic Size Test: intrinsic-size with invalid values</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<meta name="assert" content="intrinsic-size supports the full grammar '[auto | legacy | <length>]{1,2}'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("intrinsic-size", "auto legacy auto");
+test_invalid_value("intrinsic-size", "10%");
+test_invalid_value("intrinsic-size", "2em 3px 5px");
+test_invalid_value("intrinsic-size", "1px 1%");
+test_invalid_value("intrinsic-size", "1px auto auto");
+test_invalid_value("intrinsic-size", "-1px");
+</script>
+</body>
+</html>
+
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-size-sets-computed-dimensions.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-size-sets-computed-dimensions.html
new file mode 100644
index 00000000000..e70c3179223
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-size-sets-computed-dimensions.html
@@ -0,0 +1,61 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Intrinsic Size Test: intrinsic-size sets component dimensions.</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<meta name="assert" content="intrinsic-size sets component dimensions.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+<style>
+#horizontal-target {
+ writing-mode: horizontal-tb;
+}
+#vertical-target {
+ writing-mode: vertical-rl;
+}
+</style>
+</head>
+<body>
+<div id=horizontal-target></div>
+<div id=vertical-target></div>
+<script>
+
+const horizontal = document.getElementById("horizontal-target");
+const vertical = document.getElementById("vertical-target");
+
+function runTest() {
+ const horizontal_style = getComputedStyle(horizontal);
+ const vertical_style = getComputedStyle(vertical);
+ test(() => {
+ assert_equals(horizontal_style["intrinsic-width"], "1px");
+ assert_equals(vertical_style["intrinsic-width"], "1px");
+ }, 'intrinsic-width set correctly');
+
+ test(() => {
+ assert_equals(horizontal_style["intrinsic-height"], "2px");
+ assert_equals(vertical_style["intrinsic-height"], "2px");
+ }, 'intrinsic-height set correctly');
+
+ test(() => {
+ assert_equals(horizontal_style["intrinsic-inline-size"], "1px");
+ assert_equals(vertical_style["intrinsic-inline-size"], "2px");
+ }, 'intrinsic-inline-size set correctly');
+
+ test(() => {
+ assert_equals(horizontal_style["intrinsic-block-size"], "2px");
+ assert_equals(vertical_style["intrinsic-block-size"], "1px");
+ }, 'intrinsic-block-size set correctly');
+}
+
+window.onload = () => {
+ horizontal.style["intrinsic-size"] = "1px 2px";
+ vertical.style["intrinsic-size"] = "1px 2px";
+ runTest();
+};
+</script>
+</body>
+</html>
+
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-size-valid.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-size-valid.html
new file mode 100644
index 00000000000..7ab13c7d798
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-size-valid.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Intrinsic Size Test: intrinsic-size with valid values</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<meta name="assert" content="intrinsic-size supports the full grammar '[auto | legacy | <length>]{1,2}'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("intrinsic-size", "auto");
+test_valid_value("intrinsic-size", "legacy");
+test_valid_value("intrinsic-size", "auto legacy");
+test_valid_value("intrinsic-size", "auto auto", "auto");
+test_valid_value("intrinsic-size", "legacy legacy", "legacy");
+test_valid_value("intrinsic-size", "1px");
+test_valid_value("intrinsic-size", "2em 3px");
+test_valid_value("intrinsic-size", "5px 5px", "5px");
+</script>
+</body>
+</html>
+
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-width-computed.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-width-computed.html
new file mode 100644
index 00000000000..08602e5347f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-width-computed.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Intrinsic Size Test: intrinsic-width with computed values</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<meta name="assert" content="intrinsic-width supports the full grammar 'auto | legacy | <length>'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+</head>
+<body>
+<div id=target></div>
+<div id=scratch></div>
+<script>
+
+function length_ref(length) {
+ document.getElementById("scratch").style.width = length;
+ return getComputedStyle(document.getElementById("scratch")).getPropertyValue("width");
+}
+
+test_computed_value("intrinsic-width", "auto");
+test_computed_value("intrinsic-width", "legacy");
+test_computed_value("intrinsic-width", "1px");
+test_computed_value("intrinsic-width", "2vw", length_ref("2vw"));
+</script>
+</body>
+</html>
+
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-width-invalid.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-width-invalid.html
new file mode 100644
index 00000000000..b89f6567ae2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-width-invalid.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Intrinsic Size Test: intrinsic-width with invalid values</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<meta name="assert" content="intrinsic-width supports the full grammar 'auto | legacy | <length>'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("intrinsic-width", "none");
+test_invalid_value("intrinsic-width", "10%");
+test_invalid_value("intrinsic-width", "-1px");
+</script>
+</body>
+</html>
+
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-width-valid.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-width-valid.html
new file mode 100644
index 00000000000..e2d23eabe5d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-width-valid.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Intrinsic Size Test: intrinsic-width with valid values</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<meta name="assert" content="intrinsic-width supports the full grammar 'auto | legacy | <length>'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("intrinsic-width", "auto");
+test_valid_value("intrinsic-width", "legacy");
+test_valid_value("intrinsic-width", "1px");
+test_valid_value("intrinsic-width", "2vw");
+</script>
+</body>
+</html>
+
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/resources/dice.png b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/resources/dice.png
new file mode 100644
index 00000000000..c82d01517cd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/resources/dice.png
Binary files differ
diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-017.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-017.html
new file mode 100644
index 00000000000..a2521cbcbbe
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-017.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>CSS Text Test: line-break: anywhere</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="5.3. Line Breaking Details" href="https://drafts.csswg.org/css-text-3/#line-break-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere">
+<link rel="match" href="reference/line-break-anywhere-004-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<meta name="flags" content="Ahem">
+<meta name="assert" content="The text is wrapped into two lines, since there is no need to break the second line using the space in the middle.">
+<style>
+div {
+ position: relative;
+ font: 25px / 1 Ahem;
+}
+.red {
+ position: absolute;
+ background: green;
+ color: red;
+ width: 100px;
+ height: 100px;
+ z-index: -1;
+}
+.test {
+ color: green;
+ width: 3ch;
+ line-break: anywhere;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="red">XXX<br>X X</div>
+ <div class="test">XXXX<span> </span>X</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-001.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-001.html
new file mode 100644
index 00000000000..a4158dc9907
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-001.html
@@ -0,0 +1,39 @@
+
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>CSS Text Test: line-break: anywhere and the white-space property</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-pre">
+<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere">
+<link rel="match" href="reference/line-break-anywhere-004-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<meta name="flags" content="Ahem">
+<meta name="assert" content="'line-break: anywhere' can't prevent overflow under 'white-space: pre', because it line wrapping is not allowed. ">
+<style>
+div {
+ position: relative;
+ font: 10px / 1 Ahem;
+}
+.red {
+ position: absolute;
+ background: green;
+ color: red;
+ height: 100px;
+ z-index: -1;
+}
+.test {
+ color: green;
+ width: 3ch;
+ line-break: anywhere;
+
+ white-space: pre;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="red">XXXX<span style="color: green">XXXX</span>XX</div>
+ <div class="test">XXXX XX</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-002.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-002.html
new file mode 100644
index 00000000000..2fbb53dca21
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-002.html
@@ -0,0 +1,40 @@
+
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>CSS Text Test: line-break: anywhere and the white-space property</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-nowrap">
+<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere">
+<link rel="match" href="reference/line-break-anywhere-004-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<meta name="flags" content="Ahem">
+<meta name="assert" content="'line-break: anywhere' can't prevent overflow under 'white-space: nowrap', because it line wrapping is not allowed. ">
+<style>
+div {
+ position: relative;
+ font: 10px / 1 Ahem;
+}
+.red {
+ position: absolute;
+ background: green;
+ color: red;
+ width: 100px;
+ height: 100px;
+ z-index: -1;
+}
+.test {
+ color: green;
+ width: 5ch;
+ line-break: anywhere;
+
+ white-space: nowrap;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="red">XXXX XX</div>
+ <div class="test">XXXX XX</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-003.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-003.html
new file mode 100644
index 00000000000..3002dc10648
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-003.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>CSS Text Test: line-break: anywhere and the white-space property</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-pre">
+<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere">
+<link rel="match" href="reference/line-break-anywhere-004-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<meta name="flags" content="Ahem">
+<meta name="assert" content="'line-break: anywhere' can't prevent overflow under 'white-space: pre', because it line wrapping is not allowed. ">
+<style>
+div {
+ position: relative;
+ font: 25px / 1 Ahem;
+}
+.red {
+ position: absolute;
+ background: green;
+ color: red;
+ height: 100px;
+ z-index: -1;
+}
+.test {
+ color: green;
+ width: 2ch;
+ line-break: anywhere;
+
+ white-space: pre;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="red"><span style="color: green">X</span>XXX</div>
+ <div class="test"> XXX</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-004.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-004.html
new file mode 100644
index 00000000000..e6e1b39787d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-004.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>CSS Text Test: line-break: anywhere and the white-space property</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-normal">
+<link rel="help" title="4.1.3. Phase II: Trimming and Positioning" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2">
+<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere">
+<link rel="match" href="reference/line-break-anywhere-004-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<meta name="flags" content="Ahem">
+<meta name="assert" content="The line is wrapped ignoring the white space, which will be removed honoring 'white-space: normal'">
+<style>
+div {
+ position: relative;
+ font: 25px / 1 Ahem;
+}
+.red {
+ position: absolute;
+ background: green;
+ color: red;
+ width: 100px;
+ height: 100px;
+ z-index: -1;
+}
+.test {
+ color: green;
+ width: 4ch;
+ line-break: anywhere;
+
+ white-space: normal;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="red">XXX<br>XX</div>
+ <div class="test">XXX<span style="background: red"> </span>XX</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-005.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-005.html
new file mode 100644
index 00000000000..2f64d8704ba
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-005.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>CSS Text Test: line-break: anywhere and the white-space property</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-normal">
+<link rel="help" title="4.1.3. Phase II: Trimming and Positioning" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2">
+<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere">
+<link rel="match" href="reference/line-break-anywhere-004-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<meta name="flags" content="Ahem">
+<meta name="assert" content="The line is wrapped ignoring the white space, which will be removed honoring 'white-space: normal'">
+<style>
+div {
+ position: relative;
+ font: 25px / 1 Ahem;
+}
+.red {
+ position: absolute;
+ background: green;
+ color: red;
+ width: 100px;
+ height: 100px;
+ z-index: -1;
+}
+.test {
+ color: green;
+ width: 4ch;
+ line-break: anywhere;
+
+ white-space: normal;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="red">XXXX<br>X</div>
+ <div class="test"><span style="background: red"> </span>XXXXX</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-006.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-006.html
new file mode 100644
index 00000000000..c804e371262
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-006.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>CSS Text Test: line-break: anywhere and the white-space property</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-pre-wrap">
+<link rel="help" title="4.1.3. Phase II: Trimming and Positioning" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2">
+<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere">
+<link rel="match" href="reference/line-break-anywhere-004-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<meta name="flags" content="Ahem">
+<meta name="assert" content="'line-break: anywhere' can't break a preserved sequence of spaces under 'white-spate: pre-wrap', which should hang instead.">
+<style>
+div {
+ position: relative;
+ font: 25px / 1 Ahem;
+}
+.red {
+ position: absolute;
+ background: green;
+ color: red;
+ height: 100px;
+ z-index: -1;
+}
+.test {
+ color: green;
+ width: 2ch;
+
+ line-break: anywhere;
+ white-space: pre-wrap;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="red">XXXX<br>XX</div>
+ <div class="test">X<span style="background: green"> </span>XX</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-007.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-007.html
new file mode 100644
index 00000000000..d9b266db9f9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-007.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>CSS Text Test: line-break: anywhere and the white-space property</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-pre-wrap">
+<link rel="help" title="4.1.3. Phase II: Trimming and Positioning" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2">
+<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere">
+<link rel="match" href="reference/line-break-anywhere-004-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<meta name="flags" content="Ahem">
+<meta name="assert" content="'line-break: anywhere' can't break before the first white-space affter a word under 'white-spate: pre-wrap', which should hang instead.">
+<style>
+div {
+ position: relative;
+ font: 25px / 1 Ahem;
+}
+.red {
+ position: absolute;
+ background: green;
+ color: red;
+ width: 100px;
+ height: 100px;
+ z-index: -1;
+}
+.test {
+ color: green;
+ width: 3ch;
+
+ line-break: anywhere;
+ white-space: pre-wrap;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="red">XXXX<br>XX</div>
+ <div class="test">XXX<span style="background: green"> </span>XX</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-008.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-008.html
new file mode 100644
index 00000000000..aebd31ea685
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-008.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>CSS Text Test: line-break: anywhere and the white-space property</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces">
+<link rel="help" title="4.1.3. Phase II: Trimming and Positioning" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2">
+<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere">
+<link rel="match" href="reference/line-break-anywhere-004-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<meta name="flags" content="Ahem">
+<meta name="assert" content="'line-break: anywhere' allows preserved white spaces at the end of the line, honoring 'white-space: break-spaces'.">
+<style>
+div {
+ position: relative;
+ font: 25px / 1 Ahem;
+}
+.red {
+ position: absolute;
+ background: green;
+ color: red;
+ height: 100px;
+ z-index: -1;
+}
+.test {
+ color: green;
+ width: 4ch;
+
+ line-break: anywhere;
+ white-space: break-spaces;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="red">XX<span style="color: green">XX<br>XX</span>XX<br>XXX</div>
+ <div class="test">XX XXXXX</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-009.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-009.html
new file mode 100644
index 00000000000..f536c907a40
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-009.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>CSS Text Test: line-break: anywhere and the white-space property</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces">
+<link rel="help" title="4.1.3. Phase II: Trimming and Positioning" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2">
+<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere">
+<link rel="match" href="reference/line-break-anywhere-004-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<meta name="flags" content="Ahem">
+<meta name="assert" content="'line-break: anywhere' allows breaking before the first character of a preserved white space sequence, honoring 'white-space: break-spaces'.">
+<style>
+div {
+ position: relative;
+ font: 25px / 1 Ahem;
+}
+.red {
+ position: absolute;
+ background: green;
+ color: red;
+ height: 100px;
+ z-index: -1;
+}
+.test {
+ color: green;
+ width: 4ch;
+
+ line-break: anywhere;
+ white-space: break-spaces;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="red">XXXX<br><span style="color: green">XXX</span>X<br>XXXX<br><span style="color: green">X</span>X</div>
+ <div class="test">XXXX XXXXX X</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-001.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-001.html
new file mode 100644
index 00000000000..d18df4b38c6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-001.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>CSS Text Test: line-break: anywhere overrides behavior defined for the WJ, ZW, GL, and ZWJ classes</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="5.1. Line Breaking Details" href="https://drafts.csswg.org/css-text-3/#line-break-details">
+<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere">
+<link rel="match" href="reference/line-break-anywhere-004-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<meta name="flags" content="Ahem">
+<meta name="assert" content="Except where explicitly defined by 'line-break: anywhere' line breaking behavior defined for the WJ classes in [UAX14] must be honored. ">
+<style>
+div {
+ position: relative;
+ font: 50px / 1 Ahem;
+}
+.red {
+ position: absolute;
+ width: 100px;
+ height: 100px;
+ background: red;
+ z-index: -1;
+}
+.test {
+ color: green;
+ width: 2ch;
+ line-break: anywhere;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="red"></div>
+ <div class="test">XX&#x2060;XX</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-002.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-002.html
new file mode 100644
index 00000000000..1255aa14d38
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-002.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>CSS Text Test: line-break: anywhere overrides behavior defined for the WJ, ZW, GL, and ZWJ classes</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="5.1. Line Breaking Details" href="https://drafts.csswg.org/css-text-3/#line-break-details">
+<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere">
+<link rel="match" href="reference/line-break-anywhere-004-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<meta name="flags" content="Ahem">
+<meta name="assert" content="Except where explicitly defined by 'line-break: anywhere' line breaking behavior defined for the WJ classes in [UAX14] must be honored. ">
+<style>
+div {
+ position: relative;
+ font: 50px / 1 Ahem;
+}
+.red {
+ position: absolute;
+ width: 100px;
+ height: 100px;
+ background: red;
+ z-index: -1;
+}
+.test {
+ color: green;
+ width: 2ch;
+ line-break: anywhere;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="red"></div>
+ <div class="test">XX&#xFEFF;XX</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-003.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-003.html
new file mode 100644
index 00000000000..7fe230e890d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-003.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>CSS Text Test: line-break: anywhere overrides behavior defined for the WJ, ZW, GL, and ZWJ classes</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="5.1. Line Breaking Details" href="https://drafts.csswg.org/css-text-3/#line-break-details">
+<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere">
+<link rel="match" href="reference/line-break-anywhere-004-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<meta name="flags" content="Ahem">
+<meta name="assert" content="Except where explicitly defined by 'line-break: anywhere' line breaking behavior defined for the ZW classes in [UAX14] must be honored. ">
+<style>
+div {
+ position: relative;
+ font: 25px / 1 Ahem;
+}
+.red {
+ position: absolute;
+ width: 100px;
+ height: 100px;
+ color: red;
+ background: green;
+ z-index: -1;
+}
+.test {
+ color: green;
+ width: 4ch;
+ line-break: anywhere;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="red">XXXX<br>XX</div>
+ <div class="test">..&#x200B;...X</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-004.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-004.html
new file mode 100644
index 00000000000..13706d5d9dc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-004.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>CSS Text Test: line-break: anywhere overrides behavior defined for the WJ, ZW, GL, and ZWJ classes</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="5.1. Line Breaking Details" href="https://drafts.csswg.org/css-text-3/#line-break-details">
+<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere">
+<link rel="match" href="reference/line-break-anywhere-004-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<meta name="flags" content="Ahem">
+<meta name="assert" content="Except where explicitly defined by 'line-break: anywhere' line breaking behavior defined for the GL classes in [UAX14] must be honored. ">
+<style>
+div {
+ position: relative;
+ font: 50px / 1 Ahem;
+}
+.red {
+ position: absolute;
+ width: 100px;
+ height: 100px;
+ background: red;
+ z-index: -1;
+}
+.test {
+ color: green;
+ width: 3ch;
+ line-break: anywhere;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="red"></div>
+ <div class="test">XX&nbsp;XX</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-005.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-005.html
new file mode 100644
index 00000000000..175228d9c52
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-005.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>CSS Text Test: line-break: anywhere overrides behavior defined for the WJ, ZW, GL, and ZWJ classes</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="5.1. Line Breaking Details" href="https://drafts.csswg.org/css-text-3/#line-break-details">
+<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere">
+<link rel="match" href="reference/line-break-anywhere-004-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<meta name="flags" content="Ahem">
+<meta name="assert" content="Except where explicitly defined by 'line-break: anywhere' line breaking behavior defined for the GL classes in [UAX14] must be honored. ">
+<style>
+div {
+ position: relative;
+ font: 50px / 1 Ahem;
+}
+.red {
+ position: absolute;
+ background: green;
+ color: red;
+ z-index: -1;
+}
+.test {
+ color: green;
+ width: 2ch;
+ line-break: anywhere;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="red">XX<br><span style="color: green">X</span>X</div>
+ <div class="test">XX&nbsp;X</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-006.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-006.html
new file mode 100644
index 00000000000..9bb557e7d3b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-006.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>CSS Text Test: line-break: anywhere overrides behavior defined for the WJ, ZW, GL, and ZWJ classes</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="5.1. Line Breaking Details" href="https://drafts.csswg.org/css-text-3/#line-break-details">
+<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere">
+<link rel="match" href="reference/line-break-anywhere-004-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<meta name="flags" content="Ahem">
+<meta name="assert" content="Except where explicitly defined by 'line-break: anywhere' line breaking behavior defined for the GL classes in [UAX14] must be honored. ">
+<style>
+div {
+ position: relative;
+ font: 50px / 1 Ahem;
+}
+.red {
+ position: absolute;
+ background: red;
+ width: 100px;
+ height: 100px;
+ z-index: -1;
+}
+.test {
+ color: green;
+ width: 4ch;
+ line-break: anywhere;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="red"></div>
+ <div class="test">XX &nbsp;XX</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-007.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-007.html
new file mode 100644
index 00000000000..7f90bfd4304
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-007.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>CSS Text Test: line-break: anywhere overrides behavior defined for the WJ, ZW, GL, and ZWJ classes</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="5.1. Line Breaking Details" href="https://drafts.csswg.org/css-text-3/#line-break-details">
+<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere">
+<link rel="match" href="reference/line-break-anywhere-004-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<meta name="flags" content="Ahem">
+<meta name="assert" content="Except where explicitly defined by 'line-break: anywhere' line breaking behavior defined for the GL classes in [UAX14] must be honored. ">
+<style>
+div {
+ position: relative;
+ font: 20px / 1 Ahem;
+}
+.red {
+ position: absolute;
+ background: green;
+ height: 100px;
+ color: red;
+ z-index: -1;
+}
+.test {
+ color: green;
+ width: 5ch;
+ line-break: anywhere;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="red">XXXXX<br>XX</div>
+ <div class="test">XXX<span style="background: green"> &nbsp;X</span>XX</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-008.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-008.html
new file mode 100644
index 00000000000..40826540c9f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-008.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>CSS Text Test: line-break: anywhere overrides behavior defined for the WJ, ZW, GL, and ZWJ classes</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="5.1. Line Breaking Details" href="https://drafts.csswg.org/css-text-3/#line-break-details">
+<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere">
+<link rel="match" href="reference/line-break-anywhere-004-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<meta name="flags" content="Ahem">
+<meta name="assert" content="Except where explicitly defined by 'line-break: anywhere' line breaking behavior defined for the GL classes in [UAX14] must be honored. ">
+<style>
+div {
+ position: relative;
+ font: 50px / 1 Ahem;
+}
+.red {
+ position: absolute;
+ background: green;
+ color: red;
+ z-index: -1;
+}
+.test {
+ color: green;
+ width: 3ch;
+ line-break: anywhere;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="red">XX<br>X</div>
+ <div class="test">XX&#x202F;X</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-009.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-009.html
new file mode 100644
index 00000000000..6d6ca3f743a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-009.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>CSS Text Test: line-break: anywhere overrides behavior defined for the WJ, ZW, GL, and ZWJ classes</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="5.1. Line Breaking Details" href="https://drafts.csswg.org/css-text-3/#line-break-details">
+<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere">
+<link rel="match" href="reference/line-break-anywhere-004-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<meta name="flags" content="Ahem">
+<meta name="assert" content="Except where explicitly defined by 'line-break: anywhere' line breaking behavior defined for the GL classes in [UAX14] must be honored. ">
+<style>
+div {
+ position: relative;
+ font: 50px / 1 Ahem;
+}
+.red {
+ position: absolute;
+ background: green;
+ color: red;
+ z-index: -1;
+}
+.test {
+ color: green;
+ width: 2ch;
+ line-break: anywhere;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="red">XX<br>X</div>
+ <div class="test">XX&#x180E;X</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-010.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-010.html
new file mode 100644
index 00000000000..5f152c66294
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-010.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>CSS Text Test: line-break: anywhere overrides behavior defined for the WJ, ZW, GL, and ZWJ classes</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="5.1. Line Breaking Details" href="https://drafts.csswg.org/css-text-3/#line-break-details">
+<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere">
+<link rel="match" href="reference/line-break-anywhere-004-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<meta name="flags" content="Ahem">
+<meta name="assert" content="Except where explicitly defined by 'line-break: anywhere' line breaking behavior defined for the GL classes in [UAX14] must be honored. ">
+<style>
+div {
+ position: relative;
+ font: 50px / 1 Ahem;
+}
+.red {
+ position: absolute;
+ background: red;
+ width: 100px;
+ height: 100px;
+ z-index: -1;
+}
+.test {
+ color: green;
+ width: 3ch;
+ line-break: anywhere;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="red"></div>
+ <div class="test">XX &#x180E;XX</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-011.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-011.html
new file mode 100644
index 00000000000..2196d983f9f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-011.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>CSS Text Test: line-break: anywhere overrides behavior defined for the WJ, ZW, GL, and ZWJ classes</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="5.1. Line Breaking Details" href="https://drafts.csswg.org/css-text-3/#line-break-details">
+<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere">
+<link rel="match" href="reference/line-break-anywhere-004-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<meta name="flags" content="Ahem">
+<meta name="assert" content="Except where explicitly defined by 'line-break: anywhere' line breaking behavior defined for the GL classes in [UAX14] must be honored. ">
+<style>
+div {
+ position: relative;
+ font: 50px / 1 Ahem;
+}
+.red {
+ position: absolute;
+ background: green;
+ color: red;
+ z-index: -1;
+}
+.test {
+ color: green;
+ width: 2ch;
+ line-break: anywhere;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="red">XX<br>X</div>
+ <div class="test">XX&#x034F;X</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-012.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-012.html
new file mode 100644
index 00000000000..110d9cafc4c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-012.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>CSS Text Test: line-break: anywhere overrides behavior defined for the WJ, ZW, GL, and ZWJ classes</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="5.1. Line Breaking Details" href="https://drafts.csswg.org/css-text-3/#line-break-details">
+<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere">
+<link rel="match" href="reference/line-break-anywhere-004-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<meta name="flags" content="Ahem">
+<meta name="assert" content="Except where explicitly defined by 'line-break: anywhere' line breaking behavior defined for the GL classes in [UAX14] must be honored. ">
+<style>
+div {
+ position: relative;
+ font: 50px / 1 Ahem;
+}
+.red {
+ position: absolute;
+ background: red;
+ width: 100px;
+ height: 100px;
+ z-index: -1;
+}
+.test {
+ color: green;
+ width: 3ch;
+ line-break: anywhere;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="red"></div>
+ <div class="test">XX &#x034F;XX</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-013.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-013.html
new file mode 100644
index 00000000000..2cda76c5cd3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-013.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>CSS Text Test: line-break: anywhere overrides behavior defined for the WJ, ZW, GL, and ZWJ classes</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="5.1. Line Breaking Details" href="https://drafts.csswg.org/css-text-3/#line-break-details">
+<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere">
+<link rel="match" href="reference/line-break-anywhere-004-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<meta name="flags" content="Ahem">
+<meta name="assert" content="Except where explicitly defined by 'line-break: anywhere' line breaking behavior defined for the GL classes in [UAX14] must be honored. ">
+<style>
+div {
+ position: relative;
+ font: 50px / 1 Ahem;
+}
+.red {
+ position: absolute;
+ background: red;
+ width: 100px;
+ height: 100px;
+ z-index: -1;
+}
+.test {
+ color: green;
+ width: 2ch;
+ line-break: anywhere;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="red"></div>
+ <div class="test">XX&#x2011;X</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-014.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-014.html
new file mode 100644
index 00000000000..d79efb7aee8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-014.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>CSS Text Test: line-break: anywhere overrides behavior defined for the WJ, ZW, GL, and ZWJ classes</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="5.1. Line Breaking Details" href="https://drafts.csswg.org/css-text-3/#line-break-details">
+<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere">
+<link rel="match" href="reference/line-break-anywhere-004-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<meta name="flags" content="Ahem">
+<meta name="assert" content="Except where explicitly defined by 'line-break: anywhere' line breaking behavior defined for the GL classes in [UAX14] must be honored. ">
+<style>
+div {
+ position: relative;
+ font: 25px / 1 Ahem;
+}
+.red {
+ position: absolute;
+ background: green;
+ color: red;
+ height: 100px;
+ z-index: -1;
+}
+.test {
+ color: green;
+ width: 4ch;
+ line-break: anywhere;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="red">XX X<br>XX</div>
+ <div class="test">XX &#x2011;XX</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-015.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-015.html
new file mode 100644
index 00000000000..5eecd03da25
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-015.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>CSS Text Test: line-break: anywhere overrides behavior defined for the WJ, ZW, GL, and ZWJ classes</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="5.1. Line Breaking Details" href="https://drafts.csswg.org/css-text-3/#line-break-details">
+<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere">
+<link rel="match" href="reference/line-break-anywhere-004-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<meta name="flags" content="Ahem">
+<meta name="assert" content="Except where explicitly defined by 'line-break: anywhere' line breaking behavior defined for the ZWJ classes in [UAX14] must be honored. ">
+<style>
+div {
+ position: relative;
+ font: 50px / 1 Ahem;
+}
+.red {
+ position: absolute;
+ background: red;
+ height: 100px;
+ width: 100px;
+ height: 100px;
+ z-index: -1;
+}
+.test {
+ color: green;
+ width: 2ch;
+ line-break: anywhere;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="red"></div>
+ <div class="test">XX&#x200D;XX</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-016.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-016.html
new file mode 100644
index 00000000000..d4ab337a7b5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-016.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>CSS Text Test: line-break: anywhere overrides behavior defined for the WJ, ZW, GL, and ZWJ classes</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="5.1. Line Breaking Details" href="https://drafts.csswg.org/css-text-3/#line-break-details">
+<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere">
+<link rel="match" href="reference/line-break-anywhere-004-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<meta name="flags" content="Ahem">
+<meta name="assert" content="Except where explicitly defined by 'line-break: anywhere' line breaking behavior defined for the ZWJ classes in [UAX14] must be honored. ">
+<style>
+div {
+ position: relative;
+ font: 25px / 1 Ahem;
+}
+.red {
+ position: absolute;
+ background: green;
+ color: red;
+ height: 100px;
+ z-index: -1;
+}
+.test {
+ color: green;
+ width: 4ch;
+ line-break: anywhere;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="red">XX X<br>X</div>
+ <div class="test">XX &#x200D;XX</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/line-breaking/line-breaking-atomic-nowrap-001.html b/tests/wpt/web-platform-tests/css/css-text/line-breaking/line-breaking-atomic-nowrap-001.html
new file mode 100644
index 00000000000..1e3b9edb1dc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/line-breaking/line-breaking-atomic-nowrap-001.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<title>CSS Text Test: Check atomic inline+NBSP quirk does not apply if nowrap</title>
+<link rel="help" href="https://www.w3.org/TR/css-text-3/#line-break-details">
+<link rel="help" href="https://crbug.com/1002442">
+<link rel="author" title="Koji Ishii" href="mailto:kojiishi@gmail.com">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+div {
+ white-space: nowrap;
+ font-size: 10px;
+ line-height: 1;
+ width: 5ch;
+}
+.inline-block {
+ display: inline-block;
+ width: 3ch;
+ height: 1em;
+}
+img {
+ width: 3ch;
+ height: 1em;
+}
+</style>
+<body>
+ <div>000<span class="inline-block"></span>&nbsp;111</div>
+ <div>000<img>&nbsp;111</div>
+ <div>000&nbsp;<span class="inline-block"></span>111</div>
+ <div>000&nbsp;<img>111</div>
+<script>
+(function () {
+ for (let e of document.getElementsByTagName('div')) {
+ test(() => {
+ let height = e.offsetHeight;
+ assert_equals(Math.round(height / 10), 1);
+ });
+ }
+})();
+</script>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-006.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-006.html
new file mode 100644
index 00000000000..ac90149ff30
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-006.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test: overflow-wrap: anywhere</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-keep-all">
+<meta name="flags" content="ahem">
+<link rel="match" href="reference/overflow-wrap-break-word-001-ref.html">
+<meta name="assert" content="The word shouldn't be broken, honoring word-break: keep-all, but 'overflow-wrap: anywhere introduces additional soft wrap opportunities.">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+div {
+ position: relative;
+ font-size: 20px;
+ font-family: Ahem;
+ line-height: 1em;
+}
+.red {
+ position: absolute;
+ background: green;
+ color: red;
+ width: 100px;
+ height: 100px;
+ z-index: -1;
+}
+.test {
+ color: green;
+ width: 5ch;
+
+ word-break: keep-all;
+ overflow-wrap: anywhere;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="red">XXXXX<br>XXX</div>
+ <div class="test">XXXXXXXX</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-007.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-007.html
new file mode 100644
index 00000000000..a5e10a84ebd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-007.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test: overflow-wrap - anywhere (basic)</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere">
+<link rel="match" href="overflow-wrap-001-ref.html">
+<meta name="flags" content="ahem">
+<meta name="assert" content="The 'overflow-wrap' property set 'anywhere' breaks the word at an arbitrary point">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+ #test {
+ border: 5px solid orange;
+ font: 20px/1 Ahem;
+ overflow-wrap: anywhere;
+ width: 200px;
+ }
+</style>
+<body>
+ <p class="instructions">Test passes if the black box is within the orange box.</p>
+ <p id="test">FillerTextFillerTextFillerTextFillerText</p>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-008.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-008.html
new file mode 100644
index 00000000000..ddb95629999
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-008.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test: overflow-wrap - anywhere and white-space - nowrap</title>
+<link rel="author" title="Intel" href="http://www.intel.com">
+<link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com">
+<link rel="help" title="3 White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-nowrap">
+<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere">
+<link rel="match" href="overflow-wrap-002-ref.html">
+<meta name="flags" content="ahem">
+<meta name="assert" content="Test checks that the 'overflow-wrap' property has effect if and only if the 'white-space' allows wrapping">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+ #ref {
+ border: 5px solid orange;
+ font: 20px/1 Ahem;
+ overflow-wrap: anywhere;
+ width: 200px;
+ }
+ #test {
+ border: 5px solid blue;
+ font: 20px/1 Ahem;
+ overflow-wrap: anywhere;
+ white-space: nowrap;
+ width: 200px;
+ }
+</style>
+<body>
+ <p class="instructions">Test passes if the black box overflows the blue border box, but fits within the orange border box.</p>
+ <p id="ref">FillerTextFillerTextFillerTextFillerText</p>
+ <p id="test">FillerTextFillerTextFillerTextFillerText</p>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-009.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-009.html
new file mode 100644
index 00000000000..90f2ad33373
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-009.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>CSS Text Test: overflow-wrap: anywhere</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property" href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere">
+<link rel="match" href="reference/overflow-wrap-break-word-001-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<meta name="flags" content="Ahem">
+<meta name="assert" content="The text is wrapped into two lines, since there is no need to break the second line using the space in the middle.">
+<style>
+div {
+ position: relative;
+ font: 25px / 1 Ahem;
+}
+.ref {
+ position: absolute;
+ background: green;
+ color: red;
+ width: 100px;
+ height: 100px;
+ z-index: -1;
+}
+.test {
+ color: green;
+ width: 3ch;
+
+ overflow-wrap: anywhere;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="ref">XXX<br>X X</div>
+ <div class="test">XXXX<span> </span>X</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-010.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-010.html
new file mode 100644
index 00000000000..0b4b75bc1c5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-010.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>CSS Text Test: overflow-wrap: anywhere</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property" href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere">
+<link rel="match" href="reference/overflow-wrap-break-word-001-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<meta name="flags" content="Ahem">
+<meta name="assert" content="'overflow-wrap: anywhere' applies correctly when there is styled text using 'span' elements.">
+<style>
+div {
+ position: relative;
+ font: 25px / 1 Ahem;
+}
+.red {
+ position: absolute;
+ background: green;
+ color: red;
+ height: 100px;
+ z-index: -1;
+}
+.test {
+ color: transparent;
+ width: 4ch;
+ overflow-wrap: anywhere;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="red"><span style="color: green">XX</span>XX<br>XX</div>
+ <div class="test">XX<span style="color: green">XXXX</span>XX</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-001.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-001.html
new file mode 100644
index 00000000000..5a93c873445
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-001.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>overlfow-wrap: anywhere on inline element</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere">
+<meta name="flags" content="Ahem">
+<link rel="match" href="reference/overflow-wrap-break-word-001-ref.html">
+<meta name="assert" content="'overflow-wrap: anywhwre' allows breaking before punctuation characters">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+div {
+ font: 50px / 1 Ahem;
+}
+.fail {
+ position: absolute;
+ background: green;
+ color: red;
+ width: 100px;
+ z-index: -1;
+}
+.test {
+ color: green;
+ width: 1em;
+
+ overflow-wrap: anywhere;
+}
+</style>
+
+<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+<div class="fail">X<br>X</div>
+<div class="test"><span>X</span><span>.</span></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-002.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-002.html
new file mode 100644
index 00000000000..38dc19631d3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-002.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>overlfow-wrap: anywhere on inline element</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere">
+<meta name="flags" content="Ahem">
+<link rel="match" href="reference/overflow-wrap-break-word-001-ref.html">
+<meta name="assert" content="'overflow-wrap: anywhere' works when specified on inline element">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+div, span {
+ font: 10px / 1 Ahem;
+ color: green;
+}
+.fail {
+ position: absolute;
+ background: green;
+ color: red;
+ height: 100px;
+ z-index: -1;
+}
+.testdiv {
+ width: 5ch;
+}
+.test {
+ overflow-wrap: anywhere;
+}
+</style>
+
+<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+<div class="fail">XXXXXXXXXX<br>XXXXX<br>XXXX<br>XXX</div>
+<div class="testdiv">XXXXXXXXXX<span class="test">XXXXXXXXX</span>XXX</div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-003.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-003.html
new file mode 100644
index 00000000000..511294901d9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-003.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>overlfow-wrap: anywhere on inline element</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere">
+<meta name="flags" content="Ahem">
+<link rel="match" href="reference/overflow-wrap-break-word-001-ref.html">
+<meta name="assert" content="'overflow-wrap: anywhere' allows to break after the first character of the inline-block it applies to">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+div, span {
+ font: 50px / 1 Ahem;
+ color: green;
+}
+.fail {
+ position: absolute;
+ color: red;
+ z-index: -1;
+}
+.testdiv {
+ width: 2ch;
+}
+.test {
+ overflow-wrap: anywhere;
+}
+</style>
+
+<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+<div class="fail">XX<br>XX</div>
+<div class="testdiv">XX<span class="test">XX</span></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-004.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-004.html
new file mode 100644
index 00000000000..e498e1eff16
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-004.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>overlfow-wrap: anywhere on inline element</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere">
+<meta name="flags" content="Ahem">
+<link rel="match" href="reference/overflow-wrap-break-word-001-ref.html">
+<meta name="assert" content="'overflow-wrap: anywhere' should break after the last character of the inline-block it applies to">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+div, span {
+ font: 25px / 1 Ahem;
+ color: green;
+}
+.fail {
+ position: absolute;
+ background: green;
+ color: red;
+ width: 100px;
+ height: 100px;
+ z-index: -1;
+}
+.testdiv {
+ width: 2ch;
+}
+.test {
+ overflow-wrap: anywhere;
+}
+</style>
+
+<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+<div class="fail">XX<br>X<br>XX<br></div>
+<div class="testdiv">X<span class="test">XX</span>XX</div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-009.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-009.html
new file mode 100644
index 00000000000..fbbcf2233c5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-009.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>CSS Text Test: overflow-wrap: break-word</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property" href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-break-word">
+<link rel="match" href="reference/overflow-wrap-break-word-001-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<meta name="flags" content="Ahem">
+<meta name="assert" content="The text is wrapped into two lines, since there is no need to break the second line using the space in the middle.">
+<style>
+div {
+ position: relative;
+ font: 25px / 1 Ahem;
+}
+.ref {
+ position: absolute;
+ background: green;
+ color: red;
+ width: 100px;
+ height: 100px;
+ z-index: -1;
+}
+.test {
+ color: green;
+ width: 3ch;
+
+ overflow-wrap: break-word;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="ref">XXX<br>X X</div>
+ <div class="test">XXXX<span> </span>X</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-010.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-010.html
new file mode 100644
index 00000000000..da45dea2530
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-010.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>CSS Text Test: overflow-wrap: break-word</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property" href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-break-word">
+<link rel="match" href="reference/overflow-wrap-break-word-001-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<meta name="flags" content="Ahem">
+<meta name="assert" content="'overflow-wrap: break-word' applies correctly when there is styled text using 'span' elements.">
+<style>
+div {
+ position: relative;
+ font: 25px / 1 Ahem;
+}
+.ref {
+ position: absolute;
+ background: green;
+ color: red;
+ height: 100px;
+ z-index: -1;
+}
+.test {
+ color: transparent;
+ width: 4ch;
+ overflow-wrap: break-word;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="ref"><span style="color: green">XX</span>XX<br>XX</div>
+ <div class="test">XX<span style="color: green">XXXX</span>XX</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-001.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-001.html
index 608d4853a24..6975e816b46 100644
--- a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-001.html
+++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-001.html
@@ -6,8 +6,10 @@
<meta name="flags" content="">
<link rel="match" href="reference/overflow-wrap-min-content-size-001-ref.html">
<meta name="assert" content="Soft wrap opportunities introduced by overflow-wrap:anywhere **are** considered when calculating min-content intrinsic sizes.">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css">
<style>
table {
+ font: 20px/1 Ahem;
overflow-wrap: anywhere;
max-width: 0;
border: 0;
@@ -19,6 +21,7 @@ td {
color: transparent;
}
#red {
+ font: 20px/1 Ahem;
position: absolute;
z-index: -1;
background: red;
diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-004.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-004.html
index 7ee2b344f7f..16161ece69d 100644
--- a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-004.html
+++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-004.html
@@ -3,11 +3,13 @@
<title>CSS Text Test: overflow-wrap: anywhere and intrinsic sizing</title>
<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
<link rel="help" href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property">
-<meta name="flags" content="">
+<meta name="flags" content="ahem">
<link rel="match" href="reference/overflow-wrap-min-content-size-004-ref.html">
<meta name="assert" content="Soft wrap opportunities introduced by overflow-wrap:break-word **are not** considered when calculating min-content intrinsic sizes.">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css">
<style>
table {
+ font: 20px/1 Ahem;
overflow-wrap: break-word;
max-width: 0;
border: 0;
@@ -19,6 +21,7 @@ td {
color: transparent;
}
#red {
+ font: 20px/1 Ahem;
position: absolute;
z-index: -1;
background: red;
diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-005.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-005.html
new file mode 100644
index 00000000000..c8c2a1a4335
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-005.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test: overflow-wrap: anywhere and intrinsic sizing</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-keep-all">
+<meta name="flags" content="ahem">
+<link rel="match" href="reference/overflow-wrap-min-content-size-001-ref.html">
+<meta name="assert" content="The word shouldn't be broken, honoring word-break: keep-all, but 'overflow-wrap: anywhere' introduce additional soft wrap opportunities, which **are** considered when calculating min-content intrinsic sizes.">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+div {
+ position: relative;
+ font: 20px/1 Ahem;
+}
+#red {
+ position: absolute;
+ z-index: -1;
+ background: red;
+ color: transparent;
+}
+.test {
+ background: green;
+ color: transparent;
+ width: min-content;
+
+ word-break: keep-all;
+ overflow-wrap: anywhere;
+}
+</style>
+<body>
+ <p>Test passes if there is a green box below and no red.
+ <div id=red>X<br>X<br>X<br>X</div>
+ <div class="test">XXXX</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-006.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-006.html
new file mode 100644
index 00000000000..dbbd39301bd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-006.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test: overflow-wrap: anywhere and intrinsic sizing</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-break-word">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-keep-all">
+<meta name="flags" content="ahem">
+<link rel="match" href="reference/overflow-wrap-min-content-size-004-ref.html">
+<meta name="assert" content="The word shouldn't be broken, honoring word-break: keep-all, but 'overflow-wrap: break-word' introduce additional soft wrap opportunities, which **are not** considered when calculating min-content intrinsic sizes.">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+div {
+ position: relative;
+ font: 20px/1 Ahem;
+}
+#red {
+ position: absolute;
+ z-index: -1;
+ background: red;
+ color: transparent;
+}
+.test {
+ background: green;
+ color: transparent;
+ width: min-content;
+
+ word-break: keep-all;
+ overflow-wrap: break-word;
+}
+</style>
+<body>
+ <p>Test passes if there is a green box below and no red.
+ <div id=red>XXXX</div>
+ <div class="test">XXXX</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-007.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-007.html
new file mode 100644
index 00000000000..7296b8d3769
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-007.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test: word-break: break-word and intrinsic sizing</title>
+<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" />
+<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere">
+<meta name="flags" content="ahem">
+<link rel="match" href="reference/overflow-wrap-break-word-001-ref.html">
+<meta name="assert" content="'overflow-wrap: anywhere' allows breaking before punctuation characters and it should be considered when computing the min-content size.">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+div {
+ font: 50px / 1 Ahem;
+}
+.fail {
+ position: absolute;
+ background: green;
+ color: red;
+ width: 100px;
+ z-index: -1;
+}
+.test {
+ color: green;
+ width: min-content;
+ overflow-wrap: anywhere;
+}
+</style>
+
+<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+<div class="fail">X<br>X</div>
+<div class="test"><span>X</span><span>.</span></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-008.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-008.html
new file mode 100644
index 00000000000..5c2b3958bd7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-008.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test: word-break: break-word and intrinsic sizing</title>
+<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" />
+<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-break-word">
+<meta name="flags" content="ahem">
+<link rel="match" href="reference/overflow-wrap-break-word-001-ref.html">
+<meta name="assert" content="'overflow-wrap: break-words allows breaking before punctuation characters, but these breaking opportunnites shouldn't be considered when computing the min-content size.">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+div {
+ font: 50px / 1 Ahem;
+}
+.fail {
+ background: green;
+ position: absolute;
+ color: red;
+ height: 100px;
+ z-index: -1;
+}
+.test {
+ color: green;
+ width: min-content;
+ overflow-wrap: break-word;
+}
+</style>
+
+<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+<div class="fail">XX</div>
+<div class="test"><span>X</span><span>.</span></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/reference/overflow-wrap-min-content-size-001-ref.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/reference/overflow-wrap-min-content-size-001-ref.html
index 99d964777c6..ef5c2e88cef 100644
--- a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/reference/overflow-wrap-min-content-size-001-ref.html
+++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/reference/overflow-wrap-min-content-size-001-ref.html
@@ -2,8 +2,10 @@
<meta charset="utf-8">
<title>CSS Text Test reference</title>
<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css">
<style>
div {
+ font: 20px/1 Ahem;
position: absolute;
background: green;
color: transparent;
diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/reference/overflow-wrap-min-content-size-004-ref.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/reference/overflow-wrap-min-content-size-004-ref.html
index c37f3f10784..93e22ba71ed 100644
--- a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/reference/overflow-wrap-min-content-size-004-ref.html
+++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/reference/overflow-wrap-min-content-size-004-ref.html
@@ -2,8 +2,10 @@
<meta charset="utf-8">
<title>CSS Text Test reference</title>
<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css">
<style>
div {
+ font: 20px/1 Ahem;
position: absolute;
background: green;
color: transparent;
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-011.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-011.html
index bc6b2965cb0..cf1babeb5e9 100644
--- a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-011.html
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-011.html
@@ -9,7 +9,7 @@
<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces">
<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere">
<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-all">
-<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-break-word">
<link rel="match" href="reference/white-space-break-spaces-005-ref.html">
<meta name="flags" content="ahem">
<meta name="assert" content="A breaking opportunity exists before the first character of a sequence of preserved white spaces to avoid the line overflow, honoring the 'line-break' property, ignoring previous breaking opportunities.">
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-014.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-014.html
new file mode 100644
index 00000000000..6eb32b57f3f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-014.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test: white-space - break-spaces</title>
+<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" />
+<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property">
+<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere">
+<link rel="match" href="reference/white-space-break-spaces-005-ref.html">
+<meta name="flags" content="ahem">
+<meta name="assert" content="A breaking opportunity exists before the first character of a sequence of preserved white spaces to avoid the line overflow, honoring the overflow-wrap property, except when there are previous breaking opportunities.">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+div {
+ font: 25px/1 Ahem;
+}
+.fail {
+ position: absolute;
+ color: red;
+ z-index: -1;
+}
+span { color: green; }
+.test {
+ color: green;
+ width: 4ch;
+
+ white-space: break-spaces;
+ overflow-wrap: anywhere;
+}
+
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="fail">X<span>XXX<br></span>XX<span>X</span>X<br><span>XXXX<br></span><span>XXXX<br></span></div>
+ <div class="test">X XX X</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-015.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-015.html
new file mode 100644
index 00000000000..785c2f2a4e9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-015.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test: white-space - break-spaces</title>
+<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" />
+<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property">
+<link rel="help" title="5.2. Breaking Rules for Letters: the word-break property " href="https://drafts.csswg.org/css-text-3/#word-break-property">
+<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-all">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere">
+<link rel="match" href="reference/white-space-break-spaces-005-ref.html">
+<meta name="flags" content="ahem">
+<meta name="assert" content="A breaking opportunity exists only after a preserved white space character, but it's possible to avoid the overflow honoring the 'word-break' property, hence the 'overflow-wrap' property is not applied.">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+div {
+ font: 25px/1 Ahem;
+}
+.fail {
+ position: absolute;
+ color: red;
+ z-index: -1;
+}
+span { color: green; }
+.test {
+ color: green;
+ width: 4ch;
+
+ white-space: break-spaces;
+ overflow-wrap: anywhere;
+ word-break: break-all;
+}
+
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="fail">X<span>X</span>X<span>X<br></span>X<span>X</span>X<span>X<br></span><span>XXXX<br></span><span>XXXX<br></span></div>
+ <div class="test">X XX X</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-016.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-016.html
new file mode 100644
index 00000000000..bec4520b113
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-016.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test: white-space - break-spaces</title>
+<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" />
+<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property">
+<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#propdef-line-break">
+<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere">
+<link rel="match" href="reference/white-space-break-spaces-005-ref.html">
+<meta name="flags" content="ahem">
+<meta name="assert" content="A breaking opportunity exists before the first character of a sequence of preserved white spaces to avoid the line overflow, honoring the 'line-break' property, ignoring previous breaking opportunities.">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+div {
+ font: 25px/1 Ahem;
+}
+.fail {
+ position: absolute;
+ color: red;
+ z-index: -1;
+}
+span { color: green; }
+.test {
+ color: green;
+ width: 4ch;
+
+ white-space: break-spaces;
+ line-break: anywhere;
+ overflow-wrap: anywhere;
+}
+
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="fail">X<span>X</span>XX<br><span>X</span>X<span>XX<br></span><span>XXXX<br></span><span>XXXX<br></span></div>
+ <div class="test">X XX X</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-017.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-017.html
new file mode 100644
index 00000000000..9cb8fdbebcb
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-017.html
@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test: white-space - break-spaces</title>
+<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" />
+<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property">
+<link rel="help" title="5.2. Breaking Rules for Letters: the word-break property " href="https://drafts.csswg.org/css-text-3/#word-break-property">
+<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#propdef-line-break">
+<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-all">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere">
+<link rel="match" href="reference/white-space-break-spaces-005-ref.html">
+<meta name="flags" content="ahem">
+<meta name="assert" content="A breaking opportunity exists before the first character of a sequence of preserved white spaces to avoid the line overflow, honoring the 'line-break' property, ignoring previous breaking opportunities.">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+div {
+ font: 25px/1 Ahem;
+}
+.fail {
+ position: absolute;
+ color: red;
+ z-index: -1;
+}
+span { color: green; }
+.test {
+ color: green;
+ width: 4ch;
+
+ white-space: break-spaces;
+ line-break: anywhere;
+ word-break: break-all;
+ overflow-wrap: anywhere;
+}
+
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="fail">X<span>X</span>XX<br><span>X</span>X<span>XX<br></span><span>XXXX<br></span><span>XXXX<br></span></div>
+ <div class="test">X XX X</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-018.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-018.html
new file mode 100644
index 00000000000..828058f53dd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-018.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test: white-space - break-spaces</title>
+<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" />
+<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property">
+<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere">
+<link rel="match" href="reference/white-space-break-spaces-005-ref.html">
+<meta name="flags" content="ahem">
+<meta name="assert" content="A breaking opportunity exists before the first character of a sequence of preserved white spaces to avoid the line overflow, honoring the overflow-wrap property.">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+div {
+ font: 25px/1 Ahem;
+}
+.fail {
+ position: absolute;
+ color: red;
+ z-index: -1;
+}
+span { color: green; }
+.test {
+ color: green;
+ width: 4ch;
+
+ white-space: break-spaces;
+ overflow-wrap: anywhere;
+}
+
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="fail">XXXX<br><span>X</span>XX<span>X<br></span><span>XXXX<br></span><span>XXXX<br></span></div>
+ <div class="test">XXXX XX</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-001.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-001.html
new file mode 100644
index 00000000000..6912bafee9e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-001.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test: white-space: break-spaces and Overflow Wrapping</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces">
+<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-break-word">
+<meta name="flags" content="ahem">
+<link rel="match" href="reference/white-space-break-spaces-005-ref.html">
+<meta name="assert" content="break-word + break-spaces do not allow a break
+between the last character of a word and the first space of a sequence of preserved spaces
+if there are other wrapping opportunities earlier in the line.">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+div {
+ font: 25px/1 Ahem;
+}
+.fail {
+ position: absolute;
+ color: red;
+ z-index: -1;
+}
+span { color: green; }
+.test {
+ color: green;
+ width: 4ch;
+
+ white-space: break-spaces;
+ overflow-wrap: break-word;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="fail">XX<span>XX</span><br>X<span>X</span>X<span>X<br>XXXX<br>XXXX</span></div>
+ <div class="test">XX X X</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-002.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-002.html
new file mode 100644
index 00000000000..caef57ec60f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-002.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test: white-space: break-spaces and Overflow Wrapping</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces">
+<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere">
+<meta name="flags" content="ahem">
+<link rel="match" href="reference/white-space-break-spaces-005-ref.html">
+<meta name="assert" content="anywhere + break-spaces do not allow a break
+between the last character of a word and the first space of a sequence of preserved spaces
+if there are other wrapping opportunities earlier in the line.">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+div {
+ font: 25px/1 Ahem;
+}
+.fail {
+ position: absolute;
+ color: red;
+ z-index: -1;
+}
+span { color: green; }
+.test {
+ color: green;
+ width: 4ch;
+
+ white-space: break-spaces;
+ overflow-wrap: anywhere;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="fail">XX<span>XX</span><br>X<span>X</span>X<span>X<br>XXXX<br>XXXX</span></div>
+ <div class="test">XX X X</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-003.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-003.html
new file mode 100644
index 00000000000..9f91d085d8a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-003.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test: white-space: break-spaces and Overflow Wrapping</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces">
+<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere">
+<meta name="flags" content="ahem">
+<link rel="match" href="reference/pre-wrap-001-ref.html">
+<meta name="assert" content="The word is not broken if there are previous breaking opportunities, honoring the 'white-space: break-spaces' value.">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+div {
+ font: 20px/1 Ahem;
+}
+.fail {
+ position: absolute;
+ color: red;
+ z-index: -1;
+}
+span { color: green; }
+.test {
+ color: green;
+ width: 2ch;
+
+ white-space: break-spaces;
+ overflow-wrap: break-word;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="fail"><span>XX</span><br>XX</div>
+ <div class="test"> XX</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-004.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-004.html
new file mode 100644
index 00000000000..911cff021ad
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-004.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test: white-space: break-spaces and Overflow Wrapping</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces">
+<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere">
+<meta name="flags" content="ahem">
+<link rel="match" href="reference/pre-wrap-001-ref.html">
+<meta name="assert" content="The word is not broken if there are previous breaking opportunities, honoring the 'white-space: break-spaces' value.">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+div {
+ font: 20px/1 Ahem;
+}
+.fail {
+ position: absolute;
+ color: red;
+ z-index: -1;
+}
+span { color: green; }
+.test {
+ color: green;
+ width: 2ch;
+
+ white-space: break-spaces;
+ overflow-wrap: anywhere;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="fail"><span>XX</span><br>XX</div>
+ <div class="test"> XX</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-005.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-005.html
new file mode 100644
index 00000000000..d5c836539d2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-005.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test: white-space: break-spaces and Overflow Wrapping</title>
+<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" />
+<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://www.w3.org/TR/css-text-3/#white-space-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces">
+<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-word-break">
+<link rel="match" href="reference/white-space-break-spaces-005-ref.html">
+<meta name="flags" content="ahem">
+<meta name="assert" content="White spaces are preserved, honoring the 'white-space: break-spaces', and the words aren't broken honring the 'overflow-wrap: break-word'.">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+div {
+ font: 25px/1 Ahem;
+}
+.fail {
+ position: absolute;
+ color: red;
+ z-index: -1;
+}
+span { color: green; }
+.test {
+ color: green;
+ width: 4ch;
+
+ white-space: break-spaces;
+ overflow-wrap: break-word;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="fail"><span>XXXX</span><br>XXXX<br><span>X</span>XXX<br><span>XXXX</span></div>
+ <div class="test"> XXXX XXX</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-006.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-006.html
new file mode 100644
index 00000000000..0e4b6a80f14
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-006.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test: white-space: break-spaces and Overflow Wrapping</title>
+<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" />
+<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://www.w3.org/TR/css-text-3/#white-space-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces">
+<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-word-break">
+<link rel="match" href="reference/white-space-break-spaces-005-ref.html">
+<meta name="flags" content="ahem">
+<meta name="assert" content="White spaces are preserved, honoring the 'white-space: break-spaces', and the words aren't broken honring the 'overflow-wrap: break-word'.">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+div {
+ font: 25px/1 Ahem;
+}
+.fail {
+ position: absolute;
+ color: red;
+ z-index: -1;
+}
+span { color: green; }
+.test {
+ color: green;
+ width: 4ch;
+
+ white-space: break-spaces;
+ overflow-wrap: anywhere;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="fail"><span>XXXX</span><br>XXXX<br><span>X</span>XXX<br><span>XXXX</span></div>
+ <div class="test"> XXXX XXX</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-007.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-007.html
new file mode 100644
index 00000000000..bf51e4bc2fb
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-007.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test: white-space: break-spaces and Overflow Wrapping</title>
+<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" />
+<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://www.w3.org/TR/css-text-3/#white-space-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces">
+<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-word-break">
+<link rel="match" href="reference/white-space-break-spaces-005-ref.html">
+<meta name="flags" content="ahem">
+<meta name="assert" content="White spaces are preserved, honoring the 'white-space: break-spaces', but we can break before the first space after a word honoring 'overflow-wrap: break-word'.">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+div {
+ font: 25px/1 Ahem;
+}
+.fail {
+ position: absolute;
+ color: red;
+ z-index: -1;
+}
+span { color: green; }
+.test {
+ color: green;
+ width: 4ch;
+
+ white-space: break-spaces;
+ overflow-wrap: break-word;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="fail">XXXX<br><span>X</span>XX<span>X</span><br><span>XXXX</span><br><span>XXXX</span></div>
+ <div class="test">XXXX XX</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-008.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-008.html
new file mode 100644
index 00000000000..9826449ecc6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-008.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test: white-space - break-spaces</title>
+<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" />
+<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://www.w3.org/TR/css-text-3/#white-space-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces">
+<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere">
+<link rel="match" href="reference/white-space-break-spaces-005-ref.html">
+<meta name="flags" content="ahem">
+<meta name="assert" content="White spaces are preserved, honoring the 'white-space: break-spaces', but we can break before the first space after a word honoring 'overflow-wrap: anywhere'.">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+div {
+ font: 25px/1 Ahem;
+}
+.fail {
+ position: absolute;
+ color: red;
+ z-index: -1;
+}
+span { color: green; }
+.test {
+ color: green;
+ width: 4ch;
+
+ white-space: break-spaces;
+ overflow-wrap: anywhere;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="fail">XXXX<br><span>X</span>XX<span>X</span><br><span>XXXX</span><br><span>XXXX</span></div>
+ <div class="test">XXXX XX</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-009.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-009.html
new file mode 100644
index 00000000000..3b6e7643309
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-009.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test: word-break:break-word + white-space:break-spaces</title>
+<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" />
+<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://www.w3.org/TR/css-text-3/#white-space-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces">
+<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere">
+<meta name="flags" content="ahem">
+<link rel="match" href="reference/white-space-break-spaces-005-ref.html">
+<meta name="assert" content="break-word + break-spaces do allow a break
+between the last character of a word and the first space of a sequence of preserved spaces
+if there are no other wrapping opportunities earlier in the line">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+div {
+ font: 25px/1 Ahem;
+}
+.expected {
+ position: absolute;
+ color: green;
+ width: 100px;
+ height: 100px;
+ white-space: pre;
+}
+.test {
+ background: green;
+ color: red;
+ width: 4ch;
+
+ white-space: break-spaces;
+ overflow-wrap: break-word;
+</style>
+
+<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+<div class="expected">XXXX<br> <br>XXXX<br></div>
+<div class="test">XXXX XXXX </div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-010.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-010.html
new file mode 100644
index 00000000000..d479c5e5675
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-010.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test: word-break:break-word + white-space:break-spaces</title>
+<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" />
+<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://www.w3.org/TR/css-text-3/#white-space-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces">
+<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere">
+<meta name="flags" content="ahem">
+<link rel="match" href="reference/white-space-break-spaces-005-ref.html">
+<meta name="assert" content="anywhere + break-spaces do allow a break
+between the last character of a word and the first space of a sequence of preserved spaces
+if there are no other wrapping opportunities earlier in the line">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+div {
+ font: 25px/1 Ahem;
+}
+.expected {
+ position: absolute;
+ color: green;
+ width: 100px;
+ height: 100px;
+ white-space: pre;
+}
+.test {
+ background: green;
+ color: red;
+ width: 4ch;
+
+ white-space: break-spaces;
+ overflow-wrap: anywhere;
+</style>
+
+<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+<div class="expected">XXXX<br> <br>XXXX<br></div>
+<div class="test">XXXX XXXX </div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-009.html b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-009.html
new file mode 100644
index 00000000000..0912a2d3a15
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-009.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test: white-space: pre-wrap</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://www.w3.org/TR/css-text-3/#white-space-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-pre-wrap">
+<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere">
+<meta name="flags" content="ahem">
+<link rel="match" href="reference/white-space-break-spaces-005-ref.html">
+<meta name="assert" content="The word is not broken despite the 'word-break: break-word' if there are previous breaking opportunities, honoring the white-space: pre-wrap value.">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+div {
+ font-size: 20px;
+ font-family: Ahem;
+}
+.red {
+ position: absolute;
+ background: green;
+ color: red;
+ width: 100px;
+ height: 100px;
+ z-index: -1;
+ white-space: pre;
+}
+.test {
+ color: green;
+ line-height: 1em;
+ width: 5ch;
+
+ white-space: pre-wrap;
+ overflow-wrap: anywhere;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="red"> XX <br>XXX</div>
+ <div class="test"> XX XXX </div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-010.html b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-010.html
new file mode 100644
index 00000000000..71d169c65c0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-010.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test: white-space: pre-wrap</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://www.w3.org/TR/css-text-3/#white-space-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-pre-wrap">
+<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere">
+<meta name="flags" content="ahem">
+<link rel="match" href="reference/pre-wrap-001-ref.html">
+<meta name="assert" content="The word is not broken if there are previous breaking opportunities, honoring the white-space: pre-wrap value.">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+div {
+ font-size: 20px;
+ font-family: Ahem;
+ line-height: 1em;
+}
+.red {
+ position: absolute;
+ white-space: pre;
+ background: green;
+ color: red;
+ width: 40px;
+ height: 40px;
+ z-index: -1;
+}
+.test {
+ color: green;
+ width: 2ch;
+
+ white-space: pre-wrap;
+ overflow-wrap: anywhere;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="red"><br>XX</div>
+ <div class="test"> XX</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-029.html b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-029.html
new file mode 100644
index 00000000000..3e0a1e14e69
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-029.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>CSS Text Test: word-break: break-all</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="5.2. Breaking Rules for Letters: the word-break property" href="https://drafts.csswg.org/css-text-3/#word-break-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-all">
+<link rel="match" href="reference/word-break-break-all-010-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<meta name="flags" content="Ahem">
+<meta name="assert" content="The text is wrapped into two lines, since there is no need to break the second line using the space in the middle.">
+<style>
+div {
+ position: relative;
+ font: 25px / 1 Ahem;
+}
+.red {
+ position: absolute;
+ background: green;
+ color: red;
+ width: 100px;
+ height: 100px;
+ z-index: -1;
+}
+.test {
+ color: green;
+ width: 3ch;
+ word-break: break-all;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="red">XXX<br>X X</div>
+ <div class="test">XXXX<span> </span>X</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-030.html b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-030.html
new file mode 100644
index 00000000000..e6a8a0076d4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-030.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>CSS Text Test: word-break: break-all</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="5.2. Breaking Rules for Letters: the word-break property" href="https://drafts.csswg.org/css-text-3/#word-break-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-all">
+<link rel="match" href="reference/word-break-break-all-010-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<meta name="flags" content="Ahem">
+<meta name="assert" content="word-break: break-all applies correctly when there is styled text using 'span' elemetns.">
+<style>
+div {
+ position: relative;
+ font: 25px / 1 Ahem;
+}
+.ref {
+ position: absolute;
+ background: green;
+ color: red;
+ height: 100px;
+ z-index: -1;
+}
+.test {
+ color: transparent;
+ width: 4ch;
+ word-break: break-all;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="ref"><span style="color: green">XX</span>XX<br>XX</div>
+ <div class="test">XX<span style="color: green">XXXX</span>XX</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-inline-009.html b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-inline-009.html
new file mode 100644
index 00000000000..e1914f5f4db
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-inline-009.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>word-break: break-all on inline element</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="5.2. Breaking Rules for Letters: the word-break property" href="https://drafts.csswg.org/css-text-3/#word-break-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-all">
+<meta name="flags" content="Ahem">
+<link rel="match" href="reference/word-break-break-all-010-ref.html">
+<meta name="assert" content="'overflow-wrap: anywhere' works when specified on inline element">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+div, span {
+ font: 10px / 1 Ahem;
+ color: green;
+}
+.fail {
+ position: absolute;
+ background: green;
+ color: red;
+ height: 100px;
+ z-index: -1;
+}
+.testdiv {
+ width: 5ch;
+}
+.test {
+ word-break: break-all;
+}
+</style>
+
+<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+<div class="fail">XXXXXXXXXX<br>XXXXX<br>XXXX<br>XXX</div>
+<div class="testdiv">XXXXXXXXXX<span class="test">XXXXXXXXX</span>XXX</div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-inline-010.html b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-inline-010.html
new file mode 100644
index 00000000000..3c2df3cea29
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-inline-010.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>word-break: break-all on inline element</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" title="5.2. Breaking Rules for Letters: the word-break property" href="https://drafts.csswg.org/css-text-3/#word-break-property">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-all">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<meta name="flags" content="Ahem">
+<link rel="match" href="reference/word-break-break-all-010-ref.html">
+<meta name="assert" content="'word-break: break-all' allows to break after the first character of the inline-block it applies to">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+div, span {
+ font: 50px / 1 Ahem;
+ color: green;
+}
+.fail {
+ position: absolute;
+ color: red;
+ z-index: -1;
+}
+.testdiv {
+ width: 2ch;
+}
+.test {
+ word-break: break-all;
+}
+</style>
+
+<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+<div class="fail">XX<br>XX</div>
+<div class="testdiv">XX<span class="test">XX</span></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-min-content-001.html b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-min-content-001.html
index 20b610180b3..a310e304529 100644
--- a/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-min-content-001.html
+++ b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-min-content-001.html
@@ -7,8 +7,11 @@
<meta name="flags" content="">
<link rel="match" href="../overflow-wrap/reference/overflow-wrap-min-content-size-001-ref.html">
<meta name="assert" content="word-break: break-word should behave as overflow-wrap: anywhere, so breaking opportunities **are** considered when calculating min-content intrinsic sizes.">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css">
<style>
+div { font: 20px/1 Ahem; }
table {
+ font: 20px/1 Ahem;
word-break: break-word;
max-width: 0;
border: 0;
diff --git a/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-min-content-004.html b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-min-content-004.html
index efa61b9cd8a..89b30027c2e 100644
--- a/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-min-content-004.html
+++ b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-min-content-004.html
@@ -6,7 +6,7 @@
<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-word">
<meta name="flags" content="ahem">
<link rel="match" href="reference/word-break-break-all-010-ref.html">
-<meta name="assert" content="word-break: break-word allows breaking before punctuation characters and it should be considered when computing the min-content size.">
+<meta name="assert" content="'word-break: break-word' allows breaking before punctuation characters and it should be considered when computing the min-content size.">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
div {
diff --git a/tests/wpt/web-platform-tests/css/cssom/serialize-media-rule.html b/tests/wpt/web-platform-tests/css/cssom/serialize-media-rule.html
new file mode 100644
index 00000000000..94b37dc1a95
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/cssom/serialize-media-rule.html
@@ -0,0 +1,185 @@
+<!doctype html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>CSSOM - Serialization of CSSMediaRule</title>
+ <link rel="help" href="https://drafts.csswg.org/cssom/#serialize-a-css-rule">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+<script>
+function makeSheet(t) {
+ var style = document.createElement('style');
+ document.body.appendChild(style);
+ t.add_cleanup(function() {
+ document.body.removeChild(style);
+ });
+ return style.sheet;
+}
+
+test(function(t) {
+ var sheet = makeSheet(t);
+ sheet.insertRule('@media {}', 0);
+
+ assert_equals(sheet.cssRules.length, 1);
+ assert_equals(sheet.cssRules[0].cssText, '@media {\n}');
+}, 'empty media query list');
+
+test(function(t) {
+ var sheet = makeSheet(t);
+ sheet.insertRule('@media all {}');
+ sheet.insertRule('@media print {}');
+ sheet.insertRule('@media screen {}');
+ sheet.insertRule('@media speech {}');
+
+ assert_equals(sheet.cssRules.length, 4);
+ assert_equals(sheet.cssRules[0].cssText, '@media speech {\n}');
+ assert_equals(sheet.cssRules[1].cssText, '@media screen {\n}');
+ assert_equals(sheet.cssRules[2].cssText, '@media print {\n}');
+ assert_equals(sheet.cssRules[3].cssText, '@media all {\n}');
+}, 'type - no features');
+
+test(function(t) {
+ var sheet = makeSheet(t);
+ sheet.insertRule('@media not all {}');
+ sheet.insertRule('@media not print {}');
+ sheet.insertRule('@media not screen {}');
+ sheet.insertRule('@media not speech {}');
+
+ assert_equals(sheet.cssRules.length, 4);
+ assert_equals(sheet.cssRules[0].cssText, '@media not speech {\n}');
+ assert_equals(sheet.cssRules[1].cssText, '@media not screen {\n}');
+ assert_equals(sheet.cssRules[2].cssText, '@media not print {\n}');
+ assert_equals(sheet.cssRules[3].cssText, '@media not all {\n}');
+}, 'type - no features - negation');
+
+test(function(t) {
+ var sheet = makeSheet(t);
+ sheet.insertRule('@media aLL {}');
+ sheet.insertRule('@media pRiNt {}');
+ sheet.insertRule('@media screEN {}');
+ sheet.insertRule('@media spEech {}');
+
+ assert_equals(sheet.cssRules.length, 4);
+ assert_equals(sheet.cssRules[0].cssText, '@media speech {\n}');
+ assert_equals(sheet.cssRules[1].cssText, '@media screen {\n}');
+ assert_equals(sheet.cssRules[2].cssText, '@media print {\n}');
+ assert_equals(sheet.cssRules[3].cssText, '@media all {\n}');
+}, 'type - no features - character case normalization');
+
+test(function(t) {
+ var sheet = makeSheet(t);
+ sheet.insertRule('@media all and (color) {}');
+
+ assert_equals(sheet.cssRules.length, 1);
+ assert_equals(sheet.cssRules[0].cssText, '@media (color) {\n}');
+}, 'type - omission of all');
+
+test(function(t) {
+ var sheet = makeSheet(t);
+ sheet.insertRule('@media not all and (color) {}');
+
+ assert_equals(sheet.cssRules.length, 1);
+ assert_equals(sheet.cssRules[0].cssText, '@media not all and (color) {\n}');
+}, 'type - inclusion of negated all');
+
+test(function(t) {
+ var sheet = makeSheet(t);
+ sheet.insertRule('@media screen and (Color) {}');
+ sheet.insertRule('@media screen and (cOLor) {}');
+
+ assert_equals(sheet.cssRules.length, 2);
+ assert_equals(sheet.cssRules[0].cssText, '@media screen and (color) {\n}');
+ assert_equals(sheet.cssRules[1].cssText, '@media screen and (color) {\n}');
+}, 'features - character case normalization');
+
+/**
+ * The following test is disabled pending clarification of the intended
+ * behavior: https://github.com/w3c/csswg-drafts/issues/533
+ */
+//test(function(t) {
+// var sheet = makeSheet(t);
+// sheet.insertRule('@media screen and (color) and (color) {}');
+//
+// assert_equals(sheet.cssRules.length, 1);
+// assert_equals(
+// sheet.cssRules[0].cssText,
+// '@media screen and (color) {\n}'
+// );
+//}, 'features - de-duplication');
+
+test(function(t) {
+ var sheet = makeSheet(t);
+ sheet.insertRule('@media print and (max-width: 23px) and (max-width: 45px) {}');
+
+ assert_equals(sheet.cssRules.length, 1);
+ assert_equals(
+ sheet.cssRules[0].cssText,
+ '@media print and (max-width: 23px) and (max-width: 45px) {\n}'
+ );
+}, 'features - preservation of overspecified features');
+
+test(function(t) {
+ var sheet = makeSheet(t);
+ sheet.insertRule('@media screen and (max-width: 0px) and (color) {}');
+ sheet.insertRule('@media screen and (color) and (max-width: 0px) {}');
+
+ assert_equals(sheet.cssRules.length, 2);
+ assert_equals(
+ sheet.cssRules[0].cssText,
+ '@media screen and (color) and (max-width: 0px) {\n}'
+ );
+ assert_equals(
+ sheet.cssRules[1].cssText,
+ '@media screen and (color) and (max-width: 0px) {\n}'
+ );
+}, 'features - lexicographical sorting');
+
+test(function(t) {
+ var sheet = makeSheet(t);
+ sheet.insertRule('@media screen and (max-width: 0px), screen and (color) {}');
+
+ assert_equals(sheet.cssRules.length, 1);
+ assert_equals(
+ sheet.cssRules[0].cssText,
+ '@media screen and (max-width: 0px), screen and (color) {\n}'
+ );
+}, 'media query list');
+
+test(function(t) {
+ var sheet = makeSheet(t);
+ sheet.insertRule('@media print {}');
+
+ assert_equals(sheet.cssRules.length, 1);
+ sheet.cssRules[0].insertRule('#foo { z-index: 23; float: left; }', 0);
+ assert_equals(
+ sheet.cssRules[0].cssText,
+ [
+ '@media print {',
+ ' #foo { z-index: 23; float: left; }',
+ '}'
+ ].join('\n')
+ );
+}, 'one rule');
+
+test(function(t) {
+ var sheet = makeSheet(t);
+ sheet.insertRule('@media print {}');
+
+ assert_equals(sheet.cssRules.length, 1);
+ sheet.cssRules[0].insertRule('#foo { z-index: 23; float: left; }', 0);
+ sheet.cssRules[0].insertRule('#bar { float: none; z-index: 45; }', 0);
+ assert_equals(
+ sheet.cssRules[0].cssText,
+ [
+ '@media print {',
+ ' #bar { float: none; z-index: 45; }',
+ ' #foo { z-index: 23; float: left; }',
+ '}'
+ ].join('\n')
+ );
+}, 'many rules');
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/custom-elements/CustomElementRegistry.html b/tests/wpt/web-platform-tests/custom-elements/CustomElementRegistry.html
index 368044df3c9..c288e823270 100644
--- a/tests/wpt/web-platform-tests/custom-elements/CustomElementRegistry.html
+++ b/tests/wpt/web-platform-tests/custom-elements/CustomElementRegistry.html
@@ -185,12 +185,15 @@ test(function () {
var proxy = new Proxy(class extends HTMLElement { }, {
get: function (target, name) {
calls.push(name);
- iframe.contentWindow.customElements.define('another-custom-element', InnerCustomElement);
+ if (name === "prototype") {
+ iframe.contentWindow.customElements.define('another-custom-element', InnerCustomElement);
+ }
return target[name];
}
})
customElements.define('element-with-inner-element-define', proxy);
- assert_array_equals(calls, ['prototype'], 'customElements.define must get "prototype"');
+ assert_array_equals(calls, ['prototype', 'disabledFeatures', 'formAssociated'],
+ 'customElements.define must get "prototype", "disabledFeatures", and "formAssociated" on the constructor');
assert_true(iframe.contentDocument.createElement('another-custom-element') instanceof InnerCustomElement);
});
document.body.removeChild(iframe);
@@ -226,8 +229,8 @@ test(function () {
}
});
customElements.define('proxy-element', proxy);
- assert_array_equals(calls, ['prototype']);
-}, 'customElements.define must get "prototype" property of the constructor');
+ assert_array_equals(calls, ['prototype', 'disabledFeatures', 'formAssociated']);
+}, 'customElements.define must get "prototype", "disabledFeatures", and "formAssociated" property of the constructor');
test(function () {
var proxy = new Proxy(class extends HTMLElement { }, {
diff --git a/tests/wpt/web-platform-tests/docs/admin/index.md b/tests/wpt/web-platform-tests/docs/admin/index.md
index 7eca6e3a9a9..56a08eb7f07 100644
--- a/tests/wpt/web-platform-tests/docs/admin/index.md
+++ b/tests/wpt/web-platform-tests/docs/admin/index.md
@@ -21,18 +21,6 @@ infrastructure which makes the project possible.
## Secrets
-Some aspects of the infrastructure are only accessible to administrators.
-
-```eval_rst
-========================= ========================= =========================
-Project Secret Owners
-========================= ========================= =========================
-[results-collection] root SSH keys boaz@bocoup.com, mike@bocoup.com, rick@bocoup.com
-[results-collection] Password for app secrets boaz@bocoup.com, mike@bocoup.com, rick@bocoup.com
-========================= ========================= =========================
-
-```
-
SSL certificates for all HTTPS-enabled domains are retrieved via [Let's
Encrypt](https://letsencrypt.org/), so that data does not represent an
explicitly-managed secret.
@@ -68,10 +56,6 @@ explicitly-managed secret.
- markdittmer@google.com
- mike@bocoup.com
- rick@bocoup.com
-- [Amazon AWS](https://aws.amazon.com/): results-collection infrastructure
- - boaz@bocoup.com
- - mike@bocoup.com
- - rick@bocoup.com
- E-mail address: wpt.pr.bot@gmail.com
- boaz@bocoup.com
- mike@bocoup.com
@@ -85,6 +69,5 @@ explicitly-managed secret.
- mike@bocoup.com
- simon@bocoup.com
-[results-collection]: https://github.com/web-platform-tests/results-collection
[web-platform-tests]: https://github.com/e3c/web-platform-tests
[wpt.fyi]: https://github.com/web-platform-tests/wpt.fyi
diff --git a/tests/wpt/web-platform-tests/docs/assets/web-platform.png b/tests/wpt/web-platform-tests/docs/assets/web-platform.png
new file mode 100644
index 00000000000..2b14c5ef60d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/docs/assets/web-platform.png
Binary files differ
diff --git a/tests/wpt/web-platform-tests/docs/index.md b/tests/wpt/web-platform-tests/docs/index.md
index b24abae007f..d1a527e1a75 100644
--- a/tests/wpt/web-platform-tests/docs/index.md
+++ b/tests/wpt/web-platform-tests/docs/index.md
@@ -11,6 +11,7 @@ platform to deliver on the promise of working across browsers and devices
without needing extra layers of abstraction to paper over the gaps left by
specification editors and implementors.
+
The most important sources of information and activity are:
- [github.com/web-platform-tests/wpt](https://github.com/web-platform-tests/wpt):
@@ -19,9 +20,9 @@ The most important sources of information and activity are:
- [web-platform-tests.org](https://web-platform-tests.org): the documentation
website; details how to set up the project, how to write tests, how to give
and receive peer review, how to serve as an administrator, and more
-- [web-platform-tests.live](http://web-platform-tests.live): a public
- deployment of the test suite, allowing anyone to run the tests by visiting
- from an Internet-enabled browser of their choice
+- [wpt.live](http://wpt.live): a public deployment of the test suite,
+ allowing anyone to run the tests by visiting from an
+ Internet-enabled browser of their choice
- [wpt.fyi](https://wpt.fyi): an archive of test results collected from an
array of web browsers on a regular basis
- [Real-time chat room](http://irc.w3.org/?channels=testing): the
@@ -35,11 +36,18 @@ The most important sources of information and activity are:
**If you'd like clarification about anything**, don't hesitate to ask in the
chat room or on the mailing list.
-## Watch a Talk
+## Video Introduction ([transcript](intro-video-transcript))
-If you prefer watching a video, here is a talk introducing web-platform-tests:
+<iframe
+ width="560"
+ height="315"
+ src="https://www.youtube.com/embed/zuK1uyXPZS0"
+ frameborder="0"
+ allow="autoplay; encrypted-media"
+ allowfullscreen></iframe>
-<iframe width="560" height="315" src="https://www.youtube.com/embed/XnfE3MfH5hQ" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
+See also [this lecture from Web Engines Hackfest 2018 (30
+minutes)](https://www.youtube.com/watch?v=XnfE3MfH5hQ)
## GitHub
@@ -64,6 +72,7 @@ free to add yourself to the META.yml file!
:maxdepth: 2
test-suite-design
+ intro-video-transcript
running-tests/index
writing-tests/index
reviewing-tests/index
diff --git a/tests/wpt/web-platform-tests/docs/intro-video-transcript.md b/tests/wpt/web-platform-tests/docs/intro-video-transcript.md
new file mode 100644
index 00000000000..b43ebf728fc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/docs/intro-video-transcript.md
@@ -0,0 +1,232 @@
+# "Introduction to WPT" video transcript
+
+<iframe
+ width="560"
+ height="315"
+ src="https://www.youtube.com/embed/zuK1uyXPZS0"
+ frameborder="0"
+ allow="autoplay; encrypted-media"
+ allowfullscreen></iframe>
+
+**Still image of the WPT logo. The song ["My
+Luck"](http://brokeforfree.bandcamp.com/track/my-luck) by [Broke for
+Free](http://brokeforfree.com/) (licensed under [Creative Commons Attribution
+3.0](https://creativecommons.org/licenses/by/3.0/))
+plays in the background.**
+
+> Hello, and welcome to the Web Platform Tests!
+>
+> The goal of this project is to ensure that all web browsers present websites
+> in exactly the way the authors intended.
+>
+> But what is the web platform, exactly? You can think of it as having three
+> main parts.
+
+**A top-down shot of a blank sheet of graph paper**
+
+> First, there are the web browsers.
+
+A hand places a paper cutout depicting a browser window in the lower-right
+corner of the sheet.
+
+> Applications like Firefox, Chrome, and Safari allow people to interact with
+> pages and with each other.
+>
+> Second, there are the web standards.
+
+A hand places a paper cutout depicting a scroll of parchment paper in the
+lower-left corner of the sheet.
+
+> These documents define how the browsers are supposed to behave.
+
+**A screen recording of a web browser**
+
+`https://platform.html5.org` is entered into the location bar, and the browser
+loads the page.
+
+> That includes everything from how text is rendered to how augmented reality
+> apps are built. Specifying it all takes a lot of work!
+
+The browser clicks through to the Fetch standard and begins scrolling.
+
+> And as you might expect, the standards can get really complicated.
+
+**Return to the graph paper**
+
+A hand draws an arrow from the cutout of the scroll to the cutout of the
+browser window.
+
+> The people who build the browsers use the specifications as a blue print for
+> their work. A shared set of generic instructions like these make it possible
+> for people to choose between different browsers, but only if the browsers get
+> it right.
+
+A hand places a cutout representing a stack of papers on the top-center of the
+sheet and draws an arrow from that cutout to the cutout of the browser window.
+
+> To verify their work, the browser maintainers rely on the third part of the
+> web platform: conformance tests.
+
+A hand draws an arrow from the cutout of the scroll to the cutout of the tests.
+
+> We author tests to describe the same behavior as the standards, just
+> formatted in a way that a computer can understand.
+
+A hand draws an arrow from the cutout of the browser window to the cutout of
+the scroll.
+
+> In the process, the maintainers sometimes uncover problems in the design of
+> the specifications, and they recommend changes to fix them.
+
+A hand draws an arrow from the cutout of the tests to the cutout of the scroll.
+
+> Test authors also find and fix these so-called "spec bugs."
+
+A hand draws an arrow from the cutout of the browser window to the cutout of
+the tests.
+
+> ...and as they implement the standards, the maintainers of each browser
+> frequently write new tests that can be shared with the others.
+>
+> This is how thousands of people coordinate to build the cohesive programming
+> platform that we call the world wide web. The web-platform-tests project is
+> one of the test suites that make this possible.
+>
+> That's pretty abstract, though! Let's take a quick look at the tests
+> themselves.
+
+**A screen recording of a web browser**
+
+`http://wpt.live` is entered into the location bar, and the browser loads the
+page.
+
+> The latest version of the tests is publicly hosted in executable form on the
+> web at wpt.live.
+
+The browser begins scrolling through the enormous list of directories.
+
+> There, were can navigate among all the tests for all the different web
+> technologies.
+>
+> Let's take a look at a typical test.
+
+The browser stops scrolling, and a mouse cursor clicks on `fetch`, then `api`,
+then `headers`, and finally `headers-basic.html`.
+
+> This test is written with the web-platform-tests's testing framework,
+> testharness.js. The test completes almost instantly, and testharness.js
+> reports that this browser passes all but one subtest. To understand the
+> failure, we can read the source code.
+
+The mouse opens a context menu, selects "View Source", and scrolls to the
+source of the failing test.
+
+> It looks like the failing subtest is for what happens when a `Headers`
+> instance has a custom JavaScript iterator method. That's a strange edge case,
+> but it's important for browsers to agree on every detail!
+
+The mouse clicks on the browser's "Back" button and then navigates through the
+directory structure to the test at
+`css/css-transforms/transform-transformed-tr-contains-fixed-position.html`. It
+displays text rendered at an angle.
+
+> Many tests don't use testharness.js at all. Let's take a look at a couple
+> other test types.
+>
+> When it comes to the visual appearance of a page, it can be hard to verify
+> the intended behavior using JavaScript alone. For these situations, the
+> web-platform-tests uses what's known as a reftest.
+>
+> Short for "reference test", this type of test uses at least two different web
+> pages.
+>
+> The first page demonstrates the feature under test.
+
+The mouse opens a context menu, selects "View Source", and clicks on the `href`
+value for the matching reference. It looks identical to the previous page.
+
+> Inside of it, we'll find a link to a second page. This second page is the
+> reference page. It's designed to use a different approach to produce the same
+> output.
+
+The mouse clicks back and forth between the browser tabs displaying the test
+page and the reference page.
+
+> When tests like these are run automatically, a computer verifies that
+> screenshots of the two pages are identical.
+
+The mouse clicks on the browser's "Back" button and then navigates through the
+directory structure to the test at
+`css/css-animations/animation-fill-mode-002-manual.html`. The page includes the
+text, "Test passes if there is a filled color square with 'Filler Text', whose
+color gradually changes in the order: YELLOW to GREEN." It also includes the
+described animated square.
+
+> Even with testharness.js and reftests, there are many web platform features
+> that a computer can't automatically verify. In cases like these, we fall back
+> to using manual tests.
+>
+> Manual tests can only be verified by a living, breathing human. They describe
+> their expectations in plain English so that a human operator can easily
+> determine whether the browser is behaving correctly.
+
+`https://web-platform-tests.org` is entered into the location bar, and the
+browser loads the page.
+
+> You can read more about all the test types in the project documentation at
+> [web-platform-tests.org](https://web-platform-tests.org).
+
+`https://wpt.fyi` is entered into the location bar, and the browser loads the
+page.
+
+> [wpt.fyi](https://wpt.fyi) is a great way to see how today's browsers are
+> performing on the web-platform-tests.
+
+The browser scrolls to `fetch`, and a mouse cursor clicks on `fetch`, then
+`api`, then `headers`, and finally `headers-basic.html`.
+
+> Here, you'll find all the same tests, just presented with the results from
+> various browsers.
+
+`https://web-platform-tests.live/LICENSE.md` is entered into the location bar,
+and the browser loads the page.
+
+> The web-platform-tests project is free and open source software. From bug
+> reports to documentation improvements and brand new tests, we welcome all
+> sorts of contributions from everyone.
+
+`https://github.com/web-platform-tests/wpt` is entered into the location bar,
+and the browser loads the page.
+
+> To get involved, you can visit the project management website hosted on
+> GitHub.com.
+
+The browser navigates to the project's "issues" list and filters the list for
+just the ones labeled as "good first issue."
+
+> Some issues are more difficult than others, but many are perfect for people who
+> are just getting started with the project. When we come across an issue like
+> that, we label it as a "good first issue."
+
+`https://lists.w3.org/Archives/Public/public-test-infra` is entered into the
+location bar, and the browser loads the page.
+
+> You can also join the mailing list to receive e-mail with announcements and
+> discussion about the project.
+
+`http://irc.w3.org/` is entered into the location bar, and the browser loads
+the page. `web4all` is entered as the Nickname, and `#testing` is entered as
+the channel name. A mouse clicks on the "Connect" button.
+
+> For more immediate communication, you can join the "testing" channel on the
+> IRC server run by the W3C.
+
+**Return to the graph paper**
+
+A hand places a paper cutout depicting a human silhouette on the sheet. It then
+draws arrows from the new cutout to each of the three previously-introduced
+cutouts.
+
+![](assets/web-platform.png "The diagram drawn in the video")
+
+> We're looking forward to working with you!
diff --git a/tests/wpt/web-platform-tests/docs/reviewing-tests/email.md b/tests/wpt/web-platform-tests/docs/reviewing-tests/email.md
index fbfa65d75cc..55bbf443672 100644
--- a/tests/wpt/web-platform-tests/docs/reviewing-tests/email.md
+++ b/tests/wpt/web-platform-tests/docs/reviewing-tests/email.md
@@ -1,7 +1,7 @@
# Email Filters
See the [GitHub support page](https://help.github.com/articles/about-email-notifications/)
-for how to filter certain types of email notifications. However, the most
-useful `Cc` email addresses are not listed on that page:
+for how to filter certain types of email notifications. These are the most
+useful `Cc` addresses when reviewing in web-platform-tests:
- `review_requested@noreply.github.com` when you are added as a (suggested) `reviewer` on a pull request.
- `assign@noreply.github.com` when you are added as the `assignee` (i.e. as _the_ reviewer) on a pull request.
diff --git a/tests/wpt/web-platform-tests/docs/writing-tests/test-templates.md b/tests/wpt/web-platform-tests/docs/writing-tests/test-templates.md
index 858758b4c8e..e8f4bfe77f4 100644
--- a/tests/wpt/web-platform-tests/docs/writing-tests/test-templates.md
+++ b/tests/wpt/web-platform-tests/docs/writing-tests/test-templates.md
@@ -95,6 +95,23 @@ ${2:Test body}
Filename: `{test-topic}-###.html`
+### HTML with [testdriver automation](testdriver)
+``` html
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>${1:Test title}</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>
+
+<script>
+${2:Test body}
+</script>
+```
+
+Filename: `{test-topic}-###.html`
+
### SVG
``` xml
diff --git a/tests/wpt/web-platform-tests/docs/writing-tests/testharness-api.md b/tests/wpt/web-platform-tests/docs/writing-tests/testharness-api.md
index 5883308cc66..1bdf06613f9 100644
--- a/tests/wpt/web-platform-tests/docs/writing-tests/testharness-api.md
+++ b/tests/wpt/web-platform-tests/docs/writing-tests/testharness-api.md
@@ -279,12 +279,6 @@ In order for a test to be interpreted as a single page test, it should set the
The test title for single page tests is always taken from `document.title`.
-(Prior to October 2019, this behavior would be enabled implicitly for any test
-that did not call `test()` or `async_test()` anywhere on the page and that
-eventually called the `done()` function. [This behavior was found to be prone
-to errors and is in the process of being
-removed.](https://github.com/web-platform-tests/rfcs/blob/master/rfcs/single_test.md))
-
## Making assertions ##
Functions for making assertions start `assert_`. The full list of
@@ -311,6 +305,41 @@ NOTE: All asserts must be located in a `test()` or a step of an
these places won't be detected correctly by the harness and may cause
unexpected exceptions that will lead to an error in the harness.
+## Preconditions ##
+
+When a test would be invalid unless certain conditions are met, but yet
+doesn't explicitly depend on those preconditions, `assert_precondition` can be
+used. For example:
+
+```js
+async_test((t) => {
+ const video = document.createElement("video");
+ assert_precondition(video.canPlayType("video/webm"));
+ video.src = "multitrack.webm";
+ // test something specific to multiple audio tracks in a WebM container
+ t.done();
+}, "WebM with multiple audio tracks");
+```
+
+A failing `assert_precondition` call is reported as a status of
+`PRECONDITION_FAILED` for the subtest.
+
+`assert_precondition` can also be used during test setup. For example:
+
+```js
+setup(() => {
+ assert_precondition("onfoo" in document.body, "'foo' event supported");
+});
+async_test(() => { /* test #1 waiting for "foo" event */ });
+async_test(() => { /* test #2 waiting for "foo" event */ });
+```
+
+A failing `assert_precondition` during setup is reported as a status of
+`PRECONDITION_FAILED` for the test, and the subtests will not run.
+
+See also the `.optional` [file name convention](file-names.md), which is
+appropriate when the precondition is explicitly optional behavior.
+
## Cleanup ##
Occasionally tests may create state that will persist beyond the test itself.
@@ -527,7 +556,8 @@ the following methods:
Tests have the following properties:
* `status` - A status code. This can be compared to the `PASS`, `FAIL`,
- `TIMEOUT` and `NOTRUN` properties on the test object
+ `PRECONDITION_FAILED`, `TIMEOUT` and `NOTRUN` properties on the
+ test object
* `message` - A message indicating the reason for failure. In the future this
will always be a string
@@ -535,9 +565,11 @@ Tests have the following properties:
The status object gives the overall status of the harness. It has the
following properties:
- * `status` - Can be compared to the `OK`, `ERROR` and `TIMEOUT` properties
+ * `status` - Can be compared to the `OK`, `PRECONDITION_FAILED`, `ERROR` and
+ `TIMEOUT` properties
- * `message` - An error message set when the status is `ERROR`
+ * `message` - An error message set when the status is `PRECONDITION_FAILED`
+ or `ERROR`.
## External API ##
@@ -712,6 +744,10 @@ workers and want to ensure they run in series:
## List of Assertions ##
+### `assert_precondition(condition, description)`
+asserts that `condition` is truthy.
+See [preconditions](#preconditions) for usage.
+
### `assert_true(actual, description)`
asserts that `actual` is strictly true
@@ -820,7 +856,15 @@ asserts that one `assert_func(actual, expected_array_N, extra_arg1, ..., extra_a
allows multiple behaviours. Test authors should not use this method simply to hide
UA bugs.
-## Formatting ##
+## Utility functions ##
+
+### **DEPRECATED** `on_event(object, event, callback)`
+
+Register a function as a DOM event listener to the given object for the event
+bubbling phase. New tests should not use this function. Instead, they should
+invoke the `addEventListener` method of the `object` value.
+
+### `format_value(value)`
When many JavaScript Object values are coerced to a String, the resulting value
will be `"[object Object]"`. This obscures helpful information, making the
diff --git a/tests/wpt/web-platform-tests/docs/writing-tests/testharness.md b/tests/wpt/web-platform-tests/docs/writing-tests/testharness.md
index acab70a1f16..e04a344d098 100644
--- a/tests/wpt/web-platform-tests/docs/writing-tests/testharness.md
+++ b/tests/wpt/web-platform-tests/docs/writing-tests/testharness.md
@@ -16,14 +16,14 @@ of a page, and where human interaction isn't required; these tests are
written in JavaScript using a framework called `testharness.js`. It is
documented in two sections:
- * [testharness.js Documentation](testharness-api) — An introduction
+ * [testharness.js Documentation](testharness-api.md) — An introduction
to the library and a detailed API reference.
- * [idlharness.js Documentation](idlharness) — A library for testing
+ * [idlharness.js Documentation](idlharness.md) — A library for testing
IDL interfaces using `testharness.js`.
-See [server features](server-features) for advanced testing features that are commonly used
-with testharness.js. See also the [general guidelines](general-guidelines) for all test types.
+See [server features](server-features.md) for advanced testing features that are commonly used
+with testharness.js. See also the [general guidelines](general-guidelines.md) for all test types.
This page describes testharness.js exhaustively; [the tutorial on writing a
testharness.js test](testharness-tutorial) provides a concise guide to writing
diff --git a/tests/wpt/web-platform-tests/dom/nodes/aria-element-reflection.tentative.html b/tests/wpt/web-platform-tests/dom/nodes/aria-element-reflection.tentative.html
index 848828810f1..7c8e690a28b 100644
--- a/tests/wpt/web-platform-tests/dom/nodes/aria-element-reflection.tentative.html
+++ b/tests/wpt/web-platform-tests/dom/nodes/aria-element-reflection.tentative.html
@@ -8,118 +8,109 @@
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
+
<div id="activedescendant" aria-activedescendant="x"></div>
- <div id="parent-listbox" role="listbox" aria-activedescendant="i1">
+ <div id="parentListbox" role="listbox" aria-activedescendant="i1">
<div role="option" id="i1">Item 1</div>
<div role="option" id="i2">Item 2</div>
</div>
<script>
test(function(t) {
- const ancestor = document.getElementById("parent-listbox");
assert_equals(activedescendant.ariaActiveDescendantElement, null,
"invalid ID for relationship returns null");
- const descendant1 = document.getElementById("i1");
- const descendant2 = document.getElementById("i2");
-
// Element reference should be set if the content attribute was included.
- assert_equals(ancestor.getAttribute("aria-activedescendant"), "i1", "check content attribute after parsing.");
- assert_equals(ancestor.ariaActiveDescendantElement, i1, "check idl attribute after parsing.");
+ assert_equals(parentListbox.getAttribute("aria-activedescendant"), "i1", "check content attribute after parsing.");
+ assert_equals(parentListbox.ariaActiveDescendantElement, i1, "check idl attribute after parsing.");
// If we set the content attribute, the element reference should reflect this.
- ancestor.setAttribute("aria-activedescendant", "i2");
- assert_equals(ancestor.ariaActiveDescendantElement, descendant2, "setting the content attribute updates the element reference.");
+ parentListbox.setAttribute("aria-activedescendant", "i2");
+ assert_equals(parentListbox.ariaActiveDescendantElement, i2, "setting the content attribute updates the element reference.");
// Setting the element reference should be reflected in the content attribute.
- ancestor.ariaActiveDescendantElement = descendant1;
- assert_equals(ancestor.ariaActiveDescendantElement, descendant1, "getter should return the right element reference.");
- assert_equals(ancestor.getAttribute("aria-activedescendant"), "i1", "content attribute should reflect the element reference.");
+ parentListbox.ariaActiveDescendantElement = i1;
+ assert_equals(parentListbox.ariaActiveDescendantElement, i1, "getter should return the right element reference.");
+ assert_equals(parentListbox.getAttribute("aria-activedescendant"), "i1", "content attribute should reflect the element reference.");
// Both content and IDL attribute should be nullable.
- ancestor.ariaActiveDescendantElement = null;
- assert_equals(ancestor.ariaActiveDescendantElement, null);
- assert_false(ancestor.hasAttribute("aria-activedescendant"));
- assert_equals(ancestor.getAttribute("aria-activedescendant"), null, "nullifying the idl attribute removes the content attribute.");
+ parentListbox.ariaActiveDescendantElement = null;
+ assert_equals(parentListbox.ariaActiveDescendantElement, null);
+ assert_false(parentListbox.hasAttribute("aria-activedescendant"));
+ assert_equals(parentListbox.getAttribute("aria-activedescendant"), null, "nullifying the idl attribute removes the content attribute.");
// Setting content attribute to non-existent or non compatible element should nullify the IDL attribute.
// Reset the element to an existant one.
- ancestor.setAttribute("aria-activedescendant", "i1");
- assert_equals(ancestor.ariaActiveDescendantElement, i1, "reset attribute.");
+ parentListbox.setAttribute("aria-activedescendant", "i1");
+ assert_equals(parentListbox.ariaActiveDescendantElement, i1, "reset attribute.");
- ancestor.setAttribute("aria-activedescendant", "non-existent-element");
- assert_equals(ancestor.getAttribute("aria-activedescendant"), "non-existent-element");
- assert_equals(ancestor.ariaActiveDescendantElement, null,"non-DOM content attribute should null the element reference");
+ parentListbox.setAttribute("aria-activedescendant", "non-existent-element");
+ assert_equals(parentListbox.getAttribute("aria-activedescendant"), "non-existent-element");
+ assert_equals(parentListbox.ariaActiveDescendantElement, null,"non-DOM content attribute should null the element reference");
}, "aria-activedescendant element reflection");
</script>
- <div id="parent-listbox-2" role="listbox" aria-activedescendant="option1">
+ <div id="parentListbox2" role="listbox" aria-activedescendant="option1">
<div role="option" id="option1">Item 1</div>
<div role="option" id="option2">Item 2</div>
</div>
<script>
test(function(t) {
- const ancestor = document.getElementById("parent-listbox-2");
const option1 = document.getElementById("option1");
const option2 = document.getElementById("option2");
- assert_equals(ancestor.ariaActiveDescendantElement, option1);
-
+ assert_equals(parentListbox2.ariaActiveDescendantElement, option1);
option1.removeAttribute("id");
option2.setAttribute("id", "option1");
const option2Duplicate = document.getElementById("option1");
assert_equals(option2, option2Duplicate);
- assert_equals(ancestor.ariaActiveDescendantElement, option2);
+ assert_equals(parentListbox2.ariaActiveDescendantElement, option2);
}, "If the content attribute is set directly, the IDL attribute getter always returns the first element whose ID matches the content attribute.");
</script>
- <div id="blank-id-parent" role="listbox">
+ <div id="blankIdParent" role="listbox">
<div role="option" id="multiple-id"></div>
<div role="option" id="multiple-id"></div>
</div>
<script>
test(function(t) {
- const ancestor = document.getElementById("blank-id-parent");
-
// Get second child of parent. This violates the setting of a reflected element
// as it will not be the first child of the parent with that ID, which should
// result in an empty string for the content attribute.
- ancestor.ariaActiveDescendantElement = ancestor.children[1];
- assert_true(ancestor.hasAttribute("aria-activedescendant"));
- assert_equals(ancestor.getAttribute("aria-activedescendant"), "");
- assert_equals(ancestor.ariaActiveDescendantElement, ancestor.children[1]);
+ blankIdParent.ariaActiveDescendantElement = blankIdParent.children[1];
+ assert_true(blankIdParent.hasAttribute("aria-activedescendant"));
+ assert_equals(blankIdParent.getAttribute("aria-activedescendant"), "");
+ assert_equals(blankIdParent.ariaActiveDescendantElement, blankIdParent.children[1]);
}, "Setting the IDL attribute to an element which is not the first element in DOM order with its ID causes the content attribute to be an empty string");
</script>
- <div id="outer-container">
- <p id="light-paragraph">Hello world!</p>
- <span class="shadow-host">
+ <div id="outerContainer">
+ <p id="lightParagraph">Hello world!</p>
+ <span id="shadowHost">
</span>
</div>
<script>
test(function(t) {
- const shadowElement = document.querySelector(".shadow-host");
- const shadow = shadowElement.attachShadow({mode: "open"});
+ const shadow = shadowHost.attachShadow({mode: "open"});
const link = document.createElement("a");
shadow.appendChild(link);
- const lightPara = document.getElementById("light-paragraph");
- assert_equals(lightPara.ariaActiveDescendantElement, null);
+ assert_equals(lightParagraph.ariaActiveDescendantElement, null);
// The given element crosses a shadow dom boundary, so it cannot be
// set as an element reference.
- lightPara.ariaActiveDescendantElement = link;
- assert_equals(lightPara.ariaActiveDescendantElement, null);
+ lightParagraph.ariaActiveDescendantElement = link;
+ assert_equals(lightParagraph.ariaActiveDescendantElement, null);
// The given element crosses a shadow dom boundary (upwards), so
// can be used as an element reference, but the content attribute
// should reflect the empty string.
- link.ariaActiveDescendantElement = lightPara;
- assert_equals(link.ariaActiveDescendantElement, lightPara);
+ link.ariaActiveDescendantElement = lightParagraph;
+ assert_equals(link.ariaActiveDescendantElement, lightParagraph);
assert_equals(link.getAttribute("aria-activedescendant"), "");
}, "Setting an element reference that crosses into a shadow tree is disallowed, but setting one that is in a shadow inclusive ancestor is allowed.");
</script>
@@ -129,18 +120,15 @@
<script>
test(function(t) {
- const inputElement = document.getElementById("startTime");
- const errorMessage = document.getElementById("errorMessage");
+ startTime.ariaErrorMessageElement = errorMessage;
+ assert_equals(startTime.getAttribute("aria-errormessage"), "errorMessage");
- inputElement.ariaErrorMessageElement = errorMessage;
- assert_equals(inputElement.getAttribute("aria-errormessage"), "errorMessage");
+ startTime.ariaErrorMessageElement = null;
+ assert_equals(startTime.ariaErrorMessageElement, null, "blah");
+ assert_false(startTime.hasAttribute("aria-errormessage"));
- inputElement.ariaErrorMessageElement = null;
- assert_equals(inputElement.ariaErrorMessageElement, null, "blah");
- assert_false(inputElement.hasAttribute("aria-errormessage"));
-
- inputElement.setAttribute("aria-errormessage", "errorMessage");
- assert_equals(inputElement.ariaErrorMessageElement, errorMessage);
+ startTime.setAttribute("aria-errormessage", "errorMessage");
+ assert_equals(startTime.ariaErrorMessageElement, errorMessage);
}, "aria-errormessage");
@@ -148,74 +136,62 @@
<label>
Password:
- <input id="password-field" type="password" aria-details="pw">
+ <input id="passwordField" type="password" aria-details="pw">
</label>
<ul>
- <li id="list-item-1">First description.</li>
- <li id="list-item-2">Second description.</li>
+ <li id="listItem1">First description.</li>
+ <li id="listItem2">Second description.</li>
</ul>
<script>
test(function(t) {
- const inputElement = document.getElementById("password-field");
- const ul1 = document.getElementById("list-item-1");
- const ul2 = document.getElementById("list-item-2");
-
- assert_equals(inputElement.ariaDetailsElement, null);
- inputElement.ariaDetailsElement = ul1;
- assert_equals(inputElement.getAttribute("aria-details"), "list-item-1");
+ assert_equals(passwordField.ariaDetailsElement, null);
+ passwordField.ariaDetailsElement = listItem1;
+ assert_equals(passwordField.getAttribute("aria-details"), "listItem1");
- inputElement.ariaDetailsElement = ul2;
- assert_equals(inputElement.getAttribute("aria-details"), "list-item-2");
+ passwordField.ariaDetailsElement = listItem2;
+ assert_equals(passwordField.getAttribute("aria-details"), "listItem2");
}, "aria-details");
</script>
- <div id="old-parent" role="listbox" aria-activedescendant="content-attr-element">
- <div role="option" id="content-attr-element">Item 1</div>
- <div role="option" id="idl-attr-element">Item 2</div>
+ <div id="deletionParent" role="listbox" aria-activedescendant="contentAttrElement">
+ <div role="option" id="contentAttrElement">Item 1</div>
+ <div role="option" id="idlAttrElement">Item 2</div>
</div>
<script>
test(function(t) {
- const deletionParent = document.getElementById("old-parent");
-
- const descendant1 = document.getElementById("content-attr-element");
- const descendant2 = document.getElementById("idl-attr-element");
-
// Deleting an element set via the content attribute.
- assert_equals(deletionParent.getAttribute("aria-activedescendant"), "content-attr-element");
- assert_equals(deletionParent.ariaActiveDescendantElement, descendant1);
+ assert_equals(deletionParent.getAttribute("aria-activedescendant"), "contentAttrElement");
+ assert_equals(deletionParent.ariaActiveDescendantElement, contentAttrElement);
- deletionParent.removeChild(descendant1);
- assert_equals(deletionParent.getAttribute("aria-activedescendant"), "content-attr-element");
+ deletionParent.removeChild(contentAttrElement);
+ assert_equals(deletionParent.getAttribute("aria-activedescendant"), "contentAttrElement");
assert_equals(deletionParent.ariaActiveDescendantElement, null);
// Deleting an element set via the IDL attribute.
- deletionParent.ariaActiveDescendantElement = descendant2;
- assert_equals(deletionParent.getAttribute("aria-activedescendant"), "idl-attr-element");
+ deletionParent.ariaActiveDescendantElement = idlAttrElement;
+ assert_equals(deletionParent.getAttribute("aria-activedescendant"), "idlAttrElement");
- deletionParent.removeChild(descendant2);
+ deletionParent.removeChild(idlAttrElement);
assert_equals(deletionParent.ariaActiveDescendantElement, null);
// The content attribute will still reflect the id.
- assert_equals(deletionParent.getAttribute("aria-activedescendant"), "idl-attr-element");
+ assert_equals(deletionParent.getAttribute("aria-activedescendant"), "idlAttrElement");
}, "Deleting a reflected element should return null for the IDL attribute and cause the content attribute to become stale.");
</script>
- <div id="parent" role="listbox" aria-activedescendant="original">
- <div role="option" id="original">Item 1</div>
- <div role="option" id="element-with-persistant-id">Item 2</div>
+ <div id="parentNode" role="listbox" aria-activedescendant="changingIdElement">
+ <div role="option" id="changingIdElement">Item 1</div>
+ <div role="option" id="persistantIDElement">Item 2</div>
</div>
<script>
test(function(t) {
- const parentNode = document.getElementById("parent");
- const changingIdElement = document.getElementById("original");
- const persistantIDElement = document.getElementById("element-with-persistant-id");
-
+ const changingIdElement = document.getElementById("changingIdElement");
assert_equals(parentNode.ariaActiveDescendantElement, changingIdElement);
// Modify the id attribute.
@@ -223,7 +199,7 @@
// The content attribute still reflects the old id, and we expect the
// Element reference to be null as there is no DOM node with id "original"
- assert_equals(parentNode.getAttribute("aria-activedescendant"), "original");
+ assert_equals(parentNode.getAttribute("aria-activedescendant"), "changingIdElement");
assert_equals(parentNode.ariaActiveDescendantElement, null, "Element set via content attribute with a changed id will return null on getting");
parentNode.ariaActiveDescendantElement = changingIdElement;
@@ -238,57 +214,48 @@
}, "Changing the ID of an element causes the content attribute to become out of sync.");
</script>
- <div id="light-parent" role="listbox">
- <div role="option" id="light-element">Hello world!</div>
+ <div id="lightParent" role="listbox">
+ <div role="option" id="lightElement">Hello world!</div>
</div>
- <div id="shadowHost"></div>
+ <div id="shadowHostElement"></div>
<script>
test(function(t) {
- const shadowElement = document.getElementById("shadowHost");
- const shadowHost = shadowElement.attachShadow({mode: "open"});
- const lightParent = document.getElementById("light-parent");
- const optionElement = document.getElementById("light-element");
+ const lightElement = document.getElementById("lightElement");
+ const shadowRoot = shadowHostElement.attachShadow({mode: "open"});
- lightParent.ariaActiveDescendantElement = optionElement;
- assert_equals(lightParent.ariaActiveDescendantElement, optionElement);
+ lightParent.ariaActiveDescendantElement = lightElement;
+ assert_equals(lightParent.ariaActiveDescendantElement, lightElement);
// Move the referenced element into shadow DOM.
- shadowHost.appendChild(optionElement);
+ shadowRoot.appendChild(lightElement);
assert_equals(lightParent.ariaActiveDescendantElement, null);
- assert_equals(lightParent.getAttribute("aria-activedescendant"), "light-element");
+ assert_equals(lightParent.getAttribute("aria-activedescendant"), "lightElement");
// Move the referenced element back into light DOM.
- lightParent.appendChild(optionElement);
- assert_equals(lightParent.ariaActiveDescendantElement, optionElement);
+ lightParent.appendChild(lightElement);
+ assert_equals(lightParent.ariaActiveDescendantElement, lightElement);
}, "Reparenting an element into a descendant shadow scope nullifies the element reference.");
</script>
- <div id="myBillingId">Billing</div>
-
+ <div id="billingElement">Billing</div>
<div>
- <div id="myNameId">Name</div>
- <input type="text" id="input1" aria-labelledby="myBillingId myNameId"/>
+ <div id="nameElement">Name</div>
+ <input type="text" id="input1" aria-labelledby="billingElement nameElement"/>
</div>
<div>
- <div id="myAddressId">Address</div>
+ <div id="addressElement">Address</div>
<input type="text" id="input2"/>
</div>
<script>
test(function(t) {
- const billingElement = document.getElementById("myBillingId");
- const nameElement = document.getElementById("myNameId");
- const addressElement = document.getElementById("myAddressId");
- const input1 = document.getElementById("input1");
- const input2 = document.getElementById("input2");
-
assert_array_equals(input1.ariaLabelledByElements, [billingElement, nameElement], "parsed content attribute sets element references.");
assert_equals(input2.ariaLabelledByElements, null, "Testing empty content attribute after parsing.");
input2.ariaLabelledByElements = [billingElement, addressElement];
assert_array_equals(input2.ariaLabelledByElements, [billingElement, addressElement], "Testing IDL setter/getter.");
- assert_equals(input2.getAttribute("aria-labelledby"), "myBillingId myAddressId");
+ assert_equals(input2.getAttribute("aria-labelledby"), "billingElement addressElement");
billingElement.remove();
assert_array_equals(input2.ariaLabelledByElements, [addressElement]);
@@ -312,10 +279,6 @@
<script>
test(function(t) {
- const link1 = document.getElementById("link1");
- const link2 = document.getElementById("link2");
- const panel1 = document.getElementById("panel1");
- const panel2 = document.getElementById("panel2");
assert_array_equals(link1.ariaControlsElements, [panel1]);
assert_equals(link2.ariaControlsElements, null);
@@ -333,60 +296,56 @@
}, "aria-controls.");
</script>
- <a id="described-link" aria-describedby="description1 description2">Fruit</a>
+ <a id="describedLink" aria-describedby="description1 description2">Fruit</a>
<div id="description1">Delicious</div>
<div id="description2">Nutritious</div>
<script>
test(function(t) {
- const link = document.getElementById("described-link");
- const description1 = document.getElementById("description1");
- const description2 = document.getElementById("description2");
- assert_array_equals(link.ariaDescribedByElements, [description1, description2]);
+ assert_array_equals(describedLink.ariaDescribedByElements, [description1, description2]);
- link.ariaDescribedByElements = [description1, description2];
- assert_equals(link.getAttribute("aria-describedby"), "description1 description2");
+ describedLink.ariaDescribedByElements = [description1, description2];
+ assert_equals(describedLink.getAttribute("aria-describedby"), "description1 description2");
- link.ariaDescribedByElements = [];
- assert_equals(link.getAttribute("aria-describedby"), "");
+ describedLink.ariaDescribedByElements = [];
+ assert_equals(describedLink.getAttribute("aria-describedby"), "");
- link.setAttribute("aria-describedby", "description1");
- assert_array_equals(link.ariaDescribedByElements, [description1]);
+ describedLink.setAttribute("aria-describedby", "description1");
+ assert_array_equals(describedLink.ariaDescribedByElements, [description1]);
- link.removeAttribute("aria-describedby");
- assert_equals(link.ariaDescribedByElements, null);
+ describedLink.removeAttribute("aria-describedby");
+ assert_equals(describedLink.ariaDescribedByElements, null);
}, "aria-describedby.");
</script>
- <h2 id="title-heading" aria-flowto="article1 article2">Title</h2>
+ <h2 id="titleHeading" aria-flowto="article1 article2">Title</h2>
<div>Next</div>
<article id="article2">Content2</article>
<article id="article1">Content1</article>
<script>
test(function(t) {
- const heading = document.getElementById("title-heading");
const article1 = document.getElementById("article1");
const article2 = document.getElementById("article2");
- assert_array_equals(heading.ariaFlowToElements, [article1, article2]);
+ assert_array_equals(titleHeading.ariaFlowToElements, [article1, article2]);
- heading.ariaFlowToElements = [article1, article2];
- assert_equals(heading.getAttribute("aria-flowto"), "article1 article2");
+ titleHeading.ariaFlowToElements = [article1, article2];
+ assert_equals(titleHeading.getAttribute("aria-flowto"), "article1 article2");
- heading.ariaFlowToElements = [];
- assert_equals(heading.getAttribute("aria-flowto"), "");
+ titleHeading.ariaFlowToElements = [];
+ assert_equals(titleHeading.getAttribute("aria-flowto"), "");
- heading.setAttribute("aria-flowto", "article1");
- assert_array_equals(heading.ariaFlowToElements, [article1]);
+ titleHeading.setAttribute("aria-flowto", "article1");
+ assert_array_equals(titleHeading.ariaFlowToElements, [article1]);
- heading.removeAttribute("aria-flowto");
- assert_equals(heading.ariaFlowToElements, null);
+ titleHeading.removeAttribute("aria-flowto");
+ assert_equals(titleHeading.ariaFlowToElements, null);
}, "aria-flowto.");
</script>
<ul>
- <li id="li-owner" aria-owns="child1 child2">Parent</li>
+ <li id="listItemOwner" aria-owns="child1 child2">Parent</li>
</ul>
<ul>
<li id="child1">Child 1</li>
@@ -394,51 +353,41 @@
</ul>
<script>
test(function(t) {
- const owner = document.getElementById("li-owner");
- const child1 = document.getElementById("child1");
- const child2 = document.getElementById("child2");
-
- assert_array_equals(owner.ariaOwnsElements, [child1, child2]);
+ assert_array_equals(listItemOwner.ariaOwnsElements, [child1, child2]);
- owner.removeAttribute("aria-owns");
- assert_equals(owner.ariaOwnsElements, null);
+ listItemOwner.removeAttribute("aria-owns");
+ assert_equals(listItemOwner.ariaOwnsElements, null);
- owner.ariaOwnsElements = [child1, child2];
- assert_equals(owner.getAttribute("aria-owns"), "child1 child2");
+ listItemOwner.ariaOwnsElements = [child1, child2];
+ assert_equals(listItemOwner.getAttribute("aria-owns"), "child1 child2");
- owner.ariaOwnsElements = [];
- assert_equals(owner.getAttribute("aria-owns"), "");
+ listItemOwner.ariaOwnsElements = [];
+ assert_equals(listItemOwner.getAttribute("aria-owns"), "");
- owner.setAttribute("aria-owns", "child1");
- assert_array_equals(owner.ariaOwnsElements, [child1]);
+ listItemOwner.setAttribute("aria-owns", "child1");
+ assert_array_equals(listItemOwner.ariaOwnsElements, [child1]);
}, "aria-owns.");
</script>
- <div id="light-dom-container">
- <h2 id="light-dom-heading" aria-flowto="shadow-child-1 shadow-child-2">Light DOM Heading</h2>
- <div id="shadow-dom-host"></div>
- <p id="light-dom-text-1">Light DOM text</p>
- <p id="light-dom-text-2">Light DOM text</p>
+ <div id="lightDomContainer">
+ <h2 id="lightDomHeading" aria-flowto="shadowChild1 shadowChild2">Light DOM Heading</h2>
+ <div id="host"></div>
+ <p id="lightDomText1">Light DOM text</p>
+ <p id="lightDomText2">Light DOM text</p>
</div>
<script>
test(function(t) {
- const shadowHost = document.getElementById("shadow-dom-host");
- const lightDomHeading = document.getElementById("light-dom-heading");
- const lightDomText1 = document.getElementById("light-dom-text-1");
- const lightDomText2 = document.getElementById("light-dom-text-2");
-
- const shadowRoot = shadowHost.attachShadow({mode: "open"});
+ const shadowRoot = host.attachShadow({mode: "open"});
const shadowChild1 = document.createElement("article");
- shadowChild1.setAttribute("id", "shadow-child-1");
+ shadowChild1.setAttribute("id", "shadowChild1");
shadowRoot.appendChild(shadowChild1);
const shadowChild2 = document.createElement("article");
- shadowChild2.setAttribute("id", "shadow-child-1");
+ shadowChild2.setAttribute("id", "shadowChild1");
shadowRoot.appendChild(shadowChild2);
// The elements in the content attribute are in a "darker" tree - they
- // enter a shadow encapsulation boundary, so should reflect null for
- // the content attribute.
+ // enter a shadow encapsulation boundary, so not be associated any more.
assert_equals(lightDomHeading.ariaFlowToElements, null);
// These elements are in a shadow including ancestor, i.e "lighter" tree.
@@ -448,14 +397,14 @@
// These IDs belong to a different scope, so the attr-associated-element
// cannot be computed.
- shadowChild2.setAttribute("aria-flowto", "light-dom-text-1 light-dom-text-2");
+ shadowChild2.setAttribute("aria-flowto", "lightDomText1 lightDomText2");
assert_equals(shadowChild2.ariaFlowToElements, null);
// Elements that cross into shadow DOM are dropped, only reflect the valid
// elements in IDL and in the content attribute.
lightDomHeading.ariaFlowToElements = [shadowChild1, shadowChild2, lightDomText1, lightDomText2];
assert_array_equals(lightDomHeading.ariaFlowToElements, [lightDomText1, lightDomText2]);
- assert_equals(lightDomHeading.getAttribute("aria-flowto"), "light-dom-text-1 light-dom-text-2", "empty content attribute if any given elements cross shadow boundaries");
+ assert_equals(lightDomHeading.getAttribute("aria-flowto"), "lightDomText1 lightDomText2", "empty content attribute if any given elements cross shadow boundaries");
// Using a mixture of elements in the same scope and in a shadow including
// ancestor should set the IDL attribute, but should reflect the empty
@@ -466,4 +415,124 @@
}, "shadow DOM behaviour for FrozenArray element reflection.");
</script>
+
+ <div id="describedButtonContainer">
+ <div id="buttonDescription1">Delicious</div>
+ <div id="buttonDescription2">Nutritious</div>
+ <div id="outerShadowHost"></div>
+ </div>
+
+ <script>
+ test(function(t) {
+ const description1 = document.getElementById("buttonDescription1");
+ const description2 = document.getElementById("buttonDescription2");
+ const outerShadowRoot = outerShadowHost.attachShadow({mode: "open"});
+ const innerShadowHost = document.createElement("div");
+ outerShadowRoot.appendChild(innerShadowHost);
+ const innerShadowRoot = innerShadowHost.attachShadow({mode: "open"});
+
+ // Create an element, add some attr associated light DOM elements and append it to the outer shadow root.
+ const describedElement = document.createElement("button");
+ describedButtonContainer.appendChild(describedElement);
+ describedElement.ariaDescribedByElements = [description1, description2];
+
+ // All elements were in the same scope, so elements are gettable and the content attribute reflects the ids.
+ assert_array_equals(describedElement.ariaDescribedByElements, [description1, description2]);
+ assert_equals(describedElement.getAttribute("aria-describedby"), "buttonDescription1 buttonDescription2");
+
+ outerShadowRoot.appendChild(describedElement);
+
+ // Explicitly set attr-associated-elements should still be gettable because we are referencing elements in a lighter scope.
+ // The content attr still reflects the ids from the explicit elements because they were in a valid scope at the time of setting.
+ assert_array_equals(describedElement.ariaDescribedByElements, [description1, description2]);
+ assert_equals(describedElement.getAttribute("aria-describedby"), "buttonDescription1 buttonDescription2");
+
+ // Move the explicitly set elements into a deeper shadow DOM to test the relationship should not be gettable.
+ innerShadowRoot.appendChild(description1);
+ innerShadowRoot.appendChild(description2);
+
+ // Explicitly set elements are still present, but are not retrieved.
+ // content attribute is still stale because all elements were in a valid scope when they were set.
+ assert_array_equals(describedElement.ariaDescribedByElements, []);
+ assert_equals(describedElement.getAttribute("aria-describedby"), "buttonDescription1 buttonDescription2");
+
+ // Move into the same shadow scope as the explicitly set elements to test that the elements are gettable
+ // and reflect the correct IDs onto the content attribute.
+ innerShadowRoot.appendChild(describedElement);
+ assert_array_equals(describedElement.ariaDescribedByElements, [description1, description2]);
+ assert_equals(describedElement.getAttribute("aria-describedby"), "buttonDescription1 buttonDescription2");
+ }, "Moving explicitly set elements across shadow DOM boundaries.");
+ </script>
+
+ <div id="sameScopeContainer">
+ <div id="headingLabel1">Wonderful</div>
+ <div id="headingLabel2">Fantastic</div>
+
+ <div id="headingShadowHost"></div>
+ </div>
+
+ <script>
+ test(function(t) {
+ const shadowRoot = headingShadowHost.attachShadow({mode: "open"});
+ const headingElement = document.createElement("h1");
+ const headingLabel1 = document.getElementById("headingLabel1")
+ const headingLabel2 = document.getElementById("headingLabel2")
+ shadowRoot.appendChild(headingElement);
+
+ // Explicitly set elements are in a lighter shadow DOM, so that's ok.
+ headingElement.ariaLabelledByElements = [headingLabel1, headingLabel2];
+ assert_array_equals(headingElement.ariaLabelledByElements, [headingLabel1, headingLabel2], "Lighter elements are gettable when explicitly set.");
+ assert_equals(headingElement.getAttribute("aria-labelledby"), "", "Crosses shadow DOM boundary, so content attribute should be empty string.");
+
+ // Move into Light DOM, explicitly set elements should still be gettable.
+ // Note that the content attribute still reflects the element ids - when scope changes it becomes stale.
+ sameScopeContainer.appendChild(headingElement);
+ assert_array_equals(headingElement.ariaLabelledByElements, [headingLabel1, headingLabel2], "Elements are all in same scope, so gettable.");
+ assert_equals(headingElement.getAttribute("aria-labelledby"), "", "Content attribute is empty, as on setting the explicitly set elements they were in a different scope.");
+
+ // Reset the association, to update the content attribute.
+ headingElement.ariaLabelledByElements = [headingLabel1, headingLabel2];
+ assert_equals(headingElement.getAttribute("aria-labelledby"), "headingLabel1 headingLabel2", "Elements are set again, so the content attribute is updated.");
+
+ // Remove the referring element from the DOM, elements are not gettable.
+ // This behaviour is still under discussion.
+ headingElement.remove();
+ assert_array_equals(headingElement.ariaLabelledByElements, [], "Element is no longer in the document, so references should not be gettable.");
+ assert_equals(headingElement.getAttribute("aria-labelledby"), "headingLabel1 headingLabel2");
+
+ // Insert it back in.
+ sameScopeContainer.appendChild(headingElement);
+ assert_array_equals(headingElement.ariaLabelledByElements, [headingLabel1, headingLabel2]);
+ assert_equals(headingElement.getAttribute("aria-labelledby"), "headingLabel1 headingLabel2");
+
+ // Remove everything from the DOM, nothing should be gettable.
+ headingLabel1.remove();
+ headingLabel2.remove();
+ assert_array_equals(headingElement.ariaLabelledByElements, []);
+ assert_equals(headingElement.getAttribute("aria-labelledby"), "headingLabel1 headingLabel2");
+ assert_equals(document.getElementById("headingLabel1"), null);
+ assert_equals(document.getElementById("headingLabel2"), null);
+
+ // Reset the association to update the content attribute.
+ headingElement.ariaLabelledByElements = [headingLabel1, headingLabel2];
+ assert_array_equals(headingElement.ariaLabelledByElements, []);
+ assert_equals(headingElement.getAttribute("aria-labelledby"), "");
+ }, "Moving explicitly set elements around within the same scope, and removing from the DOM.");
+ </script>
+
+ <input id="input">
+ <optgroup>
+ <option id="first">First option</option>
+ <option id="second">Second option</option>
+ </optgroup>
+
+ <script>
+ test(function(t) {
+ input.ariaActiveDescendantElement = first;
+ first.parentElement.appendChild(first);
+
+ // This behaviour is currently under discussion by WHATWG.
+ // See: https://github.com/whatwg/html/pull/3917#issuecomment-527263562
+ assert_equals(input.ariaActiveDescendantElement, first);
+ }, "Reparenting.");
</html>
diff --git a/tests/wpt/web-platform-tests/fetch/api/request/destination/fetch-destination-frame.https.html b/tests/wpt/web-platform-tests/fetch/api/request/destination/fetch-destination-frame.https.html
new file mode 100644
index 00000000000..f3f9f7856d5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/fetch/api/request/destination/fetch-destination-frame.https.html
@@ -0,0 +1,51 @@
+<!DOCTYPE html>
+<title>Fetch destination tests for resources with no load event</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>
+let frame;
+const kScope = 'resources/dummy.html?dest=frame';
+
+// Set up the service worker and the frame.
+promise_test(t => {
+ const kScript = 'resources/fetch-destination-worker-frame.js';
+ return service_worker_unregister_and_register(t, kScript, kScope)
+ .then(registration => {
+ add_completion_callback(() => {
+ registration.unregister();
+ });
+
+ return wait_for_state(t, registration.installing, 'activated');
+ });
+ }, 'Initialize global state');
+
+var waitOnMessageFromSW = async t => {
+ await new Promise((resolve, reject) => {
+ navigator.serviceWorker.onmessage = t.step_func(event => {
+ if (event.data == "PASS") {
+ resolve();
+ } else {
+ reject();
+ }
+ });
+ }).catch(() => {;
+ assert_unreached("Wrong destination.");
+ });
+ t.add_cleanup(() => { frame.contentWindow.navigator.serviceWorker.onmessage = null; });
+}
+
+// Document destination
+///////////////////////
+promise_test(async t => {
+ var f = document.createElement('frame');
+ frame = f;
+ f.className = 'test-frame';
+ f.src = kScope;
+ document.body.appendChild(f);
+ await waitOnMessageFromSW(t);
+ add_completion_callback(() => { f.remove(); });
+}, 'frame fetches with a "frame" Request.destination');
+
+</script>
diff --git a/tests/wpt/web-platform-tests/fetch/api/request/destination/fetch-destination-iframe.https.html b/tests/wpt/web-platform-tests/fetch/api/request/destination/fetch-destination-iframe.https.html
index cb1e9d87cd5..1aa5a5613b1 100644
--- a/tests/wpt/web-platform-tests/fetch/api/request/destination/fetch-destination-iframe.https.html
+++ b/tests/wpt/web-platform-tests/fetch/api/request/destination/fetch-destination-iframe.https.html
@@ -6,7 +6,7 @@
<script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script>
<script>
let frame;
-const kScope = 'resources/dummy.html?dest=document';
+const kScope = 'resources/dummy.html?dest=iframe';
// Set up the service worker and the frame.
promise_test(t => {
@@ -46,6 +46,6 @@ promise_test(async t => {
document.body.appendChild(f);
await waitOnMessageFromSW(t);
add_completion_callback(() => { f.remove(); });
-}, 'iframe fetches with a "document" Request.destination');
+}, 'iframe fetches with a "iframe" Request.destination');
</script>
diff --git a/tests/wpt/web-platform-tests/fetch/api/request/destination/resources/fetch-destination-worker-frame.js b/tests/wpt/web-platform-tests/fetch/api/request/destination/resources/fetch-destination-worker-frame.js
new file mode 100644
index 00000000000..b69de0b7df9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/fetch/api/request/destination/resources/fetch-destination-worker-frame.js
@@ -0,0 +1,20 @@
+self.addEventListener('fetch', function(event) {
+ if (event.request.url.includes('dummy')) {
+ event.waitUntil(async function() {
+ let destination = new URL(event.request.url).searchParams.get("dest");
+ let clients = await self.clients.matchAll({"includeUncontrolled": true});
+ clients.forEach(function(client) {
+ if (client.url.includes("fetch-destination-frame")) {
+ if (event.request.destination == destination) {
+ client.postMessage("PASS");
+ } else {
+ client.postMessage("FAIL");
+ }
+ }
+ })
+ }());
+ }
+ event.respondWith(fetch(event.request));
+});
+
+
diff --git a/tests/wpt/web-platform-tests/fetch/api/response/response-consume.html b/tests/wpt/web-platform-tests/fetch/api/response/response-consume.html
index 4946a4d33a4..7a9c6505d80 100644
--- a/tests/wpt/web-platform-tests/fetch/api/response/response-consume.html
+++ b/tests/wpt/web-platform-tests/fetch/api/response/response-consume.html
@@ -167,11 +167,22 @@
var urlSearchParamsBlob = new Blob([urlSearchParamsData], { "type": urlSearchParamsType });
formData.append("name", textData);
+ // https://fetch.spec.whatwg.org/#concept-body-package-data
+ // "UTF-8 decoded without BOM" is used for formData(), either in
+ // "multipart/form-data" and "application/x-www-form-urlencoded" cases,
+ // so BOMs in the values should be kept.
+ // (The "application/x-www-form-urlencoded" cases are tested in
+ // url/urlencoded-parser.any.js)
+ var textDataWithBom = "\uFEFFquick\uFEFFfox\uFEFF";
+ var formTextDataWithBom = stringToMultipartFormTextData(multipartBoundary, "name", textDataWithBom);
+ var formTextDataWithBomExpectedForMultipartFormData = stringToMultipartFormTextData(multipartBoundary, "name", textDataWithBom);
+
checkResponseBody(responsePromise(textData, textResponseInit), textData, checkBodyText, "from text to text");
checkResponseBody(responsePromise(textData, textResponseInit), textData, checkBodyBlob, "from text to blob");
checkResponseBody(responsePromise(textData, textResponseInit), textData, checkBodyArrayBuffer, "from text to arrayBuffer");
checkResponseBody(responsePromise(textData, textResponseInit), textData, checkBodyJSON, "from text to json");
checkResponseBody(responsePromise(formTextData, formTextResponseInit), formTextData, checkBodyFormDataMultipart, "from text with correct multipart type to formData");
+ checkResponseBody(responsePromise(formTextDataWithBom, formTextResponseInit), formTextDataWithBomExpectedForMultipartFormData, checkBodyFormDataMultipart, "from text with correct multipart type to formData with BOM");
checkResponseBody(responsePromise(formTextData, textResponseInit), undefined, checkBodyFormDataError, "from text without correct multipart type to formData (error case)");
checkResponseBody(responsePromise(urlSearchParamsData, urlSearchParamsResponseInit), urlSearchParamsData, checkBodyFormDataUrlencoded, "from text with correct urlencoded type to formData");
checkResponseBody(responsePromise(urlSearchParamsData, textResponseInit), undefined, checkBodyFormDataError, "from text without correct urlencoded type to formData (error case)");
diff --git a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/coep.https.html b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/coep.https.html
index 1c04ed30dd7..64994cdfb76 100644
--- a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/coep.https.html
+++ b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/coep.https.html
@@ -40,4 +40,8 @@
coop_coep_test(t, SAME_SITE, variant.coop, variant.coep, `same-site-${variant.title.replace(/ /g,"-")}`, false);
}, `Same-site ${variant.title}`);
});
+
+test(() => {
+ assert_true(window.crossOriginIsolated);
+}, "Bonus: window.crossOriginIsolated");
</script>
diff --git a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/no-https.html b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/no-https.html
index da9efdce777..014ba1f333b 100644
--- a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/no-https.html
+++ b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/no-https.html
@@ -15,4 +15,8 @@ async_test(t => {
t.done();
}, 500);
}, "Cross-Origin-Opener-Policy only works over secure contexts");
+
+test(() => {
+ assert_false(window.crossOriginIsolated);
+}, "Bonus: window.crossOriginIsolated");
</script>
diff --git a/tests/wpt/web-platform-tests/html/dom/usvstring-reflection.html b/tests/wpt/web-platform-tests/html/dom/usvstring-reflection.https.html
index b9cafd1fb35..b9cafd1fb35 100644
--- a/tests/wpt/web-platform-tests/html/dom/usvstring-reflection.html
+++ b/tests/wpt/web-platform-tests/html/dom/usvstring-reflection.https.html
diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.js b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.js
index 96276d74704..a755865911d 100644
--- a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.js
+++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.js
@@ -16,3 +16,7 @@ if (self.GLOBAL.isWindow()) {
assert_throws("DataCloneError", () => self.postMessage(sab));
}, "SharedArrayBuffer over postMessage() without COOP+COEP");
}
+
+test(() => {
+ assert_false(self.crossOriginIsolated);
+}, "Bonus: self.crossOriginIsolated");
diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-worker-success.js b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-worker-success.js
index 9befc9006e7..ffc3708acb7 100644
--- a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-worker-success.js
+++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-worker-success.js
@@ -7,4 +7,8 @@ promise_test(t => {
return testSharingViaIncrementerScript(t, worker, "parent worker", worker, "sub-worker");
}, "postMessaging to a dedicated sub-worker allows them to see each others' modifications");
+test(() => {
+ assert_true(self.crossOriginIsolated);
+}, "Bonus: self.crossOriginIsolated");
+
done();
diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/srcdoc_process_attributes.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/srcdoc_process_attributes.html
index 397c95a2391..0bd9f9b2295 100644
--- a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/srcdoc_process_attributes.html
+++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/srcdoc_process_attributes.html
@@ -20,7 +20,7 @@ async_test(function(t) {
assert_equals(iframe.contentDocument.body.textContent, "src");
iframe.onload = t.step_func_done(function() {
- assert_false(isAdded);
+ assert_true(isAdded);
assert_equals(iframe.contentDocument.location.href, "about:srcdoc");
assert_equals(iframe.contentDocument.body.textContent, "srcdoc");
});
@@ -41,7 +41,7 @@ async_test(function(t) {
assert_equals(iframe.contentDocument.body.textContent, "old");
iframe.onload = t.step_func_done(function() {
- assert_false(isChanged);
+ assert_true(isChanged);
assert_equals(iframe.contentDocument.location.href, "about:srcdoc");
assert_equals(iframe.contentDocument.body.textContent, "new");
});
@@ -51,7 +51,7 @@ async_test(function(t) {
});
document.body.appendChild(iframe);
-}, "Changing `srcdoc` (via property) triggers attributes processing");
+}, "Setting `srcdoc` (via property) triggers attributes processing");
async_test(function(t) {
var iframe = createIFrameWithBlobSrc();
@@ -62,7 +62,7 @@ async_test(function(t) {
assert_equals(iframe.contentDocument.body.textContent, "srcdoc");
iframe.onload = t.step_func_done(function() {
- assert_false(isRemoved);
+ assert_true(isRemoved);
assert_equals(iframe.contentDocument.location.protocol, "blob:");
assert_equals(iframe.contentDocument.body.textContent, "src");
});
diff --git a/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/dialog-autofocus-just-once.html b/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/dialog-autofocus-just-once.html
new file mode 100644
index 00000000000..894efd59dc2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/dialog-autofocus-just-once.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/interaction/focus/the-autofocus-attribute/resources/utils.js"></script>
+<body>
+<dialog>
+<input>
+<input autofocus>
+</dialog>
+<script>
+// https://github.com/whatwg/html/issues/4788
+promise_test(async () => {
+ const dialog = document.querySelector('dialog');
+ dialog.show();
+ assert_equals(document.activeElement, dialog.querySelector('[autofocus]'),
+ 'dialog.show() should set focus on a descendant element with an ' +
+ 'autofocus attribute.');
+ document.activeElement.blur();
+ await waitUntilStableAutofocusState();
+ assert_equals(document.activeElement, document.body,
+ 'Non-dialog autofocus processing should be skipped.');
+}, 'An autofocus element in a dialog element should not try to get focus twice.');
+</script>
+</body>
diff --git a/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/dialog-focusing-steps-prevent-autofocus.html b/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/dialog-focusing-steps-prevent-autofocus.html
new file mode 100644
index 00000000000..2e8563f761d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/dialog-focusing-steps-prevent-autofocus.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/interaction/focus/the-autofocus-attribute/resources/utils.js"></script>
+<body>
+<dialog></dialog>
+<script>
+// https://github.com/whatwg/html/issues/4788
+promise_test(async () => {
+ const dialog = document.querySelector('dialog');
+ dialog.show();
+ dialog.close();
+ const input = document.createElement('input');
+ input.autofocus = true;
+ document.body.insertBefore(input, dialog);
+ await waitUntilStableAutofocusState();
+ assert_equals(document.activeElement, document.body,
+ 'Non-dialog autofocus processing should be skipped.');
+}, 'After showing a dialog, non-dialog autofocus processing won\'t work.');
+</script>
+</body>
diff --git a/tests/wpt/web-platform-tests/html/webappapis/the-windoworworkerglobalscope-mixin/README.md b/tests/wpt/web-platform-tests/html/webappapis/the-windoworworkerglobalscope-mixin/README.md
new file mode 100644
index 00000000000..10ae3e5f036
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/webappapis/the-windoworworkerglobalscope-mixin/README.md
@@ -0,0 +1 @@
+`self.crossOriginIsolated` is tested in `html/cross-origin-opener-policy/coep.https.html`, `html/cross-origin-opener-policy/no-https.html`, `html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.js`, and `html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-worker-success.js`.
diff --git a/tests/wpt/web-platform-tests/import-maps/builtin-support.tentative/static-import.js b/tests/wpt/web-platform-tests/import-maps/builtin-support.tentative/static-import.js
deleted file mode 100644
index 1686fc123a7..00000000000
--- a/tests/wpt/web-platform-tests/import-maps/builtin-support.tentative/static-import.js
+++ /dev/null
@@ -1 +0,0 @@
-import "{{GET[url]}}";
diff --git a/tests/wpt/web-platform-tests/import-maps/builtin-support.tentative/static-import.py b/tests/wpt/web-platform-tests/import-maps/builtin-support.tentative/static-import.py
new file mode 100644
index 00000000000..8d0f5d9f420
--- /dev/null
+++ b/tests/wpt/web-platform-tests/import-maps/builtin-support.tentative/static-import.py
@@ -0,0 +1,5 @@
+def main(request, response):
+ return (
+ (('Content-Type', 'text/javascript'),),
+ 'import "{}";\n'.format(request.GET.first('url'))
+ )
diff --git a/tests/wpt/web-platform-tests/import-maps/core/static-import.js b/tests/wpt/web-platform-tests/import-maps/core/static-import.js
deleted file mode 100644
index 1686fc123a7..00000000000
--- a/tests/wpt/web-platform-tests/import-maps/core/static-import.js
+++ /dev/null
@@ -1 +0,0 @@
-import "{{GET[url]}}";
diff --git a/tests/wpt/web-platform-tests/import-maps/core/static-import.py b/tests/wpt/web-platform-tests/import-maps/core/static-import.py
new file mode 100644
index 00000000000..8d0f5d9f420
--- /dev/null
+++ b/tests/wpt/web-platform-tests/import-maps/core/static-import.py
@@ -0,0 +1,5 @@
+def main(request, response):
+ return (
+ (('Content-Type', 'text/javascript'),),
+ 'import "{}";\n'.format(request.GET.first('url'))
+ )
diff --git a/tests/wpt/web-platform-tests/import-maps/resources/test-helper.js b/tests/wpt/web-platform-tests/import-maps/resources/test-helper.js
index f21ad935baa..3cb278b7989 100644
--- a/tests/wpt/web-platform-tests/import-maps/resources/test-helper.js
+++ b/tests/wpt/web-platform-tests/import-maps/resources/test-helper.js
@@ -153,7 +153,7 @@ function testStaticImport(importMapString, importMapBaseURL, specifier, expected
const script = document.createElement("script");
script.setAttribute("type", "module");
script.setAttribute("src",
- "static-import.js?pipe=sub(none)&url=" +
+ "static-import.py?url=" +
encodeURIComponent("${specifier}"));
script.addEventListener("load", handlers[Handler.ScriptLoadEvent]);
script.addEventListener("error", handlers[Handler.ScriptErrorEvent]);
diff --git a/tests/wpt/web-platform-tests/infrastructure/expected-fail/precondition-in-promise.html b/tests/wpt/web-platform-tests/infrastructure/expected-fail/precondition-in-promise.html
new file mode 100644
index 00000000000..b2a32facad0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/infrastructure/expected-fail/precondition-in-promise.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>Precondition in promise</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+new Promise(() => {
+ assert_precondition(false);
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/infrastructure/expected-fail/precondition-in-setup.html b/tests/wpt/web-platform-tests/infrastructure/expected-fail/precondition-in-setup.html
new file mode 100644
index 00000000000..071f140afb6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/infrastructure/expected-fail/precondition-in-setup.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>Precondition in setup</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+setup(() => {
+ assert_precondition(false);
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/infrastructure/expected-fail/precondition-without-setup.html b/tests/wpt/web-platform-tests/infrastructure/expected-fail/precondition-without-setup.html
new file mode 100644
index 00000000000..12188dbdaeb
--- /dev/null
+++ b/tests/wpt/web-platform-tests/infrastructure/expected-fail/precondition-without-setup.html
@@ -0,0 +1,8 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>Precondition without wrapping setup</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+assert_precondition(false);
+</script>
diff --git a/tests/wpt/web-platform-tests/infrastructure/expected-fail/precondition.html b/tests/wpt/web-platform-tests/infrastructure/expected-fail/precondition.html
new file mode 100644
index 00000000000..2e6ddc1d02c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/infrastructure/expected-fail/precondition.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>Preconditions in tests</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+test(() => {
+ assert_precondition(false, 'precondition 1');
+}, 'test');
+
+async_test((t) => {
+ assert_precondition(false, 'precondition 2');
+ t.done();
+}, 'async_test immediate');
+
+async_test((t) => {
+ t.step_timeout(() => {
+ assert_precondition(false, 'precondition 3');
+ t.done();
+ }, 100);
+}, 'async_test after timeout');
+
+promise_test(async () => {
+ assert_precondition(false, 'precondition 4');
+}, 'promise_test immediate');
+
+promise_test(async () => {
+ await Promise.resolve();
+ assert_precondition(false, 'precondition 5');
+}, 'promise_test after await');
+</script>
diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/precondition-in-promise.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/precondition-in-promise.html.ini
new file mode 100644
index 00000000000..7210f8dcfe6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/precondition-in-promise.html.ini
@@ -0,0 +1,2 @@
+[precondition-in-promise.html]
+ expected: PRECONDITION_FAILED
diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/precondition-in-setup.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/precondition-in-setup.html.ini
new file mode 100644
index 00000000000..a33ebafe650
--- /dev/null
+++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/precondition-in-setup.html.ini
@@ -0,0 +1,2 @@
+[precondition-in-setup.html]
+ expected: PRECONDITION_FAILED
diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/precondition-without-setup.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/precondition-without-setup.html.ini
new file mode 100644
index 00000000000..406db30a095
--- /dev/null
+++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/precondition-without-setup.html.ini
@@ -0,0 +1,2 @@
+[precondition-without-setup.html]
+ expected: PRECONDITION_FAILED
diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/precondition.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/precondition.html.ini
new file mode 100644
index 00000000000..91544eba4c4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/precondition.html.ini
@@ -0,0 +1,15 @@
+[precondition.html]
+ [test]
+ expected: PRECONDITION_FAILED
+
+ [async_test immediate]
+ expected: PRECONDITION_FAILED
+
+ [async_test after timeout]
+ expected: PRECONDITION_FAILED
+
+ [promise_test immediate]
+ expected: PRECONDITION_FAILED
+
+ [promise_test after await]
+ expected: PRECONDITION_FAILED
diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/uncaught-exception.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/uncaught-exception.html.ini
index 0bcdd374f25..40a58e4153e 100644
--- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/uncaught-exception.html.ini
+++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/uncaught-exception.html.ini
@@ -1,4 +1,2 @@
[uncaught-exception.html]
- [Uncaught exception]
- expected: FAIL
-
+ expected: ERROR
diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/unhandled-rejection.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/unhandled-rejection.html.ini
index 39773dfe714..da4fe27e589 100644
--- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/unhandled-rejection.html.ini
+++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/unhandled-rejection.html.ini
@@ -1,4 +1,2 @@
[unhandled-rejection.html]
- [Unhandled rejection]
- expected: FAIL
-
+ expected: ERROR
diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/context.any.js.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/context.any.js.ini
index c3431d687b6..ca095a18785 100644
--- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/context.any.js.ini
+++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/context.any.js.ini
@@ -1,7 +1,6 @@
[context.any.sharedworker.html]
- [context]
- expected:
- if product == "safari" or product == "epiphany" or product == "webkit": FAIL # https://bugs.webkit.org/show_bug.cgi?id=149850
+ expected:
+ if product == "safari" or product == "epiphany" or product == "webkit": ERROR # https://bugs.webkit.org/show_bug.cgi?id=149850
[context.any.serviceworker.html]
[context]
diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/order-of-metas.any.js.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/order-of-metas.any.js.ini
index 8db9536e38c..23387657b41 100644
--- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/order-of-metas.any.js.ini
+++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/order-of-metas.any.js.ini
@@ -1,6 +1,5 @@
[order-of-metas.any.sharedworker.html]
- [foo]
- expected:
- if product == "safari" or product == "epiphany" or product == "webkit": FAIL # https://bugs.webkit.org/show_bug.cgi?id=149850
+ expected:
+ if product == "safari" or product == "epiphany" or product == "webkit": ERROR # https://bugs.webkit.org/show_bug.cgi?id=149850
diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/secure-context.https.any.js.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/secure-context.https.any.js.ini
index 5f5ed991cf1..5b24c9429dc 100644
--- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/secure-context.https.any.js.ini
+++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/secure-context.https.any.js.ini
@@ -1,7 +1,6 @@
[secure-context.https.any.sharedworker.html]
- [secure-context]
- expected:
- if product == "safari" or product == "epiphany" or product == "webkit": FAIL # https://bugs.webkit.org/show_bug.cgi?id=149850
+ expected:
+ if product == "safari" or product == "epiphany" or product == "webkit": ERROR # https://bugs.webkit.org/show_bug.cgi?id=149850
[secure-context.https.any.serviceworker.html]
[secure-context]
diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/title.any.js.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/title.any.js.ini
index e2a7b5578c3..8cbb5f76493 100644
--- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/title.any.js.ini
+++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/title.any.js.ini
@@ -1,6 +1,5 @@
[title.any.sharedworker.html]
- [foobar]
- expected:
- if product == "safari" or product == "epiphany" or product == "webkit": FAIL # https://bugs.webkit.org/show_bug.cgi?id=149850
+ expected:
+ if product == "safari" or product == "epiphany" or product == "webkit": ERROR # https://bugs.webkit.org/show_bug.cgi?id=149850
diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/multiTouchPoints.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/multiTouchPoints.html.ini
new file mode 100644
index 00000000000..c7b3482c786
--- /dev/null
+++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/multiTouchPoints.html.ini
@@ -0,0 +1,3 @@
+[multiTouchPoints.html]
+ expected:
+ if product == "firefox" or product == "safari" or product == "epiphany" or product == "webkit": ERROR
diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/virtual_authenticator.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/virtual_authenticator.html.ini
new file mode 100644
index 00000000000..88c9bbd4799
--- /dev/null
+++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/virtual_authenticator.html.ini
@@ -0,0 +1,3 @@
+[virtual_authenticator.html]
+ expected:
+ if product == "firefox" or product == "safari" or product == "epiphany" or product == "webkit": ERROR
diff --git a/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/multiTouchPoints.html b/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/multiTouchPoints.html
new file mode 100644
index 00000000000..c8169733306
--- /dev/null
+++ b/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/multiTouchPoints.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>TestDriver actions: two touch points with one moving one pause</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+
+<style>
+div#test1{
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100px;
+ height: 100px;
+ background-color: blue;
+}
+
+</style>
+
+<div id="test1">
+</div>
+
+<script>
+let event_type = [];
+let event_id = [];
+
+async_test(t => {
+ let test1 = document.getElementById("test1");
+ document.getElementById("test1").addEventListener("pointerdown",
+ e => {event_type.push(e.type); event_id.push(e.pointerId);});
+ document.getElementById("test1").addEventListener("pointerup",
+ e => {event_type.push(e.type); event_id.push(e.pointerId);});
+ document.getElementById("test1").addEventListener("pointermove",
+ e => {event_type.push(e.type); event_id.push(e.pointerId);});
+
+ let actions = new test_driver.Actions()
+ .addPointer("touchPointer1", "touch")
+ .addPointer("touchPointer2", "touch")
+ .pointerMove(0, 0, {origin: test1, sourceName: "touchPointer1"})
+ .pointerMove(10, 0, {origin: test1, sourceName: "touchPointer2"})
+ .pointerDown({sourceName: "touchPointer1"})
+ .pointerDown({sourceName: "touchPointer2"})
+ .pointerMove(0, 10, {origin: test1, sourceName: "touchPointer1"})
+ .pointerUp({sourceName: "touchPointer1"})
+ .pointerUp({sourceName: "touchPointer2"});
+
+ actions.send()
+ .then(t.step_func_done(() => {assert_array_equals(event_type, ["pointerdown", "pointerdown", "pointermove", "pointerup", "pointerup"]);
+ assert_array_equals(event_id, [2, 3, 2, 2, 3]);}))
+ .catch(e => t.step_func(() => assert_unreached("Actions sequence failed " + e)));
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/infrastructure/testdriver/virtual_authenticator.html b/tests/wpt/web-platform-tests/infrastructure/testdriver/virtual_authenticator.html
new file mode 100644
index 00000000000..339e42665c7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/infrastructure/testdriver/virtual_authenticator.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>TestDriver virtual authenticator methods</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>
+<script>
+"use strict";
+
+// The example attestation private key from the U2F spec at
+// https://fidoalliance.org/specs/fido-u2f-v1.2-ps-20170411/fido-u2f-raw-message-formats-v1.2-ps-20170411.html#registration-example
+// PKCS.8 encoded without encryption, as a base64url string.
+const private_key =
+ "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg8_zMDQDYAxlU-Q"
+ + "hk1Dwkf0v18GZca1DMF3SaJ9HPdmShRANCAASNYX5lyVCOZLzFZzrIKmeZ2jwU"
+ + "RmgsJYxGP__fWN_S-j5sN4tT15XEpN_7QZnt14YvI6uvAgO0uJEboFaZlOEB";
+let credential_id = btoa("cred-1");
+let credential = {
+ credentialId: credential_id,
+ rpId: window.location.hostname,
+ privateKey: private_key,
+ signCount: 0,
+ isResidentCredential: false,
+};
+
+let authenticator_id;
+
+promise_test(async t => {
+ authenticator_id = await test_driver.add_virtual_authenticator({
+ protocol: "ctap1/u2f",
+ transport: "usb",
+ });
+}, "Can create an authenticator");
+
+promise_test(async t => {
+ return test_driver.add_credential(authenticator_id, credential);
+}, "Can add a credential");
+
+promise_test(async t => {
+ let credentials = await test_driver.get_credentials(authenticator_id);
+ assert_equals(credentials.length, 1);
+ // The U2F REGISTER operation stores the hash of the rpId, so the rpId
+ // itself may not be available on the returned credential.
+ assert_equals(credentials[0].credentialId, credential.credentialId);
+ assert_equals(credentials[0].privateKey, credential.privateKey);
+ assert_equals(credentials[0].signCount, credential.signCount);
+ assert_equals(credentials[0].isResidentCredential,
+ credential.isResidentCredential);
+}, "Can get the credentials");
+
+promise_test(async t => {
+ await test_driver.remove_credential(authenticator_id, credential_id);
+ let credentials = await test_driver.get_credentials(authenticator_id);
+ assert_equals(credentials.length, 0);
+}, "Can remove a credential");
+
+promise_test(async t => {
+ let credential1 = credential;
+ let credential2 =
+ Object.assign({}, credential, {credentialId: btoa("cred-2")});
+ await test_driver.add_credential(authenticator_id, credential1);
+ await test_driver.add_credential(authenticator_id, credential2);
+
+ let credentials = await test_driver.get_credentials(authenticator_id);
+ assert_equals(credentials.length, 2);
+
+ await test_driver.remove_all_credentials(authenticator_id);
+ credentials = await test_driver.get_credentials(authenticator_id);
+ assert_equals(credentials.length, 0);
+}, "Can remove all credentials");
+
+promise_test(async t => {
+ await test_driver.set_user_verified(authenticator_id, {isUserVerified: true});
+ await test_driver.set_user_verified(authenticator_id, {isUserVerified: false});
+}, "Can set user verified");
+
+promise_test(async t => {
+ await test_driver.remove_virtual_authenticator(authenticator_id);
+}, "Can remove a virtual authenticator");
+</script>
diff --git a/tests/wpt/web-platform-tests/interfaces/appmanifest.idl b/tests/wpt/web-platform-tests/interfaces/appmanifest.idl
index 4a6425829f2..b3a303652f5 100644
--- a/tests/wpt/web-platform-tests/interfaces/appmanifest.idl
+++ b/tests/wpt/web-platform-tests/interfaces/appmanifest.idl
@@ -42,6 +42,7 @@ dictionary WebAppManifest {
ServiceWorkerRegistrationObject serviceworker;
sequence<ExternalApplicationResource> related_applications;
boolean prefer_related_applications = "false";
+ sequence<ShortcutItem> shortcuts;
};
enum TextDirectionType { "ltr", "rtl", "auto" };
@@ -61,6 +62,14 @@ dictionary ImageResource {
USVString platform;
};
+dictionary ShortcutItem {
+ required USVString name;
+ USVString short_name;
+ USVString description;
+ required USVString url;
+ sequence<ImageResource> icons;
+};
+
dictionary ServiceWorkerRegistrationObject {
required USVString src;
USVString scope;
diff --git a/tests/wpt/web-platform-tests/interfaces/fetch.idl b/tests/wpt/web-platform-tests/interfaces/fetch.idl
index eacc69d8b9d..9ff4aab4b14 100644
--- a/tests/wpt/web-platform-tests/interfaces/fetch.idl
+++ b/tests/wpt/web-platform-tests/interfaces/fetch.idl
@@ -70,7 +70,7 @@ dictionary RequestInit {
any window; // can only be set to null
};
-enum RequestDestination { "", "audio", "audioworklet", "document", "embed", "font", "image", "manifest", "object", "paintworklet", "report", "script", "sharedworker", "style", "track", "video", "worker", "xslt" };
+enum RequestDestination { "", "audio", "audioworklet", "document", "embed", "font", "frame", "iframe", "image", "manifest", "object", "paintworklet", "report", "script", "sharedworker", "style", "track", "video", "worker", "xslt" };
enum RequestMode { "navigate", "same-origin", "no-cors", "cors" };
enum RequestCredentials { "omit", "same-origin", "include" };
enum RequestCache { "default", "no-store", "reload", "no-cache", "force-cache", "only-if-cached" };
diff --git a/tests/wpt/web-platform-tests/interfaces/picture-in-picture.idl b/tests/wpt/web-platform-tests/interfaces/picture-in-picture.idl
index 3323fc1f099..3d3bad08219 100644
--- a/tests/wpt/web-platform-tests/interfaces/picture-in-picture.idl
+++ b/tests/wpt/web-platform-tests/interfaces/picture-in-picture.idl
@@ -31,11 +31,9 @@ interface PictureInPictureWindow : EventTarget {
attribute EventHandler onresize;
};
-[
- Constructor(DOMString type, EnterPictureInPictureEventInit eventInitDict),
- Exposed=Window
-]
+[Exposed=Window]
interface EnterPictureInPictureEvent : Event {
+ constructor(DOMString type, EnterPictureInPictureEventInit eventInitDict);
[SameObject] readonly attribute PictureInPictureWindow pictureInPictureWindow;
};
diff --git a/tests/wpt/web-platform-tests/interfaces/resize-observer.idl b/tests/wpt/web-platform-tests/interfaces/resize-observer.idl
index d96a348a721..8018fc4b22b 100644
--- a/tests/wpt/web-platform-tests/interfaces/resize-observer.idl
+++ b/tests/wpt/web-platform-tests/interfaces/resize-observer.idl
@@ -4,7 +4,7 @@
// Source: Resize Observer (https://drafts.csswg.org/resize-observer/)
enum ResizeObserverBoxOptions {
- "border-box", "content-box"
+ "border-box", "content-box", "device-pixel-content-box"
};
dictionary ResizeObserverOptions {
@@ -27,6 +27,7 @@ interface ResizeObserverEntry {
readonly attribute DOMRectReadOnly contentRect;
readonly attribute ResizeObserverSize borderBoxSize;
readonly attribute ResizeObserverSize contentBoxSize;
+ readonly attribute ResizeObserverSize devicePixelContentBoxSize;
};
interface ResizeObserverSize {
diff --git a/tests/wpt/web-platform-tests/interfaces/web-animations.idl b/tests/wpt/web-platform-tests/interfaces/web-animations.idl
index 6fd172ce425..0d5d40ba74f 100644
--- a/tests/wpt/web-platform-tests/interfaces/web-animations.idl
+++ b/tests/wpt/web-platform-tests/interfaces/web-animations.idl
@@ -92,11 +92,12 @@ dictionary ComputedEffectTiming : EffectTiming {
[Exposed=Window]
interface KeyframeEffect : AnimationEffect {
- constructor((Element or CSSPseudoElement)? target,
+ constructor(Element? target,
object? keyframes,
optional (unrestricted double or KeyframeEffectOptions) options = {});
constructor(KeyframeEffect source);
- attribute (Element or CSSPseudoElement)? target;
+ attribute Element? target;
+ attribute CSSOMString? pseudoElement;
attribute CompositeOperation composite;
sequence<object> getKeyframes();
void setKeyframes(object? keyframes);
@@ -122,7 +123,8 @@ dictionary BaseKeyframe {
};
dictionary KeyframeEffectOptions : EffectTiming {
- CompositeOperation composite = "replace";
+ CompositeOperation composite = "replace";
+ CSSOMString? pseudoElement = null;
};
enum CompositeOperation { "replace", "add", "accumulate" };
@@ -153,8 +155,6 @@ partial interface mixin DocumentOrShadowRoot {
Element includes Animatable;
-CSSPseudoElement includes Animatable;
-
[Exposed=Window]
interface AnimationPlaybackEvent : Event {
constructor(DOMString type, optional AnimationPlaybackEventInit eventInitDict = {});
diff --git a/tests/wpt/web-platform-tests/interfaces/web-nfc.idl b/tests/wpt/web-platform-tests/interfaces/web-nfc.idl
index 117812a1f27..9f726ece289 100644
--- a/tests/wpt/web-platform-tests/interfaces/web-nfc.idl
+++ b/tests/wpt/web-platform-tests/interfaces/web-nfc.idl
@@ -52,6 +52,7 @@ interface NDEFWriter {
interface NDEFReader : EventTarget {
constructor();
+ attribute EventHandler onerror;
attribute EventHandler onreading;
Promise<void> scan(optional NDEFScanOptions options={});
diff --git a/tests/wpt/web-platform-tests/interfaces/web-share.idl b/tests/wpt/web-platform-tests/interfaces/web-share.idl
index f433f2314be..a29107f0598 100644
--- a/tests/wpt/web-platform-tests/interfaces/web-share.idl
+++ b/tests/wpt/web-platform-tests/interfaces/web-share.idl
@@ -1,7 +1,7 @@
// GENERATED CONTENT - DO NOT EDIT
// Content was automatically extracted by Reffy into reffy-reports
// (https://github.com/tidoust/reffy-reports)
-// Source: Web Share API - Level 1 (https://w3c.github.io/web-share/)
+// Source: Web Share API (https://w3c.github.io/web-share/)
partial interface Navigator {
[SecureContext] Promise<void> share(optional ShareData data = {});
diff --git a/tests/wpt/web-platform-tests/interfaces/webrtc-stats.idl b/tests/wpt/web-platform-tests/interfaces/webrtc-stats.idl
index 2b823047ff1..3e58254baa4 100644
--- a/tests/wpt/web-platform-tests/interfaces/webrtc-stats.idl
+++ b/tests/wpt/web-platform-tests/interfaces/webrtc-stats.idl
@@ -78,6 +78,8 @@ dictionary RTCInboundRtpStreamStats : RTCReceivedRtpStreamStats {
double framesPerSecond;
unsigned long long qpSum;
double totalDecodeTime;
+ double totalInterFrameDelay;
+ double totalSquaredInterFrameDelay;
boolean voiceActivityFlag;
DOMHighResTimeStamp lastPacketReceivedTimestamp;
double averageRtcpInterval;
diff --git a/tests/wpt/web-platform-tests/interfaces/webrtc.idl b/tests/wpt/web-platform-tests/interfaces/webrtc.idl
index 5a5eb7b1063..43ee424b7c3 100644
--- a/tests/wpt/web-platform-tests/interfaces/webrtc.idl
+++ b/tests/wpt/web-platform-tests/interfaces/webrtc.idl
@@ -47,9 +47,7 @@ enum RTCRtcpMuxPolicy {
"require"
};
-dictionary RTCOfferAnswerOptions {
- boolean voiceActivityDetection = true;
-};
+dictionary RTCOfferAnswerOptions {};
dictionary RTCOfferOptions : RTCOfferAnswerOptions {
boolean iceRestart = false;
@@ -111,7 +109,6 @@ interface RTCPeerConnection : EventTarget {
readonly attribute RTCPeerConnectionState connectionState;
readonly attribute boolean? canTrickleIceCandidates;
void restartIce();
- static sequence<RTCIceServer> getDefaultIceServers();
RTCConfiguration getConfiguration();
void setConfiguration(RTCConfiguration configuration);
void close();
@@ -266,7 +263,6 @@ dictionary RTCCertificateExpiration {
[Exposed=Window, Serializable]
interface RTCCertificate {
readonly attribute DOMTimeStamp expires;
- static sequence<AlgorithmIdentifier> getSupportedAlgorithms();
sequence<RTCDtlsFingerprint> getFingerprints();
};
diff --git a/tests/wpt/web-platform-tests/layout-instability/resources/util.js b/tests/wpt/web-platform-tests/layout-instability/resources/util.js
new file mode 100644
index 00000000000..ca430d0a9e2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/layout-instability/resources/util.js
@@ -0,0 +1,66 @@
+// Utilities for Layout Instability tests.
+
+// Returns a promise that is resolved when the specified number of animation
+// frames has occurred.
+waitForAnimationFrames = frameCount => {
+ return new Promise(resolve => {
+ const handleFrame = () => {
+ if (--frameCount <= 0)
+ resolve();
+ else
+ requestAnimationFrame(handleFrame);
+ };
+ requestAnimationFrame(handleFrame);
+ });
+};
+
+// Returns a promise that is resolved when the next animation frame occurs.
+waitForAnimationFrame = () => waitForAnimationFrames(1);
+
+// Helper to compute an expected layout shift score based on an expected impact
+// region and max move distance for a particular animation frame.
+computeExpectedScore = (impactRegionArea, moveDistance) => {
+ const docElement = document.documentElement;
+
+ const viewWidth = docElement.clientWidth;
+ const viewHeight = docElement.clientHeight;
+
+ const viewArea = viewWidth * viewHeight;
+ const viewMaxDim = Math.max(viewWidth, viewHeight);
+
+ const impactFraction = impactRegionArea / viewArea;
+ const distanceFraction = moveDistance / viewMaxDim;
+
+ return impactFraction * distanceFraction;
+};
+
+// An object that tracks the document cumulative layout shift score.
+// Usage:
+//
+// const watcher = new ScoreWatcher;
+// ...
+// assert_equals(watcher.score, expectedScore);
+//
+// The score reflects only layout shifts that occur after the ScoreWatcher is
+// constructed.
+ScoreWatcher = function() {
+ if (PerformanceObserver.supportedEntryTypes.indexOf("layout-shift") == -1)
+ throw new Error("Layout Instability API not supported");
+ this.score = 0;
+ const resetPromise = () => {
+ this.promise = new Promise(resolve => {
+ this.resolve = () => {
+ resetPromise();
+ resolve();
+ }
+ });
+ };
+ resetPromise();
+ const observer = new PerformanceObserver(list => {
+ list.getEntries().forEach(entry => {
+ this.score += entry.value;
+ this.resolve();
+ });
+ });
+ observer.observe({entryTypes: ['layout-shift']});
+};
diff --git a/tests/wpt/web-platform-tests/layout-instability/rtl-distance.html b/tests/wpt/web-platform-tests/layout-instability/rtl-distance.html
new file mode 100644
index 00000000000..a6f0040e950
--- /dev/null
+++ b/tests/wpt/web-platform-tests/layout-instability/rtl-distance.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<title>Layout Instability: movement distance uses starting corner</title>
+<link rel="help" href="https://wicg.github.io/layout-instability/" />
+<style>
+
+#shifter { position: relative; width: 100px; height: 100px; direction: rtl; }
+
+</style>
+<div id='shifter'></div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/util.js"></script>
+<script>
+
+promise_test(async () => {
+ const watcher = new ScoreWatcher;
+
+ // Wait for the initial render to complete.
+ await waitForAnimationFrames(2);
+
+ // Move the left edge rightward by 10px and the right edge leftward by 20px.
+ document.querySelector("#shifter").style = "width: 70px; left: 10px";
+
+ // The movement distance should use the displacement of the right edge.
+ const expectedScore = computeExpectedScore(100 * 100, 20);
+
+ await watcher.promise;
+ assert_equals(watcher.score, expectedScore);
+}, 'RTL element.');
+
+</script>
diff --git a/tests/wpt/web-platform-tests/layout-instability/simple-block-movement.html b/tests/wpt/web-platform-tests/layout-instability/simple-block-movement.html
new file mode 100644
index 00000000000..0f9257e27ce
--- /dev/null
+++ b/tests/wpt/web-platform-tests/layout-instability/simple-block-movement.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<title>Layout Instability: simple block movement is detected</title>
+<link rel="help" href="https://wicg.github.io/layout-instability/" />
+<style>
+
+#shifter { position: relative; width: 300px; height: 100px; }
+
+</style>
+<div id="shifter"></div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/util.js"></script>
+<script>
+
+promise_test(async () => {
+ const watcher = new ScoreWatcher;
+
+ // Wait for the initial render to complete.
+ await waitForAnimationFrames(2);
+
+ // Modify the position of the div.
+ document.querySelector("#shifter").style = "top: 60px";
+
+ // An element of size (300 x 100) has shifted by 60px.
+ const expectedScore = computeExpectedScore(300 * (100 + 60), 60);
+
+ // Observer fires after the frame is painted.
+ assert_equals(watcher.score, 0);
+ await watcher.promise;
+ assert_equals(watcher.score, expectedScore);
+}, 'Simple block movement.');
+
+</script>
diff --git a/tests/wpt/web-platform-tests/layout-instability/transform.html b/tests/wpt/web-platform-tests/layout-instability/transform.html
new file mode 100644
index 00000000000..7ac1c8cafde
--- /dev/null
+++ b/tests/wpt/web-platform-tests/layout-instability/transform.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<title>Layout Instability: shift inside a transformed container</title>
+<link rel="help" href="https://wicg.github.io/layout-instability/" />
+<style>
+
+body { margin: 0; }
+#container { transform: translateX(-300px) translateY(-40px); }
+#shifter { position: relative; width: 600px; height: 140px; }
+
+</style>
+<div id="container">
+ <div id="shifter"></div>
+</div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/util.js"></script>
+<script>
+
+promise_test(async () => {
+ const watcher = new ScoreWatcher;
+
+ // Wait for the initial render to complete.
+ await waitForAnimationFrames(2);
+
+ // Modify the position of the div.
+ document.querySelector("#shifter").style = "top: 60px";
+
+ // The shifter has size 600 x 140, but the container's transform
+ // reduces its viewport overlap.
+ const expectedScore = computeExpectedScore(
+ (600 - 300) * (140 - 40 + 60), 60);
+
+ await watcher.promise;
+ assert_equals(watcher.score, expectedScore);
+}, 'Transformed container.');
+
+</script>
diff --git a/tests/wpt/web-platform-tests/mathml/relations/html5-tree/css-inline-style-dynamic.tentative.html b/tests/wpt/web-platform-tests/mathml/relations/html5-tree/css-inline-style-dynamic.tentative.html
index ca3e6794919..d50e69eb97d 100644
--- a/tests/wpt/web-platform-tests/mathml/relations/html5-tree/css-inline-style-dynamic.tentative.html
+++ b/tests/wpt/web-platform-tests/mathml/relations/html5-tree/css-inline-style-dynamic.tentative.html
@@ -5,6 +5,7 @@
<title>MathML 'ElementCSSInlineStyle` Dynamic Tests</title>
<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#dom-and-javascript"/>
<link rel="match" href="css-inline-style-dynamic.tentative-ref.html"/>
+ <script src="/mathml/support/feature-detection.js"></script>
<style>
#hidden {
visibility: hidden;
@@ -21,9 +22,17 @@
<script type="text/javascript">
function test()
{
+ MathMLFeatureDetection.ensure_for_match_reftest("has_mspace");
document.body.offsetTop; // Update layout
- document.getElementById("hidden").style.visibility = "visible";
- document.getElementById("red").style.backgroundColor = "green";
+
+ var mspace = document.getElementById("hidden");
+ if (mspace.style)
+ mspace.style.visibility = "visible";
+
+ mspace = document.getElementById("red");
+ if (mspace.style)
+ mspace.style.backgroundColor = "green";
+
document.documentElement.className = "";
}
</script>
diff --git a/tests/wpt/web-platform-tests/mathml/relations/html5-tree/href-click-3.html b/tests/wpt/web-platform-tests/mathml/relations/html5-tree/href-click-3.html
index a8475ea3ff8..1b7f0685e65 100644
--- a/tests/wpt/web-platform-tests/mathml/relations/html5-tree/href-click-3.html
+++ b/tests/wpt/web-platform-tests/mathml/relations/html5-tree/href-click-3.html
@@ -19,10 +19,20 @@
<mspace width="50px" height="10px" style="background: gray"></mspace>
</math>
</p>
+ <a id="badTarget" href="javascript:badHandler()">DON'T CLICK ME</a>
<script>
var t = async_test("Click element with href");
function handler() { t.done(); }
- test_driver.click(document.getElementById("target"));
+ function badHandler() {
+ t.step(() => { assert_unreached("Bad handler executed"); });
+ t.done();
+ }
+ test_driver.click(document.getElementById("target")).then(() => {
+ return test_driver.click(document.getElementById("badTarget"));
+ }).catch(() => {
+ t.step(() => { assert_unreached("Click failed"); });
+ t.done();
+ });
</script>
</body>
</html>
diff --git a/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-mimetype.html b/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-mimetype.html
index ddc56e9cb75..e90bbcced98 100644
--- a/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-mimetype.html
+++ b/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-mimetype.html
@@ -12,18 +12,28 @@
<script>
function createAudioStream(t) {
const ac = new AudioContext();
- const {stream} = ac.createMediaStreamDestination();
- const tracks = stream.getTracks();
- t.add_cleanup(() => tracks.forEach(tr => tr.stop()));
- return stream;
+ const dest = ac.createMediaStreamDestination();
+ const osc = ac.createOscillator();
+ osc.connect(dest);
+ osc.start();
+ const [track] = dest.stream.getTracks();
+ t.add_cleanup(() => track.stop());
+ return dest.stream;
}
function createVideoStream(t) {
const canvas = document.getElementById("canvas");
- canvas.getContext('2d');
+ const ctx = canvas.getContext('2d');
const stream = canvas.captureStream();
- const tracks = stream.getTracks();
- t.add_cleanup(() => tracks.forEach(tr => tr.stop()));
+ const [track] = stream.getTracks();
+ t.add_cleanup(() => track.stop());
+ ctx.fillStyle = 'green';
+ requestAnimationFrame(function draw() {
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
+ if (track.readyState == "live") {
+ requestAnimationFrame(draw);
+ }
+ });
return stream;
}
@@ -104,44 +114,56 @@ for (const mimeType of [
}
}
-test(t => {
+promise_test(async t => {
const recorder = new MediaRecorder(createAudioStream(t));
recorder.start();
+ assert_equals(recorder.mimeType, "",
+ "MediaRecorder has no MIMEtype after start() for audio");
+
+ await new Promise(r => recorder.onstart = r);
assert_not_equals(recorder.mimeType, "",
- "MediaRecorder has a MIMEtype after start() for audio");
+ "MediaRecorder has a MIMEtype after 'start' for audio");
assert_regexp_match(recorder.mimeType, /^audio\//,
"MIMEtype has an expected media type");
assert_regexp_match(recorder.mimeType, /^[a-z]+\/[a-z]+/,
"MIMEtype has a container subtype");
assert_regexp_match(recorder.mimeType, /^[a-z]+\/[a-z]+; codecs=[^,]+$/,
"MIMEtype has one codec");
-}, "MediaRecorder sets a MIMEType after start() for audio");
+}, "MediaRecorder sets a MIMEType after 'start' for audio");
-test(t => {
+promise_test(async t => {
const recorder = new MediaRecorder(createVideoStream(t));
recorder.start();
+ assert_equals(recorder.mimeType, "",
+ "MediaRecorder has no MIMEtype after start() for video");
+
+ await new Promise(r => recorder.onstart = r);
assert_not_equals(recorder.mimeType, "",
- "MediaRecorder has a MIMEtype after start() for video");
+ "MediaRecorder has a MIMEtype after 'start' for video");
assert_regexp_match(recorder.mimeType, /^video\//,
"MIMEtype has an expected media type");
assert_regexp_match(recorder.mimeType, /^[a-z]+\/[a-z]+/,
"MIMEtype has a container subtype");
assert_regexp_match(recorder.mimeType, /^[a-z]+\/[a-z]+; codecs=[^,]+$/,
"MIMEtype has one codec");
-}, "MediaRecorder sets a MIMEType after start() for video");
+}, "MediaRecorder sets a MIMEType after 'start' for video");
-test(t => {
+promise_test(async t => {
const recorder = new MediaRecorder(createAudioVideoStream(t));
recorder.start();
+ assert_equals(recorder.mimeType, "",
+ "MediaRecorder has no MIMEtype after start() for audio/video");
+
+ await new Promise(r => recorder.onstart = r);
assert_not_equals(recorder.mimeType, "",
- "MediaRecorder has a MIMEtype after start() for audio/video");
+ "MediaRecorder has a MIMEtype after 'start' for audio/video");
assert_regexp_match(recorder.mimeType, /^video\//,
"MIMEtype has an expected media type");
assert_regexp_match(recorder.mimeType, /^[a-z]+\/[a-z]+/,
"MIMEtype has a container subtype");
assert_regexp_match(recorder.mimeType, /^[a-z]+\/[a-z]+; codecs=[^,]+,[^,]+$/,
"MIMEtype has two codecs");
-}, "MediaRecorder sets a MIMEType after start() for audio/video");
+}, "MediaRecorder sets a MIMEType after 'start' for audio/video");
</script>
</body>
</html>
diff --git a/tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-MediaElement-srcObject.https.html b/tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-MediaElement-srcObject.https.html
index 3b16006e0f5..790f73ae7bd 100644
--- a/tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-MediaElement-srcObject.https.html
+++ b/tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-MediaElement-srcObject.https.html
@@ -12,6 +12,7 @@
the success callback in getUserMedia can be properly assigned to a video element
via the <code>srcObject</code> attribute.</p>
+<audio id="aud"></audio>
<video id="vid"></video>
<div id='log'></div>
@@ -21,6 +22,11 @@ via the <code>srcObject</code> attribute.</p>
'use strict';
const vid = document.getElementById("vid");
+function queueTask(f) {
+ window.onmessage = f;
+ window.postMessage("hi");
+}
+
promise_test(async t => {
const stream = await navigator.mediaDevices.getUserMedia({video: true});
t.add_cleanup(() => {
@@ -231,6 +237,50 @@ promise_test(async t => {
"currentTime advanced after stopping");
}, "Tests that a media element with an assigned MediaStream reports the currentTime attribute as expected");
+promise_test(async t => {
+ const stream = await navigator.mediaDevices.getUserMedia({video: true});
+ t.add_cleanup(() => {
+ vid.srcObject = null;
+ stream.getTracks().forEach(track => track.stop());
+ });
+ vid.srcObject = stream;
+
+ await new Promise(r => t.step_timeout(r, 500));
+
+ vid.play();
+ await new Promise(r => vid.ontimeupdate = r);
+ assert_between_exclusive(vid.currentTime, 0, 0.5,
+ "currentTime starts at 0 and has progressed at first timeupdate");
+}, "Tests that a media element with an assigned MediaStream starts its timeline at 0 regardless of when the MediaStream was created");
+
+promise_test(async t => {
+ const stream = await navigator.mediaDevices.getUserMedia({video: true});
+ t.add_cleanup(() => {
+ vid.srcObject = null;
+ stream.getTracks().forEach(track => track.stop());
+ });
+ vid.srcObject = stream;
+
+ vid.play();
+ await new Promise(r => vid.ontimeupdate = r);
+
+ vid.pause();
+ const pauseCurrentTime = vid.currentTime;
+
+ await new Promise(r => vid.onpause = r);
+ vid.ontimeupdate = () => assert_unreached("No timeupdate while paused");
+
+ await new Promise(r => t.step_timeout(r, 500));
+ assert_equals(vid.currentTime, pauseCurrentTime,
+ "currentTime does not change while paused");
+
+ vid.play();
+
+ await new Promise(r => vid.ontimeupdate = r);
+ assert_between_exclusive(vid.currentTime - pauseCurrentTime, 0, 0.5,
+ "currentTime does not skip ahead after pause");
+}, "Tests that a media element with an assigned MediaStream does not advance currentTime while paused");
+
promise_test(async t => {
const stream = await navigator.mediaDevices.getUserMedia({video: true});
@@ -263,6 +313,112 @@ promise_test(async t => {
// otherwise the media element sets currentTime to 0 without ending.
await new Promise(r => vid.onended = r);
}, "Tests that the loop attribute has no effect on a media element with an assigned MediaStream");
+
+promise_test(async t => {
+ const stream = await navigator.mediaDevices.getUserMedia({video: true});
+ t.add_cleanup(() => { vid.srcObject = null; });
+ vid.srcObject = stream;
+
+ await vid.play();
+
+ for (const track of stream.getTracks()) {
+ track.stop();
+ }
+
+ assert_false(stream.active, "MediaStream becomes inactive with only ended tracks");
+ assert_false(vid.ended, "HTMLMediaElement reports ended the next time the event loop reaches step 1 (sync)");
+
+ await Promise.resolve();
+ assert_false(vid.ended, "HTMLMediaElement reports ended the next time the event loop reaches step 1 (microtask)");
+
+ let ended = false;
+ vid.onended = () => ended = true;
+ await new Promise(r => queueTask(r));
+
+ assert_true(vid.ended, "HTMLMediaElement becomes ended asynchronously when its MediaStream provider becomes inactive");
+ assert_true(ended, "HTMLMediaElement fires the ended event asynchronously when its MediaStream provider becomes inactive");
+}, "Tests that a media element with an assigned MediaStream ends when the MediaStream becomes inactive through tracks ending");
+
+promise_test(async t => {
+ const stream = await navigator.mediaDevices.getUserMedia({audio: true, video: true});
+ t.add_cleanup(() => {
+ aud.srcObject = null;
+ stream.getTracks().forEach(track => track.stop());
+ });
+ aud.srcObject = stream;
+
+ await aud.play();
+
+ for (const track of stream.getAudioTracks()) {
+ track.stop();
+ }
+
+ assert_true(stream.active, "MediaStream is still active with a live video track");
+ assert_false(aud.ended, "HTMLMediaElement reports ended the next time the event loop reaches step 1 (sync)");
+
+ await Promise.resolve();
+ assert_false(aud.ended, "HTMLMediaElement reports ended the next time the event loop reaches step 1 (microtask)");
+
+ let ended = false;
+ aud.onended = () => ended = true;
+ await new Promise(r => queueTask(r));
+
+ assert_true(aud.ended, "HTMLAudioElement becomes ended asynchronously when its MediaStream provider becomes inaudible");
+ assert_true(ended, "HTMLAudioElement fires the ended event asynchronously when its MediaStream provider becomes inaudible");
+}, "Tests that an audio element with an assigned MediaStream ends when the MediaStream becomes inaudible through audio tracks ending");
+
+promise_test(async t => {
+ const stream = await navigator.mediaDevices.getUserMedia({video: true});
+ t.add_cleanup(() => { vid.srcObject = null; });
+ vid.srcObject = stream;
+
+ await vid.play();
+
+ for (const track of stream.getTracks()) {
+ stream.removeTrack(track);
+ }
+
+ assert_false(stream.active, "MediaStream becomes inactive with no tracks");
+ assert_false(vid.ended, "HTMLMediaElement reports ended the next time the event loop reaches step 1 (sync)");
+
+ await Promise.resolve();
+ assert_false(vid.ended, "HTMLMediaElement reports ended the next time the event loop reaches step 1 (microtask)");
+
+ let ended = false;
+ vid.onended = () => ended = true;
+ await new Promise(r => queueTask(r));
+
+ assert_true(vid.ended, "HTMLMediaElement becomes ended asynchronously when its MediaStream provider becomes inactive");
+ assert_true(ended, "HTMLMediaElement fires the ended event asynchronously when its MediaStream provider becomes inactive");
+}, "Tests that a media element with an assigned MediaStream ends when the MediaStream becomes inactive through track removal");
+
+promise_test(async t => {
+ const stream = await navigator.mediaDevices.getUserMedia({audio: true, video: true});
+ t.add_cleanup(() => {
+ aud.srcObject = null;
+ stream.getTracks().forEach(track => track.stop());
+ });
+ aud.srcObject = stream;
+
+ await aud.play();
+
+ for (const track of stream.getAudioTracks()) {
+ stream.removeTrack(track);
+ }
+
+ assert_true(stream.active, "MediaStream is still active with a live video track");
+ assert_false(aud.ended, "HTMLMediaElement reports ended the next time the event loop reaches step 1 (sync)");
+
+ await Promise.resolve();
+ assert_false(aud.ended, "HTMLMediaElement reports ended the next time the event loop reaches step 1 (microtask)");
+
+ let ended = false;
+ aud.onended = () => ended = true;
+ await new Promise(r => queueTask(r));
+
+ assert_true(aud.ended, "HTMLAudioElement becomes ended asynchronously when its MediaStream provider becomes inaudible");
+ assert_true(ended, "HTMLAudioElement fires the ended event asynchronously when its MediaStream provider becomes inaudible");
+}, "Tests that an audio element with an assigned MediaStream ends when the MediaStream becomes inaudible through track removal");
</script>
</body>
</html>
diff --git a/tests/wpt/web-platform-tests/mixed-content/README.md b/tests/wpt/web-platform-tests/mixed-content/README.md
index 407b8960cbe..488432d41ea 100644
--- a/tests/wpt/web-platform-tests/mixed-content/README.md
+++ b/tests/wpt/web-platform-tests/mixed-content/README.md
@@ -1,4 +1,4 @@
-# Mixed-content Web Platform Tests
+# Mixed Content Test Suite
The subdirectory `gen/` is generated using the generator at `common/security-features`.
See [common/security-features/README.md](../common/security-features/README.md) for how to generate tests.
diff --git a/tests/wpt/web-platform-tests/mixed-content/generic/test-case.sub.js b/tests/wpt/web-platform-tests/mixed-content/generic/test-case.sub.js
index 9e9e169f15f..661cff12d00 100644
--- a/tests/wpt/web-platform-tests/mixed-content/generic/test-case.sub.js
+++ b/tests/wpt/web-platform-tests/mixed-content/generic/test-case.sub.js
@@ -1,5 +1,5 @@
/**
- * @fileoverview Test case for mixed-content in Web Platform Tests.
+ * @fileoverview Test case for mixed-content in web-platform-tests.
* @author burnik@google.com (Kristijan Burnik)
*/
diff --git a/tests/wpt/web-platform-tests/permissions/nfc-permission.html b/tests/wpt/web-platform-tests/permissions/nfc-permission.html
new file mode 100644
index 00000000000..eeec7251c1c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/permissions/nfc-permission.html
@@ -0,0 +1,14 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Test Web NFC Permission.</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<div id="log"></div>
+
+<script>
+ promise_test(function(test) {
+ return navigator.permissions.query({name:'nfc'}).then(function(result) {
+ assert_true(result instanceof PermissionStatus);
+ });
+ });
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/referrer-policy/README.md b/tests/wpt/web-platform-tests/referrer-policy/README.md
index ca9977c89ec..4d6eda97250 100644
--- a/tests/wpt/web-platform-tests/referrer-policy/README.md
+++ b/tests/wpt/web-platform-tests/referrer-policy/README.md
@@ -1,4 +1,4 @@
-# Referrer-Policy Web Platform Tests
+# Referrer Policy Test Suite
The Referrer-Policy tests are designed for testing browser implementations and conformance to the [W3 Referrer-Policy Specification](http://w3c.github.io/webappsec/specs/referrer-policy/).
diff --git a/tests/wpt/web-platform-tests/resources/chromium/contacts_manager_mock.js b/tests/wpt/web-platform-tests/resources/chromium/contacts_manager_mock.js
index 8e7c9eef38e..bbee65b0c9e 100644
--- a/tests/wpt/web-platform-tests/resources/chromium/contacts_manager_mock.js
+++ b/tests/wpt/web-platform-tests/resources/chromium/contacts_manager_mock.js
@@ -34,11 +34,11 @@ const WebContactsTest = (() => {
};
}
- async select(multiple, includeNames, includeEmails, includeTel, includeAddresses) {
+ async select(multiple, includeNames, includeEmails, includeTel, includeAddresses, includeIcons) {
if (this.selectedContacts_ === null)
return {contacts: null};
- const contactInfos = this.selectedContacts_.map(contact => {
+ const contactInfos = await Promise.all(this.selectedContacts_.map(async contact => {
const contactInfo = new blink.mojom.ContactInfo();
if (includeNames)
contactInfo.name = contact.name || [];
@@ -47,11 +47,17 @@ const WebContactsTest = (() => {
if (includeTel)
contactInfo.tel = contact.tel || [];
if (includeAddresses) {
- contactInfo.address = contact.address || [];
- contactInfo.address = contactInfo.address.map(address => this.formatAddress_(address));
+ contactInfo.address = (contact.address || []).map(address => this.formatAddress_(address));
+ }
+ if (includeIcons) {
+ contactInfo.icon = await Promise.all(
+ (contact.icon || []).map(async blob => ({
+ mimeType: blob.type,
+ data: (await blob.text()).split('').map(s => s.charCodeAt(0)),
+ })));
}
return contactInfo;
- });
+ }));
if (!contactInfos.length) return {contacts: []};
if (!multiple) return {contacts: [contactInfos[0]]};
diff --git a/tests/wpt/web-platform-tests/resources/chromium/nfc-mock.js b/tests/wpt/web-platform-tests/resources/chromium/nfc-mock.js
index aff72bbad02..ce22a9c2cfe 100644
--- a/tests/wpt/web-platform-tests/resources/chromium/nfc-mock.js
+++ b/tests/wpt/web-platform-tests/resources/chromium/nfc-mock.js
@@ -28,6 +28,10 @@ function toMojoNDEFRecord(record) {
nfcRecord.recordType = record.recordType;
nfcRecord.mediaType = record.mediaType;
nfcRecord.data = toByteArray(record.data);
+ if (record.data != null && record.data.records !== undefined) {
+ // |record.data| may be an NDEFMessageInit, i.e. the payload is a message.
+ nfcRecord.payloadMessage = toMojoNDEFMessage(record.data);
+ }
return nfcRecord;
}
@@ -100,8 +104,7 @@ function assertNDEFReaderOptionsEqual(provided, received) {
assert_equals(received.mediaType, '');
if (provided.recordType !== undefined) {
- assert_equals(!+received.record_filter, true);
- assert_equals(provided.recordType, received.recordFilter.recordType);
+ assert_equals(provided.recordType, received.recordType);
}
}
@@ -111,8 +114,8 @@ function matchesWatchOptions(message, options) {
if (!matchesWebNfcId(message.url, options.url)) return false;
// Matches any record / media type.
- if ((options.mediaType == null || options.mediaType === "")
- && options.recordFilter == null) {
+ if ((options.mediaType == null || options.mediaType === '') &&
+ options.recordType == null) {
return true;
}
@@ -122,8 +125,8 @@ function matchesWatchOptions(message, options) {
&& options.mediaType !== record.mediaType) {
return false;
}
- if (options.recordFilter != null &&
- options.recordFilter.recordType !== record.recordType) {
+ if (options.recordType != null &&
+ options.recordType !== record.recordType) {
return false;
}
}
diff --git a/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js b/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js
index d87b3420a85..653dcac79f8 100644
--- a/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js
+++ b/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js
@@ -144,9 +144,20 @@ class MockVRService {
// Find and return the first successful result.
for (let i = 0; i < results.length; i++) {
if (results[i].session) {
+ // Construct a dummy metrics recorder
+ let metricsRecorderPtr = new device.mojom.XRSessionMetricsRecorderPtr();
+ let metricsRecorderRequest = mojo.makeRequest(metricsRecorderPtr);
+ let metricsRecorderBinding = new mojo.Binding(
+ device.mojom.XRSessionMetricsRecorder, new MockXRSessionMetricsRecorder(), metricsRecorderRequest);
+
+ let success = {
+ session: results[i].session,
+ metricsRecorder: metricsRecorderPtr,
+ };
+
return {
result: {
- session : results[i].session,
+ success : success,
$tag : 0
}
};
@@ -163,6 +174,10 @@ class MockVRService {
});
}
+ exitPresent() {
+ return Promise.resolve();
+ }
+
supportsSession(sessionOptions) {
let requests = [];
// Check supports on all the runtimes.
@@ -624,6 +639,12 @@ class MockRuntime {
};
}
+class MockXRSessionMetricsRecorder {
+ reportFeatureUsed(feature) {
+ // Do nothing
+ }
+}
+
class MockXRInputSource {
constructor(fakeInputSourceInit, id, pairedDevice) {
this.source_id_ = id;
diff --git a/tests/wpt/web-platform-tests/resources/test/tests/functional/api-tests-1.html b/tests/wpt/web-platform-tests/resources/test/tests/functional/api-tests-1.html
index 02009f856f6..e4246e7faba 100644
--- a/tests/wpt/web-platform-tests/resources/test/tests/functional/api-tests-1.html
+++ b/tests/wpt/web-platform-tests/resources/test/tests/functional/api-tests-1.html
@@ -28,6 +28,24 @@
}
on_event(window, "load", windowLoad);
+ test(function() {
+ var sequence = [];
+ var outer = document.createElement("div");
+ var inner = document.createElement("div");
+ outer.appendChild(inner);
+ document.body.appendChild(outer);
+ inner.addEventListener("click", function() {
+ sequence.push("inner");
+ }, false);
+
+ on_event(outer, "click", function() {
+ sequence.push("outer");
+ });
+ inner.click();
+
+ assert_array_equals(sequence, ["inner", "outer"]);
+ }, "on_event does not use event capture");
+
// see the body onload below
var load_test_attr = async_test("body element fires the onload event set from the attribute");
</script>
@@ -432,6 +450,12 @@
"name": "window onload event fires when set from the handler",
"message": null,
"properties": {}
+ },
+ {
+ "status_string": "PASS",
+ "name": "on_event does not use event capture",
+ "message": null,
+ "properties": {}
}
],
"type": "complete"
diff --git a/tests/wpt/web-platform-tests/resources/test/tests/functional/single-page-test-fail.html b/tests/wpt/web-platform-tests/resources/test/tests/functional/single-page-test-fail.html
index 5826a2ef15c..9169a5a54e2 100644
--- a/tests/wpt/web-platform-tests/resources/test/tests/functional/single-page-test-fail.html
+++ b/tests/wpt/web-platform-tests/resources/test/tests/functional/single-page-test-fail.html
@@ -6,6 +6,7 @@
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
+setup({ single_test: true });
onload = function() {
assert_true(false);
done();
diff --git a/tests/wpt/web-platform-tests/resources/test/tests/functional/single-page-test-no-assertions.html b/tests/wpt/web-platform-tests/resources/test/tests/functional/single-page-test-no-assertions.html
index f3140dd492c..f1b18923de4 100644
--- a/tests/wpt/web-platform-tests/resources/test/tests/functional/single-page-test-no-assertions.html
+++ b/tests/wpt/web-platform-tests/resources/test/tests/functional/single-page-test-no-assertions.html
@@ -6,6 +6,7 @@
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
+setup({ single_test: true });
done();
</script>
<script type="text/json" id="expected">
diff --git a/tests/wpt/web-platform-tests/resources/test/tests/functional/single-page-test-no-body.html b/tests/wpt/web-platform-tests/resources/test/tests/functional/single-page-test-no-body.html
index 82f3e18a44c..0f3d4adf44b 100644
--- a/tests/wpt/web-platform-tests/resources/test/tests/functional/single-page-test-no-body.html
+++ b/tests/wpt/web-platform-tests/resources/test/tests/functional/single-page-test-no-body.html
@@ -6,6 +6,7 @@
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
+setup({ single_test: true });
assert_true(true);
done();
</script>
diff --git a/tests/wpt/web-platform-tests/resources/test/tests/functional/single-page-test-pass.html b/tests/wpt/web-platform-tests/resources/test/tests/functional/single-page-test-pass.html
index 9d5f776d541..e47250d763c 100644
--- a/tests/wpt/web-platform-tests/resources/test/tests/functional/single-page-test-pass.html
+++ b/tests/wpt/web-platform-tests/resources/test/tests/functional/single-page-test-pass.html
@@ -6,6 +6,7 @@
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
+setup({ single_test: true });
onload = function() {
assert_true(true);
done();
diff --git a/tests/wpt/web-platform-tests/resources/test/tests/functional/worker-uncaught-single.js b/tests/wpt/web-platform-tests/resources/test/tests/functional/worker-uncaught-single.js
index d7f00382c0b..c04542b2f57 100644
--- a/tests/wpt/web-platform-tests/resources/test/tests/functional/worker-uncaught-single.js
+++ b/tests/wpt/web-platform-tests/resources/test/tests/functional/worker-uncaught-single.js
@@ -1,6 +1,8 @@
importScripts("/resources/testharness.js");
-// Because this script does not define any sub-tests, it should be interpreted
-// as a single-page test, and the uncaught exception should be reported as a
-// test failure (harness status: OK).
+setup({ single_test: true });
+
+// Because this script enables the `single_test` configuration option, it
+// should be interpreted as a single-page test, and the uncaught exception
+// should be reported as a test failure (harness status: OK).
throw new Error("This failure is expected.");
diff --git a/tests/wpt/web-platform-tests/resources/test/tests/unit/exceptional-cases.html b/tests/wpt/web-platform-tests/resources/test/tests/unit/exceptional-cases.html
index 236970cbea9..2be4dacaaec 100644
--- a/tests/wpt/web-platform-tests/resources/test/tests/unit/exceptional-cases.html
+++ b/tests/wpt/web-platform-tests/resources/test/tests/unit/exceptional-cases.html
@@ -70,12 +70,39 @@ function getEnumProp(object, value) {
promise_test(() => {
return makeTest(
+ () => { done(); }
+ ).then(({harness, tests}) => {
+ assert_equals(harness, 'ERROR');
+ assert_array_equals(Object.keys(tests), []);
+ });
+}, 'completion signaled before testing begins');
+
+promise_test(() => {
+ return makeTest(
+ () => { assert_true(true); done(); }
+ ).then(({harness, tests}) => {
+ assert_equals(harness, 'ERROR');
+ assert_array_equals(Object.keys(tests), []);
+ });
+}, 'passing assertion before testing begins');
+
+promise_test(() => {
+ return makeTest(
+ () => { assert_false(true); }
+ ).then(({harness, tests}) => {
+ assert_equals(harness, 'ERROR');
+ assert_array_equals(Object.keys(tests), []);
+ });
+}, 'failing assertion before testing begins');
+
+promise_test(() => {
+ return makeTest(
() => { throw new Error('this error is expected'); }
).then(({harness, tests}) => {
- assert_equals(harness, 'OK');
- assert_equals(tests['Document title'], 'FAIL');
+ assert_equals(harness, 'ERROR');
+ assert_array_equals(Object.keys(tests), []);
});
-}, 'uncaught exception during single-page test');
+}, 'uncaught exception before testing begins');
promise_test(() => {
return makeTest(
@@ -165,10 +192,10 @@ if ('onunhandledrejection' in window) {
return makeTest(
() => { Promise.reject(new Error('this error is expected')); }
).then(({harness, tests}) => {
- assert_equals(harness, 'OK');
- assert_equals(tests['Document title'], 'FAIL');
+ assert_equals(harness, 'ERROR');
+ assert_array_equals(Object.keys(tests), []);
});
- }, 'unhandled rejection during single-page test');
+ }, 'unhandled rejection before testing begins');
promise_test(() => {
return makeTest(
diff --git a/tests/wpt/web-platform-tests/resources/testdriver.js b/tests/wpt/web-platform-tests/resources/testdriver.js
index 031be1b7e55..bd38e3e006a 100644
--- a/tests/wpt/web-platform-tests/resources/testdriver.js
+++ b/tests/wpt/web-platform-tests/resources/testdriver.js
@@ -208,7 +208,126 @@
*/
generate_test_report: function(message) {
return window.test_driver_internal.generate_test_report(message);
- }
+ },
+
+ /**
+ * Creates a virtual authenticator
+ *
+ * This function creates a virtual authenticator for use with the U2F
+ * and WebAuthn APIs as described in {@link
+ * https://w3c.github.io/webauthn/#sctn-automation-add-virtual-authenticator}
+ *
+ * @param {Object} config - an [Authenticator Configuration]{@link
+ * https://w3c.github.io/webauthn/#authenticator-configuration}
+ * object
+ * @returns {Promise} fulfilled after the authenticator is added, or
+ * rejected in the cases the WebDriver command
+ * errors. Returns the ID of the authenticator
+ */
+ add_virtual_authenticator: function(config) {
+ return window.test_driver_internal.add_virtual_authenticator(config);
+ },
+
+ /**
+ * Removes a virtual authenticator
+ *
+ * This function removes a virtual authenticator that has been created
+ * by add_virtual_authenticator
+ * https://w3c.github.io/webauthn/#sctn-automation-remove-virtual-authenticator
+ *
+ * @param {String} authenticator_id - the ID of the authenticator to be
+ * removed.
+ *
+ * @returns {Promise} fulfilled after the authenticator is removed, or
+ * rejected in the cases the WebDriver command
+ * errors
+ */
+ remove_virtual_authenticator: function(authenticator_id) {
+ return window.test_driver_internal.remove_virtual_authenticator(authenticator_id);
+ },
+
+ /**
+ * Adds a credential to a virtual authenticator
+ *
+ * https://w3c.github.io/webauthn/#sctn-automation-add-credential
+ *
+ * @param {String} authenticator_id - the ID of the authenticator
+ * @param {Object} credential - A [Credential Parameters]{@link
+ * https://w3c.github.io/webauthn/#credential-parameters}
+ * object
+ *
+ * @returns {Promise} fulfilled after the credential is added, or
+ * rejected in the cases the WebDriver command
+ * errors
+ */
+ add_credential: function(authenticator_id, credential) {
+ return window.test_driver_internal.add_credential(authenticator_id, credential);
+ },
+
+ /**
+ * Gets all the credentials stored in an authenticator
+ *
+ * This function retrieves all the credentials (added via the U2F API,
+ * WebAuthn, or the add_credential function) stored in a virtual
+ * authenticator
+ * https://w3c.github.io/webauthn/#sctn-automation-get-credentials
+ *
+ * @param {String} authenticator_id - the ID of the authenticator
+ *
+ * @returns {Promise} fulfilled after the credentials are returned, or
+ * rejected in the cases the WebDriver command
+ * errors. Returns an array of [Credential
+ * Parameters]{@link
+ * https://w3c.github.io/webauthn/#credential-parameters}
+ */
+ get_credentials: function(authenticator_id) {
+ return window.test_driver_internal.get_credentials(authenticator_id);
+ },
+
+ /**
+ * Remove a credential stored in an authenticator
+ *
+ * https://w3c.github.io/webauthn/#sctn-automation-remove-credential
+ *
+ * @param {String} authenticator_id - the ID of the authenticator
+ * @param {String} credential_id - the ID of the credential
+ *
+ * @returns {Promise} fulfilled after the credential is removed, or
+ * rejected in the cases the WebDriver command
+ * errors.
+ */
+ remove_credential: function(authenticator_id, credential_id) {
+ return window.test_driver_internal.remove_credential(authenticator_id, credential_id);
+ },
+
+ /**
+ * Removes all the credentials stored in a virtual authenticator
+ *
+ * https://w3c.github.io/webauthn/#sctn-automation-remove-all-credentials
+ *
+ * @param {String} authenticator_id - the ID of the authenticator
+ *
+ * @returns {Promise} fulfilled after the credentials are removed, or
+ * rejected in the cases the WebDriver command
+ * errors.
+ */
+ remove_all_credentials: function(authenticator_id) {
+ return window.test_driver_internal.remove_all_credentials(authenticator_id);
+ },
+
+ /**
+ * Sets the User Verified flag on an authenticator
+ *
+ * Sets whether requests requiring user verification will succeed or
+ * fail on a given virtual authenticator
+ * https://w3c.github.io/webauthn/#sctn-automation-set-user-verified
+ *
+ * @param {String} authenticator_id - the ID of the authenticator
+ * @param {boolean} uv - the User Verified flag
+ */
+ set_user_verified: function(authenticator_id, uv) {
+ return window.test_driver_internal.set_user_verified(authenticator_id, uv);
+ },
};
window.test_driver_internal = {
@@ -306,6 +425,105 @@
*/
generate_test_report: function(message) {
return Promise.reject(new Error("unimplemented"));
- }
+ },
+
+ /**
+ * Creates a virtual authenticator
+ *
+ * @param {Object} config - the authenticator configuration
+ * @returns {Promise} fulfilled after the authenticator is added, or
+ * rejected in the cases the WebDriver command
+ * errors.
+ */
+ add_virtual_authenticator: function(config) {
+ return Promise.reject(new Error("unimplemented"));
+ },
+
+ /**
+ * Removes a virtual authenticator
+ *
+ * @param {String} authenticator_id - the ID of the authenticator to be
+ * removed.
+ *
+ * @returns {Promise} fulfilled after the authenticator is removed, or
+ * rejected in the cases the WebDriver command
+ * errors
+ */
+ remove_virtual_authenticator: function(authenticator_id) {
+ return Promise.reject(new Error("unimplemented"));
+ },
+
+ /**
+ * Adds a credential to a virtual authenticator
+ *
+ * @param {String} authenticator_id - the ID of the authenticator
+ * @param {Object} credential - A [Credential Parameters]{@link
+ * https://w3c.github.io/webauthn/#credential-parameters}
+ * object
+ *
+ * @returns {Promise} fulfilled after the credential is added, or
+ * rejected in the cases the WebDriver command
+ * errors
+ *
+ */
+ add_credential: function(authenticator_id, credential) {
+ return Promise.reject(new Error("unimplemented"));
+ },
+
+ /**
+ * Gets all the credentials stored in an authenticator
+ *
+ * @param {String} authenticator_id - the ID of the authenticator
+ *
+ * @returns {Promise} fulfilled after the credentials are returned, or
+ * rejected in the cases the WebDriver command
+ * errors. Returns an array of [Credential
+ * Parameters]{@link
+ * https://w3c.github.io/webauthn/#credential-parameters}
+ *
+ */
+ get_credentials: function(authenticator_id) {
+ return Promise.reject(new Error("unimplemented"));
+ },
+
+ /**
+ * Remove a credential stored in an authenticator
+ *
+ * @param {String} authenticator_id - the ID of the authenticator
+ * @param {String} credential_id - the ID of the credential
+ *
+ * @returns {Promise} fulfilled after the credential is removed, or
+ * rejected in the cases the WebDriver command
+ * errors.
+ *
+ */
+ remove_credential: function(authenticator_id, credential_id) {
+ return Promise.reject(new Error("unimplemented"));
+ },
+
+ /**
+ * Removes all the credentials stored in a virtual authenticator
+ *
+ * @param {String} authenticator_id - the ID of the authenticator
+ *
+ * @returns {Promise} fulfilled after the credentials are removed, or
+ * rejected in the cases the WebDriver command
+ * errors.
+ *
+ */
+ remove_all_credentials: function(authenticator_id) {
+ return Promise.reject(new Error("unimplemented"));
+ },
+
+ /**
+ * Sets the User Verified flag on an authenticator
+ *
+ * @param {String} authenticator_id - the ID of the authenticator
+ * @param {boolean} uv - the User Verified flag
+ *
+ */
+ set_user_verified: function(authenticator_id, uv) {
+ return Promise.reject(new Error("unimplemented"));
+ },
};
})();
diff --git a/tests/wpt/web-platform-tests/resources/testharness.js b/tests/wpt/web-platform-tests/resources/testharness.js
index a44185c1eaf..93809664ea3 100644
--- a/tests/wpt/web-platform-tests/resources/testharness.js
+++ b/tests/wpt/web-platform-tests/resources/testharness.js
@@ -792,7 +792,16 @@ policies and contribution forms [3].
function done() {
if (tests.tests.length === 0) {
- tests.set_file_is_test();
+ // `done` is invoked after handling uncaught exceptions, so if the
+ // harness status is already set, the corresponding message is more
+ // descriptive than the generic message defined here.
+ if (tests.status.status === null) {
+ tests.status.status = tests.status.ERROR;
+ tests.status.message = "done() was called without first defining any tests";
+ }
+
+ tests.complete();
+ return;
}
if (tests.file_is_test) {
// file is test files never have asynchronous cleanup logic,
@@ -815,6 +824,12 @@ policies and contribution forms [3].
});
}
+ /*
+ * Register a function as a DOM event listener to the given object for the
+ * event bubbling phase.
+ *
+ * This function was deprecated in November of 2019.
+ */
function on_event(object, event, callback)
{
object.addEventListener(event, callback, false);
@@ -1806,6 +1821,13 @@ policies and contribution forms [3].
}
expose(assert_any, "assert_any");
+ function assert_precondition(precondition, description) {
+ if (!precondition) {
+ throw new PreconditionFailedError(description);
+ }
+ }
+ expose(assert_precondition, "assert_precondition");
+
function Test(name, properties)
{
if (tests.file_is_test && tests.tests.length) {
@@ -1850,7 +1872,8 @@ policies and contribution forms [3].
PASS:0,
FAIL:1,
TIMEOUT:2,
- NOTRUN:3
+ NOTRUN:3,
+ PRECONDITION_FAILED:4
};
Test.prototype = merge({}, Test.statuses);
@@ -1910,10 +1933,11 @@ policies and contribution forms [3].
if (this.phase >= this.phases.HAS_RESULT) {
return;
}
+ var status = e instanceof PreconditionFailedError ? this.PRECONDITION_FAILED : this.FAIL;
var message = String((typeof e === "object" && e !== null) ? e.message : e);
var stack = e.stack ? e.stack : null;
- this.set_status(this.FAIL, message, stack);
+ this.set_status(status, message, stack);
this.phase = this.phases.HAS_RESULT;
this.done();
}
@@ -2384,7 +2408,8 @@ policies and contribution forms [3].
TestsStatus.statuses = {
OK:0,
ERROR:1,
- TIMEOUT:2
+ TIMEOUT:2,
+ PRECONDITION_FAILED:3
};
TestsStatus.prototype = merge({}, TestsStatus.statuses);
@@ -2490,7 +2515,7 @@ policies and contribution forms [3].
try {
func();
} catch (e) {
- this.status.status = this.status.ERROR;
+ this.status.status = e instanceof PreconditionFailedError ? this.status.PRECONDITION_FAILED : this.status.ERROR;
this.status.message = String(e);
this.status.stack = e.stack ? e.stack : null;
this.complete();
@@ -3048,12 +3073,14 @@ policies and contribution forms [3].
status_text_harness[harness_status.OK] = "OK";
status_text_harness[harness_status.ERROR] = "Error";
status_text_harness[harness_status.TIMEOUT] = "Timeout";
+ status_text_harness[harness_status.PRECONDITION_FAILED] = "Precondition Failed";
var status_text = {};
status_text[Test.prototype.PASS] = "Pass";
status_text[Test.prototype.FAIL] = "Fail";
status_text[Test.prototype.TIMEOUT] = "Timeout";
status_text[Test.prototype.NOTRUN] = "Not Run";
+ status_text[Test.prototype.PRECONDITION_FAILED] = "Precondition Failed";
var status_number = {};
forEach(tests,
@@ -3373,9 +3400,6 @@ policies and contribution forms [3].
*/
function assert(expected_true, function_name, description, error, substitutions)
{
- if (tests.tests.length === 0) {
- tests.set_file_is_test();
- }
if (expected_true !== true) {
var msg = make_message(function_name, description,
error, substitutions);
@@ -3438,6 +3462,13 @@ policies and contribution forms [3].
return lines.slice(i).join("\n");
}
+ function PreconditionFailedError(message)
+ {
+ AssertionError.call(this, message);
+ }
+ PreconditionFailedError.prototype = Object.create(AssertionError.prototype);
+ expose(PreconditionFailedError, "PreconditionFailedError");
+
function make_message(function_name, description, error, substitutions)
{
for (var p in substitutions) {
@@ -3665,20 +3696,19 @@ policies and contribution forms [3].
var tests = new Tests();
if (global_scope.addEventListener) {
- var error_handler = function(message, stack) {
- if (tests.tests.length === 0 && !tests.allow_uncaught_exception) {
- tests.set_file_is_test();
- }
-
+ var error_handler = function(error, message, stack) {
+ var precondition_failed = error instanceof PreconditionFailedError;
if (tests.file_is_test) {
var test = tests.tests[0];
if (test.phase >= test.phases.HAS_RESULT) {
return;
}
- test.set_status(test.FAIL, message, stack);
+ var status = precondition_failed ? test.PRECONDITION_FAILED : test.FAIL;
+ test.set_status(status, message, stack);
test.phase = test.phases.HAS_RESULT;
} else if (!tests.allow_uncaught_exception) {
- tests.status.status = tests.status.ERROR;
+ var status = precondition_failed ? tests.status.PRECONDITION_FAILED : tests.status.ERROR;
+ tests.status.status = status;
tests.status.message = message;
tests.status.stack = stack;
}
@@ -3700,19 +3730,21 @@ policies and contribution forms [3].
} else {
stack = e.filename + ":" + e.lineno + ":" + e.colno;
}
- error_handler(message, stack);
+ error_handler(e.error, message, stack);
}, false);
addEventListener("unhandledrejection", function(e) {
- var reason;
- if (e.reason) {
- reason = e.reason.message ? e.reason.message : e.reason;
+ var message;
+ if (e.reason && e.reason.message) {
+ message = "Unhandled rejection: " + e.reason.message;
} else {
- reason = e;
+ message = "Unhandled rejection";
+ }
+ var stack;
+ if (e.reason && e.reason.stack) {
+ stack = e.reason.stack;
}
- var message = "Unhandled rejection: " + reason;
- // There's no stack for unhandled rejections.
- error_handler(message);
+ error_handler(e.reason, message, stack);
}, false);
}
@@ -3750,7 +3782,7 @@ table#results {\
\
table#results th:first-child,\
table#results td:first-child {\
- width:4em;\
+ width:8em;\
}\
\
table#results th:last-child,\
@@ -3791,7 +3823,11 @@ tr.notrun > td:first-child {\
color:blue;\
}\
\
-.pass > td:first-child, .fail > td:first-child, .timeout > td:first-child, .notrun > td:first-child {\
+tr.preconditionfailed > td:first-child {\
+ color:blue;\
+}\
+\
+.pass > td:first-child, .fail > td:first-child, .timeout > td:first-child, .notrun > td:first-child, .preconditionfailed > td:first-child {\
font-variant:small-caps;\
}\
\
diff --git a/tests/wpt/web-platform-tests/screen_enumeration/getScreens.tentative.https.any.js b/tests/wpt/web-platform-tests/screen_enumeration/getScreens.tentative.https.any.js
new file mode 100644
index 00000000000..0b8c226ddbd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/screen_enumeration/getScreens.tentative.https.any.js
@@ -0,0 +1,30 @@
+// META: global=window,dedicatedworker,sharedworker,serviceworker
+'use strict';
+
+promise_test(async testCase => {
+ assert_class_string(navigator.screen, 'ScreenManager');
+ assert_equals(typeof navigator.screen.getScreens, 'function');
+}, 'navigator.screen.getScreens is present');
+
+promise_test(async testCase => {
+ const screens = await navigator.screen.getScreens();
+ assert_greater_than(screens.length, 0);
+
+ assert_equals(typeof screens[0].availWidth, 'number');
+ assert_equals(typeof screens[0].availHeight, 'number');
+ assert_equals(typeof screens[0].width, 'number');
+ assert_equals(typeof screens[0].height, 'number');
+ assert_equals(typeof screens[0].colorDepth, 'number');
+ assert_equals(typeof screens[0].pixelDepth, 'number');
+
+ assert_equals(typeof screens[0].availLeft, 'number');
+ assert_equals(typeof screens[0].availTop, 'number');
+ assert_equals(typeof screens[0].left, 'number');
+ assert_equals(typeof screens[0].top, 'number');
+ assert_equals(typeof screens[0].orientation, 'object');
+
+ assert_equals(typeof screens[0].primary, 'boolean');
+ assert_equals(typeof screens[0].internal, 'boolean');
+ assert_equals(typeof screens[0].scaleFactor, 'number');
+ assert_equals(typeof screens[0].name, 'string');
+}, 'navigator.screen.getScreens returns at least 1 Screen'); \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/screen_enumeration/requestDisplays.tentative.https.any.js b/tests/wpt/web-platform-tests/screen_enumeration/requestDisplays.tentative.https.any.js
deleted file mode 100644
index e2a5bc427de..00000000000
--- a/tests/wpt/web-platform-tests/screen_enumeration/requestDisplays.tentative.https.any.js
+++ /dev/null
@@ -1,21 +0,0 @@
-// META: global=window,dedicatedworker,sharedworker,serviceworker
-'use strict';
-
-promise_test(async testCase => {
- assert_class_string(navigator.screen, 'ScreenManager');
- assert_equals(typeof navigator.screen.requestDisplays, 'function');
-}, 'navigator.screen.requestDisplays is present');
-
-promise_test(async testCase => {
- const displays = await navigator.screen.requestDisplays();
- assert_greater_than(displays.length, 0);
- assert_equals(typeof displays[0].name, 'string');
- assert_equals(typeof displays[0].scaleFactor, 'number');
- assert_equals(typeof displays[0].width, 'number');
- assert_equals(typeof displays[0].height, 'number');
- assert_equals(typeof displays[0].left, 'number');
- assert_equals(typeof displays[0].top, 'number');
- assert_equals(typeof displays[0].colorDepth, 'number');
- assert_equals(typeof displays[0].isPrimary, 'boolean');
- assert_equals(typeof displays[0].isInternal, 'boolean');
-}, 'navigator.screen.requestDisplays returns at least 1 Display'); \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment-api.html b/tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment-api.html
new file mode 100644
index 00000000000..8b1dea6f331
--- /dev/null
+++ b/tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment-api.html
@@ -0,0 +1,32 @@
+<!doctype html>
+<title>Fragment directive API</title>
+<meta charset=utf-8>
+<link rel="help" href="https://wicg.github.io/ScrollToTextFragment/">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script>
+test(t => {
+ assert_equals(typeof(window.location.fragmentDirective), 'object', 'window.location.fragmentDirective is defined');
+}, 'Scroll to text is feature detectable via window.location.fragmentDirective');
+
+test(t =>{
+ window.location.fragmentDirective = 'text=test';
+ assert_equals(window.scrollY, 0, 'Setting window.location.fragmentDirective did not have an effect on scroll position');
+ assert_equals(typeof(window.location.fragmentDirective), 'object', 'window.location.fragmentDirective is still an object type');
+ assert_equals(Object.keys(window.location.fragmentDirective).length, 0, 'window.location.fragmentDirective has no properties');
+}, 'Setting window.location.fragmentDirective has no effect');
+</script>
+<style>
+ body {
+ height: 3200px;
+ }
+ #text {
+ position: absolute;
+ top: 3000px;
+ }
+</style>
+<body>
+ <p id="text">This is a test page</p>
+</body>
diff --git a/tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment-same-doc.html b/tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment-same-doc.html
new file mode 100644
index 00000000000..3bfd45382e5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment-same-doc.html
@@ -0,0 +1,57 @@
+<!doctype html>
+<title>Navigating to a same-document text fragment directive</title>
+<meta charset=utf-8>
+<link rel="help" href="https://wicg.github.io/ScrollToTextFragment/">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script>
+function isInView(element) {
+ let rect = element.getBoundingClientRect();
+ return rect.top >= 0 && rect.top <= window.innerHeight;
+}
+
+function checkScroll(resolve) {
+ let position = 'unknown';
+ if (window.scrollY == 0)
+ position = 'top';
+ else if (isInView(document.getElementById('text')))
+ position = 'text';
+
+ resolve(position);
+}
+
+function runTest() {
+ promise_test(t => new Promise(resolve => {
+ window.location.href = "#:~:text=test";
+ requestAnimationFrame(function() {
+ checkScroll(resolve);
+ });
+ }).then(position => {
+ assert_equals(position, 'top');
+ assert_equals(window.location.href.indexOf(':~:'), -1, 'Expected fragment directive to be stripped from the URL.');
+ }), 'Test that a text fragment directive cannot be activated on a same-document navigation');
+
+ promise_test(t => new Promise(resolve => {
+ window.location.href = "#text";
+ requestAnimationFrame(function() {
+ checkScroll(resolve);
+ });
+ }).then(position => {
+ assert_equals(position, 'text');
+ }), 'Sanity check that the text element can be navigated by element ID');
+}
+</script>
+<style>
+ body {
+ height: 3200px;
+ }
+ #text {
+ position: absolute;
+ top: 3000px;
+ }
+</style>
+<body onload="runTest()">
+ <p id="text">This is a test page</p>
+</body>
diff --git a/tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment-target.html b/tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment-target.html
index bc513126ae6..1ef9dbba519 100644
--- a/tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment-target.html
+++ b/tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment-target.html
@@ -2,40 +2,67 @@
<title>Navigating to a text fragment anchor</title>
<script>
function isInView(element) {
- return (element.offsetTop >= window.scrollY) &&
- (element.offsetTop <= (window.scrollY + window.innerHeight));
+ let rect = element.getBoundingClientRect();
+ return rect.top >= 0 && rect.top <= window.innerHeight;
}
function checkScroll() {
let bc = new BroadcastChannel('scroll-to-text-fragment');
- var position = 'unknown';
+ let position = 'unknown';
if (window.scrollY == 0)
position = 'top';
else if (isInView(document.getElementById('element')))
position = 'element';
else if (isInView(document.getElementById('text')))
position = 'text';
+ else if (isInView(document.getElementById('more-text')))
+ position = 'more-text';
+ else if (isInView(document.getElementById('cross-node-context')))
+ position = 'cross-node-context';
+ else if (isInView(document.getElementById('text-directive-parameters')))
+ position = 'text-directive-parameters';
- bc.postMessage({ scrollPosition: position });
+ bc.postMessage({ scrollPosition: position, href: window.location.href });
bc.close();
window.close();
}
</script>
<style>
body {
- height: 3200px;
+ height: 6200px;
}
- p {
+ #element {
+ position: absolute;
+ top: 2000px;
+ }
+ #text {
position: absolute;
top: 3000px;
}
- #element {
+ #more-text {
position: absolute;
- top: 2000px;
+ top: 4000px;
+ }
+ #cross-node-context {
+ position: absolute;
+ top: 5000px;
+ }
+ #text-directive-parameters {
+ position: absolute;
+ top: 6000px;
}
</style>
<body onload="window.requestAnimationFrame(checkScroll)">
<div id="element">Element</div>
- <p id="text">This is a test page</p>
+ <p id="text">This is a test page !$'()*+./:;=?@_~ &,- &#x2665;</p>
+ <p id="more-text">More test page text</p>
+ <div id="cross-node-context">
+ <div>
+ <p>prefix</p>
+ <p>test page</p>
+ </div>
+ <div><p>suffix</p></div>
+ </div>
+ <p id="text-directive-parameters">this,is,test,page</p>
</body>
diff --git a/tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment.html b/tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment.html
index e05210f1ea0..b3a35f489ac 100644
--- a/tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment.html
+++ b/tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment.html
@@ -1,5 +1,7 @@
<!doctype html>
-<title>Navigating to a text fragment anchor</title>
+<title>Navigating to a text fragment directive</title>
+<meta charset=utf-8>
+<link rel="help" href="https://wicg.github.io/ScrollToTextFragment/">
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
@@ -7,39 +9,245 @@
<script src="/resources/testdriver-vendor.js"></script>
<script>
let test_cases = [
- { fragment: '#', expect_position: 'top' },
- { fragment: '#:~:text=test', expect_position: 'text' },
- { fragment: '#:~:text=this,page', expect_position: 'text' },
- { fragment: '#:~:text=this-,is,test', expect_position: 'text' },
- { fragment: '#:~:text=this-,is,test,-page', expect_position: 'text' },
- { fragment: '#:~:text=this-,is,page,-none', expect_position: 'top' },
- { fragment: '#:~:text=this,test,-page', expect_position: 'text' },
- { fragment: '#:~:text=this%20is%20a%20test%20page', expect_position: 'text' },
- { fragment: '#:~:text=this&text=test,page', expect_position: 'text' },
- { fragment: '#:~:text=tes&text=age', expect_position: 'top' },
- { fragment: '#pagestate:~:text=test', expect_position: 'text' },
- { fragment: '#pagestate:~:text=nomatch', expect_position: 'top' },
- { fragment: '#element:~:text=nomatch', expect_position: 'element' },
- { fragment: '#element:~:directive', expect_position: 'element' },
+ // Test non-text fragment directives
+ {
+ fragment: '#',
+ expect_position: 'top',
+ description: 'Empty hash'
+ },
+ {
+ fragment: '#:~:text=this,is,test,page',
+ expect_position: 'top',
+ description: 'Text directive with invalid syntax, context terms without "-"'
+ },
+ {
+ fragment: '#element:~:directive',
+ expect_position: 'element',
+ description: 'Generic fragment directive with existing element fragment'
+ },
+ // Test exact text matching, with all combinations of context terms
+ {
+ fragment: '#:~:text=test',
+ expect_position: 'text',
+ description: 'Exact text with no context'
+ },
+ {
+ fragment: '#:~:text=this is a-,test',
+ expect_position: 'text',
+ description: 'Exact text with prefix'
+ },
+ {
+ fragment: '#:~:text=test,-page',
+ expect_position: 'text',
+ description: 'Exact text with suffix'
+ },
+ {
+ fragment: '#:~:text=this is a-,test,-page',
+ expect_position: 'text',
+ description: 'Exact text with prefix and suffix'
+ },
+ // Test text range matching, with all combinations of context terms
+ {
+ fragment: '#:~:text=this,page',
+ expect_position: 'text',
+ description: 'Text range with no context'
+ },
+ {
+ fragment: '#:~:text=this-,is,test',
+ expect_position: 'text',
+ description: 'Text range with prefix'
+ },
+ {
+ fragment: '#:~:text=this,test,-page',
+ expect_position: 'text',
+ description: 'Text range with suffix'
+ },
+ {
+ fragment: '#:~:text=this-,is,test,-page',
+ expect_position: 'text',
+ description: 'Text range with prefix and suffix'
+ },
+ // Test partially non-matching text ranges
+ {
+ fragment: '#:~:text=this,none',
+ expect_position: 'top',
+ description: 'Text range with non-matching endText'
+ },
+ {
+ fragment: '#:~:text=none,page',
+ expect_position: 'top',
+ description: 'Text range with non-matching startText'
+ },
+ // Test non-matching context terms
+ {
+ fragment: '#:~:text=this-,is,page,-none',
+ expect_position: 'top',
+ description: 'Text range with prefix and nonmatching suffix'
+ },
+ {
+ fragment: '#:~:text=none-,this,test,-page',
+ expect_position: 'top',
+ description: 'Text range with nonmatching prefix and matching suffix'
+ },
+ // Test percent encoded characters
+ {
+ fragment: '#:~:text=this%20is%20a%20test%20page',
+ expect_position: 'text',
+ description: 'Exact text with percent encoded spaces'
+ },
+ {
+ fragment: '#:~:text=test%20pag',
+ expect_position: 'top',
+ description: 'Non-whole-word exact text with spaces'
+ },
+ {
+ fragment: '#:~:text=%26%2C%2D',
+ expect_position: 'text',
+ description: 'Fragment directive with percent encoded syntactical characters "&,-"'
+ },
+ {
+ fragment: '#:~:text=%2665',
+ expect_position: 'text',
+ description: 'Fragment directive with percent encoded non-ASCII unicode character'
+ },
+ {
+ fragment: '#:~:text=!$\'()*+./:;=?@_~',
+ expect_position: 'text',
+ description: 'Fragment directive with all TextMatchChars'
+ },
+ // Test multiple text directives
+ {
+ fragment: '#:~:text=this&text=test,page',
+ expect_position: 'text',
+ description: 'Multiple matching exact texts'
+ },
+ {
+ fragment: '#:~:text=tes&text=age',
+ expect_position: 'top',
+ description: 'Multiple non-whole-word exact texts'
+ },
+ // Test text directive behavior when there's an element fragment identifier
+ {
+ fragment: '#element:~:text=test',
+ expect_position: 'text',
+ description: 'Text directive with existing element fragment'
+ },
+ {
+ fragment: '#pagestate:~:text=test',
+ expect_position: 'text',
+ description: 'Text directive with nonexistent element fragment'
+ },
+ {
+ fragment: '#element:~:text=nomatch',
+ expect_position: 'element',
+ description: 'Non-matching text directive with existing element fragment'
+ },
+ {
+ fragment: '#pagestate:~:text=nomatch',
+ expect_position: 'top',
+ description: 'Non-matching text directive with nonexistent element fragment'
+ },
+ // Test ambiguous text matches disambiguated by context terms
+ {
+ fragment: '#:~:text=more-,test%20page',
+ expect_position: 'more-text',
+ description: 'Multiple match text directive disambiguated by prefix'
+ },
+ {
+ fragment: '#:~:text=test%20page,-text',
+ expect_position: 'more-text',
+ description: 'Multiple match text directive disambiguated by suffix'
+ },
+ {
+ fragment: '#:~:text=more-,test%20page,-text',
+ expect_position: 'more-text',
+ description: 'Multiple match text directive disambiguated by prefix and suffix'
+ },
+ // Test context terms separated by node boundaries
+ {
+ fragment: '#:~:text=prefix-,test%20page,-suffix',
+ expect_position: 'cross-node-context',
+ description: 'Text directive with context terms separated by node boundaries'
+ },
];
-test(t => {
- assert_equals(typeof(window.location.fragmentDirective), 'object', 'window.location.fragmentDirective is defined');
-}, 'Scroll to text is feature detectable via window.location.fragmentDirective');
-
for (const test_case of test_cases) {
promise_test(t => new Promise(resolve => {
let channel = new BroadcastChannel('scroll-to-text-fragment');
channel.addEventListener("message", e => {
- resolve(e.data.scrollPosition);
+ resolve(e.data);
}, {once: true});
- test_driver.bless('Open a URL with a text fragment anchor', () => {
+ test_driver.bless('Open a URL with a text fragment directive', () => {
window.open('scroll-to-text-fragment-target.html' + test_case.fragment, '_blank', 'noopener');
});
- }).then(scrollPosition => {
- assert_equals(scrollPosition, test_case.expect_position,
- 'Expected ' + test_case.fragment + ' to scroll to ' + test_case.expect_position);
- }), 'Test navigation with text fragment anchor ' + test_case.fragment);
+ }).then(data => {
+ assert_equals(data.href.indexOf(':~:'), -1, 'Expected fragment directive to be stripped from the URL.');
+ assert_equals(data.scrollPosition, test_case.expect_position,
+ `Expected ${test_case.fragment} (${test_case.description}) to scroll to ${test_case.expect_position}.`);
+ }), `Test navigation with fragment: ${test_case.description}`);
}
+
+promise_test(t => new Promise(resolve => {
+ let channel = new BroadcastChannel('scroll-to-text-fragment');
+ channel.addEventListener("message", e => {
+ assert_equals(e.data.href.indexOf(':~:'), -1, 'Expected fragment directive to be stripped from the URL.');
+
+ // The first navigation has no user activation.
+ assert_equals(e.data.scrollPosition, 'top', 'Expected window.open() with no user activation to not activate text fragment directive.');
+
+ // Now ensure that a navigation with a user activation does activate the text fragment directive.
+ test_driver.bless('Open a URL with a text fragment directive', () => {
+ window.open('scroll-to-text-fragment-target.html#:~:text=test', '_blank', 'noopener');
+ });
+ channel.addEventListener("message", e => {
+ resolve(e.data.scrollPosition);
+ }, {once: true});
+ }, {once: true});
+
+ window.open('scroll-to-text-fragment-target.html#:~:text=test', '_blank', 'noopener');
+}).then(scrollPosition => {
+ assert_equals(scrollPosition, 'text', 'Expected window.open() with a user activation to scroll to text.');
+}), 'Test that a text fragment directive is not activated without a user activation');
+
+promise_test(t => new Promise(resolve => {
+ let channel = new BroadcastChannel('scroll-to-text-fragment');
+ channel.addEventListener("message", e => {
+ assert_equals(e.data.href.indexOf(':~:'), -1, 'Expected fragment directive to be stripped from the URL.');
+
+ // The first navigation has an opener.
+ assert_equals(e.data.scrollPosition, 'top', 'Expected window.open() with opener to not activate text fragment directive.');
+
+ // Now ensure that a navigation with noopener does activate the text fragment directive.
+ test_driver.bless('Open a URL with a text fragment directive', () => {
+ window.open('scroll-to-text-fragment-target.html#:~:text=test', '_blank', 'noopener');
+ });
+ channel.addEventListener("message", e => {
+ resolve(e.data.scrollPosition);
+ }, {once: true});
+ }, {once: true});
+
+ test_driver.bless('Open a URL with a text fragment directive', () => {
+ window.open('scroll-to-text-fragment-target.html#:~:text=test', '_blank');
+ });
+}).then(scrollPosition => {
+ assert_equals(scrollPosition, 'text', 'Expected window.open() with noopener to scroll to text.');
+}), 'Test that a text fragment directive is not activated when there is a window opener.');
+
+promise_test(t => new Promise(resolve => {
+ let channel = new BroadcastChannel('scroll-to-text-fragment');
+ channel.addEventListener("message", e => {
+ resolve(e.data);
+ }, {once: true});
+
+ let frame = document.createElement('iframe');
+ document.body.appendChild(frame);
+
+ test_driver.bless('Navigate the iframe with a text fragment directive', () => {
+ frame.src = 'scroll-to-text-fragment-target.html#:~:text=test';
+ });
+}).then(data => {
+ assert_equals(data.href.indexOf(':~:'), -1, 'Expected fragment directive to be stripped from the URL.');
+ assert_equals(data.scrollPosition, 'top', 'Expected iframe navigation to not activate text fragment directive.');
+}), 'Test that a text fragment directive is not activated within an iframe.');
</script>
diff --git a/tests/wpt/web-platform-tests/sms/README.md b/tests/wpt/web-platform-tests/sms/README.md
index 7cd98964c24..1f34178beac 100644
--- a/tests/wpt/web-platform-tests/sms/README.md
+++ b/tests/wpt/web-platform-tests/sms/README.md
@@ -1,3 +1,3 @@
# SMS Receiver API
-This directory contains Web platform tests of the SMS Receiver API. For more details, refer to [this README file](https://cs.chromium.org/chromium/src/content/browser/sms/README.md).
+This directory contains tests for the SMS Receiver API. For more details, refer to [this README file](https://cs.chromium.org/chromium/src/content/browser/sms/README.md).
diff --git a/tests/wpt/web-platform-tests/speech-api/SpeechSynthesis-speak-events.html b/tests/wpt/web-platform-tests/speech-api/SpeechSynthesis-speak-events.html
index babfe3c388e..c559da1f929 100644
--- a/tests/wpt/web-platform-tests/speech-api/SpeechSynthesis-speak-events.html
+++ b/tests/wpt/web-platform-tests/speech-api/SpeechSynthesis-speak-events.html
@@ -5,14 +5,18 @@
<script src="/resources/testdriver-vendor.js"></script>
<body>
<script>
-async_test(t => {
- test_driver.bless('speechSynthesis.speak', t.step_func(() => {
- const utter = new SpeechSynthesisUtterance('test');
- utter.onerror = t.unreached_func('error event');
- speechSynthesis.speak(utter);
- utter.onstart = t.step_func(() => {
- utter.onend = t.step_func_done();
- });
- }));
+async function runStartEndTest(t, utterance) {
+ const eventWatcher = new EventWatcher(t, utterance, ['start', 'end', 'error']);
+ await test_driver.bless('speechSynthesis.speak',
+ () => speechSynthesis.speak(utterance));
+ await eventWatcher.wait_for(['start', 'end']);
+}
+promise_test(async (t) => {
+ const utterance = new SpeechSynthesisUtterance();
+ await runStartEndTest(t, utterance);
+}, 'speechSynthesis.speak() fires start and end events with empty utterance');
+promise_test(async (t) => {
+ const utterance = new SpeechSynthesisUtterance('test');
+ await runStartEndTest(t, utterance);
}, 'speechSynthesis.speak() fires start and end events');
</script>
diff --git a/tests/wpt/web-platform-tests/speech-api/historical.html b/tests/wpt/web-platform-tests/speech-api/historical.html
index 207d3e016ed..9da70c44de9 100644
--- a/tests/wpt/web-platform-tests/speech-api/historical.html
+++ b/tests/wpt/web-platform-tests/speech-api/historical.html
@@ -18,11 +18,7 @@
});
test(() => {
- if (!window.SpeechRecognition) {
- // TODO(foolip): use `t.skip()` after
- // https://github.com/web-platform-tests/rfcs/pull/16 is done.
- return;
- }
+ assert_precondition('SpeechRecognition' in window, 'SpeechRecognition exposed');
assert_false("serviceURI" in SpeechRecognition.prototype);
}, "SpeechRecognition's serviceURI attribute should not exist");
@@ -31,11 +27,7 @@ test(() => {
"emma",
].forEach(name => {
test(() => {
- if (!window.SpeechRecognitionEvent) {
- // TODO(foolip): use `t.skip()` after
- // https://github.com/web-platform-tests/rfcs/pull/16 is done.
- return;
- }
+ assert_precondition('SpeechRecognitionEvent' in window, 'SpeechRecognitionEvent exposed');
assert_false(name in SpeechRecognitionEvent.prototype);
}, `SpeechRecognitionEvent's ${name} attribute should not exist`);
});
diff --git a/tests/wpt/web-platform-tests/storage-access-api/META.yml b/tests/wpt/web-platform-tests/storage-access-api/META.yml
new file mode 100644
index 00000000000..cb059fe6bb1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/storage-access-api/META.yml
@@ -0,0 +1,2 @@
+suggested_reviewers:
+ - Brandr0id
diff --git a/tests/wpt/web-platform-tests/streams/piping/throwing-options.any.js b/tests/wpt/web-platform-tests/streams/piping/throwing-options.any.js
new file mode 100644
index 00000000000..6fab32cc6dc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/piping/throwing-options.any.js
@@ -0,0 +1,64 @@
+// META: global=worker,jsshell
+
+class ThrowingOptions {
+ constructor(whatShouldThrow) {
+ this.whatShouldThrow = whatShouldThrow;
+ this.touched = [];
+ }
+
+ get preventClose() {
+ this.maybeThrow('preventClose');
+ return false;
+ }
+
+ get preventAbort() {
+ this.maybeThrow('preventAbort');
+ return false;
+ }
+
+ get preventCancel() {
+ this.maybeThrow('preventCancel');
+ return false;
+ }
+
+ get signal() {
+ this.maybeThrow('signal');
+ return undefined;
+ }
+
+ maybeThrow(forWhat) {
+ this.touched.push(forWhat);
+ if (this.whatShouldThrow === forWhat) {
+ throw new Error(this.whatShouldThrow);
+ }
+ }
+}
+
+const checkOrder = ['preventClose', 'preventAbort', 'preventCancel', 'signal'];
+
+for (let i = 0; i < checkOrder.length; ++i) {
+ const whatShouldThrow = checkOrder[i];
+ const whatShouldBeTouched = checkOrder.slice(0, i + 1);
+
+ promise_test(t => {
+ const options = new ThrowingOptions(whatShouldThrow);
+ return promise_rejects(
+ t, new Error(),
+ new ReadableStream().pipeTo(new WritableStream(), options),
+ 'pipeTo should reject')
+ .then(() => assert_array_equals(
+ options.touched, whatShouldBeTouched,
+ 'options should be touched in the right order'));
+ }, `pipeTo should stop after getting ${whatShouldThrow} throws`);
+
+ test(() => {
+ const options = new ThrowingOptions(whatShouldThrow);
+ assert_throws(
+ new Error(),
+ () => new ReadableStream().pipeThrough(new TransformStream(), options),
+ 'pipeThrough should throw');
+ assert_array_equals(
+ options.touched, whatShouldBeTouched,
+ 'options should be touched in the right order');
+ }, `pipeThrough should stop after getting ${whatShouldThrow} throws`);
+}
diff --git a/tests/wpt/web-platform-tests/svg/animations/short-simple-duration-and-fractional-repeatcount.html b/tests/wpt/web-platform-tests/svg/animations/short-simple-duration-and-fractional-repeatcount.html
new file mode 100644
index 00000000000..025dd5092d3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/short-simple-duration-and-fractional-repeatcount.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<title>Short simple duration and fractional repeatCount does not hang</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<svg>
+ <rect width="100" height="100" fill="blue">
+ <animate attributeName="fill" from="red" to="orange"
+ begin="-10ms" dur="0.001ms" repeatCount="0.5"/>
+ </rect>
+</svg>
+<script>
+ async_test(t => {
+ onload = t.step_func(() => {
+ requestAnimationFrame(t.step_func(() => {
+ requestAnimationFrame(t.step_func_done(() => {
+ let rect = document.querySelector("rect");
+ assert_equals(getComputedStyle(rect).fill, 'rgb(0, 0, 255)');
+ }));
+ }));
+ });
+ });
+</script>
diff --git a/tests/wpt/web-platform-tests/svg/animations/switching-animated-target-to-unknown-element.html b/tests/wpt/web-platform-tests/svg/animations/switching-animated-target-to-unknown-element.html
new file mode 100644
index 00000000000..fef86a723ee
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/switching-animated-target-to-unknown-element.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<title>Switching animated target to an unknown element</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<svg height="0">
+ <path id="path">
+ <animateMotion/>
+ </path>
+ <unknown id="unknown"></unknown>
+</svg>
+<script>
+ async_test(t => {
+ let path = document.getElementById("path");
+ let anim = path.firstElementChild;
+ t.step_timeout(() => {
+ path.appendChild(document.createElementNS('http://www.w3.org/2000/svg', 'animateMotion'));
+ anim.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', '#unknown');
+ requestAnimationFrame(t.step_func(() => {
+ requestAnimationFrame(t.step_func_done());
+ }));
+ });
+ });
+</script>
diff --git a/tests/wpt/web-platform-tests/svg/layout/svg-with-precent-dimensions-relayout-ref.html b/tests/wpt/web-platform-tests/svg/layout/svg-with-precent-dimensions-relayout-ref.html
new file mode 100644
index 00000000000..1a15a9f2b89
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/layout/svg-with-precent-dimensions-relayout-ref.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<link rel="help" href="https://crbug.com/1016759">
+<body>
+<span style="position:relative; font-size:100px;">
+ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ <svg style="position:absolute; border:1px solid black; width:100%; height:100%;">
+ <rect x="10" y="10" width="100" height="100" fill="red" id="child" stroke="blue" stroke-width="5px"/>
+ </svg>
+</span>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/svg/layout/svg-with-precent-dimensions-relayout.html b/tests/wpt/web-platform-tests/svg/layout/svg-with-precent-dimensions-relayout.html
new file mode 100644
index 00000000000..9d04f412b70
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/layout/svg-with-precent-dimensions-relayout.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>
+ Ensure SVGs with percentage dimensions do not overflow auto-sized parents on
+ child-initiated re-layout.
+</title>
+<link rel="help" href="https://crbug.com/1016759">
+<link rel=match href="svg-with-precent-dimensions-relayout-ref.html">
+<body>
+<span style="position:relative; font-size:100px;">
+ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ <svg style="position:absolute; border:1px solid black; width:100%; height:100%;">
+ <rect x="10" y="10" width="100" height="100" fill="red" id="child" stroke="blue" stroke-width="20px"/>
+ </svg>
+</span>
+</body>
+<script>
+ document.body.offsetTop;
+ document.getElementById("child").setAttribute('stroke-width', '5px');
+</script>
+</html>
diff --git a/tests/wpt/web-platform-tests/tools/requirements_flake8.txt b/tests/wpt/web-platform-tests/tools/requirements_flake8.txt
index 16e35cf5aa9..ae35da67e53 100644
--- a/tests/wpt/web-platform-tests/tools/requirements_flake8.txt
+++ b/tests/wpt/web-platform-tests/tools/requirements_flake8.txt
@@ -1,4 +1,4 @@
flake8==3.7.9
pycodestyle==2.5.0
pyflakes==2.1.1
-pep8-naming==0.8.2
+pep8-naming==0.9.0
diff --git a/tests/wpt/web-platform-tests/tools/tox.ini b/tests/wpt/web-platform-tests/tools/tox.ini
index 63fb8ed9832..a330d052348 100644
--- a/tests/wpt/web-platform-tests/tools/tox.ini
+++ b/tests/wpt/web-platform-tests/tools/tox.ini
@@ -14,6 +14,7 @@ commands = pytest {posargs}
passenv =
HYPOTHESIS_PROFILE
PY_COLORS
+ TASKCLUSTER_ROOT_URL
[testenv:py27-flake8]
deps = -rrequirements_flake8.txt
diff --git a/tests/wpt/web-platform-tests/tools/webdriver/README.md b/tests/wpt/web-platform-tests/tools/webdriver/README.md
index 72de3b2ae8b..2795ff1fcf3 100644
--- a/tests/wpt/web-platform-tests/tools/webdriver/README.md
+++ b/tests/wpt/web-platform-tests/tools/webdriver/README.md
@@ -9,7 +9,7 @@ implementation compliance to the specification in mind,
so that different remote end drivers
can determine whether they meet the recognised standard.
The client is used for the WebDriver specification tests
-in the [Web Platform Tests](https://github.com/web-platform-tests/wpt).
+in [web-platform-tests](https://github.com/web-platform-tests/wpt).
## Installation
@@ -24,11 +24,11 @@ which is useful if you want to contribute patches back:
% cd /path/to/wdclient
% python
- Python 2.7.12+ (default, Aug 4 2016, 20:04:34)
+ Python 2.7.12+ (default, Aug 4 2016, 20:04:34)
[GCC 6.1.1 20160724] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import webdriver
- >>>
+ >>>
If you are writing WebDriver specification tests for
[WPT](https://github.com/web-platform-tests/wpt),
diff --git a/tests/wpt/web-platform-tests/tools/wpt/run.py b/tests/wpt/web-platform-tests/tools/wpt/run.py
index 25255320fa9..44dfbc25fa5 100644
--- a/tests/wpt/web-platform-tests/tools/wpt/run.py
+++ b/tests/wpt/web-platform-tests/tools/wpt/run.py
@@ -347,6 +347,10 @@ class Chrome(BrowserSetup):
kwargs["binary_args"].append("--enable-experimental-web-platform-features")
# HACK(Hexcles): work around https://github.com/web-platform-tests/wpt/issues/16448
kwargs["webdriver_args"].append("--disable-build-check")
+ if os.getenv("TASKCLUSTER_ROOT_URL"):
+ # We are on Taskcluster, where our Docker container does not have
+ # enough capabilities to run Chrome with sandboxing. (gh-20133)
+ kwargs["binary_args"].append("--no-sandbox")
class ChromeAndroid(BrowserSetup):
diff --git a/tests/wpt/web-platform-tests/tools/wpt/tox.ini b/tests/wpt/web-platform-tests/tools/wpt/tox.ini
index d0dead55d9a..6a044473a6b 100644
--- a/tests/wpt/web-platform-tests/tools/wpt/tox.ini
+++ b/tests/wpt/web-platform-tests/tools/wpt/tox.ini
@@ -14,3 +14,6 @@ deps =
commands =
pytest {posargs}
+
+passenv =
+ TASKCLUSTER_ROOT_URL
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt
index d8a6c898d24..60775f8259e 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt
@@ -5,4 +5,4 @@ mozdebug==0.1.1
pillow==6.2.1
urllib3[secure]==1.25.6
requests==2.22.0
-six==1.12.0
+six==1.13.0
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_epiphany.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_epiphany.txt
index 9115b7ac4e8..470aaf9a939 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_epiphany.txt
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_epiphany.txt
@@ -1 +1 @@
-mozprocess == 0.26
+mozprocess==1.0.0
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_firefox.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_firefox.txt
index 85efd35486d..f49102b8a89 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_firefox.txt
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_firefox.txt
@@ -8,4 +8,4 @@ mozprocess==1.0.0
mozprofile==2.4.0
mozrunner==7.7.0
mozversion==2.2.0
-psutil==5.6.3
+psutil==5.6.5
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_webkit.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_webkit.txt
index f85779a40bd..470aaf9a939 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_webkit.txt
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_webkit.txt
@@ -1 +1 @@
-mozprocess==0.26
+mozprocess==1.0.0
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/tox.ini b/tests/wpt/web-platform-tests/tools/wptrunner/tox.ini
index 5d343751c54..f82dbc6b8a8 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/tox.ini
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/tox.ini
@@ -24,3 +24,6 @@ deps =
commands = pytest {posargs}
setenv = CURRENT_TOX_ENV = {envname}
+
+passenv =
+ TASKCLUSTER_ROOT_URL
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/base.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/base.py
index 004b92b4b66..f20f735528c 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/base.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/base.py
@@ -58,12 +58,14 @@ def strip_server(url):
class TestharnessResultConverter(object):
harness_codes = {0: "OK",
1: "ERROR",
- 2: "TIMEOUT"}
+ 2: "TIMEOUT",
+ 3: "PRECONDITION_FAILED"}
test_codes = {0: "PASS",
1: "FAIL",
2: "TIMEOUT",
- 3: "NOTRUN"}
+ 3: "NOTRUN",
+ 4: "PRECONDITION_FAILED"}
def __call__(self, test, result, extra=None):
"""Convert a JSON result into a (TestResult, [SubtestResult]) tuple"""
@@ -597,7 +599,14 @@ class CallbackHandler(object):
"click": ClickAction(self.logger, self.protocol),
"send_keys": SendKeysAction(self.logger, self.protocol),
"action_sequence": ActionSequenceAction(self.logger, self.protocol),
- "generate_test_report": GenerateTestReportAction(self.logger, self.protocol)
+ "generate_test_report": GenerateTestReportAction(self.logger, self.protocol),
+ "add_virtual_authenticator": AddVirtualAuthenticatorAction(self.logger, self.protocol),
+ "remove_virtual_authenticator": RemoveVirtualAuthenticatorAction(self.logger, self.protocol),
+ "add_credential": AddCredentialAction(self.logger, self.protocol),
+ "get_credentials": GetCredentialsAction(self.logger, self.protocol),
+ "remove_credential": RemoveCredentialAction(self.logger, self.protocol),
+ "remove_all_credentials": RemoveAllCredentialsAction(self.logger, self.protocol),
+ "set_user_verified": SetUserVerifiedAction(self.logger, self.protocol),
}
def __call__(self, result):
@@ -692,3 +701,80 @@ class GenerateTestReportAction(object):
message = payload["message"]
self.logger.debug("Generating test report: %s" % message)
self.protocol.generate_test_report.generate_test_report(message)
+
+class AddVirtualAuthenticatorAction(object):
+ def __init__(self, logger, protocol):
+ self.logger = logger
+ self.protocol = protocol
+
+ def __call__(self, payload):
+ self.logger.debug("Adding virtual authenticator")
+ config = payload["config"]
+ authenticator_id = self.protocol.virtual_authenticator.add_virtual_authenticator(config)
+ self.logger.debug("Authenticator created with ID %s" % authenticator_id)
+ return authenticator_id
+
+class RemoveVirtualAuthenticatorAction(object):
+ def __init__(self, logger, protocol):
+ self.logger = logger
+ self.protocol = protocol
+
+ def __call__(self, payload):
+ authenticator_id = payload["authenticator_id"]
+ self.logger.debug("Removing virtual authenticator %s" % authenticator_id)
+ return self.protocol.virtual_authenticator.remove_virtual_authenticator(authenticator_id)
+
+
+class AddCredentialAction(object):
+ def __init__(self, logger, protocol):
+ self.logger = logger
+ self.protocol = protocol
+
+ def __call__(self, payload):
+ authenticator_id = payload["authenticator_id"]
+ credential = payload["credential"]
+ self.logger.debug("Adding credential to virtual authenticator %s " % authenticator_id)
+ return self.protocol.virtual_authenticator.add_credential(authenticator_id, credential)
+
+class GetCredentialsAction(object):
+ def __init__(self, logger, protocol):
+ self.logger = logger
+ self.protocol = protocol
+
+ def __call__(self, payload):
+ authenticator_id = payload["authenticator_id"]
+ self.logger.debug("Getting credentials from virtual authenticator %s " % authenticator_id)
+ return self.protocol.virtual_authenticator.get_credentials(authenticator_id)
+
+class RemoveCredentialAction(object):
+ def __init__(self, logger, protocol):
+ self.logger = logger
+ self.protocol = protocol
+
+ def __call__(self, payload):
+ authenticator_id = payload["authenticator_id"]
+ credential_id = payload["credential_id"]
+ self.logger.debug("Removing credential %s from authenticator %s" % (credential_id, authenticator_id))
+ return self.protocol.virtual_authenticator.remove_credential(authenticator_id, credential_id)
+
+class RemoveAllCredentialsAction(object):
+ def __init__(self, logger, protocol):
+ self.logger = logger
+ self.protocol = protocol
+
+ def __call__(self, payload):
+ authenticator_id = payload["authenticator_id"]
+ self.logger.debug("Removing all credentials from authenticator %s" % authenticator_id)
+ return self.protocol.virtual_authenticator.remove_all_credentials(authenticator_id)
+
+class SetUserVerifiedAction(object):
+ def __init__(self, logger, protocol):
+ self.logger = logger
+ self.protocol = protocol
+
+ def __call__(self, payload):
+ authenticator_id = payload["authenticator_id"]
+ uv = payload["uv"]
+ self.logger.debug(
+ "Setting user verified flag on authenticator %s to %s" % (authenticator_id, uv["isUserVerified"]))
+ return self.protocol.virtual_authenticator.set_user_verified(authenticator_id, uv)
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py
index a2601978b57..344debf8aa6 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py
@@ -22,7 +22,8 @@ from .protocol import (BaseProtocolPart,
SendKeysProtocolPart,
ActionSequenceProtocolPart,
TestDriverProtocolPart,
- GenerateTestReportProtocolPart)
+ GenerateTestReportProtocolPart,
+ VirtualAuthenticatorProtocolPart)
from ..testrunner import Stop
import webdriver as client
@@ -202,6 +203,31 @@ class WebDriverGenerateTestReportProtocolPart(GenerateTestReportProtocolPart):
json_message = {"message": message}
self.webdriver.send_session_command("POST", "reporting/generate_test_report", json_message)
+class WebDriverVirtualAuthenticatorProtocolPart(VirtualAuthenticatorProtocolPart):
+ def setup(self):
+ self.webdriver = self.parent.webdriver
+
+ def add_virtual_authenticator(self, config):
+ return self.webdriver.send_session_command("POST", "webauthn/authenticator", config)
+
+ def remove_virtual_authenticator(self, authenticator_id):
+ return self.webdriver.send_session_command("DELETE", "webauthn/authenticator/%s" % authenticator_id)
+
+ def add_credential(self, authenticator_id, credential):
+ return self.webdriver.send_session_command("POST", "webauthn/authenticator/%s/credential" % authenticator_id, credential)
+
+ def get_credentials(self, authenticator_id):
+ return self.webdriver.send_session_command("GET", "webauthn/authenticator/%s/credentials" % authenticator_id)
+
+ def remove_credential(self, authenticator_id, credential_id):
+ return self.webdriver.send_session_command("DELETE", "webauthn/authenticator/%s/credentials/%s" % (authenticator_id, credential_id))
+
+ def remove_all_credentials(self, authenticator_id):
+ return self.webdriver.send_session_command("DELETE", "webauthn/authenticator/%s/credentials" % authenticator_id)
+
+ def set_user_verified(self, authenticator_id, uv):
+ return self.webdriver.send_session_command("POST", "webauthn/authenticator/%s/uv" % authenticator_id, uv)
+
class WebDriverProtocol(Protocol):
implements = [WebDriverBaseProtocolPart,
@@ -211,7 +237,8 @@ class WebDriverProtocol(Protocol):
WebDriverSendKeysProtocolPart,
WebDriverActionSequenceProtocolPart,
WebDriverTestDriverProtocolPart,
- WebDriverGenerateTestReportProtocolPart]
+ WebDriverGenerateTestReportProtocolPart,
+ WebDriverVirtualAuthenticatorProtocolPart]
def __init__(self, executor, browser, capabilities, **kwargs):
super(WebDriverProtocol, self).__init__(executor, browser)
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/protocol.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/protocol.py
index 77a705ffb47..0758312d65f 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/protocol.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/protocol.py
@@ -365,3 +365,62 @@ class CoverageProtocolPart(ProtocolPart):
def dump(self):
"""Dump coverage counters"""
pass
+
+class VirtualAuthenticatorProtocolPart(ProtocolPart):
+ """Protocol part for creating and manipulating virtual authenticators"""
+ __metaclass__ = ABCMeta
+
+ name = "virtual_authenticator"
+
+ @abstractmethod
+ def add_virtual_authenticator(self, config):
+ """Add a virtual authenticator
+
+ :param config: The Authenticator Configuration"""
+ pass
+
+ @abstractmethod
+ def remove_virtual_authenticator(self, authenticator_id):
+ """Remove a virtual authenticator
+
+ :param str authenticator_id: The ID of the authenticator to remove"""
+ pass
+
+ @abstractmethod
+ def add_credential(self, authenticator_id, credential):
+ """Inject a credential onto an authenticator
+
+ :param str authenticator_id: The ID of the authenticator to add the credential to
+ :param credential: The credential to inject"""
+ pass
+
+ @abstractmethod
+ def get_credentials(self, authenticator_id):
+ """Get the credentials stored in an authenticator
+
+ :param str authenticator_id: The ID of the authenticator
+ :returns: An array with the credentials stored on the authenticator"""
+ pass
+
+ @abstractmethod
+ def remove_credential(self, authenticator_id, credential_id):
+ """Remove a credential stored in an authenticator
+
+ :param str authenticator_id: The ID of the authenticator
+ :param str credential_id: The ID of the credential"""
+ pass
+
+ @abstractmethod
+ def remove_all_credentials(self, authenticator_id):
+ """Remove all the credentials stored in an authenticator
+
+ :param str authenticator_id: The ID of the authenticator"""
+ pass
+
+ @abstractmethod
+ def set_user_verified(self, authenticator_id, uv):
+ """Sets the user verified flag on an authenticator
+
+ :param str authenticator_id: The ID of the authenticator
+ :param bool uv: the user verified flag"""
+ pass
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testdriver-extra.js b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testdriver-extra.js
index 9f97fac9a0c..278f226dbd2 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testdriver-extra.js
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testdriver-extra.js
@@ -108,7 +108,7 @@
else
action.frame = {frame: frame};
action.origin = {selector: get_selector(action.origin)};
- }
+ }
}
}
}
@@ -125,4 +125,67 @@
window.__wptrunner_message_queue.push({"type": "action", "action": "generate_test_report", "message": message});
return pending_promise;
};
+
+ window.test_driver_internal.add_virtual_authenticator = function(config) {
+ const pending_promise = new Promise(function(resolve, reject) {
+ pending_resolve = resolve;
+ pending_reject = reject;
+ });
+ window.__wptrunner_message_queue.push({"type": "action", "action": "add_virtual_authenticator", config});
+ return pending_promise;
+ };
+
+ window.test_driver_internal.remove_virtual_authenticator = function(authenticator_id) {
+ const pending_promise = new Promise(function(resolve, reject) {
+ pending_resolve = resolve;
+ pending_reject = reject;
+ });
+ window.__wptrunner_message_queue.push({"type": "action", "action": "remove_virtual_authenticator", authenticator_id});
+ return pending_promise;
+ };
+
+ window.test_driver_internal.add_credential = function(authenticator_id, credential) {
+ const pending_promise = new Promise(function(resolve, reject) {
+ pending_resolve = resolve;
+ pending_reject = reject;
+ });
+ window.__wptrunner_message_queue.push({"type": "action", "action": "add_credential", authenticator_id, credential});
+ return pending_promise;
+ };
+
+ window.test_driver_internal.get_credentials = function(authenticator_id) {
+ const pending_promise = new Promise(function(resolve, reject) {
+ pending_resolve = resolve;
+ pending_reject = reject;
+ });
+ window.__wptrunner_message_queue.push({"type": "action", "action": "get_credentials", authenticator_id});
+ return pending_promise;
+ };
+
+ window.test_driver_internal.remove_credential = function(authenticator_id, credential_id) {
+ const pending_promise = new Promise(function(resolve, reject) {
+ pending_resolve = resolve;
+ pending_reject = reject;
+ });
+ window.__wptrunner_message_queue.push({"type": "action", "action": "remove_credential", authenticator_id, credential_id});
+ return pending_promise;
+ };
+
+ window.test_driver_internal.remove_all_credentials = function(authenticator_id) {
+ const pending_promise = new Promise(function(resolve, reject) {
+ pending_resolve = resolve;
+ pending_reject = reject;
+ });
+ window.__wptrunner_message_queue.push({"type": "action", "action": "remove_all_credentials", authenticator_id});
+ return pending_promise;
+ };
+
+ window.test_driver_internal.set_user_verified = function(authenticator_id, uv) {
+ const pending_promise = new Promise(function(resolve, reject) {
+ pending_resolve = resolve;
+ pending_reject = reject;
+ });
+ window.__wptrunner_message_queue.push({"type": "action", "action": "set_user_verified", authenticator_id, uv});
+ return pending_promise;
+ };
})();
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wpttest.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wpttest.py
index 80db17a3c72..e5c28bc4731 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wpttest.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wpttest.py
@@ -47,12 +47,12 @@ class SubtestResult(object):
class TestharnessResult(Result):
default_expected = "OK"
- statuses = {"OK", "ERROR", "INTERNAL-ERROR", "TIMEOUT", "EXTERNAL-TIMEOUT", "CRASH"}
+ statuses = {"OK", "ERROR", "INTERNAL-ERROR", "TIMEOUT", "EXTERNAL-TIMEOUT", "CRASH", "PRECONDITION_FAILED"}
class TestharnessSubtestResult(SubtestResult):
default_expected = "PASS"
- statuses = {"PASS", "FAIL", "TIMEOUT", "NOTRUN"}
+ statuses = {"PASS", "FAIL", "TIMEOUT", "NOTRUN", "PRECONDITION_FAILED"}
class ReftestResult(Result):
diff --git a/tests/wpt/web-platform-tests/trusted-types/support/navigation-report-only-support.html b/tests/wpt/web-platform-tests/trusted-types/support/navigation-report-only-support.html
new file mode 100644
index 00000000000..d00d0538753
--- /dev/null
+++ b/tests/wpt/web-platform-tests/trusted-types/support/navigation-report-only-support.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<head>
+</head>
+<body>
+<p>Support page for trusted-types-navigation-report-only.*.html tests.</p>
+<a id="anchor" href="#">link</a>
+<script>
+ if (location.search == "?defaultpolicy") {
+ trustedTypes.createPolicy("default", {
+ createScript: s => s.replace("continue", "defaultpolicywashere"),
+ });
+ }
+
+ function bounceEventToOpener(e) {
+ const msg = {};
+ for (const field of ["effectiveDirective", "sample", "type"]) {
+ msg[field] = e[field];
+ }
+ msg["uri"] = location.href;
+ window.opener.postMessage(msg, "*");
+ }
+
+ // If a navigation is blocked by Trusted Types, we expect this window to
+ // throw a SecurityPolicyViolationEvent. If it's not blocked, we expect the
+ // loaded frame to through DOMContentLoaded. In either case there should be
+ // _some_ event that we can expect.
+ document.addEventListener("DOMContentLoaded", bounceEventToOpener);
+ document.addEventListener("securitypolicyviolation", bounceEventToOpener);
+
+ // Navigate to the non-report-only version of the test. That has the same
+ // event listening setup as this, but is a different target URI.
+ const target_script = `location.href='${location.href.replace("-report-only", "") + "#continue"}';`;
+ const target = `javascript:"<script>${target_script}</scri${""}pt>"`;
+
+ // Navigate the anchor, but only after the content is loaded (so that we
+ // won't disturb delivery of that event to the opener.
+ const anchor = document.getElementById("anchor");
+ anchor.href = target;
+ if (!location.hash) {
+ document.addEventListener("DOMContentLoaded", _ => anchor.click());
+ }
+</script>
+</body>
+
diff --git a/tests/wpt/web-platform-tests/trusted-types/support/navigation-report-only-support.html.headers b/tests/wpt/web-platform-tests/trusted-types/support/navigation-report-only-support.html.headers
new file mode 100644
index 00000000000..fa87952ae48
--- /dev/null
+++ b/tests/wpt/web-platform-tests/trusted-types/support/navigation-report-only-support.html.headers
@@ -0,0 +1 @@
+Content-Security-Policy-Report-Only: trusted-types *
diff --git a/tests/wpt/web-platform-tests/trusted-types/support/navigation-support.html b/tests/wpt/web-platform-tests/trusted-types/support/navigation-support.html
new file mode 100644
index 00000000000..cd41f3968e7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/trusted-types/support/navigation-support.html
@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<head>
+</head>
+<body>
+<p>Support page for trusted-types-navigation.*.html tests.</p>
+<a id="anchor" href="#">link</a>
+<script>
+ if (location.search == "?defaultpolicy") {
+ trustedTypes.createPolicy("default", {
+ createScript: s => s.replace("continue", "defaultpolicywashere"),
+ });
+ }
+
+ function bounceEventToOpener(e) {
+ const msg = {};
+ for (const field of ["effectiveDirective", "sample", "type"]) {
+ msg[field] = e[field];
+ }
+ msg["uri"] = location.href;
+ window.opener.postMessage(msg, "*");
+ }
+
+ // If a navigation is blocked by Trusted Types, we expect this window to
+ // throw a SecurityPolicyViolationEvent. If it's not blocked, we expect the
+ // loaded frame to through DOMContentLoaded. In either case there should be
+ // _some_ event that we can expect.
+ document.addEventListener("DOMContentLoaded", bounceEventToOpener);
+ document.addEventListener("securitypolicyviolation", bounceEventToOpener);
+
+ // We'll use a javascript:-url to navigate to ourselves, so that we can
+ // re-use the messageing mechanisms above. In order to not end up in a loop,
+ // we'll only click if we don't find fragment in the current URL.
+ const target_script = `location.href='${location.href}&continue';`;
+ const target = `javascript:"<script>${target_script}</scri${""}pt>"`;
+
+ const anchor = document.getElementById("anchor");
+ anchor.href = target;
+ if (!location.hash)
+ document.addEventListener("DOMContentLoaded", _ => anchor.click());
+</script>
+</body>
+
diff --git a/tests/wpt/web-platform-tests/trusted-types/support/navigation-support.html.headers b/tests/wpt/web-platform-tests/trusted-types/support/navigation-support.html.headers
new file mode 100644
index 00000000000..1bc33add09b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/trusted-types/support/navigation-support.html.headers
@@ -0,0 +1 @@
+Content-Security-Policy: trusted-types *
diff --git a/tests/wpt/web-platform-tests/trusted-types/trusted-types-createHTMLDocument.tentative.html b/tests/wpt/web-platform-tests/trusted-types/trusted-types-createHTMLDocument.tentative.html
new file mode 100644
index 00000000000..7a43b1f7b35
--- /dev/null
+++ b/tests/wpt/web-platform-tests/trusted-types/trusted-types-createHTMLDocument.tentative.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<head>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/content-security-policy/support/testharness-helper.js"></script>
+ <meta http-equiv="Content-Security-Policy" content="trusted-types *">
+</head>
+<body>
+<script>
+
+test(t => {
+ function try_assign(doc) {
+ doc.createElement("script").textContent = "2+2";
+ }
+ assert_throws(new TypeError(),
+ _ => try_assign(document),
+ "Trusted Type assignment throws in main document");
+ assert_throws(new TypeError(),
+ _ => try_assign(document.implementation.createHTMLDocument("")),
+ "Trusted Type assignment throws in created document");
+}, "Trusted Types work in createHTMLDocument");
+
+test(t => {
+ const policy = trustedTypes.createPolicy("policy", {createHTML: x => x });
+ const value = policy.createHTML("hello");
+ const doc = document.implementation.createHTMLDocument("");
+ doc.body.innerHTML = value;
+ assert_equals(doc.body.textContent, "hello");
+ assert_throws(new TypeError(),
+ _ => { doc.body.innerHTML = "world"; },
+ "Cannot assign text value.");
+ assert_equals(doc.body.textContent, "hello");
+}, "Trusted Type instances can be used in createHTMLDocument");
+
+</script>
+</body>
diff --git a/tests/wpt/web-platform-tests/trusted-types/trusted-types-navigation.tentative.html b/tests/wpt/web-platform-tests/trusted-types/trusted-types-navigation.tentative.html
new file mode 100644
index 00000000000..7f17c64e570
--- /dev/null
+++ b/tests/wpt/web-platform-tests/trusted-types/trusted-types-navigation.tentative.html
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<head>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+<script>
+ function expectMessage(filter) {
+ return new Promise(resolve => {
+ window.addEventListener("message", e => { if (filter(e)) resolve(); });
+ });
+ }
+
+ function expectViolationAsMessage(sample) {
+ const filter = e => (e.data.effectiveDirective == "trusted-types" &&
+ (!sample || e.data.sample.startsWith(sample)));
+ return new expectMessage(filter);
+ }
+
+ function expectLoadedAsMessage(uri) {
+ const filter = e => (e.data.type == "DOMContentLoaded" &&
+ (!uri || e.data.uri.endsWith(uri)));
+ return new expectMessage(filter);
+ }
+
+ function openWindow(test, uri) {
+ const win = window.open(uri);
+ test.add_cleanup(_ => win.close());
+ }
+
+ promise_test(t => {
+ openWindow(t, "support/navigation-support.html");
+ return Promise.all([
+ expectLoadedAsMessage("navigation-support.html"),
+ expectViolationAsMessage("Location.href"),
+ ]);
+ }, "Navigate a window with javascript:-urls in enforcing mode.");
+
+ promise_test(t => {
+ openWindow(t, "support/navigation-support.html?defaultpolicy");
+ return Promise.all([
+ expectLoadedAsMessage("navigation-support.html?defaultpolicy"),
+ expectLoadedAsMessage("navigation-support.html?defaultpolicy&defaultpolicywashere"),
+ ]);
+ }, "Navigate a window with javascript:-urls w/ default policy in enforcing mode.");
+
+ promise_test(t => {
+ const page = "navigation-report-only-support.html"
+ openWindow(t, `support/${page}`);
+ return Promise.all([
+ expectLoadedAsMessage(page),
+ expectLoadedAsMessage("navigation-support.html#continue"),
+ ]);
+ }, "Navigate a window with javascript:-urls in report-only mode.");
+
+ promise_test(t => {
+ const page = "navigation-report-only-support.html?defaultpolicy";
+ openWindow(t, `support/${page}`);
+ return Promise.all([
+ expectLoadedAsMessage(page),
+ expectLoadedAsMessage("navigation-support.html?defaultpolicy#defaultpolicywashere"),
+ ]);
+ }, "Navigate a window with javascript:-urls w/ default policy in report-only mode.");
+</script>
+</body>
diff --git a/tests/wpt/web-platform-tests/upgrade-insecure-requests/README.md b/tests/wpt/web-platform-tests/upgrade-insecure-requests/README.md
index 516e8e262f4..7b7ac65c990 100644
--- a/tests/wpt/web-platform-tests/upgrade-insecure-requests/README.md
+++ b/tests/wpt/web-platform-tests/upgrade-insecure-requests/README.md
@@ -1,4 +1,4 @@
-# Upgrade-insecure-requests Web Platform Tests
+# Upgrade Insecure Requests Test Suite
The subdirectory `gen/` is generated using the generator at `common/security-features`.
See [common/security-features/README.md](../common/security-features/README.md) for how to generate tests.
diff --git a/tests/wpt/web-platform-tests/vibration/invalid-values.html b/tests/wpt/web-platform-tests/vibration/invalid-values.html
index 6740a44a8ed..9381dadcc06 100644
--- a/tests/wpt/web-platform-tests/vibration/invalid-values.html
+++ b/tests/wpt/web-platform-tests/vibration/invalid-values.html
@@ -8,6 +8,7 @@
<div id='log'></div>
<script>
test(function() {
+ assert_precondition(navigator.vibrate, 'navigator.vibrate exists');
assert_throws(new TypeError(), function() {
navigator.vibrate();
}, 'Argument is required, so was expecting a TypeError.');
diff --git a/tests/wpt/web-platform-tests/visual-viewport/viewport-no-resize-event-on-overflow-recalc.html.ini b/tests/wpt/web-platform-tests/visual-viewport/viewport-no-resize-event-on-overflow-recalc.html.ini
index 75e29ae4c42..f8d682fbf90 100644
--- a/tests/wpt/web-platform-tests/visual-viewport/viewport-no-resize-event-on-overflow-recalc.html.ini
+++ b/tests/wpt/web-platform-tests/visual-viewport/viewport-no-resize-event-on-overflow-recalc.html.ini
@@ -1,4 +1,6 @@
[viewport-no-resize-event-on-overflow-recalc.html]
expected: TIMEOUT
[Resize event not fired at window.visualViewport when content is added]
- expected: NOTRUN
+ expected:
+ if (os == "android"): ["PASS", "NOTRUN"]
+ NOTRUN
diff --git a/tests/wpt/web-platform-tests/web-animations/idlharness.window.js b/tests/wpt/web-platform-tests/web-animations/idlharness.window.js
new file mode 100644
index 00000000000..c32016280e6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/web-animations/idlharness.window.js
@@ -0,0 +1,20 @@
+// META: script=/resources/WebIDLParser.js
+// META: script=/resources/idlharness.js
+
+'use strict';
+
+idl_test(
+ ['web-animations'],
+ ['dom', 'html'],
+ idl_array => {
+ idl_array.add_objects({
+ Animation: ['new Animation()'],
+ AnimationPlaybackEvent: ['new AnimationPlaybackEvent("cancel")'],
+ Document: ['document'],
+ DocumentTimeline: ['document.timeline'],
+ KeyframeEffect: ['new KeyframeEffect(null, null)'],
+ ShadowRoot: ['shadowRoot'],
+ });
+ self.shadowRoot = document.createElement("div").attachShadow({mode: "open"});
+ }
+);
diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/idlharness.window.js b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/idlharness.window.js
deleted file mode 100644
index 14b8395a217..00000000000
--- a/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/idlharness.window.js
+++ /dev/null
@@ -1,21 +0,0 @@
-// META: script=/resources/WebIDLParser.js
-// META: script=/resources/idlharness.js
-
-// https://w3c.github.io/web-animations/#animation
-
-'use strict';
-
-promise_test(async () => {
- const srcs = ['web-animations', 'dom', 'html'];
- const [idl, dom, html] = await Promise.all(
- srcs.map(i => fetch(`/interfaces/${i}.idl`).then(r => r.text())));
-
- const idlArray = new IdlArray();
- idlArray.add_idls(idl, {only: ['Animation', 'AnimationPlayState']});
- idlArray.add_dependency_idls(idl);
- idlArray.add_dependency_idls(dom);
- idlArray.add_dependency_idls(html);
- idlArray.add_untested_idls('interface CSSPseudoElement {};');
- idlArray.add_objects( { Animation: ['new Animation()'] } );
- idlArray.test();
-}, 'Animation interface.');
diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationPlaybackEvent/idlharness.window.js b/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationPlaybackEvent/idlharness.window.js
deleted file mode 100644
index 5124e509572..00000000000
--- a/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationPlaybackEvent/idlharness.window.js
+++ /dev/null
@@ -1,26 +0,0 @@
-// META: script=/resources/WebIDLParser.js
-// META: script=/resources/idlharness.js
-
-// https://w3c.github.io/web-animations/#animationplaybackevent
-
-'use strict';
-
-promise_test(async () => {
- const srcs = ['web-animations', 'dom'];
- const [idl, dom] = await Promise.all(
- srcs.map(i => fetch(`/interfaces/${i}.idl`).then(r => r.text())));
-
- const idlArray = new IdlArray();
- idlArray.add_idls(idl, {
- only: [
- 'AnimationPlaybackEventInit',
- 'AnimationPlaybackEvent',
- ]
- });
- idlArray.add_dependency_idls(dom);
- idlArray.add_objects({
- AnimationPlaybackEvent: ['new AnimationPlaybackEvent("cancel")'],
- });
-
- idlArray.test();
-}, 'AnimationPlaybackEvent interface.');
diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/DocumentTimeline/idlharness.window.js b/tests/wpt/web-platform-tests/web-animations/interfaces/DocumentTimeline/idlharness.window.js
deleted file mode 100644
index 395d133f482..00000000000
--- a/tests/wpt/web-platform-tests/web-animations/interfaces/DocumentTimeline/idlharness.window.js
+++ /dev/null
@@ -1,22 +0,0 @@
-// META: script=/resources/WebIDLParser.js
-// META: script=/resources/idlharness.js
-
-// https://w3c.github.io/web-animations/#documenttimeline
-
-'use strict';
-
-promise_test(async () => {
- const text = await fetch('/interfaces/web-animations.idl').then(r => r.text());
- const idlArray = new IdlArray();
- idlArray.add_idls(text, {
- only: [
- 'AnimationTimeline',
- 'DocumentTimelineOptions',
- 'DocumentTimeline',
- ]
- });
- idlArray.add_objects({ DocumentTimeline: ['document.timeline'] });
-
- idlArray.test();
- done();
-}, 'DocumentTimeline interface.');
diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/idlharness.window.js b/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/idlharness.window.js
deleted file mode 100644
index 22548861ae3..00000000000
--- a/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/idlharness.window.js
+++ /dev/null
@@ -1,31 +0,0 @@
-// META: script=/resources/WebIDLParser.js
-// META: script=/resources/idlharness.js
-
-// https://w3c.github.io/web-animations/#keyframeeffect
-
-'use strict';
-
-promise_test(async () => {
- const srcs = ['web-animations', 'html'];
- const [idl, html] = await Promise.all(
- srcs.map(i => fetch(`/interfaces/${i}.idl`).then(r => r.text())));
-
- const idlArray = new IdlArray();
- idlArray.add_idls(idl, {
- only: [
- 'IterationCompositeOperation',
- 'CompositeOperation',
- 'KeyframeEffectOptions',
- 'KeyframeEffect',
- ]
- });
- idlArray.add_untested_idls('interface CSSPseudoElement {};');
- idlArray.add_dependency_idls(idl);
- idlArray.add_dependency_idls(html);
- idlArray.add_objects({
- KeyframeEffect: ['new KeyframeEffect(null, null)'],
- });
-
- idlArray.test();
- done();
-}, 'KeyframeEffect interface.');
diff --git a/tests/wpt/web-platform-tests/web-nfc/NDEFMessage_constructor.https.html b/tests/wpt/web-platform-tests/web-nfc/NDEFMessage_constructor.https.html
index a6a2e6bd67c..ce212136023 100644
--- a/tests/wpt/web-platform-tests/web-nfc/NDEFMessage_constructor.https.html
+++ b/tests/wpt/web-platform-tests/web-nfc/NDEFMessage_constructor.https.html
@@ -30,13 +30,6 @@
const decoder = new TextDecoder();
assert_equals(decoder.decode(message.records[0].data), test_text_data,
'data contains the same text content');
- assert_true(typeof message.records[0].text() === 'string');
- assert_equals(message.records[0].text(), test_text_data,
- 'text() contains the same text content');
- assert_true(message.records[0].arrayBuffer() instanceof ArrayBuffer,
- 'arrayBuffer() returns an ArrayBuffer');
- assert_equals(message.records[0].json(), null,
- 'json() returns null');
}, 'NDEFMessage constructor with a text record');
</script>
diff --git a/tests/wpt/web-platform-tests/web-nfc/NDEFReader_options.https.html b/tests/wpt/web-platform-tests/web-nfc/NDEFReader_options.https.html
index 389fff9e041..b1452c0240d 100644
--- a/tests/wpt/web-platform-tests/web-nfc/NDEFReader_options.https.html
+++ b/tests/wpt/web-platform-tests/web-nfc/NDEFReader_options.https.html
@@ -16,56 +16,49 @@ const NDEFReaderOptionTests =
desc: "Test that reading data succeed when NDEFScanOptions'" +
" recordType is set to 'empty'.",
scanOptions: {recordType: "empty"},
- unmatchedScanOptions: {recordType: "json"},
+ unmatchedScanOptions: {recordType: "mime"},
message: createMessage([createRecord('empty', '')])
},
{
desc: "Test that reading data succeed when NDEFScanOptions'" +
- " recordType is set to 'json'.",
- scanOptions: {recordType: "json"},
+ " recordType is set to 'mime'.",
+ scanOptions: {recordType: "mime"},
unmatchedScanOptions: {recordType: "url"},
- message: createMessage([createJsonRecord(test_json_data)])
- },
- {
- desc: "Test that reading data succeed when NDEFScanOptions'" +
- " recordType is set to 'opaque'.",
- scanOptions: {recordType: "opaque"},
- unmatchedScanOptions: {recordType: "json"},
- message: createMessage([createOpaqueRecord(test_buffer_data)])
+ message: createMessage([createMimeRecord(test_buffer_data)])
},
{
desc: "Test that reading data succeed when NDEFScanOptions'" +
" recordType is set to 'unknown'.",
scanOptions: {recordType: "unknown"},
- unmatchedScanOptions: {recordType: "json"},
+ unmatchedScanOptions: {recordType: "mime"},
message: createMessage([createUnknownRecord(test_buffer_data)])
},
{
desc: "Test that reading data succeed when NDEFScanOptions'" +
" recordType is set to 'text'.",
scanOptions: {recordType: "text"},
- unmatchedScanOptions: {recordType: "json"},
+ unmatchedScanOptions: {recordType: "url"},
message: createMessage([createTextRecord(test_text_data)])
},
{
desc: "Test that reading data succeed when NDEFScanOptions'" +
" recordType is set to 'url'.",
scanOptions: {recordType: "url"},
- unmatchedScanOptions: {recordType: "json"},
+ unmatchedScanOptions: {recordType: "absolute-url"},
message: createMessage([createUrlRecord(test_url_data)])
},
{
desc: "Test that reading data succeed when NDEFScanOptions'" +
" recordType is set to 'absolute-url'.",
scanOptions: {recordType: "absolute-url"},
- unmatchedScanOptions: {recordType: "json"},
+ unmatchedScanOptions: {recordType: "url"},
message: createMessage([createUrlRecord(test_url_data, true)])
},
{
desc: "Test that reading data succeed when NDEFScanOptions'" +
" recordType is set to a custom type for external type records.",
scanOptions: {recordType: "w3.org:xyz"},
- unmatchedScanOptions: {recordType: "opaque"},
+ unmatchedScanOptions: {recordType: "mime"},
message: createMessage([createRecord('w3.org:xyz', 'application/octet-stream',
test_buffer_data)])
},
@@ -82,7 +75,7 @@ const NDEFReaderOptionTests =
" sources correctly.",
scanOptions: {mediaType: "application/octet-stream"},
unmatchedScanOptions: {mediaType: "application/json"},
- message: createMessage([createOpaqueRecord(test_buffer_data)])
+ message: createMessage([createMimeRecord(test_buffer_data)])
}
];
@@ -93,21 +86,14 @@ const ReadMultiMessagesTests =
" correctly with NDEFScanOptions' recordType is set to 'empty'.",
scanOptions: {recordType: "empty"},
message: createMessage([createRecord('empty', '')]),
- unmatchedMessage: createMessage([createJsonRecord(test_json_data)]),
- },
- {
- desc: "Test that filtering 'json' record from different messages" +
- " correctly with NDEFScanOptions' recordType is set to 'json'.",
- scanOptions: {recordType: "json"},
- message: createMessage([createJsonRecord(test_json_data)]),
- unmatchedMessage: createMessage([createUrlRecord(test_url_data)])
+ unmatchedMessage: createMessage([createMimeRecordFromJson(test_json_data)]),
},
{
- desc: "Test that filtering 'opaque' record from different messages" +
- " correctly with NDEFScanOptions' recordType is set to 'opaque'.",
- scanOptions: {recordType: "opaque"},
- message: createMessage([createOpaqueRecord(test_buffer_data)]),
- unmatchedMessage: createMessage([createJsonRecord(test_json_data)])
+ desc: "Test that filtering 'mime' record from different messages" +
+ " correctly with NDEFScanOptions' recordType is set to 'mime'.",
+ scanOptions: {recordType: "mime"},
+ message: createMessage([createMimeRecord(test_buffer_data)]),
+ unmatchedMessage: createMessage([createUnknownRecord(test_buffer_data)])
},
{
desc: "Test that filtering 'unknown' record from different messages" +
@@ -155,11 +141,11 @@ const ReadMultiMessagesTests =
records: [createUrlRecord(test_url_data)]}
},
{
- desc: "Test that filtering 'opaque' record from different messages" +
+ desc: "Test that filtering 'mime' record from different messages" +
" correctly with NDEFScanOptions' mediaType set.",
scanOptions: {mediaType: "application/octet-stream"},
- message: createMessage([createOpaqueRecord(test_buffer_data)]),
- unmatchedMessage: createMessage([createJsonRecord(test_json_data)])
+ message: createMessage([createMimeRecord(test_buffer_data)]),
+ unmatchedMessage: createMessage([createMimeRecordFromJson(test_json_data)])
}
];
diff --git a/tests/wpt/web-platform-tests/web-nfc/NDEFReader_scan.https.html b/tests/wpt/web-platform-tests/web-nfc/NDEFReader_scan.https.html
index 3fe95cc9147..a26a548c639 100644
--- a/tests/wpt/web-platform-tests/web-nfc/NDEFReader_scan.https.html
+++ b/tests/wpt/web-platform-tests/web-nfc/NDEFReader_scan.https.html
@@ -183,6 +183,33 @@ nfc_test(async (t, mockNFC) => {
}, "Synchronously signaled abort.");
+nfc_test(async (t, mockNFC) => {
+ const reader = new NDEFReader();
+ const controller = new AbortController();
+ const readerWatcher = new EventWatcher(t, reader, ["reading", "error"]);
+
+ const payloadMessage = createMessage([createTextRecord(test_text_data)]);
+ const message = createMessage([createRecord('example.com:payloadIsMessage',
+ undefined, payloadMessage)]);
+ mockNFC.setReadingMessage(message);
+
+ reader.scan({signal : controller.signal});
+ const event = await readerWatcher.wait_for("reading");
+ controller.abort();
+ assert_true(event instanceof NDEFReadingEvent);
+ // The message contains only an external type record.
+ assert_equals(event.message.records.length, 1);
+ assert_equals(event.message.records[0].recordType, 'example.com:payloadIsMessage', 'recordType');
+ // The external type record's payload is a message, which contains only a text record.
+ const embeddedRecords = event.message.records[0].toRecords();
+ assert_equals(embeddedRecords.length, 1);
+ assert_equals(embeddedRecords[0].recordType, 'text', 'recordType');
+ assert_equals(embeddedRecords[0].mediaType, 'text/plain', 'mediaType');
+ const decoder = new TextDecoder();
+ assert_equals(decoder.decode(embeddedRecords[0].data), test_text_data,
+ 'data has the same content with the original dictionary');
+}, "NDEFRecord.toRecords returns its embedded records correctly.");
+
test(() => {
const reader = new NDEFReader();
invalid_signals.forEach(invalid_signal => {
diff --git a/tests/wpt/web-platform-tests/web-nfc/NDEFReadingEvent_constructor.https.html b/tests/wpt/web-platform-tests/web-nfc/NDEFReadingEvent_constructor.https.html
index c23a68a2f79..15ef6e466aa 100644
--- a/tests/wpt/web-platform-tests/web-nfc/NDEFReadingEvent_constructor.https.html
+++ b/tests/wpt/web-platform-tests/web-nfc/NDEFReadingEvent_constructor.https.html
@@ -12,13 +12,13 @@
}, 'NDEFReadingEvent constructor without init dict');
test(() => {
- const message = createMessage([createJsonRecord(test_json_data)]);
+ const message = createMessage([createMimeRecordFromJson(test_buffer_data)]);
const event = new NDEFReadingEvent('type', {serialNumber: null, message: message});
assert_equals(event.serialNumber, '', 'serialNumber');
}, 'NDEFReadingEvent constructor with null serialNumber');
test(() => {
- const message = createMessage([createJsonRecord(test_json_data)]);
+ const message = createMessage([createMimeRecordFromJson(test_buffer_data)]);
const event = new NDEFReadingEvent('type', {message: message});
assert_equals(event.serialNumber, '', 'serialNumber');
}, 'NDEFReadingEvent constructor with serialNumber not present');
@@ -30,7 +30,7 @@
}, 'NDEFReadingEvent constructor with null message');
test(() => {
- const message = createMessage([createJsonRecord(test_json_data)]);
+ const message = createMessage([createMimeRecord(test_buffer_data)]);
const event = new NDEFReadingEvent('type', {serialNumber: '', message: message});
assert_equals(event.type, 'type', 'type');
assert_equals(event.serialNumber, '', 'serialNumber');
diff --git a/tests/wpt/web-platform-tests/web-nfc/NDEFRecord_constructor.https.html b/tests/wpt/web-platform-tests/web-nfc/NDEFRecord_constructor.https.html
index 1206afb4713..6028e970b87 100644
--- a/tests/wpt/web-platform-tests/web-nfc/NDEFRecord_constructor.https.html
+++ b/tests/wpt/web-platform-tests/web-nfc/NDEFRecord_constructor.https.html
@@ -92,8 +92,6 @@
const decoder = new TextDecoder();
assert_equals(decoder.decode(record.data), test_url_data,
'data has the same content with the original dictionary');
- assert_equals(record.text(), test_url_data,
- 'text() has the same content with the original dictionary');
}, 'NDEFRecord constructor with url record type');
test(() => {
@@ -103,63 +101,41 @@
const decoder = new TextDecoder();
assert_equals(decoder.decode(record.data), test_url_data,
'data has the same content with the original dictionary');
- assert_equals(record.text(), test_url_data,
- 'text() has the same content with the original dictionary');
}, 'NDEFRecord constructor with absolute-url record type');
test(() => {
- let buffer = new ArrayBuffer(4);
- let buffer_view = new Uint8Array(buffer);
- let original_data = new Uint8Array([1, 2, 3, 4]);
- buffer_view.set(original_data);
- const record = new NDEFRecord(createOpaqueRecord(buffer));
- assert_equals(record.recordType, 'opaque', 'recordType');
- assert_equals(record.mediaType, 'application/octet-stream', 'mediaType');
- assert_array_equals(new Uint8Array(record.data.buffer), original_data,
- 'data has the same content with the original buffer');
+ assert_throws(new TypeError, () => new NDEFRecord(
+ createMimeRecord("A string is not a BufferSource")),
+ 'Only BufferSource is allowed to be the record data.');
- const data_1 = record.arrayBuffer();
- assert_true(data_1 instanceof ArrayBuffer);
- assert_not_equals(data_1, buffer, 'arrayBuffer() returns a new object');
- assert_array_equals(new Uint8Array(data_1), original_data,
- 'arrayBuffer() has the same content with the original buffer');
-
- const data_2 = record.arrayBuffer();
- assert_true(data_2 instanceof ArrayBuffer);
- assert_not_equals(data_2, data_1,
- 'arrayBuffer() again returns another new object');
- assert_array_equals(new Uint8Array(data_2), original_data,
- 'arrayBuffer() has the same content with the original buffer');
-
- buffer_view.set([4, 3, 2, 1]);
- const data_3 = record.arrayBuffer();
- assert_true(data_3 instanceof ArrayBuffer);
- assert_array_equals(new Uint8Array(data_1), original_data,
- 'Modifying the original buffer does not affect arrayBuffer() content');
- assert_array_equals(new Uint8Array(data_2), original_data,
- 'Modifying the original buffer does not affect arrayBuffer() content');
- assert_array_equals(new Uint8Array(data_3), original_data,
- 'Modifying the original buffer does not affect arrayBuffer() content');
- }, 'NDEFRecord constructor with opaque record type');
+ let buffer = new ArrayBuffer(4);
+ new Uint8Array(buffer).set([1, 2, 3, 4]);
+ // Feed ArrayBuffer.
+ {
+ const record = new NDEFRecord(createMimeRecord(buffer));
+ assert_equals(record.recordType, 'mime', 'recordType');
+ assert_equals(record.mediaType, 'application/octet-stream', 'mediaType');
+ assert_array_equals(new Uint8Array(record.data.buffer), [1, 2, 3, 4],
+ 'data has the same content with the original buffer');
+ }
+ // Feed ArrayBufferView.
+ {
+ let buffer_view = new Uint8Array(buffer, 1);
+ const record = new NDEFRecord(createMimeRecord(buffer_view));
+ assert_equals(record.recordType, 'mime', 'recordType');
+ assert_array_equals(new Uint8Array(record.data.buffer), [2, 3, 4],
+ 'data has the same content with the original buffer view');
+ }
+ }, 'NDEFRecord constructor with mime record type and stream data');
test(() => {
- const record = new NDEFRecord(createJsonRecord(test_json_data));
- assert_equals(record.recordType, 'json', 'recordType');
+ const record = new NDEFRecord(createMimeRecordFromJson(test_json_data));
+ assert_equals(record.recordType, 'mime', 'recordType');
assert_equals(record.mediaType, 'application/json', 'mediaType');
-
- const data_1 = record.json();
- assert_true(typeof data_1 === 'object');
- assert_not_equals(data_1, test_json_data, 'json() returns a new object');
- assert_object_equals(data_1, test_json_data,
- 'json() has the same content with the original dictionary');
-
- const data_2 = record.json();
- assert_true(typeof data_2 === 'object');
- assert_not_equals(data_2, data_1,
- 'json() again returns another new object');
- assert_object_equals(data_2, test_json_data,
- 'json() has the same content with the original dictionary');
- }, 'NDEFRecord constructor with JSON record type');
+ assert_object_equals(JSON.parse(new TextDecoder().decode(record.data)),
+ test_json_data,
+ 'data has the same content with the original json');
+ }, 'NDEFRecord constructor with mime record type and json data');
test(() => {
assert_throws(new TypeError, () => new NDEFRecord(
@@ -193,29 +169,8 @@
const record = new NDEFRecord(createRecord('foo.eXamPle.coM:bAr*-', undefined, buffer));
assert_equals(record.recordType, 'foo.example.com:bAr*-', 'recordType');
assert_equals(record.mediaType, 'application/octet-stream', 'mediaType');
-
- const data_1 = record.arrayBuffer();
- assert_true(data_1 instanceof ArrayBuffer);
- assert_not_equals(data_1, buffer, 'arrayBuffer() returns a new object');
- assert_array_equals(new Uint8Array(data_1), original_data,
- 'arrayBuffer() has the same content with the original buffer');
-
- const data_2 = record.arrayBuffer();
- assert_true(data_2 instanceof ArrayBuffer);
- assert_not_equals(data_2, data_1,
- 'arrayBuffer() again returns another new object');
- assert_array_equals(new Uint8Array(data_2), original_data,
- 'arrayBuffer() has the same content with the original buffer');
-
- buffer_view.set([4, 3, 2, 1]);
- const data_3 = record.arrayBuffer();
- assert_true(data_3 instanceof ArrayBuffer);
- assert_array_equals(new Uint8Array(data_1), original_data,
- 'Modifying the original buffer does not affect arrayBuffer() content');
- assert_array_equals(new Uint8Array(data_2), original_data,
- 'Modifying the original buffer does not affect arrayBuffer() content');
- assert_array_equals(new Uint8Array(data_3), original_data,
- 'Modifying the original buffer does not affect arrayBuffer() content');
+ assert_array_equals(new Uint8Array(record.data.buffer), original_data,
+ 'data has the same content with the original buffer');
}, 'NDEFRecord constructor with external record type');
test(() => {
diff --git a/tests/wpt/web-platform-tests/web-nfc/NDEFWriter_push.https.html b/tests/wpt/web-platform-tests/web-nfc/NDEFWriter_push.https.html
index 2be655fbbf9..f8b461c42d5 100644
--- a/tests/wpt/web-platform-tests/web-nfc/NDEFWriter_push.https.html
+++ b/tests/wpt/web-platform-tests/web-nfc/NDEFWriter_push.https.html
@@ -39,10 +39,6 @@ const invalid_type_messages =
// NDEFRecord.lang length for 'text' record must be lower than 64.
createMessage([createTextRecord(test_text_data, undefined /* encoding */, [...Array(64)].map(_ => 'a'))]),
- // https://w3c.github.io/web-nfc/#dfn-map-a-json-object-to-ndef
- // NDEFRecord must have data.
- createMessage([createJsonRecord()]),
-
// https://w3c.github.io/web-nfc/#dfn-map-a-url-to-ndef
// NDEFRecord must have data.
createMessage([createUrlRecord()]),
@@ -63,12 +59,12 @@ const invalid_type_messages =
// https://w3c.github.io/web-nfc/#dfn-map-binary-data-to-ndef
// NDEFRecord must have data.
- createMessage([createOpaqueRecord()]),
+ createMessage([createMimeRecord()]),
- // NDEFRecord.data for 'opaque' record must be ArrayBuffer.
- createMessage([createOpaqueRecord(test_text_data)]),
- createMessage([createOpaqueRecord(test_number_data)]),
- createMessage([createOpaqueRecord(test_json_data)]),
+ // NDEFRecord.data for 'mime' record must be BufferSource.
+ createMessage([createMimeRecord(test_text_data)]),
+ createMessage([createMimeRecord(test_number_data)]),
+ createMessage([createMimeRecord(test_json_data)]),
// NDEFRecord must have data.
createMessage([createUnknownRecord()]),
@@ -88,7 +84,7 @@ const invalid_type_messages =
createMessage([createRecord('w3.org:xyz', '', test_json_data)]),
// https://w3c.github.io/web-nfc/#the-ndefrecordtype-string
- // The record type is neither a known type ('text', 'json' etc.) nor a
+ // The record type is neither a known type ('text', 'mime' etc.) nor a
// valid custom type for an external type record.
createMessage([createRecord('unmatched_type', '', test_buffer_data)])
];
@@ -102,12 +98,6 @@ const invalid_syntax_messages =
// Data for 'url' or 'absolute-url' record, must be a valid URL.
createMessage([createUrlRecord('Invalid URL:// Data')]),
createMessage([createUrlRecord('Invalid URL:// Data', true)]),
-
- // A JSON MIME type is any MIME type whose subtype ends in "+json" or
- // whose essence is "application/json" or "text/json".
- createMessage([createRecord('json', 'image/png', test_json_data)]),
- createMessage([createRecord('json', 'application/x+y', test_json_data)]),
- createMessage([createRecord('json', 'custom/app+jsonx', test_json_data)]),
];
const invalid_signals = [
@@ -249,13 +239,6 @@ provided URL.");
promise_test(async t => {
const writer = new NDEFWriter();
- const message = createMessage([createRecord('json','application/json',
- { get x(){ return this; } })]);
- await promise_rejects(t, new TypeError(), writer.push(message));
-}, "Reject promise with exceptions thrown from serializing the 'json' record data.");
-
-promise_test(async t => {
- const writer = new NDEFWriter();
await promise_rejects(
t, new TypeError(), writer.push(test_text_data, {target: "invalid"}));
}, "NDEFWriter.push should fail with TypeError when invalid target value is \
@@ -306,9 +289,8 @@ nfc_test(async () => {
nfc_test(async (t, mockNFC) => {
const writer = new NDEFWriter();
let message = createMessage([createTextRecord(test_text_data),
- createJsonRecord(test_json_data),
- createJsonRecord(test_number_data),
- createOpaqueRecord(test_buffer_data),
+ createMimeRecordFromJson(test_json_data),
+ createMimeRecord(test_buffer_data),
createUnknownRecord(test_buffer_data),
createUrlRecord(test_url_data),
createUrlRecord(test_url_data, true),
@@ -316,7 +298,7 @@ nfc_test(async (t, mockNFC) => {
test_message_origin);
await writer.push(message);
assertNDEFMessagesEqual(message, mockNFC.pushedMessage());
-}, "NDEFWriter.push NDEFMessage containing text, json, opaque, unknown, url, absolute-url \
+}, "NDEFWriter.push NDEFMessage containing text, mime, unknown, url, absolute-url \
and external records with default NDEFPushOptions.");
nfc_test(async (t, mockNFC) => {
@@ -427,17 +409,8 @@ nfc_test(async (t, mockNFC) => {
const writer = new NDEFWriter();
await writer.push({ records: [{ data: test_buffer_data}] });
assertNDEFMessagesEqual(test_buffer_data, mockNFC.pushedMessage());
-}, "Test that recordType should be set to 'opaque' if NDEFRecordInit.record's \
-recordType is undefined and NDEFRecordInit.record's data is ArrayBuffer.");
-
-nfc_test(async (t, mockNFC) => {
- const writer = new NDEFWriter();
- await writer.push({ records: [{ data: test_json_data }] });
- const message = createMessage([createJsonRecord(test_json_data)]);
- assertNDEFMessagesEqual(message, mockNFC.pushedMessage());
-}, "Test that recordType should be set to 'json' if NDEFRecordInit.record's \
-recordType is undefined and NDEFRecordInit.record's data is not DOMString or \
-ArrayBuffer.");
+}, "Test that recordType should be set to 'mime' if NDEFRecordInit.record's \
+recordType is undefined and NDEFRecordInit.record's data is not DOMString.");
nfc_test(async (t, mockNFC) => {
const writer = new NDEFWriter();
@@ -448,19 +421,10 @@ recordType is 'text' and NDEFRecordInit.record's mediaType is undefined.");
nfc_test(async (t, mockNFC) => {
const writer = new NDEFWriter();
- await writer.push({ records: [{ recordType: "opaque", data: test_buffer_data }] });
+ await writer.push({ records: [{ recordType: "mime", data: test_buffer_data }] });
assertNDEFMessagesEqual(test_buffer_data, mockNFC.pushedMessage());
}, "Test that mediaType should be set to 'application/octet-stream' if \
-NDEFRecordInit.record's recordType is 'opaque' and NDEFRecordInit.record's \
-mediaType is undefined.");
-
-nfc_test(async (t, mockNFC) => {
- const writer = new NDEFWriter();
- await writer.push({ records: [{ recordType: "json", data: test_json_data }] });
- const message = createMessage([createJsonRecord(test_json_data)]);
- assertNDEFMessagesEqual(message, mockNFC.pushedMessage());
-}, "Test that mediaType should be set to 'application/json' if \
-NDEFRecordInit.record's recordType is 'json' and NDEFRecordInit.record's \
+NDEFRecordInit.record's recordType is 'mime' and NDEFRecordInit.record's \
mediaType is undefined.");
nfc_test(async (t, mockNFC) => {
diff --git a/tests/wpt/web-platform-tests/web-nfc/resources/nfc-helpers.js b/tests/wpt/web-platform-tests/web-nfc/resources/nfc-helpers.js
index cf9b510f304..bdd8290d9eb 100644
--- a/tests/wpt/web-platform-tests/web-nfc/resources/nfc-helpers.js
+++ b/tests/wpt/web-platform-tests/web-nfc/resources/nfc-helpers.js
@@ -103,12 +103,14 @@ function createTextRecord(data, encoding, lang) {
return createRecord('text', 'text/plain', data, encoding, lang);
}
-function createJsonRecord(json) {
- return createRecord('json', 'application/json', json);
+function createMimeRecordFromJson(json) {
+ return createRecord(
+ 'mime', 'application/json',
+ new TextEncoder('utf-8').encode(JSON.stringify(json)));
}
-function createOpaqueRecord(buffer) {
- return createRecord('opaque', 'application/octet-stream', buffer);
+function createMimeRecord(buffer) {
+ return createRecord('mime', 'application/octet-stream', buffer);
}
function createUnknownRecord(buffer) {
@@ -136,7 +138,7 @@ function assertNDEFMessagesEqual(providedMessage, receivedMessage) {
let provided = providedMessage;
if (providedMessage instanceof ArrayBuffer ||
ArrayBuffer.isView(providedMessage))
- provided = createMessage([createOpaqueRecord(providedMessage)]);
+ provided = createMessage([createMimeRecord(providedMessage)]);
else if (typeof providedMessage === 'string')
provided = createMessage([createTextRecord(providedMessage)]);
@@ -166,23 +168,6 @@ function assertWebNDEFMessagesEqual(message, expectedMessage) {
// Compares record data
assert_array_equals(new Uint8Array(record.data),
new Uint8Array(expectedRecord.data));
- assert_equals(record.text(), expectedRecord.text());
- assert_array_equals(new Uint8Array(record.arrayBuffer()),
- new Uint8Array(expectedRecord.arrayBuffer()));
- let json;
- try {
- json = record.json();
- } catch (e) {
- }
- let expectedJson;
- try {
- expectedJson = expectedRecord.json();
- } catch (e) {
- }
- if (json === undefined || json === null)
- assert_equals(json, expectedJson);
- else
- assert_object_equals(json, expectedJson);
}
}
diff --git a/tests/wpt/web-platform-tests/webaudio/refresh_idl.rb b/tests/wpt/web-platform-tests/webaudio/refresh_idl.rb
deleted file mode 100755
index a07847535ad..00000000000
--- a/tests/wpt/web-platform-tests/webaudio/refresh_idl.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/usr/bin/env ruby
-require 'nokogiri'
-
-def base_dir
- File.dirname(__FILE__)
-end
-
-def output_directory
- File.join(base_dir, 'idl')
-end
-
-def specification
- file = File.open(File.join(base_dir, 'specification.html'))
- doc = Nokogiri::XML(file)
- file.close
- doc
-end
-
-def write_node_inner_text_to_file(filename, node)
- File.open(filename, 'w') { |file| file.write(node.inner_text.strip) }
- puts "Wrote: #{filename}"
-end
-
-def load_idl(id)
- file = File.join(output_directory, id)
- return false if !File.exist?(file)
- File.read(file)
-end
-
-# Parse the specification writing each block of idl to its own file
-specification.css(".idl-code").each do |idl_block|
- id = idl_block["id"]
- write_node_inner_text_to_file(File.join(output_directory, id), idl_block) if id
-end
-
-# Update the idl in the pre blocks for each idl test
-idl_test_files = [
- File.join(base_dir, 'the-audio-api', 'the-gainnode-interface', 'idl-test.html'),
- File.join(base_dir, 'the-audio-api', 'the-audiodestinationnode-interface', 'idl-test.html'),
- File.join(base_dir, 'the-audio-api', 'the-delaynode-interface', 'idl-test.html'),
- File.join(base_dir, 'the-audio-api', 'the-audiobuffer-interface', 'idl-test.html'),
-]
-
-idl_test_files.each do |fn|
- file = File.open(fn)
- doc = Nokogiri::HTML(file)
- file.close
-
- doc.css('pre').each do |node|
- node_id = node["id"]
- if idl = load_idl(node_id)
- node.content = idl
- end
- end
-
- File.open(fn, 'w') { |file| file.write(doc.to_html)}
-end
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/find_element_from_element/find.py b/tests/wpt/web-platform-tests/webdriver/tests/find_element_from_element/find.py
index 56e216bb646..b107a8957e0 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/find_element_from_element/find.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/find_element_from_element/find.py
@@ -1,3 +1,4 @@
+# META: timeout=long
import pytest
from webdriver.transport import Response
diff --git a/tests/wpt/web-platform-tests/webgpu/cts.html b/tests/wpt/web-platform-tests/webgpu/cts.html
index b60faec9623..13d8b7c8324 100644
--- a/tests/wpt/web-platform-tests/webgpu/cts.html
+++ b/tests/wpt/web-platform-tests/webgpu/cts.html
@@ -3,18 +3,23 @@
This test suite is built from the TypeScript sources at:
https://github.com/gpuweb/cts
+ If you are debugging WebGPU conformance tests, it's highly recommended that
+ you use the standalone interactive runner in that repository, which
+ provides tools for easier debugging and editing (source maps, debug
+ logging, warn/skip functionality, etc.)
+
NOTE:
- The WPT version of this file is generated with *one test spec per variant*.
- If your harness needs more fine-grained suppressions, you'll need to
+ The WPT version of this file is generated with *one variant per test spec
+ file*. If your harness needs more fine-grained suppressions, you'll need to
generate your own variants list from your suppression list. For example, if
test file cts:a/b: has 3 tests and you need to suppress a single case, you
might break it out into the following variants:
- - cts:a/b:test1~
- - cts:a/b:test2={"x":1}
- - cts:a/b:test2={"x":2} // <- suppress this one
- - cts:a/b:test2={"x":3}
- - cts:a/b:test3~
+ - cts:a/b:test1~
+ - cts:a/b:test2={"x":1}
+ - cts:a/b:test2={"x":2} // <- suppress this one
+ - cts:a/b:test2={"x":3}
+ - cts:a/b:test3~
When run under browser CI, the original cts.html should be skipped, and
this alternate version should be run instead, under a non-exported WPT test
@@ -34,6 +39,17 @@
width: 100%;
height: 15em;
}
+
+/* Test Name column */
+#results > tbody > tr > td:nth-child(2) {
+ word-break: break-word;
+}
+
+/* Message column */
+#results > tbody > tr > td:nth-child(3) {
+ white-space: pre-wrap;
+ word-break: break-word;
+}
</style>
<textarea id=results></textarea>
@@ -69,4 +85,4 @@
<meta name=variant content='?q=cts:validation/setStencilReference:'>
<meta name=variant content='?q=cts:validation/setVertexBuffer:'>
<meta name=variant content='?q=cts:validation/setViewport:'>
-<meta name=variant content='?q=cts:validation/vertex_input:'>
+<meta name=variant content='?q=cts:validation/vertex_state:'>
diff --git a/tests/wpt/web-platform-tests/webgpu/framework/fixture.js b/tests/wpt/web-platform-tests/webgpu/framework/fixture.js
index 2c1ea831468..d976fa46880 100644
--- a/tests/wpt/web-platform-tests/webgpu/framework/fixture.js
+++ b/tests/wpt/web-platform-tests/webgpu/framework/fixture.js
@@ -4,9 +4,10 @@
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
-// A Fixture is a class used to instantiate each test case at run time.
+export class SkipTestCase extends Error {} // A Fixture is a class used to instantiate each test case at run time.
// A new instance of the Fixture is created for every single test case
// (i.e. every time the test function is run).
+
export class Fixture {
constructor(rec, params) {
_defineProperty(this, "params", void 0);
@@ -26,11 +27,11 @@ export class Fixture {
async init() {}
debug(msg) {
- this.rec.debug(msg);
+ this.rec.debug(new Error(msg));
}
- log(msg) {
- this.rec.log(msg);
+ skip(msg) {
+ throw new SkipTestCase(msg);
}
async finalize() {
@@ -42,11 +43,11 @@ export class Fixture {
}
warn(msg) {
- this.rec.warn(msg);
+ this.rec.warn(new Error(msg));
}
fail(msg) {
- this.rec.fail(msg);
+ this.rec.fail(new Error(msg));
}
async immediateAsyncExpectation(fn) {
@@ -57,35 +58,40 @@ export class Fixture {
}
eventualAsyncExpectation(fn) {
- const promise = fn();
+ const promise = fn(new Error());
this.eventualExpectations.push(promise);
return promise;
}
- expectErrorValue(expectedName, ex, m) {
+ expectErrorValue(expectedName, ex, niceStack) {
if (!(ex instanceof Error)) {
- this.fail('THREW NON-ERROR');
+ niceStack.message = 'THREW non-error value, of type ' + typeof ex + niceStack.message;
+ this.rec.fail(niceStack);
return;
}
const actualName = ex.name;
if (actualName !== expectedName) {
- this.fail(`THREW ${actualName} INSTEAD OF ${expectedName}${m}`);
+ niceStack.message = `THREW ${actualName}, instead of ${expectedName}` + niceStack.message;
+ this.rec.fail(niceStack);
} else {
- this.debug(`OK: threw ${actualName}${m}`);
+ niceStack.message = 'OK: threw ' + actualName + niceStack.message;
+ this.rec.debug(niceStack);
}
}
shouldReject(expectedName, p, msg) {
- this.eventualAsyncExpectation(async () => {
+ this.eventualAsyncExpectation(async niceStack => {
const m = msg ? ': ' + msg : '';
try {
await p;
- this.fail('DID NOT THROW' + m);
+ niceStack.message = 'DID NOT THROW' + m;
+ this.rec.fail(niceStack);
} catch (ex) {
- this.expectErrorValue(expectedName, ex, m);
+ niceStack.message = m;
+ this.expectErrorValue(expectedName, ex, niceStack);
}
});
}
@@ -95,18 +101,18 @@ export class Fixture {
try {
fn();
- this.fail('DID NOT THROW' + m);
+ this.rec.fail(new Error('DID NOT THROW' + m));
} catch (ex) {
- this.expectErrorValue(expectedName, ex, m);
+ this.expectErrorValue(expectedName, ex, new Error(m));
}
}
expect(cond, msg) {
if (cond) {
const m = msg ? ': ' + msg : '';
- this.debug('expect OK' + m);
+ this.rec.debug(new Error('expect OK' + m));
} else {
- this.rec.fail(msg);
+ this.rec.fail(new Error(msg));
}
return cond;
diff --git a/tests/wpt/web-platform-tests/webgpu/framework/logger.js b/tests/wpt/web-platform-tests/webgpu/framework/logger.js
index e8542924736..5536e736f06 100644
--- a/tests/wpt/web-platform-tests/webgpu/framework/logger.js
+++ b/tests/wpt/web-platform-tests/webgpu/framework/logger.js
@@ -4,10 +4,39 @@
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+import { SkipTestCase } from './fixture.js';
import { makeQueryString } from './url_query.js';
import { extractPublicParams } from './url_query.js';
import { getStackTrace, now } from './util/index.js';
import { version } from './version.js';
+
+class LogMessageWithStack extends Error {
+ constructor(name, ex) {
+ super(ex.message);
+ this.name = name;
+ this.stack = ex.stack;
+ }
+
+ toJSON() {
+ let m = this.name;
+
+ if (this.message) {
+ m += ': ' + this.message;
+ }
+
+ m += '\n' + getStackTrace(this);
+ return m;
+ }
+
+}
+
+class LogMessageWithoutStack extends LogMessageWithStack {
+ toJSON() {
+ return this.message;
+ }
+
+}
+
export class Logger {
constructor() {
_defineProperty(this, "results", []);
@@ -49,13 +78,20 @@ export class TestSpecRecorder {
}
}
+var PassState;
+
+(function (PassState) {
+ PassState[PassState["pass"] = 0] = "pass";
+ PassState[PassState["skip"] = 1] = "skip";
+ PassState[PassState["warn"] = 2] = "warn";
+ PassState[PassState["fail"] = 3] = "fail";
+})(PassState || (PassState = {}));
+
export class TestCaseRecorder {
constructor(result) {
_defineProperty(this, "result", void 0);
- _defineProperty(this, "failed", false);
-
- _defineProperty(this, "warned", false);
+ _defineProperty(this, "state", PassState.pass);
_defineProperty(this, "startTime", -1);
@@ -69,8 +105,7 @@ export class TestCaseRecorder {
start(debug = false) {
this.startTime = now();
this.logs = [];
- this.failed = false;
- this.warned = false;
+ this.state = PassState.pass;
this.debugging = debug;
}
@@ -82,50 +117,46 @@ export class TestCaseRecorder {
const endTime = now(); // Round to next microsecond to avoid storing useless .xxxx00000000000002 in results.
this.result.timems = Math.ceil((endTime - this.startTime) * 1000) / 1000;
- this.result.status = this.failed ? 'fail' : this.warned ? 'warn' : 'pass';
+ this.result.status = PassState[this.state];
this.result.logs = this.logs;
this.debugging = false;
}
- debug(msg) {
+ debug(ex) {
if (!this.debugging) {
return;
}
- this.log('DEBUG: ' + msg);
+ this.logs.push(new LogMessageWithoutStack('DEBUG', ex));
}
- log(msg) {
- this.logs.push(msg);
+ warn(ex) {
+ this.setState(PassState.warn);
+ this.logs.push(new LogMessageWithStack('WARN', ex));
}
- warn(msg) {
- this.warned = true;
- let m = 'WARN';
-
- if (msg) {
- m += ': ' + msg;
- }
-
- m += ' ' + getStackTrace(new Error());
- this.log(m);
+ fail(ex) {
+ this.setState(PassState.fail);
+ this.logs.push(new LogMessageWithStack('FAIL', ex));
}
- fail(msg) {
- this.failed = true;
- let m = 'FAIL';
+ skipped(ex) {
+ this.setState(PassState.skip);
+ this.logs.push(new LogMessageWithStack('SKIP', ex));
+ }
- if (msg) {
- m += ': ' + msg;
+ threw(ex) {
+ if (ex instanceof SkipTestCase) {
+ this.skipped(ex);
+ return;
}
- m += ' ' + getStackTrace(new Error());
- this.log(m);
+ this.setState(PassState.fail);
+ this.logs.push(new LogMessageWithStack('EXCEPTION', ex));
}
- threw(e) {
- this.failed = true;
- this.log('EXCEPTION: ' + e.name + ': ' + e.message + '\n' + getStackTrace(e));
+ setState(state) {
+ this.state = Math.max(this.state, state);
}
}
diff --git a/tests/wpt/web-platform-tests/webgpu/framework/test_group.js b/tests/wpt/web-platform-tests/webgpu/framework/test_group.js
index 69d8cc04017..68527a5b2cf 100644
--- a/tests/wpt/web-platform-tests/webgpu/framework/test_group.js
+++ b/tests/wpt/web-platform-tests/webgpu/framework/test_group.js
@@ -136,20 +136,18 @@ class RunCaseSpecific {
try {
const inst = new this.fixture(rec, this.params || {});
- await inst.init();
try {
+ await inst.init();
await this.fn(inst);
- } catch (ex) {
- // There was an exception from the test itself.
- rec.threw(ex);
- } // Runs as long as constructor and init succeeded, even if the test rejected.
-
-
- await inst.finalize();
+ } finally {
+ // Runs as long as constructor succeeded, even if initialization or the test failed.
+ await inst.finalize();
+ }
} catch (ex) {
- // There was an exception from constructor, init, or finalize.
- // (An error from finalize may have been an eventualAsyncExpectation failure.)
+ // There was an exception from constructor, init, test, or finalize.
+ // An error from init or test may have been a SkipTestCase.
+ // An error from finalize may have been an eventualAsyncExpectation failure.
rec.threw(ex);
}
diff --git a/tests/wpt/web-platform-tests/webgpu/framework/util/stack.js b/tests/wpt/web-platform-tests/webgpu/framework/util/stack.js
index ae99ac904a1..bd51d545094 100644
--- a/tests/wpt/web-platform-tests/webgpu/framework/util/stack.js
+++ b/tests/wpt/web-platform-tests/webgpu/framework/util/stack.js
@@ -24,10 +24,9 @@ export function getStackTrace(e) {
}
if (isSuites) {
+ stack.push(part);
found = true;
}
-
- stack.push(part);
}
return stack.join('\n');
diff --git a/tests/wpt/web-platform-tests/webgpu/framework/version.js b/tests/wpt/web-platform-tests/webgpu/framework/version.js
index 55a72f5efb0..e2c91190305 100644
--- a/tests/wpt/web-platform-tests/webgpu/framework/version.js
+++ b/tests/wpt/web-platform-tests/webgpu/framework/version.js
@@ -1,3 +1,3 @@
// AUTO-GENERATED - DO NOT EDIT. See tools/gen_version.
-export const version = 'ba0a130a078256d45504069de88f0d91d4631578';
+export const version = 'e114192747a54f34157eb65754e037701fbdf98b';
diff --git a/tests/wpt/web-platform-tests/webgpu/runtime/wpt.js b/tests/wpt/web-platform-tests/webgpu/runtime/wpt.js
index c87f9167bbe..fd02f09471b 100644
--- a/tests/wpt/web-platform-tests/webgpu/runtime/wpt.js
+++ b/tests/wpt/web-platform-tests/webgpu/runtime/wpt.js
@@ -39,8 +39,9 @@ import { TestWorker } from './helper/test_worker.js';
}
this.step(() => {
+ // Unfortunately, it seems not possible to surface any logs for warn/skip.
if (r.status === 'fail') {
- throw (r.logs || []).join('\n');
+ throw (r.logs || []).map(s => s.toJSON()).join('\n\n');
}
});
this.done();
diff --git a/tests/wpt/web-platform-tests/webgpu/suites/cts/canvas/context_creation.spec.js b/tests/wpt/web-platform-tests/webgpu/suites/cts/canvas/context_creation.spec.js
index ba0d4722853..a693b002769 100644
--- a/tests/wpt/web-platform-tests/webgpu/suites/cts/canvas/context_creation.spec.js
+++ b/tests/wpt/web-platform-tests/webgpu/suites/cts/canvas/context_creation.spec.js
@@ -3,15 +3,12 @@
**/
export const description = ``;
-import { TestGroup } from '../../../framework/index.js';
-import { GPUTest } from '../gpu_test.js'; // TODO: doesn't need to use GPUTest
-
-export const g = new TestGroup(GPUTest);
-g.test('getContext returns GPUCanvasContext', async t => {
+import { Fixture, TestGroup } from '../../../framework/index.js';
+export const g = new TestGroup(Fixture);
+g.test('canvas element getContext returns GPUCanvasContext', async t => {
if (typeof document === 'undefined') {
// Skip if there is no document (Workers, Node)
- // TODO: Use t.skip()
- return;
+ t.skip('DOM is not available to create canvas element');
}
const canvas = document.createElement('canvas');
diff --git a/tests/wpt/web-platform-tests/webgpu/suites/cts/command_buffer/compute/basic.spec.js b/tests/wpt/web-platform-tests/webgpu/suites/cts/command_buffer/compute/basic.spec.js
index 8fcc7ef9309..8a5fc168a4d 100644
--- a/tests/wpt/web-platform-tests/webgpu/suites/cts/command_buffer/compute/basic.spec.js
+++ b/tests/wpt/web-platform-tests/webgpu/suites/cts/command_buffer/compute/basic.spec.js
@@ -48,7 +48,7 @@ g.test('memcpy', async t => {
}],
layout: bgl
});
- const module = t.device.createShaderModule({
+ const module = t.createShaderModule({
code:
/* GLSL(
* 'compute',
diff --git a/tests/wpt/web-platform-tests/webgpu/suites/cts/command_buffer/render/rendering.spec.js b/tests/wpt/web-platform-tests/webgpu/suites/cts/command_buffer/render/rendering.spec.js
index 46829a8d07c..54c627dfd35 100644
--- a/tests/wpt/web-platform-tests/webgpu/suites/cts/command_buffer/render/rendering.spec.js
+++ b/tests/wpt/web-platform-tests/webgpu/suites/cts/command_buffer/render/rendering.spec.js
@@ -21,7 +21,7 @@ g.test('fullscreen quad', async t => {
usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.OUTPUT_ATTACHMENT
});
const colorAttachmentView = colorAttachment.createView();
- const vertexModule = t.device.createShaderModule({
+ const vertexModule = t.createShaderModule({
code:
/* GLSL(
* 'vertex',
@@ -36,7 +36,7 @@ g.test('fullscreen quad', async t => {
*/
new Uint32Array([119734787, 66304, 524295, 39, 0, 131089, 1, 393227, 1, 1280527431, 1685353262, 808793134, 0, 196622, 0, 1, 458767, 0, 4, 1852399981, 0, 10, 26, 196611, 1, 310, 262149, 4, 1852399981, 0, 393221, 8, 1348430951, 1700164197, 2019914866, 0, 393222, 8, 0, 1348430951, 1953067887, 7237481, 458758, 8, 1, 1348430951, 1953393007, 1702521171, 0, 196613, 10, 0, 393221, 26, 1449094247, 1702130277, 1684949368, 30821, 327685, 29, 1701080681, 1818386808, 101, 327752, 8, 0, 11, 0, 327752, 8, 1, 11, 1, 196679, 8, 2, 262215, 26, 11, 42, 131091, 2, 196641, 3, 2, 196630, 6, 32, 262167, 7, 6, 4, 262174, 8, 7, 6, 262176, 9, 3, 8, 262203, 9, 10, 3, 262165, 11, 32, 1, 262187, 11, 12, 0, 262167, 13, 6, 2, 262165, 14, 32, 0, 262187, 14, 15, 3, 262172, 16, 13, 15, 262187, 6, 17, 3212836864, 262187, 6, 18, 3225419776, 327724, 13, 19, 17, 18, 262187, 6, 20, 1077936128, 262187, 6, 21, 1065353216, 327724, 13, 22, 20, 21, 327724, 13, 23, 17, 21, 393260, 16, 24, 19, 22, 23, 262176, 25, 1, 11, 262203, 25, 26, 1, 262176, 28, 7, 16, 262176, 30, 7, 13, 262187, 6, 33, 0, 262176, 37, 3, 7, 327734, 2, 4, 0, 3, 131320, 5, 262203, 28, 29, 7, 262205, 11, 27, 26, 196670, 29, 24, 327745, 30, 31, 29, 27, 262205, 13, 32, 31, 327761, 6, 34, 32, 0, 327761, 6, 35, 32, 1, 458832, 7, 36, 34, 35, 33, 21, 327745, 37, 38, 10, 12, 196670, 38, 36, 65789, 65592])
});
- const fragmentModule = t.device.createShaderModule({
+ const fragmentModule = t.createShaderModule({
code:
/* GLSL(
* 'fragment',
@@ -73,7 +73,7 @@ g.test('fullscreen quad', async t => {
alphaBlend: {},
colorBlend: {}
}],
- vertexInput: {
+ vertexState: {
indexFormat: 'uint16',
vertexBuffers: []
}
diff --git a/tests/wpt/web-platform-tests/webgpu/suites/cts/command_buffer/render/storeop.spec.js b/tests/wpt/web-platform-tests/webgpu/suites/cts/command_buffer/render/storeop.spec.js
index 0b38debc134..0326cf65ad6 100644
--- a/tests/wpt/web-platform-tests/webgpu/suites/cts/command_buffer/render/storeop.spec.js
+++ b/tests/wpt/web-platform-tests/webgpu/suites/cts/command_buffer/render/storeop.spec.js
@@ -18,7 +18,7 @@ g.test('storeOp controls whether 1x1 drawn quad is stored', async t => {
usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.OUTPUT_ATTACHMENT
}); // create render pipeline
- const vertexModule = t.device.createShaderModule({
+ const vertexModule = t.createShaderModule({
code:
/* GLSL(
* 'vertex',
@@ -36,7 +36,7 @@ g.test('storeOp controls whether 1x1 drawn quad is stored', async t => {
*/
new Uint32Array([119734787, 66304, 524295, 39, 0, 131089, 1, 393227, 1, 1280527431, 1685353262, 808793134, 0, 196622, 0, 1, 458767, 0, 4, 1852399981, 0, 13, 26, 196611, 2, 450, 262149, 4, 1852399981, 0, 393221, 11, 1348430951, 1700164197, 2019914866, 0, 393222, 11, 0, 1348430951, 1953067887, 7237481, 458758, 11, 1, 1348430951, 1953393007, 1702521171, 0, 458758, 11, 2, 1130327143, 1148217708, 1635021673, 6644590, 458758, 11, 3, 1130327143, 1147956341, 1635021673, 6644590, 196613, 13, 0, 393221, 26, 1449094247, 1702130277, 1684949368, 30821, 327685, 29, 1701080681, 1818386808, 101, 327752, 11, 0, 11, 0, 327752, 11, 1, 11, 1, 327752, 11, 2, 11, 3, 327752, 11, 3, 11, 4, 196679, 11, 2, 262215, 26, 11, 42, 131091, 2, 196641, 3, 2, 196630, 6, 32, 262167, 7, 6, 4, 262165, 8, 32, 0, 262187, 8, 9, 1, 262172, 10, 6, 9, 393246, 11, 7, 6, 10, 10, 262176, 12, 3, 11, 262203, 12, 13, 3, 262165, 14, 32, 1, 262187, 14, 15, 0, 262167, 16, 6, 2, 262187, 8, 17, 3, 262172, 18, 16, 17, 262187, 6, 19, 1065353216, 262187, 6, 20, 3212836864, 327724, 16, 21, 19, 20, 327724, 16, 22, 19, 19, 327724, 16, 23, 20, 19, 393260, 18, 24, 21, 22, 23, 262176, 25, 1, 14, 262203, 25, 26, 1, 262176, 28, 7, 18, 262176, 30, 7, 16, 262187, 6, 33, 0, 262176, 37, 3, 7, 327734, 2, 4, 0, 3, 131320, 5, 262203, 28, 29, 7, 262205, 14, 27, 26, 196670, 29, 24, 327745, 30, 31, 29, 27, 262205, 16, 32, 31, 327761, 6, 34, 32, 0, 327761, 6, 35, 32, 1, 458832, 7, 36, 34, 35, 33, 19, 327745, 37, 38, 13, 15, 196670, 38, 36, 65789, 65592])
});
- const fragmentModule = t.device.createShaderModule({
+ const fragmentModule = t.createShaderModule({
code:
/* GLSL(
* 'fragment',
diff --git a/tests/wpt/web-platform-tests/webgpu/suites/cts/gpu_test.js b/tests/wpt/web-platform-tests/webgpu/suites/cts/gpu_test.js
index 96f109d3043..a324e8839e5 100644
--- a/tests/wpt/web-platform-tests/webgpu/suites/cts/gpu_test.js
+++ b/tests/wpt/web-platform-tests/webgpu/suites/cts/gpu_test.js
@@ -6,8 +6,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
import { getGPU } from '../../framework/gpu/implementation.js';
import { Fixture } from '../../framework/index.js';
-let glslangInstance; // TODO: Should this gain some functionality currently only in UnitTest?
-
+let glslangInstance;
export class GPUTest extends Fixture {
constructor(...args) {
super(...args);
@@ -15,6 +14,10 @@ export class GPUTest extends Fixture {
_defineProperty(this, "device", undefined);
_defineProperty(this, "queue", undefined);
+
+ _defineProperty(this, "initialized", false);
+
+ _defineProperty(this, "supportsSPIRV", true);
}
async init() {
@@ -23,31 +26,53 @@ export class GPUTest extends Fixture {
const adapter = await gpu.requestAdapter();
this.device = await adapter.requestDevice();
this.queue = this.device.getQueue();
+ const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
+
+ if (isSafari) {
+ this.supportsSPIRV = false;
+ }
+
+ try {
+ await this.device.popErrorScope();
+ throw new Error('There was an error scope on the stack at the beginning of the test');
+ } catch (ex) {}
+
this.device.pushErrorScope('out-of-memory');
this.device.pushErrorScope('validation');
+ this.initialized = true;
}
async finalize() {
super.finalize();
- const gpuValidationError = await this.device.popErrorScope();
- if (gpuValidationError !== null) {
- if (!(gpuValidationError instanceof GPUValidationError)) throw new Error();
- this.fail(`Unexpected validation error occurred: ${gpuValidationError.message}`);
- }
+ if (this.initialized) {
+ const gpuValidationError = await this.device.popErrorScope();
+
+ if (gpuValidationError !== null) {
+ if (!(gpuValidationError instanceof GPUValidationError)) throw new Error();
+ this.fail(`Unexpected validation error occurred: ${gpuValidationError.message}`);
+ }
- const gpuOutOfMemoryError = await this.device.popErrorScope();
+ const gpuOutOfMemoryError = await this.device.popErrorScope();
- if (gpuOutOfMemoryError !== null) {
- if (!(gpuOutOfMemoryError instanceof GPUOutOfMemoryError)) throw new Error();
- this.fail('Unexpected out-of-memory error occurred');
+ if (gpuOutOfMemoryError !== null) {
+ if (!(gpuOutOfMemoryError instanceof GPUOutOfMemoryError)) throw new Error();
+ this.fail('Unexpected out-of-memory error occurred');
+ }
}
}
async initGLSL() {
if (!glslangInstance) {
const glslangPath = '../../glslang.js';
- const glslangModule = (await import(glslangPath)).default;
+ let glslangModule;
+
+ try {
+ glslangModule = (await import(glslangPath)).default;
+ } catch (ex) {
+ this.skip('glslang is not available');
+ }
+
await new Promise(resolve => {
glslangModule().then(glslang => {
glslangInstance = glslang;
@@ -57,12 +82,20 @@ export class GPUTest extends Fixture {
}
}
- makeShaderModule(stage, source) {
+ createShaderModule(desc) {
+ if (!this.supportsSPIRV) {
+ this.skip('SPIR-V not available');
+ }
+
+ return this.device.createShaderModule(desc);
+ }
+
+ makeShaderModuleFromGLSL(stage, glsl) {
if (!glslangInstance) {
- throw new Error('GLSL is not instantiated. Run `await t.initGLSL()` first');
+ throw new Error('GLSL compiler is not instantiated. Run `await t.initGLSL()` first');
}
- const code = glslangInstance.compileGLSL(source, stage, false);
+ const code = glslangInstance.compileGLSL(glsl, stage, false);
return this.device.createShaderModule({
code
});
@@ -79,41 +112,61 @@ export class GPUTest extends Fixture {
const c = this.device.createCommandEncoder();
c.copyBufferToBuffer(src, 0, dst, 0, size);
this.queue.submit([c.finish()]);
- this.eventualAsyncExpectation(async () => {
+ this.eventualAsyncExpectation(async niceStack => {
const actual = new Uint8Array((await dst.mapReadAsync()));
- this.expectBuffer(actual, exp);
+ const check = this.checkBuffer(actual, exp);
+
+ if (check !== undefined) {
+ niceStack.message = check;
+ this.rec.fail(niceStack);
+ }
+
dst.destroy();
});
}
expectBuffer(actual, exp) {
+ const check = this.checkBuffer(actual, exp);
+
+ if (check !== undefined) {
+ this.rec.fail(new Error(check));
+ }
+ }
+
+ checkBuffer(actual, exp) {
const size = exp.byteLength;
if (actual.byteLength !== size) {
- this.rec.fail('size mismatch');
- return;
+ return 'size mismatch';
}
+ const lines = [];
let failedPixels = 0;
for (let i = 0; i < size; ++i) {
if (actual[i] !== exp[i]) {
if (failedPixels > 4) {
- this.rec.fail('... and more');
+ lines.push('... and more');
break;
}
failedPixels++;
- this.rec.fail(`at [${i}], expected ${exp[i]}, got ${actual[i]}`);
+ lines.push(`at [${i}], expected ${exp[i]}, got ${actual[i]}`);
}
}
if (size <= 256 && failedPixels > 0) {
const expHex = Array.from(exp).map(x => x.toString(16).padStart(2, '0')).join('');
const actHex = Array.from(actual).map(x => x.toString(16).padStart(2, '0')).join('');
- this.rec.log('EXPECT: ' + expHex);
- this.rec.log('ACTUAL: ' + actHex);
+ lines.push('EXPECT: ' + expHex);
+ lines.push('ACTUAL: ' + actHex);
}
+
+ if (failedPixels) {
+ return lines.join('\n');
+ }
+
+ return undefined;
}
}
diff --git a/tests/wpt/web-platform-tests/webgpu/suites/cts/index.js b/tests/wpt/web-platform-tests/webgpu/suites/cts/index.js
index 33934cdd38c..d38bcc5b6b5 100644
--- a/tests/wpt/web-platform-tests/webgpu/suites/cts/index.js
+++ b/tests/wpt/web-platform-tests/webgpu/suites/cts/index.js
@@ -130,7 +130,7 @@ export const listing = [
"description": "setViewport validation tests."
},
{
- "path": "validation/vertex_input",
- "description": "vertexInput validation tests."
+ "path": "validation/vertex_state",
+ "description": "vertexState validation tests."
}
];
diff --git a/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/createRenderPipeline.spec.js b/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/createRenderPipeline.spec.js
index cc838fc6515..b66dabf285a 100644
--- a/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/createRenderPipeline.spec.js
+++ b/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/createRenderPipeline.spec.js
@@ -38,7 +38,7 @@ class F extends ValidationTest {
getVertexStage() {
return {
- module: this.device.createShaderModule({
+ module: this.createShaderModule({
code:
/* GLSL(
* 'vertex',
@@ -74,7 +74,7 @@ class F extends ValidationTest {
}
`;
return {
- module: this.makeShaderModule('fragment', code),
+ module: this.makeShaderModuleFromGLSL('fragment', code),
entryPoint: 'main'
};
}
diff --git a/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/render_pass.spec.js b/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/render_pass.spec.js
index 52da36fa7ac..3e08dcc1736 100644
--- a/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/render_pass.spec.js
+++ b/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/render_pass.spec.js
@@ -17,7 +17,7 @@ class F extends ValidationTest {
}
createRenderPipeline(pipelineLayout) {
- const vertexModule = this.device.createShaderModule({
+ const vertexModule = this.createShaderModule({
code:
/* GLSL(
* 'vertex',
@@ -34,7 +34,7 @@ class F extends ValidationTest {
*/
new Uint32Array([119734787, 66304, 524295, 47, 0, 131089, 1, 393227, 1, 1280527431, 1685353262, 808793134, 0, 196622, 0, 1, 458767, 0, 4, 1852399981, 0, 13, 33, 196611, 2, 450, 262149, 4, 1852399981, 0, 393221, 11, 1348430951, 1700164197, 2019914866, 0, 393222, 11, 0, 1348430951, 1953067887, 7237481, 458758, 11, 1, 1348430951, 1953393007, 1702521171, 0, 458758, 11, 2, 1130327143, 1148217708, 1635021673, 6644590, 458758, 11, 3, 1130327143, 1147956341, 1635021673, 6644590, 196613, 13, 0, 458757, 18, 1953654134, 1851095141, 1919903337, 1718960749, 7497062, 393222, 18, 0, 1851880052, 1919903347, 109, 196613, 20, 0, 393221, 33, 1449094247, 1702130277, 1684949368, 30821, 327685, 36, 1701080681, 1818386808, 101, 327752, 11, 0, 11, 0, 327752, 11, 1, 11, 1, 327752, 11, 2, 11, 3, 327752, 11, 3, 11, 4, 196679, 11, 2, 262216, 18, 0, 5, 327752, 18, 0, 35, 0, 327752, 18, 0, 7, 16, 196679, 18, 2, 262215, 20, 34, 0, 262215, 20, 33, 0, 262215, 33, 11, 42, 131091, 2, 196641, 3, 2, 196630, 6, 32, 262167, 7, 6, 4, 262165, 8, 32, 0, 262187, 8, 9, 1, 262172, 10, 6, 9, 393246, 11, 7, 6, 10, 10, 262176, 12, 3, 11, 262203, 12, 13, 3, 262165, 14, 32, 1, 262187, 14, 15, 0, 262167, 16, 6, 2, 262168, 17, 16, 2, 196638, 18, 17, 262176, 19, 2, 18, 262203, 19, 20, 2, 262176, 21, 2, 17, 262187, 8, 24, 3, 262172, 25, 16, 24, 262187, 6, 26, 3212836864, 327724, 16, 27, 26, 26, 262187, 6, 28, 1065353216, 327724, 16, 29, 28, 26, 327724, 16, 30, 26, 28, 393260, 25, 31, 27, 29, 30, 262176, 32, 1, 14, 262203, 32, 33, 1, 262176, 35, 7, 25, 262176, 37, 7, 16, 262187, 6, 41, 0, 262176, 45, 3, 7, 327734, 2, 4, 0, 3, 131320, 5, 262203, 35, 36, 7, 327745, 21, 22, 20, 15, 262205, 17, 23, 22, 262205, 14, 34, 33, 196670, 36, 31, 327745, 37, 38, 36, 34, 262205, 16, 39, 38, 327825, 16, 40, 23, 39, 327761, 6, 42, 40, 0, 327761, 6, 43, 40, 1, 458832, 7, 44, 42, 43, 41, 28, 327745, 45, 46, 13, 15, 196670, 46, 44, 65789, 65592])
});
- const fragmentModule = this.device.createShaderModule({
+ const fragmentModule = this.createShaderModule({
code:
/* GLSL(
* 'fragment',
diff --git a/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/setVertexBuffer.spec.js b/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/setVertexBuffer.spec.js
index 1df40173abe..ba22ee2d2a4 100644
--- a/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/setVertexBuffer.spec.js
+++ b/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/setVertexBuffer.spec.js
@@ -29,11 +29,12 @@ class F extends ValidationTest {
colorStates: [{
format: 'rgba8unorm'
}],
- vertexInput: {
+ vertexState: {
vertexBuffers: [{
- stride: 3 * 4,
- attributeSet: range(bufferCount, i => ({
+ arrayStride: 3 * 4,
+ attributes: range(bufferCount, i => ({
format: 'float3',
+ offset: 0,
shaderLocation: i
}))
}]
@@ -51,7 +52,7 @@ class F extends ValidationTest {
}
`;
return {
- module: this.makeShaderModule('vertex', code),
+ module: this.makeShaderModuleFromGLSL('vertex', code),
entryPoint: 'main'
};
}
@@ -65,7 +66,7 @@ class F extends ValidationTest {
}
`;
return {
- module: this.makeShaderModule('fragment', code),
+ module: this.makeShaderModuleFromGLSL('fragment', code),
entryPoint: 'main'
};
}
diff --git a/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/validation_test.js b/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/validation_test.js
index 099b8202204..dc5488e7698 100644
--- a/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/validation_test.js
+++ b/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/validation_test.js
@@ -25,13 +25,15 @@ export class ValidationTest extends GPUTest {
this.device.pushErrorScope('validation');
fn();
const promise = this.device.popErrorScope();
- this.eventualAsyncExpectation(async () => {
+ this.eventualAsyncExpectation(async niceStack => {
const gpuValidationError = await promise;
if (!gpuValidationError) {
- this.fail('Validation error was expected.');
+ niceStack.message = 'Validation error was expected.';
+ this.rec.fail(niceStack);
} else if (gpuValidationError instanceof GPUValidationError) {
- this.debug(`Captured validation error - ${gpuValidationError.message}`);
+ niceStack.message = `Captured validation error - ${gpuValidationError.message}`;
+ this.rec.debug(niceStack);
}
});
}
diff --git a/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/vertex_input.spec.js b/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/vertex_state.spec.js
index 951c9ead3cf..da619181192 100644
--- a/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/vertex_input.spec.js
+++ b/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/vertex_state.spec.js
@@ -3,13 +3,13 @@
**/
export const description = `
-vertexInput validation tests.
+vertexState validation tests.
`;
import { TestGroup } from '../../../framework/index.js';
import { ValidationTest } from './validation_test.js';
const MAX_VERTEX_ATTRIBUTES = 16;
const MAX_VERTEX_BUFFER_END = 2048;
-const MAX_VERTEX_BUFFER_STRIDE = 2048;
+const MAX_VERTEX_BUFFER_ARRAY_STRIDE = 2048;
const MAX_VERTEX_BUFFERS = 16;
const VERTEX_SHADER_CODE_WITH_NO_INPUT = `
#version 450
@@ -27,7 +27,7 @@ class F extends ValidationTest {
await Promise.all([super.init(), this.initGLSL()]);
}
- getDescriptor(vertexInput, vertexShaderCode) {
+ getDescriptor(vertexState, vertexShaderCode) {
const descriptor = {
vertexStage: this.getVertexStage(vertexShaderCode),
fragmentStage: this.getFragmentStage(),
@@ -36,14 +36,14 @@ class F extends ValidationTest {
colorStates: [{
format: 'rgba8unorm'
}],
- vertexInput
+ vertexState
};
return descriptor;
}
getVertexStage(code) {
return {
- module: this.makeShaderModule('vertex', code),
+ module: this.makeShaderModuleFromGLSL('vertex', code),
entryPoint: 'main'
};
}
@@ -57,7 +57,7 @@ class F extends ValidationTest {
}
`;
return {
- module: this.makeShaderModule('fragment', code),
+ module: this.makeShaderModuleFromGLSL('fragment', code),
entryPoint: 'main'
};
}
@@ -72,73 +72,78 @@ class F extends ValidationTest {
export const g = new TestGroup(F);
g.test('an empty vertex input is valid', t => {
- const vertexInput = {};
- const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT);
+ const vertexState = {};
+ const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT);
t.device.createRenderPipeline(descriptor);
});
g.test('a null buffer is valid', t => {
{
// One null buffer is OK
- const vertexInput = {
+ const vertexState = {
vertexBuffers: [{
- stride: 0,
- attributeSet: []
+ arrayStride: 0,
+ attributes: []
}]
};
- const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT);
+ const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT);
t.device.createRenderPipeline(descriptor);
}
{
// One null buffer followed by a buffer is OK
- const vertexInput = {
+ const vertexState = {
vertexBuffers: [{
- stride: 0,
- attributeSet: []
+ arrayStride: 0,
+ attributes: []
}, {
- stride: 0,
- attributeSet: [{
- shaderLocation: 0,
- format: 'float'
+ arrayStride: 0,
+ attributes: [{
+ format: 'float',
+ offset: 0,
+ shaderLocation: 0
}]
}]
};
- const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT);
+ const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT);
t.device.createRenderPipeline(descriptor);
}
{
// One null buffer sitting between buffers is OK
- const vertexInput = {
+ const vertexState = {
vertexBuffers: [{
- stride: 0,
- attributeSet: [{
- shaderLocation: 0,
- format: 'float'
+ arrayStride: 0,
+ attributes: [{
+ format: 'float',
+ offset: 0,
+ shaderLocation: 0
}]
}, {
- stride: 0,
- attributeSet: []
+ arrayStride: 0,
+ attributes: []
}, {
- stride: 0,
- attributeSet: [{
- shaderLocation: 1,
- format: 'float'
+ arrayStride: 0,
+ attributes: [{
+ format: 'float',
+ offset: 0,
+ shaderLocation: 1
}]
}]
};
- const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT);
+ const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT);
t.device.createRenderPipeline(descriptor);
}
});
g.test('pipeline vertex buffers are backed by attributes in vertex input', async t => {
- const vertexInput = {
+ const vertexState = {
vertexBuffers: [{
- stride: 2 * Float32Array.BYTES_PER_ELEMENT,
- attributeSet: [{
- shaderLocation: 0,
- format: 'float'
+ arrayStride: 2 * Float32Array.BYTES_PER_ELEMENT,
+ attributes: [{
+ format: 'float',
+ offset: 0,
+ shaderLocation: 0
}, {
- shaderLocation: 1,
- format: 'float'
+ format: 'float',
+ offset: 0,
+ shaderLocation: 1
}]
}]
};
@@ -152,11 +157,11 @@ g.test('pipeline vertex buffers are backed by attributes in vertex input', async
gl_Position = vec4(0.0);
}
`;
- const descriptor = t.getDescriptor(vertexInput, code);
+ const descriptor = t.getDescriptor(vertexState, code);
t.device.createRenderPipeline(descriptor);
}
{
- // Check it is valid for the pipeline to use a subset of the VertexInput
+ // Check it is valid for the pipeline to use a subset of the VertexState
const code = `
#version 450
layout(location = 0) in vec4 a;
@@ -164,7 +169,7 @@ g.test('pipeline vertex buffers are backed by attributes in vertex input', async
gl_Position = vec4(0.0);
}
`;
- const descriptor = t.getDescriptor(vertexInput, code);
+ const descriptor = t.getDescriptor(vertexState, code);
t.device.createRenderPipeline(descriptor);
}
{
@@ -176,103 +181,106 @@ g.test('pipeline vertex buffers are backed by attributes in vertex input', async
gl_Position = vec4(0.0);
}
`;
- const descriptor = t.getDescriptor(vertexInput, code);
+ const descriptor = t.getDescriptor(vertexState, code);
t.expectValidationError(() => {
t.device.createRenderPipeline(descriptor);
});
}
});
-g.test('a stride of 0 is valid', t => {
- const vertexInput = {
+g.test('an arrayStride of 0 is valid', t => {
+ const vertexState = {
vertexBuffers: [{
- stride: 0,
- attributeSet: [{
- shaderLocation: 0,
- format: 'float'
+ arrayStride: 0,
+ attributes: [{
+ format: 'float',
+ offset: 0,
+ shaderLocation: 0
}]
}]
};
{
// Works ok without attributes
- const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT);
+ const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT);
t.device.createRenderPipeline(descriptor);
}
{
// Works ok with attributes at a large-ish offset
- vertexInput.vertexBuffers[0].attributeSet[0].offset = 128;
- const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT);
+ vertexState.vertexBuffers[0].attributes[0].offset = 128;
+ const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT);
t.device.createRenderPipeline(descriptor);
}
});
-g.test('offset should be within vertex buffer stride if stride is not zero', async t => {
- const vertexInput = {
+g.test('offset should be within vertex buffer arrayStride if arrayStride is not zero', async t => {
+ const vertexState = {
vertexBuffers: [{
- stride: 2 * Float32Array.BYTES_PER_ELEMENT,
- attributeSet: [{
- shaderLocation: 0,
- format: 'float'
+ arrayStride: 2 * Float32Array.BYTES_PER_ELEMENT,
+ attributes: [{
+ format: 'float',
+ offset: 0,
+ shaderLocation: 0
}, {
+ format: 'float',
offset: Float32Array.BYTES_PER_ELEMENT,
- shaderLocation: 1,
- format: 'float'
+ shaderLocation: 1
}]
}]
};
{
- // Control case, setting correct stride and offset
- const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT);
+ // Control case, setting correct arrayStride and offset
+ const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT);
t.device.createRenderPipeline(descriptor);
}
{
- // Test vertex attribute offset exceed vertex buffer stride range
- const badVertexInput = clone(vertexInput);
- badVertexInput.vertexBuffers[0].attributeSet[1].format = 'float2';
- const descriptor = t.getDescriptor(badVertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT);
+ // Test vertex attribute offset exceed vertex buffer arrayStride range
+ const badVertexState = clone(vertexState);
+ badVertexState.vertexBuffers[0].attributes[1].format = 'float2';
+ const descriptor = t.getDescriptor(badVertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT);
t.expectValidationError(() => {
t.device.createRenderPipeline(descriptor);
});
}
{
- // Test vertex attribute offset exceed vertex buffer stride range
- const badVertexInput = clone(vertexInput);
- badVertexInput.vertexBuffers[0].stride = Float32Array.BYTES_PER_ELEMENT;
- const descriptor = t.getDescriptor(badVertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT);
+ // Test vertex attribute offset exceed vertex buffer arrayStride range
+ const badVertexState = clone(vertexState);
+ badVertexState.vertexBuffers[0].arrayStride = Float32Array.BYTES_PER_ELEMENT;
+ const descriptor = t.getDescriptor(badVertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT);
t.expectValidationError(() => {
t.device.createRenderPipeline(descriptor);
});
}
{
- // It's OK if stride is zero
- const goodVertexInput = clone(vertexInput);
- goodVertexInput.vertexBuffers[0].stride = 0;
- const descriptor = t.getDescriptor(goodVertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT);
+ // It's OK if arrayStride is zero
+ const goodVertexState = clone(vertexState);
+ goodVertexState.vertexBuffers[0].arrayStride = 0;
+ const descriptor = t.getDescriptor(goodVertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT);
t.device.createRenderPipeline(descriptor);
}
});
g.test('check two attributes overlapping', async t => {
- const vertexInput = {
+ const vertexState = {
vertexBuffers: [{
- stride: 2 * Float32Array.BYTES_PER_ELEMENT,
- attributeSet: [{
- shaderLocation: 0,
- format: 'float'
+ arrayStride: 2 * Float32Array.BYTES_PER_ELEMENT,
+ attributes: [{
+ format: 'float',
+ offset: 0,
+ shaderLocation: 0
}, {
+ format: 'float',
offset: Float32Array.BYTES_PER_ELEMENT,
- shaderLocation: 1,
- format: 'float'
+ shaderLocation: 1
}]
}]
};
{
- // Control case, setting correct stride and offset
- const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT);
+ // Control case, setting correct arrayStride and offset
+ const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT);
t.device.createRenderPipeline(descriptor);
}
{
// Test two attributes overlapping
- const badVertexInput = clone(vertexInput);
- badVertexInput.vertexBuffers[0].attributeSet[0].format = 'int2';
- const descriptor = t.getDescriptor(badVertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT);
+ const badVertexState = clone(vertexState);
+ badVertexState.vertexBuffers[0].attributes[0].format = 'int2';
+ const descriptor = t.getDescriptor(badVertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT);
t.expectValidationError(() => {
t.device.createRenderPipeline(descriptor);
});
@@ -283,34 +291,36 @@ g.test('check out of bounds condition on total number of vertex buffers', async
for (let i = 0; i < MAX_VERTEX_BUFFERS; i++) {
vertexBuffers.push({
- stride: 0,
- attributeSet: [{
- shaderLocation: i,
- format: 'float'
+ arrayStride: 0,
+ attributes: [{
+ format: 'float',
+ offset: 0,
+ shaderLocation: i
}]
});
}
{
// Control case, setting max vertex buffer number
- const vertexInput = {
+ const vertexState = {
vertexBuffers
};
- const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT);
+ const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT);
t.device.createRenderPipeline(descriptor);
}
{
// Test vertex buffer number exceed the limit
- const vertexInput = {
+ const vertexState = {
vertexBuffers: [...vertexBuffers, {
- stride: 0,
- attributeSet: [{
- shaderLocation: MAX_VERTEX_BUFFERS,
- format: 'float'
+ arrayStride: 0,
+ attributes: [{
+ format: 'float',
+ offset: 0,
+ shaderLocation: MAX_VERTEX_BUFFERS
}]
}]
};
- const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT);
+ const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT);
t.expectValidationError(() => {
t.device.createRenderPipeline(descriptor);
});
@@ -321,34 +331,36 @@ g.test('check out of bounds on number of vertex attributes on a single vertex bu
for (let i = 0; i < MAX_VERTEX_ATTRIBUTES; i++) {
vertexAttributes.push({
- shaderLocation: i,
- format: 'float'
+ format: 'float',
+ offset: 0,
+ shaderLocation: i
});
}
{
// Control case, setting max vertex buffer number
- const vertexInput = {
+ const vertexState = {
vertexBuffers: [{
- stride: 0,
- attributeSet: vertexAttributes
+ arrayStride: 0,
+ attributes: vertexAttributes
}]
};
- const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT);
+ const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT);
t.device.createRenderPipeline(descriptor);
}
{
// Test vertex attribute number exceed the limit
- const vertexInput = {
+ const vertexState = {
vertexBuffers: [{
- stride: 0,
- attributeSet: [...vertexAttributes, {
- shaderLocation: MAX_VERTEX_ATTRIBUTES,
- format: 'float'
+ arrayStride: 0,
+ attributes: [...vertexAttributes, {
+ format: 'float',
+ offset: 0,
+ shaderLocation: MAX_VERTEX_ATTRIBUTES
}]
}]
};
- const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT);
+ const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT);
t.expectValidationError(() => {
t.device.createRenderPipeline(descriptor);
});
@@ -359,104 +371,109 @@ g.test('check out of bounds on number of vertex attributes across vertex buffers
for (let i = 0; i < MAX_VERTEX_ATTRIBUTES; i++) {
vertexBuffers.push({
- stride: 0,
- attributeSet: [{
- shaderLocation: i,
- format: 'float'
+ arrayStride: 0,
+ attributes: [{
+ format: 'float',
+ offset: 0,
+ shaderLocation: i
}]
});
}
{
// Control case, setting max vertex buffer number
- const vertexInput = {
+ const vertexState = {
vertexBuffers
};
- const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT);
+ const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT);
t.device.createRenderPipeline(descriptor);
}
{
// Test vertex attribute number exceed the limit
- vertexBuffers[MAX_VERTEX_ATTRIBUTES - 1].attributeSet.push({
- shaderLocation: MAX_VERTEX_ATTRIBUTES,
- format: 'float'
+ vertexBuffers[MAX_VERTEX_ATTRIBUTES - 1].attributes.push({
+ format: 'float',
+ offset: 0,
+ shaderLocation: MAX_VERTEX_ATTRIBUTES
});
- const vertexInput = {
+ const vertexState = {
vertexBuffers
};
- const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT);
+ const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT);
t.expectValidationError(() => {
t.device.createRenderPipeline(descriptor);
});
}
});
g.test('check out of bounds condition on input strides', async t => {
- const vertexInput = {
+ const vertexState = {
vertexBuffers: [{
- stride: MAX_VERTEX_BUFFER_STRIDE,
- attributeSet: []
+ arrayStride: MAX_VERTEX_BUFFER_ARRAY_STRIDE,
+ attributes: []
}]
};
{
- // Control case, setting max input stride
- const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT);
+ // Control case, setting max input arrayStride
+ const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT);
t.device.createRenderPipeline(descriptor);
}
{
- // Test input stride OOB
- vertexInput.vertexBuffers[0].stride = MAX_VERTEX_BUFFER_STRIDE + 4;
- const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT);
+ // Test input arrayStride OOB
+ vertexState.vertexBuffers[0].arrayStride = MAX_VERTEX_BUFFER_ARRAY_STRIDE + 4;
+ const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT);
t.expectValidationError(() => {
t.device.createRenderPipeline(descriptor);
});
}
});
-g.test('check multiple of 4 bytes constraint on input stride', async t => {
- const vertexInput = {
+g.test('check multiple of 4 bytes constraint on input arrayStride', async t => {
+ const vertexState = {
vertexBuffers: [{
- stride: 4,
- attributeSet: [{
- shaderLocation: 0,
- format: 'uchar2'
+ arrayStride: 4,
+ attributes: [{
+ format: 'uchar2',
+ offset: 0,
+ shaderLocation: 0
}]
}]
};
{
- // Control case, setting input stride 4 bytes
- const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT);
+ // Control case, setting input arrayStride 4 bytes
+ const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT);
t.device.createRenderPipeline(descriptor);
}
{
- // Test input stride not multiple of 4 bytes
- vertexInput.vertexBuffers[0].stride = 2;
- const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT);
+ // Test input arrayStride not multiple of 4 bytes
+ vertexState.vertexBuffers[0].arrayStride = 2;
+ const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT);
t.expectValidationError(() => {
t.device.createRenderPipeline(descriptor);
});
}
});
g.test('identical duplicate attributes are invalid', async t => {
- const vertexInput = {
+ const vertexState = {
vertexBuffers: [{
- stride: 0,
- attributeSet: [{
- shaderLocation: 0,
- format: 'float'
+ arrayStride: 0,
+ attributes: [{
+ format: 'float',
+ offset: 0,
+ shaderLocation: 0
}]
}]
};
{
// Control case, setting attribute 0
- const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT);
+ const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT);
t.device.createRenderPipeline(descriptor);
}
{
// Oh no, attribute 0 is set twice
- vertexInput.vertexBuffers[0].attributeSet.push({
- shaderLocation: 0,
- format: 'float'
+ vertexState.vertexBuffers[0].attributes.push({
+ format: 'float',
+ offset: 0,
+ shaderLocation: 0
});
- const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT);
+ const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT);
t.expectValidationError(() => {
t.device.createRenderPipeline(descriptor);
});
@@ -464,160 +481,164 @@ g.test('identical duplicate attributes are invalid', async t => {
});
g.test('we cannot set same shader location', async t => {
{
- const vertexInput = {
+ const vertexState = {
vertexBuffers: [{
- stride: 0,
- attributeSet: [{
- shaderLocation: 0,
- format: 'float'
+ arrayStride: 0,
+ attributes: [{
+ format: 'float',
+ offset: 0,
+ shaderLocation: 0
}, {
+ format: 'float',
offset: Float32Array.BYTES_PER_ELEMENT,
- shaderLocation: 1,
- format: 'float'
+ shaderLocation: 1
}]
}]
};
{
// Control case, setting different shader locations in two attributes
- const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT);
+ const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT);
t.device.createRenderPipeline(descriptor);
}
{
// Test same shader location in two attributes in the same buffer
- vertexInput.vertexBuffers[0].attributeSet[1].shaderLocation = 0;
- const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT);
+ vertexState.vertexBuffers[0].attributes[1].shaderLocation = 0;
+ const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT);
t.expectValidationError(() => {
t.device.createRenderPipeline(descriptor);
});
}
}
{
- const vertexInput = {
+ const vertexState = {
vertexBuffers: [{
- stride: 0,
- attributeSet: [{
- shaderLocation: 0,
- format: 'float'
+ arrayStride: 0,
+ attributes: [{
+ format: 'float',
+ offset: 0,
+ shaderLocation: 0
}]
}, {
- stride: 0,
- attributeSet: [{
- shaderLocation: 0,
- format: 'float'
+ arrayStride: 0,
+ attributes: [{
+ format: 'float',
+ offset: 0,
+ shaderLocation: 0
}]
}]
}; // Test same shader location in two attributes in different buffers
- const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT);
+ const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT);
t.expectValidationError(() => {
t.device.createRenderPipeline(descriptor);
});
}
});
g.test('check out of bounds condition on attribute shader location', async t => {
- const vertexInput = {
+ const vertexState = {
vertexBuffers: [{
- stride: 0,
- attributeSet: [{
- shaderLocation: MAX_VERTEX_ATTRIBUTES - 1,
- format: 'float'
+ arrayStride: 0,
+ attributes: [{
+ format: 'float',
+ offset: 0,
+ shaderLocation: MAX_VERTEX_ATTRIBUTES - 1
}]
}]
};
{
// Control case, setting last attribute shader location
- const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT);
+ const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT);
t.device.createRenderPipeline(descriptor);
}
{
// Test attribute location OOB
- vertexInput.vertexBuffers[0].attributeSet[0].shaderLocation = MAX_VERTEX_ATTRIBUTES;
- const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT);
+ vertexState.vertexBuffers[0].attributes[0].shaderLocation = MAX_VERTEX_ATTRIBUTES;
+ const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT);
t.expectValidationError(() => {
t.device.createRenderPipeline(descriptor);
});
}
});
g.test('check attribute offset out of bounds', async t => {
- const vertexInput = {
+ const vertexState = {
vertexBuffers: [{
- stride: 0,
- attributeSet: [{
+ arrayStride: 0,
+ attributes: [{
+ format: 'float2',
offset: MAX_VERTEX_BUFFER_END - 2 * Float32Array.BYTES_PER_ELEMENT,
- shaderLocation: 0,
- format: 'float2'
+ shaderLocation: 0
}]
}]
};
{
// Control case, setting max attribute offset to MAX_VERTEX_BUFFER_END - 8
- const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT);
+ const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT);
t.device.createRenderPipeline(descriptor);
}
{
// Control case, setting attribute offset to 8
- vertexInput.vertexBuffers[0].attributeSet[0].offset = 8;
- const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT);
+ vertexState.vertexBuffers[0].attributes[0].offset = 8;
+ const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT);
t.device.createRenderPipeline(descriptor);
}
{
// Test attribute offset out of bounds
- vertexInput.vertexBuffers[0].attributeSet[0].offset = MAX_VERTEX_BUFFER_END - 4;
- const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT);
+ vertexState.vertexBuffers[0].attributes[0].offset = MAX_VERTEX_BUFFER_END - 4;
+ const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT);
t.expectValidationError(() => {
t.device.createRenderPipeline(descriptor);
});
}
});
g.test('check multiple of 4 bytes constraint on offset', async t => {
- const vertexInput = {
+ const vertexState = {
vertexBuffers: [{
- stride: 0,
- attributeSet: [{
+ arrayStride: 0,
+ attributes: [{
+ format: 'float',
offset: Float32Array.BYTES_PER_ELEMENT,
- shaderLocation: 0,
- format: 'float'
+ shaderLocation: 0
}]
}]
};
{
// Control case, setting offset 4 bytes
- const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT);
+ const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT);
t.device.createRenderPipeline(descriptor);
}
{
// Test offset of 2 bytes with uchar2 format
- vertexInput.vertexBuffers[0].attributeSet[0].offset = 2;
- vertexInput.vertexBuffers[0].attributeSet[0].format = 'uchar2';
- const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT);
+ vertexState.vertexBuffers[0].attributes[0].offset = 2;
+ vertexState.vertexBuffers[0].attributes[0].format = 'uchar2';
+ const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT);
t.expectValidationError(() => {
t.device.createRenderPipeline(descriptor);
});
}
{
// Test offset of 2 bytes with float format
- vertexInput.vertexBuffers[0].attributeSet[0].offset = 2;
- vertexInput.vertexBuffers[0].attributeSet[0].format = 'float';
- const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT);
+ vertexState.vertexBuffers[0].attributes[0].offset = 2;
+ vertexState.vertexBuffers[0].attributes[0].format = 'float';
+ const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT);
t.expectValidationError(() => {
t.device.createRenderPipeline(descriptor);
});
}
});
g.test('check attribute offset overflow', async t => {
- const vertexInput = {
+ const vertexState = {
vertexBuffers: [{
- stride: 0,
- attributeSet: [{
+ arrayStride: 0,
+ attributes: [{
+ format: 'float',
offset: Number.MAX_SAFE_INTEGER,
- shaderLocation: 0,
- format: 'float'
+ shaderLocation: 0
}]
}]
};
- const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT);
+ const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT);
t.expectValidationError(() => {
t.device.createRenderPipeline(descriptor);
});
});
-//# sourceMappingURL=vertex_input.spec.js.map \ No newline at end of file
+//# sourceMappingURL=vertex_state.spec.js.map \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html
index 9dd364ed327..32f2eb9b460 100644
--- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html
+++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html
@@ -371,4 +371,30 @@ promise_test(async t => {
assert_array_equals(pc2.iceStates, ['new', 'checking', 'connected']);
}, 'Responder ICE connection state behaves as expected');
+/*
+ Test case for step 11 of PeerConnection.close().
+ ...
+ 11. Set connection's ICE connection state to "closed". This does not invoke
+ the "update the ICE connection state" procedure, and does not fire any
+ event.
+ ...
+*/
+promise_test(async t => {
+ const pc1 = new RTCPeerConnection();
+ t.add_cleanup(() => pc1.close());
+ const pc2 = new RTCPeerConnection();
+ const stream = await getNoiseStream({ audio: true });
+ t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
+
+ stream.getTracks().forEach(track => pc1.addTrack(track, stream));
+ exchangeIceCandidates(pc1, pc2);
+ doSignalingHandshake(pc1, pc2);
+ await listenToIceConnected(pc2);
+
+ pc2.oniceconnectionstatechange = t.unreached_func();
+ pc2.close();
+ await Promise.resolve();
+ assert_true(pc2.iceConnectionState === 'closed');
+}, 'Closing a PeerConnection should not fire iceconnectionstatechange event');
+
</script>
diff --git a/tests/wpt/web-platform-tests/websockets/unload-a-document/001-1.html b/tests/wpt/web-platform-tests/websockets/unload-a-document/001-1.html
index bd0c3668695..75d689e0b3d 100644
--- a/tests/wpt/web-platform-tests/websockets/unload-a-document/001-1.html
+++ b/tests/wpt/web-platform-tests/websockets/unload-a-document/001-1.html
@@ -6,7 +6,6 @@
<script>
var controller = opener || parent;
var t = controller.t;
-var assert_equals = controller.asset_equals;
var assert_unreached = controller.assert_unreached;
var uuid = controller.uuid;
t.add_cleanup(function() {delete sessionStorage[uuid];});
diff --git a/tests/wpt/web-platform-tests/websockets/unload-a-document/002-1.html b/tests/wpt/web-platform-tests/websockets/unload-a-document/002-1.html
index d151b231f25..546de89dfee 100644
--- a/tests/wpt/web-platform-tests/websockets/unload-a-document/002-1.html
+++ b/tests/wpt/web-platform-tests/websockets/unload-a-document/002-1.html
@@ -6,9 +6,9 @@
<script>
var controller = opener || parent;
var t = controller.t;
-var assert_equals = controller.asset_equals;
+var assert_equals = controller.assert_equals;
var assert_unreached = controller.assert_unreached ;
-var uuid = controller.token;
+var uuid = controller.uuid;
t.add_cleanup(function() {delete sessionStorage[uuid];});
t.step(function() {
// this test can fail if the document is unloaded on navigation e.g. due to OOM
diff --git a/tests/wpt/web-platform-tests/wpt.py b/tests/wpt/web-platform-tests/wpt.py
index 0736186c5d8..c65e1ed2c6c 100644
--- a/tests/wpt/web-platform-tests/wpt.py
+++ b/tests/wpt/web-platform-tests/wpt.py
@@ -1 +1,3 @@
-execfile("wpt") \ No newline at end of file
+# This file exists to allow `python wpt <command>` to work on Windows:
+# https://github.com/web-platform-tests/wpt/pull/6907
+execfile("wpt")
diff --git a/tests/wpt/web-platform-tests/xhr/resources/echo-method.py b/tests/wpt/web-platform-tests/xhr/resources/echo-method.py
index 5351d1961ac..ccb46b6b2eb 100644
--- a/tests/wpt/web-platform-tests/xhr/resources/echo-method.py
+++ b/tests/wpt/web-platform-tests/xhr/resources/echo-method.py
@@ -1,6 +1,17 @@
+# This handler is designed to verify that UAs correctly discard the body of
+# responses to HTTP HEAD requests. If the response body is written to a
+# separate TCP packet, then this behavior cannot be verified. This handler uses
+# the response writer to ensure that the body is transmitted in the same packet
+# as the headers. In this way, non-conforming UAs will consistently fail the
+# associated test.
+
def main(request, response):
- response.send_body_for_head_request = True
- headers = [("Content-type", "text/plain")]
content = request.method
- return headers, content
+ response.add_required_headers = False
+ response.writer.write('''HTTP/1.1 200 OK
+Content-type: text/plain
+Content-Length: {}
+
+{}'''.format(len(content), content))
+ response.writer.flush()