aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/wpt/metadata/MANIFEST.json1224
-rw-r--r--tests/wpt/metadata/css/css-fonts/variations/at-font-face-font-matching.html.ini9
-rw-r--r--tests/wpt/metadata/css/css-fonts/variations/font-weight-matching.html.ini9
-rw-r--r--tests/wpt/metadata/css/css-text/hyphens/hyphens-shaping-001.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/hyphens/hyphens-shaping-002.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/hyphens/hyphens-span-001.html.ini4
-rw-r--r--tests/wpt/metadata/css/css-text/hyphens/shy-styling-001.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/line-break/line-break-shaping-001.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-shaping-001.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-shaping-002.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-002.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-transitions/transitions-animatable-properties-01.html.ini3
-rw-r--r--tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini2
-rw-r--r--tests/wpt/metadata/css/cssom/getComputedStyle-insets-sticky-container-for-abspos.html.ini2
-rw-r--r--tests/wpt/metadata/css/cssom/getComputedStyle-sticky-pos-percent.html.ini4
-rw-r--r--tests/wpt/metadata/fetch/content-type/response.window.js.ini21
-rw-r--r--tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini3
-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.ini4
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.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/webappapis/dynamic-markup-insertion/document-write/iframe_005.html.ini4
-rw-r--r--tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/ignore-opens-during-unload.window.js.ini2
-rw-r--r--tests/wpt/metadata/resource-timing/resource_timing_buffer_full_eventually.html.ini5
-rw-r--r--tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini18
-rw-r--r--tests/wpt/metadata/workers/semantics/multiple-workers/005.html.ini1
-rw-r--r--tests/wpt/metadata/workers/semantics/run-a-worker/003.html.ini1
-rw-r--r--tests/wpt/web-platform-tests/animation-worklet/stateful-animator.https.html55
-rw-r--r--tests/wpt/web-platform-tests/conformance-checkers/Makefile8
-rw-r--r--tests/wpt/web-platform-tests/cookies/samesite/fetch.html1
-rw-r--r--tests/wpt/web-platform-tests/cookies/samesite/form-get-blank.html1
-rw-r--r--tests/wpt/web-platform-tests/cookies/samesite/form-post-blank.html1
-rw-r--r--tests/wpt/web-platform-tests/cookies/samesite/iframe-reload.html1
-rw-r--r--tests/wpt/web-platform-tests/cookies/samesite/iframe.html1
-rw-r--r--tests/wpt/web-platform-tests/cookies/samesite/img.html1
-rw-r--r--tests/wpt/web-platform-tests/css/css-flexbox/align-items-007.html15
-rw-r--r--tests/wpt/web-platform-tests/css/css-lists/counter-set-001-ref.html4
-rw-r--r--tests/wpt/web-platform-tests/css/css-lists/counter-set-001.html4
-rw-r--r--tests/wpt/web-platform-tests/css/css-lists/li-list-item-counter-ref.html6
-rw-r--r--tests/wpt/web-platform-tests/css/css-lists/li-value-counter-reset-001-ref.html6
-rw-r--r--tests/wpt/web-platform-tests/css/css-position/position-absolute-crash-chrome-006.html33
-rw-r--r--tests/wpt/web-platform-tests/css/css-position/position-absolute-crash-chrome-007.html68
-rw-r--r--tests/wpt/web-platform-tests/css/css-position/position-absolute-in-inline-002.html51
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/hyphens/hyphens-shaping-001.html35
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/hyphens/hyphens-shaping-002.html31
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/hyphens/hyphens-span-001.html28
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/hyphens/hyphens-span-002.html36
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/hyphens/reference/hyphens-shaping-001-ref.html25
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/hyphens/reference/hyphens-shaping-002-ref.html6
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/hyphens/reference/hyphens-span-001-ref.html24
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/hyphens/reference/hyphens-span-002-ref.html22
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/hyphens/reference/shy-styling-001-alt-ref.html15
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/hyphens/reference/shy-styling-001-ref.html15
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/hyphens/shy-styling-001.html24
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/line-break/line-break-shaping-001.html39
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/line-break/reference/line-break-shaping-001-ref.html26
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-shaping-001.html39
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-shaping-002.html39
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/overflow-wrap/reference/overflow-wrap-shaping-001-ref.html26
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/reference/white-space-intrinsic-size-004-ref.html12
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-002-ref.html4
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-003-ref.html15
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/white-space-intrinsic-size-004.html12
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-002.html6
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-003.html22
-rw-r--r--tests/wpt/web-platform-tests/css/css-transitions/disconnected-element-001.html47
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-001-manual.html30
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-002-manual.html31
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-003-manual.html30
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-005-manual.html28
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-006-manual.html28
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-007-manual.html29
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-008-manual.html29
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-009-manual.html29
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-010-manual.html29
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-012-manual.html35
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-014-manual.html35
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-015-manual.html27
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-forms-001-manual.html29
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-forms-002-manual.html29
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-forms-003-manual.html29
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-forms-004-manual.html29
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-forms-005-manual.html34
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-forms-006-manual.html34
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-table-001-manual.html33
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-table-002-manual.html26
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-001-manual.html30
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-002-manual.html31
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-003-manual.html30
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-005-manual.html28
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-007-manual.html29
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-008-manual.html29
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-009-manual.html29
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-010-manual.html29
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-012-manual.html35
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-014-manual.html35
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-015-manual.html27
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-forms-001-manual.html29
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-forms-002-manual.html29
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-forms-003-manual.html29
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-forms-004-manual.html29
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-forms-005-manual.html34
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-forms-006-manual.html34
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-table-001-manual.html33
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-table-002-manual.html26
-rw-r--r--tests/wpt/web-platform-tests/css/cssom/getComputedStyle-insets-sticky-container-for-abspos.html26
-rw-r--r--tests/wpt/web-platform-tests/css/cssom/getComputedStyle-insets-sticky.html5
-rw-r--r--tests/wpt/web-platform-tests/css/cssom/getComputedStyle-sticky-pos-percent.html22
-rw-r--r--tests/wpt/web-platform-tests/css/cssom/support/getComputedStyle-insets.js19
-rw-r--r--tests/wpt/web-platform-tests/css/support/red-rect.svg6
-rw-r--r--tests/wpt/web-platform-tests/docs/_writing-tests/index.md55
-rw-r--r--tests/wpt/web-platform-tests/docs/_writing-tests/lint-tool.md2
-rw-r--r--tests/wpt/web-platform-tests/docs/_writing-tests/wdspec.md75
-rw-r--r--tests/wpt/web-platform-tests/docs/introduction.md37
-rw-r--r--tests/wpt/web-platform-tests/element-timing/background-image-data-uri.html2
-rw-r--r--tests/wpt/web-platform-tests/element-timing/background-image-multiple-elements.html6
-rw-r--r--tests/wpt/web-platform-tests/element-timing/background-image-stretched.html3
-rw-r--r--tests/wpt/web-platform-tests/element-timing/buffer-before-onload.html2
-rw-r--r--tests/wpt/web-platform-tests/element-timing/cross-origin-element.sub.html5
-rw-r--r--tests/wpt/web-platform-tests/element-timing/disconnect-image.html42
-rw-r--r--tests/wpt/web-platform-tests/element-timing/image-TAO-wildcard.sub.html5
-rw-r--r--tests/wpt/web-platform-tests/element-timing/image-carousel.html6
-rw-r--r--tests/wpt/web-platform-tests/element-timing/image-clipped-svg.html3
-rw-r--r--tests/wpt/web-platform-tests/element-timing/image-data-uri.html2
-rw-r--r--tests/wpt/web-platform-tests/element-timing/image-not-fully-visible.html5
-rw-r--r--tests/wpt/web-platform-tests/element-timing/image-rect-iframe.html1
-rw-r--r--tests/wpt/web-platform-tests/element-timing/image-with-css-scale.html3
-rw-r--r--tests/wpt/web-platform-tests/element-timing/image-with-rotation.html3
-rw-r--r--tests/wpt/web-platform-tests/element-timing/images-repeated-resource.html11
-rw-r--r--tests/wpt/web-platform-tests/element-timing/multiple-background-images.html5
-rw-r--r--tests/wpt/web-platform-tests/element-timing/observe-background-image.html3
-rw-r--r--tests/wpt/web-platform-tests/element-timing/observe-elementtiming.html5
-rw-r--r--tests/wpt/web-platform-tests/element-timing/observe-large-image.html5
-rw-r--r--tests/wpt/web-platform-tests/element-timing/observe-multiple-images.html9
-rw-r--r--tests/wpt/web-platform-tests/element-timing/observe-shadow-image.html5
-rw-r--r--tests/wpt/web-platform-tests/element-timing/observe-svg-image.html3
-rw-r--r--tests/wpt/web-platform-tests/element-timing/observe-video-poster.html3
-rw-r--r--tests/wpt/web-platform-tests/element-timing/progressively-loaded-image.html5
-rw-r--r--tests/wpt/web-platform-tests/element-timing/rectangular-image.html5
-rw-r--r--tests/wpt/web-platform-tests/element-timing/resources/element-timing-helpers.js27
-rw-r--r--tests/wpt/web-platform-tests/element-timing/resources/iframe-with-square-sends-entry.html2
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/forms/autofocus/no-cross-origin-autofocus.sub.html43
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/forms/autofocus/resources/child-autofocus.html20
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/reftest/reftest_fuzzy_no_differences.html2
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/reftest/reftest_fuzzy_no_differences_1.html2
-rw-r--r--tests/wpt/web-platform-tests/interfaces/IndexedDB.idl2
-rw-r--r--tests/wpt/web-platform-tests/interfaces/wake-lock.idl7
-rw-r--r--tests/wpt/web-platform-tests/intersection-observer/v2/drop-shadow-filter-vertical-rl.html66
-rw-r--r--tests/wpt/web-platform-tests/lint.whitelist3
-rw-r--r--tests/wpt/web-platform-tests/mathml/relations/css-styling/dynamic-dir-1-ref.html75
-rw-r--r--tests/wpt/web-platform-tests/mathml/relations/css-styling/dynamic-dir-1.html102
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-streams/idlharness.https.window.js1
-rw-r--r--tests/wpt/web-platform-tests/permissions/interfaces.any.js2
-rw-r--r--tests/wpt/web-platform-tests/permissions/test-background-fetch-permission.html1
-rw-r--r--tests/wpt/web-platform-tests/picture-in-picture/shadow-dom.html12
-rw-r--r--tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-inherit_child-auto-child-none_touch.html (renamed from tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-inherit_child-auto-child-none_touch-manual.html)18
-rw-r--r--tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-inherit_child-none_touch.html (renamed from tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-inherit_child-none_touch-manual.html)18
-rw-r--r--tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-x_touch.html (renamed from tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-x_touch-manual.html)18
-rw-r--r--tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-y_touch.html (renamed from tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-y_touch-manual.html)18
-rw-r--r--tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-inherit_parent-none_touch.html (renamed from tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-inherit_parent-none_touch-manual.html)18
-rw-r--r--tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-none-css_touch.html (renamed from tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-none-css_touch-manual.html)18
-rw-r--r--tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-pan-x-css_touch.html (renamed from tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-pan-x-css_touch-manual.html)18
-rw-r--r--tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-pan-x-pan-y-pan-y_touch.html (renamed from tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-pan-x-pan-y-pan-y_touch-manual.html)18
-rw-r--r--tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-pan-y-css_touch.html (renamed from tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-pan-y-css_touch-manual.html)18
-rw-r--r--tests/wpt/web-platform-tests/portals/portals-host-post-message.sub.html180
-rw-r--r--tests/wpt/web-platform-tests/portals/resources/portal-host-post-message-after-activate.html21
-rw-r--r--tests/wpt/web-platform-tests/portals/resources/portal-host-post-message-navigate-1.html5
-rw-r--r--tests/wpt/web-platform-tests/portals/resources/portal-host-post-message-navigate-2.html4
-rw-r--r--tests/wpt/web-platform-tests/portals/resources/portal-host-post-message.sub.html52
-rw-r--r--tests/wpt/web-platform-tests/portals/resources/portal-post-message-portal.html4
-rw-r--r--tests/wpt/web-platform-tests/presentation-api/controlling-ua/getAvailability.https.html48
-rw-r--r--tests/wpt/web-platform-tests/tools/gitignore/gitignore.py3
-rw-r--r--tests/wpt/web-platform-tests/tools/gitignore/tests/test_gitignore.py3
-rw-r--r--tests/wpt/web-platform-tests/tools/lint/rules.py4
-rw-r--r--tests/wpt/web-platform-tests/tools/lint/tests/test_file_lints.py8
-rw-r--r--tests/wpt/web-platform-tests/tools/manifest/manifest.py6
-rw-r--r--tests/wpt/web-platform-tests/tools/runner/index.html8
-rw-r--r--tests/wpt/web-platform-tests/user-timing/clearMarks.html24
-rw-r--r--tests/wpt/web-platform-tests/user-timing/clearMeasures.html8
-rw-r--r--tests/wpt/web-platform-tests/user-timing/clear_all_measures.any.js4
-rw-r--r--tests/wpt/web-platform-tests/user-timing/clear_non_existent_measure.any.js4
-rw-r--r--tests/wpt/web-platform-tests/user-timing/clear_one_measure.any.js4
-rw-r--r--tests/wpt/web-platform-tests/user-timing/mark-l3.html2
-rw-r--r--tests/wpt/web-platform-tests/user-timing/mark.html8
-rw-r--r--tests/wpt/web-platform-tests/user-timing/measure-exceptions.html49
-rw-r--r--tests/wpt/web-platform-tests/user-timing/measure-with-dict.html2
-rw-r--r--tests/wpt/web-platform-tests/user-timing/measure_associated_with_navigation_timing.html8
-rw-r--r--tests/wpt/web-platform-tests/user-timing/measures.html8
-rw-r--r--tests/wpt/web-platform-tests/web-share/META.yml1
-rw-r--r--tests/wpt/web-platform-tests/web-share/resources/manual-helper.js23
-rw-r--r--tests/wpt/web-platform-tests/web-share/share-files-manual.html30
-rw-r--r--tests/wpt/web-platform-tests/web-share/share-image-manual.html26
-rw-r--r--tests/wpt/web-platform-tests/webrtc/protocol/ice-state.https.html130
-rw-r--r--tests/wpt/web-platform-tests/webvtt/rendering/cues-with-video/processing-model/align_end-ref.html1
-rw-r--r--tests/wpt/web-platform-tests/webvtt/rendering/cues-with-video/processing-model/align_end_wrapped-ref.html1
-rw-r--r--tests/wpt/web-platform-tests/webvtt/rendering/cues-with-video/processing-model/align_start-ref.html3
-rw-r--r--tests/wpt/web-platform-tests/webvtt/rendering/cues-with-video/processing-model/align_start_wrapped-ref.html3
-rw-r--r--tests/wpt/web-platform-tests/webxr/xrSession_mode.https.html22
-rw-r--r--tests/wpt/webgl/meta/conformance/textures/misc/texture-upload-size.html.ini3
199 files changed, 4432 insertions, 530 deletions
diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json
index e7fdaf64363..16c00106851 100644
--- a/tests/wpt/metadata/MANIFEST.json
+++ b/tests/wpt/metadata/MANIFEST.json
@@ -10933,6 +10933,240 @@
{}
]
],
+ "css/css-writing-modes/writing-mode-vlr-001-manual.html": [
+ [
+ "css/css-writing-modes/writing-mode-vlr-001-manual.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/writing-mode-vlr-002-manual.html": [
+ [
+ "css/css-writing-modes/writing-mode-vlr-002-manual.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/writing-mode-vlr-003-manual.html": [
+ [
+ "css/css-writing-modes/writing-mode-vlr-003-manual.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/writing-mode-vlr-005-manual.html": [
+ [
+ "css/css-writing-modes/writing-mode-vlr-005-manual.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/writing-mode-vlr-006-manual.html": [
+ [
+ "css/css-writing-modes/writing-mode-vlr-006-manual.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/writing-mode-vlr-007-manual.html": [
+ [
+ "css/css-writing-modes/writing-mode-vlr-007-manual.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/writing-mode-vlr-008-manual.html": [
+ [
+ "css/css-writing-modes/writing-mode-vlr-008-manual.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/writing-mode-vlr-009-manual.html": [
+ [
+ "css/css-writing-modes/writing-mode-vlr-009-manual.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/writing-mode-vlr-010-manual.html": [
+ [
+ "css/css-writing-modes/writing-mode-vlr-010-manual.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/writing-mode-vlr-012-manual.html": [
+ [
+ "css/css-writing-modes/writing-mode-vlr-012-manual.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/writing-mode-vlr-014-manual.html": [
+ [
+ "css/css-writing-modes/writing-mode-vlr-014-manual.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/writing-mode-vlr-015-manual.html": [
+ [
+ "css/css-writing-modes/writing-mode-vlr-015-manual.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/writing-mode-vlr-forms-001-manual.html": [
+ [
+ "css/css-writing-modes/writing-mode-vlr-forms-001-manual.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/writing-mode-vlr-forms-002-manual.html": [
+ [
+ "css/css-writing-modes/writing-mode-vlr-forms-002-manual.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/writing-mode-vlr-forms-003-manual.html": [
+ [
+ "css/css-writing-modes/writing-mode-vlr-forms-003-manual.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/writing-mode-vlr-forms-004-manual.html": [
+ [
+ "css/css-writing-modes/writing-mode-vlr-forms-004-manual.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/writing-mode-vlr-forms-005-manual.html": [
+ [
+ "css/css-writing-modes/writing-mode-vlr-forms-005-manual.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/writing-mode-vlr-forms-006-manual.html": [
+ [
+ "css/css-writing-modes/writing-mode-vlr-forms-006-manual.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/writing-mode-vlr-table-001-manual.html": [
+ [
+ "css/css-writing-modes/writing-mode-vlr-table-001-manual.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/writing-mode-vlr-table-002-manual.html": [
+ [
+ "css/css-writing-modes/writing-mode-vlr-table-002-manual.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/writing-mode-vrl-001-manual.html": [
+ [
+ "css/css-writing-modes/writing-mode-vrl-001-manual.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/writing-mode-vrl-002-manual.html": [
+ [
+ "css/css-writing-modes/writing-mode-vrl-002-manual.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/writing-mode-vrl-003-manual.html": [
+ [
+ "css/css-writing-modes/writing-mode-vrl-003-manual.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/writing-mode-vrl-005-manual.html": [
+ [
+ "css/css-writing-modes/writing-mode-vrl-005-manual.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/writing-mode-vrl-007-manual.html": [
+ [
+ "css/css-writing-modes/writing-mode-vrl-007-manual.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/writing-mode-vrl-008-manual.html": [
+ [
+ "css/css-writing-modes/writing-mode-vrl-008-manual.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/writing-mode-vrl-009-manual.html": [
+ [
+ "css/css-writing-modes/writing-mode-vrl-009-manual.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/writing-mode-vrl-010-manual.html": [
+ [
+ "css/css-writing-modes/writing-mode-vrl-010-manual.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/writing-mode-vrl-012-manual.html": [
+ [
+ "css/css-writing-modes/writing-mode-vrl-012-manual.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/writing-mode-vrl-014-manual.html": [
+ [
+ "css/css-writing-modes/writing-mode-vrl-014-manual.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/writing-mode-vrl-015-manual.html": [
+ [
+ "css/css-writing-modes/writing-mode-vrl-015-manual.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/writing-mode-vrl-forms-001-manual.html": [
+ [
+ "css/css-writing-modes/writing-mode-vrl-forms-001-manual.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/writing-mode-vrl-forms-002-manual.html": [
+ [
+ "css/css-writing-modes/writing-mode-vrl-forms-002-manual.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/writing-mode-vrl-forms-003-manual.html": [
+ [
+ "css/css-writing-modes/writing-mode-vrl-forms-003-manual.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/writing-mode-vrl-forms-004-manual.html": [
+ [
+ "css/css-writing-modes/writing-mode-vrl-forms-004-manual.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/writing-mode-vrl-forms-005-manual.html": [
+ [
+ "css/css-writing-modes/writing-mode-vrl-forms-005-manual.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/writing-mode-vrl-forms-006-manual.html": [
+ [
+ "css/css-writing-modes/writing-mode-vrl-forms-006-manual.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/writing-mode-vrl-table-001-manual.html": [
+ [
+ "css/css-writing-modes/writing-mode-vrl-table-001-manual.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/writing-mode-vrl-table-002-manual.html": [
+ [
+ "css/css-writing-modes/writing-mode-vrl-table-002-manual.html",
+ {}
+ ]
+ ],
"css/selectors/focus-visible-001-manual.html": [
[
"css/selectors/focus-visible-001-manual.html",
@@ -14329,36 +14563,6 @@
{}
]
],
- "pointerevents/pointerevent_touch-action-inherit_child-auto-child-none_touch-manual.html": [
- [
- "pointerevents/pointerevent_touch-action-inherit_child-auto-child-none_touch-manual.html",
- {}
- ]
- ],
- "pointerevents/pointerevent_touch-action-inherit_child-none_touch-manual.html": [
- [
- "pointerevents/pointerevent_touch-action-inherit_child-none_touch-manual.html",
- {}
- ]
- ],
- "pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-x_touch-manual.html": [
- [
- "pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-x_touch-manual.html",
- {}
- ]
- ],
- "pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-y_touch-manual.html": [
- [
- "pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-y_touch-manual.html",
- {}
- ]
- ],
- "pointerevents/pointerevent_touch-action-inherit_parent-none_touch-manual.html": [
- [
- "pointerevents/pointerevent_touch-action-inherit_parent-none_touch-manual.html",
- {}
- ]
- ],
"pointerevents/pointerevent_touch-action-keyboard-manual.html": [
[
"pointerevents/pointerevent_touch-action-keyboard-manual.html",
@@ -14371,30 +14575,6 @@
{}
]
],
- "pointerevents/pointerevent_touch-action-none-css_touch-manual.html": [
- [
- "pointerevents/pointerevent_touch-action-none-css_touch-manual.html",
- {}
- ]
- ],
- "pointerevents/pointerevent_touch-action-pan-x-css_touch-manual.html": [
- [
- "pointerevents/pointerevent_touch-action-pan-x-css_touch-manual.html",
- {}
- ]
- ],
- "pointerevents/pointerevent_touch-action-pan-x-pan-y-pan-y_touch-manual.html": [
- [
- "pointerevents/pointerevent_touch-action-pan-x-pan-y-pan-y_touch-manual.html",
- {}
- ]
- ],
- "pointerevents/pointerevent_touch-action-pan-y-css_touch-manual.html": [
- [
- "pointerevents/pointerevent_touch-action-pan-y-css_touch-manual.html",
- {}
- ]
- ],
"pointerevents/pointerevent_touch-action-rotated-divs_touch-manual.html": [
[
"pointerevents/pointerevent_touch-action-rotated-divs_touch-manual.html",
@@ -19537,6 +19717,18 @@
{}
]
],
+ "web-share/share-files-manual.html": [
+ [
+ "web-share/share-files-manual.html",
+ {}
+ ]
+ ],
+ "web-share/share-image-manual.html": [
+ [
+ "web-share/share-image-manual.html",
+ {}
+ ]
+ ],
"web-share/share-non-string-manual.html": [
[
"web-share/share-non-string-manual.html",
@@ -116355,6 +116547,18 @@
{}
]
],
+ "css/css-flexbox/align-items-007.html": [
+ [
+ "css/css-flexbox/align-items-007.html",
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square.xht",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-flexbox/align-items-baseline-overflow-non-visible.html": [
[
"css/css-flexbox/align-items-baseline-overflow-non-visible.html",
@@ -140225,6 +140429,70 @@
{}
]
],
+ "css/css-text/hyphens/hyphens-shaping-001.html": [
+ [
+ "css/css-text/hyphens/hyphens-shaping-001.html",
+ [
+ [
+ "/css/css-text/hyphens/reference/hyphens-shaping-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/hyphens/hyphens-shaping-002.html": [
+ [
+ "css/css-text/hyphens/hyphens-shaping-002.html",
+ [
+ [
+ "/css/css-text/hyphens/reference/hyphens-shaping-002-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/hyphens/hyphens-span-001.html": [
+ [
+ "css/css-text/hyphens/hyphens-span-001.html",
+ [
+ [
+ "/css/css-text/hyphens/reference/hyphens-span-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/hyphens/hyphens-span-002.html": [
+ [
+ "css/css-text/hyphens/hyphens-span-002.html",
+ [
+ [
+ "/css/css-text/hyphens/reference/hyphens-span-002-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/hyphens/shy-styling-001.html": [
+ [
+ "css/css-text/hyphens/shy-styling-001.html",
+ [
+ [
+ "/css/css-text/hyphens/reference/shy-styling-001-ref.html",
+ "=="
+ ],
+ [
+ "/css/css-text/hyphens/reference/shy-styling-001-alt-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-text/i18n/css3-text-line-break-opclns-001.html": [
[
"css/css-text/i18n/css3-text-line-break-opclns-001.html",
@@ -142457,6 +142725,18 @@
{}
]
],
+ "css/css-text/line-break/line-break-shaping-001.html": [
+ [
+ "css/css-text/line-break/line-break-shaping-001.html",
+ [
+ [
+ "/css/css-text/line-break/reference/line-break-shaping-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-text/line-break/line-break-strict-011.xht": [
[
"css/css-text/line-break/line-break-strict-011.xht",
@@ -143297,6 +143577,30 @@
{}
]
],
+ "css/css-text/overflow-wrap/overflow-wrap-shaping-001.html": [
+ [
+ "css/css-text/overflow-wrap/overflow-wrap-shaping-001.html",
+ [
+ [
+ "/css/css-text/overflow-wrap/reference/overflow-wrap-shaping-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/overflow-wrap/overflow-wrap-shaping-002.html": [
+ [
+ "css/css-text/overflow-wrap/overflow-wrap-shaping-002.html",
+ [
+ [
+ "/css/css-text/overflow-wrap/reference/overflow-wrap-shaping-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-text/overflow-wrap/word-wrap-001.html": [
[
"css/css-text/overflow-wrap/word-wrap-001.html",
@@ -146994,7 +147298,7 @@
"css/css-text/white-space/white-space-pre-wrap-trailing-spaces-003.html",
[
[
- "/css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-002-ref.html",
+ "/css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-003-ref.html",
"=="
]
],
@@ -197907,6 +198211,18 @@
{}
]
],
+ "mathml/relations/css-styling/dynamic-dir-1.html": [
+ [
+ "mathml/relations/css-styling/dynamic-dir-1.html",
+ [
+ [
+ "/mathml/relations/css-styling/dynamic-dir-1-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"mathml/relations/css-styling/lengths-1.html": [
[
"mathml/relations/css-styling/lengths-1.html",
@@ -275561,6 +275877,36 @@
{}
]
],
+ "css/css-text/hyphens/reference/hyphens-shaping-001-ref.html": [
+ [
+ {}
+ ]
+ ],
+ "css/css-text/hyphens/reference/hyphens-shaping-002-ref.html": [
+ [
+ {}
+ ]
+ ],
+ "css/css-text/hyphens/reference/hyphens-span-001-ref.html": [
+ [
+ {}
+ ]
+ ],
+ "css/css-text/hyphens/reference/hyphens-span-002-ref.html": [
+ [
+ {}
+ ]
+ ],
+ "css/css-text/hyphens/reference/shy-styling-001-alt-ref.html": [
+ [
+ {}
+ ]
+ ],
+ "css/css-text/hyphens/reference/shy-styling-001-ref.html": [
+ [
+ {}
+ ]
+ ],
"css/css-text/i18n/META.yml": [
[
{}
@@ -276596,6 +276942,11 @@
{}
]
],
+ "css/css-text/line-break/reference/line-break-shaping-001-ref.html": [
+ [
+ {}
+ ]
+ ],
"css/css-text/line-break/reference/line-break-strict-011-ref.xht": [
[
{}
@@ -276796,6 +277147,11 @@
{}
]
],
+ "css/css-text/overflow-wrap/reference/overflow-wrap-shaping-001-ref.html": [
+ [
+ {}
+ ]
+ ],
"css/css-text/shaping/reference/shaping-000-sanity-ref.html": [
[
{}
@@ -277946,6 +278302,11 @@
{}
]
],
+ "css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-003-ref.html": [
+ [
+ {}
+ ]
+ ],
"css/css-text/white-space/reference/white-space-wrap-after-nowrap-001-ref.html": [
[
{}
@@ -285991,6 +286352,11 @@
{}
]
],
+ "css/support/red-rect.svg": [
+ [
+ {}
+ ]
+ ],
"css/support/red.ico": [
[
{}
@@ -291096,6 +291462,11 @@
{}
]
],
+ "docs/_writing-tests/wdspec.md": [
+ [
+ {}
+ ]
+ ],
"docs/assets/_reftest_graph_example.dot": [
[
{}
@@ -304121,6 +304492,11 @@
{}
]
],
+ "html/semantics/forms/autofocus/resources/child-autofocus.html": [
+ [
+ {}
+ ]
+ ],
"html/semantics/forms/constraints/contains.json": [
[
{}
@@ -307931,6 +308307,11 @@
{}
]
],
+ "mathml/relations/css-styling/dynamic-dir-1-ref.html": [
+ [
+ {}
+ ]
+ ],
"mathml/relations/css-styling/lengths-1-ref.html": [
[
{}
@@ -310396,6 +310777,26 @@
{}
]
],
+ "portals/resources/portal-host-post-message-after-activate.html": [
+ [
+ {}
+ ]
+ ],
+ "portals/resources/portal-host-post-message-navigate-1.html": [
+ [
+ {}
+ ]
+ ],
+ "portals/resources/portal-host-post-message-navigate-2.html": [
+ [
+ {}
+ ]
+ ],
+ "portals/resources/portal-host-post-message.sub.html": [
+ [
+ {}
+ ]
+ ],
"portals/resources/portal-host.html": [
[
{}
@@ -353228,7 +353629,9 @@
"cookies/samesite/fetch.html": [
[
"cookies/samesite/fetch.html",
- {}
+ {
+ "timeout": "long"
+ }
]
],
"cookies/samesite/form-get-blank-reload.html": [
@@ -353240,7 +353643,9 @@
"cookies/samesite/form-get-blank.html": [
[
"cookies/samesite/form-get-blank.html",
- {}
+ {
+ "timeout": "long"
+ }
]
],
"cookies/samesite/form-post-blank-reload.html": [
@@ -353252,25 +353657,33 @@
"cookies/samesite/form-post-blank.html": [
[
"cookies/samesite/form-post-blank.html",
- {}
+ {
+ "timeout": "long"
+ }
]
],
"cookies/samesite/iframe-reload.html": [
[
"cookies/samesite/iframe-reload.html",
- {}
+ {
+ "timeout": "long"
+ }
]
],
"cookies/samesite/iframe.html": [
[
"cookies/samesite/iframe.html",
- {}
+ {
+ "timeout": "long"
+ }
]
],
"cookies/samesite/img.html": [
[
"cookies/samesite/img.html",
- {}
+ {
+ "timeout": "long"
+ }
]
],
"cookies/samesite/setcookie-lax.html": [
@@ -359162,6 +359575,18 @@
{}
]
],
+ "css/css-position/position-absolute-crash-chrome-006.html": [
+ [
+ "css/css-position/position-absolute-crash-chrome-006.html",
+ {}
+ ]
+ ],
+ "css/css-position/position-absolute-crash-chrome-007.html": [
+ [
+ "css/css-position/position-absolute-crash-chrome-007.html",
+ {}
+ ]
+ ],
"css/css-position/position-absolute-dynamic-containing-block.html": [
[
"css/css-position/position-absolute-dynamic-containing-block.html",
@@ -359174,6 +359599,12 @@
{}
]
],
+ "css/css-position/position-absolute-in-inline-002.html": [
+ [
+ "css/css-position/position-absolute-in-inline-002.html",
+ {}
+ ]
+ ],
"css/css-position/position-absolute-in-inline-crash.html": [
[
"css/css-position/position-absolute-in-inline-crash.html",
@@ -367518,6 +367949,12 @@
{}
]
],
+ "css/cssom/getComputedStyle-insets-sticky-container-for-abspos.html": [
+ [
+ "css/cssom/getComputedStyle-insets-sticky-container-for-abspos.html",
+ {}
+ ]
+ ],
"css/cssom/getComputedStyle-insets-sticky.html": [
[
"css/cssom/getComputedStyle-insets-sticky.html",
@@ -367530,6 +367967,12 @@
{}
]
],
+ "css/cssom/getComputedStyle-sticky-pos-percent.html": [
+ [
+ "css/cssom/getComputedStyle-sticky-pos-percent.html",
+ {}
+ ]
+ ],
"css/cssom/historical.html": [
[
"css/cssom/historical.html",
@@ -372085,6 +372528,12 @@
{}
]
],
+ "element-timing/disconnect-image.html": [
+ [
+ "element-timing/disconnect-image.html",
+ {}
+ ]
+ ],
"element-timing/image-TAO-wildcard.sub.html": [
[
"element-timing/image-TAO-wildcard.sub.html",
@@ -393754,6 +394203,14 @@
{}
]
],
+ "html/semantics/forms/autofocus/no-cross-origin-autofocus.sub.html": [
+ [
+ "html/semantics/forms/autofocus/no-cross-origin-autofocus.sub.html",
+ {
+ "testdriver": true
+ }
+ ]
+ ],
"html/semantics/forms/autofocus/not-on-first-task.html": [
[
"html/semantics/forms/autofocus/not-on-first-task.html",
@@ -401363,6 +401820,12 @@
{}
]
],
+ "intersection-observer/v2/drop-shadow-filter-vertical-rl.html": [
+ [
+ "intersection-observer/v2/drop-shadow-filter-vertical-rl.html",
+ {}
+ ]
+ ],
"intersection-observer/v2/iframe-target.html": [
[
"intersection-observer/v2/iframe-target.html",
@@ -417634,6 +418097,38 @@
{}
]
],
+ "pointerevents/pointerevent_touch-action-inherit_child-auto-child-none_touch.html": [
+ [
+ "pointerevents/pointerevent_touch-action-inherit_child-auto-child-none_touch.html",
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "pointerevents/pointerevent_touch-action-inherit_child-none_touch.html": [
+ [
+ "pointerevents/pointerevent_touch-action-inherit_child-none_touch.html",
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-x_touch.html": [
+ [
+ "pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-x_touch.html",
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-y_touch.html": [
+ [
+ "pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-y_touch.html",
+ {
+ "testdriver": true
+ }
+ ]
+ ],
"pointerevents/pointerevent_touch-action-inherit_highest-parent-none_touch.html": [
[
"pointerevents/pointerevent_touch-action-inherit_highest-parent-none_touch.html",
@@ -417642,6 +418137,38 @@
}
]
],
+ "pointerevents/pointerevent_touch-action-inherit_parent-none_touch.html": [
+ [
+ "pointerevents/pointerevent_touch-action-inherit_parent-none_touch.html",
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "pointerevents/pointerevent_touch-action-none-css_touch.html": [
+ [
+ "pointerevents/pointerevent_touch-action-none-css_touch.html",
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "pointerevents/pointerevent_touch-action-pan-x-css_touch.html": [
+ [
+ "pointerevents/pointerevent_touch-action-pan-x-css_touch.html",
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "pointerevents/pointerevent_touch-action-pan-x-pan-y-pan-y_touch.html": [
+ [
+ "pointerevents/pointerevent_touch-action-pan-x-pan-y-pan-y_touch.html",
+ {
+ "testdriver": true
+ }
+ ]
+ ],
"pointerevents/pointerevent_touch-action-pan-x-pan-y_touch.html": [
[
"pointerevents/pointerevent_touch-action-pan-x-pan-y_touch.html",
@@ -417650,6 +418177,15 @@
}
]
],
+ "pointerevents/pointerevent_touch-action-pan-y-css_touch.html": [
+ [
+ "pointerevents/pointerevent_touch-action-pan-y-css_touch.html",
+ {
+ "testdriver": true,
+ "timeout": "long"
+ }
+ ]
+ ],
"pointerevents/pointerevent_touch-action-verification.html": [
[
"pointerevents/pointerevent_touch-action-verification.html",
@@ -417808,6 +418344,14 @@
{}
]
],
+ "portals/portals-host-post-message.sub.html": [
+ [
+ "portals/portals-host-post-message.sub.html",
+ {
+ "timeout": "long"
+ }
+ ]
+ ],
"portals/portals-nested.html": [
[
"portals/portals-nested.html",
@@ -439727,6 +440271,12 @@
{}
]
],
+ "user-timing/measure-exceptions.html": [
+ [
+ "user-timing/measure-exceptions.html",
+ {}
+ ]
+ ],
"user-timing/measure-l3.html": [
[
"user-timing/measure-l3.html",
@@ -446515,6 +447065,14 @@
{}
]
],
+ "webrtc/protocol/ice-state.https.html": [
+ [
+ "webrtc/protocol/ice-state.https.html",
+ {
+ "timeout": "long"
+ }
+ ]
+ ],
"webrtc/protocol/jsep-initial-offer.https.html": [
[
"webrtc/protocol/jsep-initial-offer.https.html",
@@ -451210,12 +451768,6 @@
{}
]
],
- "webxr/xrSession_mode.https.html": [
- [
- "webxr/xrSession_mode.https.html",
- {}
- ]
- ],
"webxr/xrSession_prevent_multiple_exclusive.https.html": [
[
"webxr/xrSession_prevent_multiple_exclusive.https.html",
@@ -484198,7 +484750,7 @@
"testharness"
],
"animation-worklet/stateful-animator.https.html": [
- "c4b6301fd9dc2e5cf021cb79ddb05032679010f9",
+ "dba3aa8dc8dfa6f674477d9e71614b7b7288d9dd",
"testharness"
],
"animation-worklet/worklet-animation-cancel-ref.html": [
@@ -488062,7 +488614,7 @@
"support"
],
"conformance-checkers/Makefile": [
- "65836f9e1acdedadfd05367b6d859a9bb0bea0c8",
+ "81ef75c4681410fbc2ca3bcf8514a340a47defa9",
"support"
],
"conformance-checkers/README.md": [
@@ -510602,7 +511154,7 @@
"support"
],
"cookies/samesite/fetch.html": [
- "734462a3c539811ccd4f92f9ff50840dd0378ad5",
+ "3a2d5bf64c5c685005a6a8d86e40e5ef2e95a5a1",
"testharness"
],
"cookies/samesite/form-get-blank-reload.html": [
@@ -510610,7 +511162,7 @@
"testharness"
],
"cookies/samesite/form-get-blank.html": [
- "a86f34b0fb4a6946be4863e73f371e40cb4829dc",
+ "b7351702b800be327348a833454cd503c57aea37",
"testharness"
],
"cookies/samesite/form-post-blank-reload.html": [
@@ -510618,19 +511170,19 @@
"testharness"
],
"cookies/samesite/form-post-blank.html": [
- "115c6a157a00f679521f5d2b15349ecb6ea130f2",
+ "f2bb0cacfbcb1d86c83967f22849ba7d677721c8",
"testharness"
],
"cookies/samesite/iframe-reload.html": [
- "759fc7b03c3c861b65f4b7e0f6794305f67f7043",
+ "c4c3598ca44602a455f2ff6b8b29e5a421913c5e",
"testharness"
],
"cookies/samesite/iframe.html": [
- "38a7701bf8a8f189b3d2ad606f277a3f05f374ef",
+ "e511128f9633c145cd2c2c5c94d716132d460209",
"testharness"
],
"cookies/samesite/img.html": [
- "b1b04340b796ec93ef26d178678ddc745d43e988",
+ "bca84cbd28b8d19edd221496ad83329813e0db30",
"testharness"
],
"cookies/samesite/resources/puppet.html": [
@@ -579737,6 +580289,10 @@
"f20c8969c4b3d988bb961290a219720ce6e4c848",
"reftest"
],
+ "css/css-flexbox/align-items-007.html": [
+ "01e8f001a8a39c8726cf9a9453dfad07d0e1b83a",
+ "reftest"
+ ],
"css/css-flexbox/align-items-baseline-overflow-non-visible.html": [
"3c91bc5553084018b2c16cbeb6721077c8db54e2",
"reftest"
@@ -594286,11 +594842,11 @@
"reftest"
],
"css/css-lists/counter-set-001-ref.html": [
- "be06ea1dc948b4f4cc9331f494dc90a5787170de",
+ "301197904a5af79eb5024bb7d97ac161e5ada3ad",
"support"
],
"css/css-lists/counter-set-001.html": [
- "3be4c737c2ba0cc9af542413b7df7d682486efff",
+ "4e28367798ae65095b21094d2d5da777b57f4294",
"reftest"
],
"css/css-lists/counter-set-002-ref.html": [
@@ -594310,7 +594866,7 @@
"testharness"
],
"css/css-lists/li-list-item-counter-ref.html": [
- "8340d6d7f65aebaee0cebf0317092050bb33b4e2",
+ "96ca6c1122188015d6e40e01102bdb4fecfb0567",
"support"
],
"css/css-lists/li-list-item-counter.html": [
@@ -594318,7 +594874,7 @@
"reftest"
],
"css/css-lists/li-value-counter-reset-001-ref.html": [
- "9afb1ecfa059dda219c63d6e4d6381ac5c251d4e",
+ "6c6350c10f0f518f99d032dbf77c544b02c148e2",
"support"
],
"css/css-lists/li-value-counter-reset-001.html": [
@@ -598361,6 +598917,14 @@
"e1b469d46c93710c9ee2725be76a28e4f2e5fa61",
"testharness"
],
+ "css/css-position/position-absolute-crash-chrome-006.html": [
+ "94b2469b0e692f00c281d02dfbceb59c0a04d5e4",
+ "testharness"
+ ],
+ "css/css-position/position-absolute-crash-chrome-007.html": [
+ "9c24210c2570224f6a1812b84148c4ca468a4473",
+ "testharness"
+ ],
"css/css-position/position-absolute-dynamic-containing-block.html": [
"3968f685849663574ca213fcb90dc5fb3eaffaa3",
"testharness"
@@ -598369,6 +598933,10 @@
"204260ee6784c9e648ab9f1e86b113f0d7227e22",
"testharness"
],
+ "css/css-position/position-absolute-in-inline-002.html": [
+ "8ec3838fc773f92fdaa27b73e1bf604ec7001078",
+ "testharness"
+ ],
"css/css-position/position-absolute-in-inline-crash.html": [
"5d36710b6fe694b256d9841b3e7a0fff4535c85b",
"testharness"
@@ -605361,10 +605929,54 @@
"39814d3e18c622c022d5e3314580ebb187d217da",
"reftest"
],
+ "css/css-text/hyphens/hyphens-shaping-001.html": [
+ "0cd2243bdac0e89add0223c03ba2328cb239c980",
+ "reftest"
+ ],
+ "css/css-text/hyphens/hyphens-shaping-002.html": [
+ "57d23e585e9d819b5e0943f5ef3054ba1230c2a6",
+ "reftest"
+ ],
+ "css/css-text/hyphens/hyphens-span-001.html": [
+ "f7269e1cb946578a414af41d9f09b53867ad4de4",
+ "reftest"
+ ],
+ "css/css-text/hyphens/hyphens-span-002.html": [
+ "07264faa7bba127f72dc006757554abb15bef6e1",
+ "reftest"
+ ],
"css/css-text/hyphens/reference/hyphens-auto-001-ref.html": [
"c1355d0abba28491a126533c24039cffc6ee4eb0",
"support"
],
+ "css/css-text/hyphens/reference/hyphens-shaping-001-ref.html": [
+ "9eb1d7fd686e0f9bc1c82baf2235f8f1ef8cbb81",
+ "support"
+ ],
+ "css/css-text/hyphens/reference/hyphens-shaping-002-ref.html": [
+ "d8e31d71e4baa7d4ae4dc6436f4972083c30bee9",
+ "support"
+ ],
+ "css/css-text/hyphens/reference/hyphens-span-001-ref.html": [
+ "cbe37261375a6ab721decbcde802418e5d497ab5",
+ "support"
+ ],
+ "css/css-text/hyphens/reference/hyphens-span-002-ref.html": [
+ "7b3f8206417ffeff05a522c07f1efad9176cde9b",
+ "support"
+ ],
+ "css/css-text/hyphens/reference/shy-styling-001-alt-ref.html": [
+ "c86cb5002867c899f54a59d25c0a0572e7658cd7",
+ "support"
+ ],
+ "css/css-text/hyphens/reference/shy-styling-001-ref.html": [
+ "ad9df16e35d88a43baa5d6b3ff3f2ee18a71b5bb",
+ "support"
+ ],
+ "css/css-text/hyphens/shy-styling-001.html": [
+ "98348d92a6987607cd2d591fd385f9e303a4471a",
+ "reftest"
+ ],
"css/css-text/i18n/META.yml": [
"9fa8c3b6c9bdbfa2b9731c89b23ffc6f47ceba2b",
"support"
@@ -607445,6 +608057,10 @@
"a1042e858aaa64cf04b1538567c1071df6fdf551",
"reftest"
],
+ "css/css-text/line-break/line-break-shaping-001.html": [
+ "4ce1da2f30afe7254a03352c56c70176b55521c4",
+ "reftest"
+ ],
"css/css-text/line-break/line-break-strict-011.xht": [
"d9cecc788ab1d5132a5a69453b715d4145a325ff",
"reftest"
@@ -607569,6 +608185,10 @@
"9b23b57dfe62551c90df892b1f297802eaf3517c",
"support"
],
+ "css/css-text/line-break/reference/line-break-shaping-001-ref.html": [
+ "5543ab07294c5f0da73a2473cb093c0907bed3a9",
+ "support"
+ ],
"css/css-text/line-break/reference/line-break-strict-011-ref.xht": [
"ec17a31ec55e5c95aed8a7423ba0bcbff2edfa7d",
"support"
@@ -607933,6 +608553,14 @@
"8047aba133af1e4ece4b66fffcec48fa853da386",
"reftest"
],
+ "css/css-text/overflow-wrap/overflow-wrap-shaping-001.html": [
+ "8846038d0fcdb3385b0aa94165f423d0a2bea007",
+ "reftest"
+ ],
+ "css/css-text/overflow-wrap/overflow-wrap-shaping-002.html": [
+ "adb25c78b7a64e6f7fd00410b25cfe6c519f5fe8",
+ "reftest"
+ ],
"css/css-text/overflow-wrap/reference/overflow-wrap-break-word-001-ref.html": [
"0e0300a72dc920a5ffb54cda6fbe84a2f517d010",
"support"
@@ -607977,6 +608605,10 @@
"f0b41134fa0b84e6fce29ed5596598a358b2c2a9",
"support"
],
+ "css/css-text/overflow-wrap/reference/overflow-wrap-shaping-001-ref.html": [
+ "5543ab07294c5f0da73a2473cb093c0907bed3a9",
+ "support"
+ ],
"css/css-text/overflow-wrap/word-wrap-001.html": [
"af326a6cdf2d02aa51e6eccfd11b90fcc4c16456",
"reftest"
@@ -610286,7 +610918,7 @@
"support"
],
"css/css-text/white-space/reference/white-space-intrinsic-size-004-ref.html": [
- "34757067b15b6a30e8273a93df7f68a7cfb4a686",
+ "490d61be712d2878ab76bf40ca025e5334e50d7c",
"support"
],
"css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-001-ref.html": [
@@ -610294,7 +610926,11 @@
"support"
],
"css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-002-ref.html": [
- "53cb2a083b0825a749d178d5093c1a105958143d",
+ "5f94d076e840080f8cc855e013039ef16f1d993c",
+ "support"
+ ],
+ "css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-003-ref.html": [
+ "736a2d5607b92e47fd2e927892a2b6d4cc6f2a9e",
"support"
],
"css/css-text/white-space/reference/white-space-wrap-after-nowrap-001-ref.html": [
@@ -610506,7 +611142,7 @@
"reftest"
],
"css/css-text/white-space/white-space-intrinsic-size-004.html": [
- "510a5c5d14188e9dc042ee061f6cb91bb169b73c",
+ "42b94a72a5ce6e70ad6b888603efcd8466bb8a95",
"reftest"
],
"css/css-text/white-space/white-space-pre-wrap-trailing-spaces-001.html": [
@@ -610514,11 +611150,11 @@
"reftest"
],
"css/css-text/white-space/white-space-pre-wrap-trailing-spaces-002.html": [
- "d8e7c8278a917c00bc99a60511137b52a935f215",
+ "76ca5ef77dbb5ab32c9da92c7a2c4f181a1f98ff",
"reftest"
],
"css/css-text/white-space/white-space-pre-wrap-trailing-spaces-003.html": [
- "6b21df62c5cbdfa2cce9e52d91c7a792d94354e8",
+ "4b6df8e93e009933090e29c98149971a2ccc52eb",
"reftest"
],
"css/css-text/white-space/white-space-wrap-after-nowrap-001.html": [
@@ -616442,7 +617078,7 @@
"testharness"
],
"css/css-transitions/disconnected-element-001.html": [
- "b883ce8d18d2bc14264b5c38b43a633840d0a070",
+ "dd08e559c928a4cf8fec7f4d22b991079d04eb50",
"testharness"
],
"css/css-transitions/event-dispatch.tentative.html": [
@@ -628577,6 +629213,162 @@
"cd844132decf8a19c81b9e865b9ef8903b5e8eb5",
"reftest"
],
+ "css/css-writing-modes/writing-mode-vlr-001-manual.html": [
+ "31186029deca3cdd7df91757e70d21deaaccba7d",
+ "manual"
+ ],
+ "css/css-writing-modes/writing-mode-vlr-002-manual.html": [
+ "bb53c939e843f60dfbda6e5b9c03b5aedf139555",
+ "manual"
+ ],
+ "css/css-writing-modes/writing-mode-vlr-003-manual.html": [
+ "1aaf29d2e6d0972c12a0feda5dd7171647e7cc4f",
+ "manual"
+ ],
+ "css/css-writing-modes/writing-mode-vlr-005-manual.html": [
+ "2bbdca599981e261db590ddcedfa645a6aa595f2",
+ "manual"
+ ],
+ "css/css-writing-modes/writing-mode-vlr-006-manual.html": [
+ "0ceb4a74bb9274480abe71f21b1920d00003d207",
+ "manual"
+ ],
+ "css/css-writing-modes/writing-mode-vlr-007-manual.html": [
+ "8317c5c8efd7e607ff4b780acc77f80c3a2840af",
+ "manual"
+ ],
+ "css/css-writing-modes/writing-mode-vlr-008-manual.html": [
+ "21abffa9194d3354e2411fe0d8caa9528c3b3541",
+ "manual"
+ ],
+ "css/css-writing-modes/writing-mode-vlr-009-manual.html": [
+ "ba2ca64828febf295b50bc05f0d7082d347274c2",
+ "manual"
+ ],
+ "css/css-writing-modes/writing-mode-vlr-010-manual.html": [
+ "4dc9430b8dada1c35601db40cb4408aad4d37af6",
+ "manual"
+ ],
+ "css/css-writing-modes/writing-mode-vlr-012-manual.html": [
+ "ebf773c555984bc7bf30ffdba61b8f3cd03a4d4d",
+ "manual"
+ ],
+ "css/css-writing-modes/writing-mode-vlr-014-manual.html": [
+ "656f78759db28d73d8881d1034ff7054dfe9bf35",
+ "manual"
+ ],
+ "css/css-writing-modes/writing-mode-vlr-015-manual.html": [
+ "a8fe0055395c9a87275764f984a442805e6c99ab",
+ "manual"
+ ],
+ "css/css-writing-modes/writing-mode-vlr-forms-001-manual.html": [
+ "02e0dd8da0d6bde7590fb020a82f3f8ceaa7dc30",
+ "manual"
+ ],
+ "css/css-writing-modes/writing-mode-vlr-forms-002-manual.html": [
+ "b89ea1addb3433047cc580106abcb24e3cff77f4",
+ "manual"
+ ],
+ "css/css-writing-modes/writing-mode-vlr-forms-003-manual.html": [
+ "bfd90f8438f16c07791371d66de8cbf49d62a0df",
+ "manual"
+ ],
+ "css/css-writing-modes/writing-mode-vlr-forms-004-manual.html": [
+ "fd44a2b6ed7bb48b0bffb2f6b33aa9a046e61cc2",
+ "manual"
+ ],
+ "css/css-writing-modes/writing-mode-vlr-forms-005-manual.html": [
+ "0ef619a636f67e5abdbeb238c37ee0adb00c6005",
+ "manual"
+ ],
+ "css/css-writing-modes/writing-mode-vlr-forms-006-manual.html": [
+ "16162c2a3cd5d59fd4bae18e7239496149e077de",
+ "manual"
+ ],
+ "css/css-writing-modes/writing-mode-vlr-table-001-manual.html": [
+ "21bd590863b99eb1f429e1751c3bcc9b0ec603a8",
+ "manual"
+ ],
+ "css/css-writing-modes/writing-mode-vlr-table-002-manual.html": [
+ "3a41d1fa60463adafa2088a7b3f08d3f946aaf3a",
+ "manual"
+ ],
+ "css/css-writing-modes/writing-mode-vrl-001-manual.html": [
+ "a4f995f4b7fec16670e57afd8d403957fb77c532",
+ "manual"
+ ],
+ "css/css-writing-modes/writing-mode-vrl-002-manual.html": [
+ "7c7bcfbcdc6c58f45d9928d84d6ab8cd3bcae893",
+ "manual"
+ ],
+ "css/css-writing-modes/writing-mode-vrl-003-manual.html": [
+ "64fcb66b1337b781281251a468968b6dc6b2e990",
+ "manual"
+ ],
+ "css/css-writing-modes/writing-mode-vrl-005-manual.html": [
+ "c6462f2fe1aa97b6bffd04f96934171d3f281bb8",
+ "manual"
+ ],
+ "css/css-writing-modes/writing-mode-vrl-007-manual.html": [
+ "3427f74990cddc722d6c5bc2766491552a568101",
+ "manual"
+ ],
+ "css/css-writing-modes/writing-mode-vrl-008-manual.html": [
+ "7d2a3bb6a7be1a46219fe41afbc233b329cf1e2d",
+ "manual"
+ ],
+ "css/css-writing-modes/writing-mode-vrl-009-manual.html": [
+ "6dff8d7efbe124be239816b41d96ca4f4889dc3a",
+ "manual"
+ ],
+ "css/css-writing-modes/writing-mode-vrl-010-manual.html": [
+ "e81a579c75a7c1034fc6dc46a575ef91d3c99e52",
+ "manual"
+ ],
+ "css/css-writing-modes/writing-mode-vrl-012-manual.html": [
+ "a53ec5c14f4ad12307281379f8bb695ed842c01d",
+ "manual"
+ ],
+ "css/css-writing-modes/writing-mode-vrl-014-manual.html": [
+ "bf3424fd04313a38c411061daad8bf0db0c86376",
+ "manual"
+ ],
+ "css/css-writing-modes/writing-mode-vrl-015-manual.html": [
+ "cfcdf2f51b7b07742350f49a71d88509e6ddc5f8",
+ "manual"
+ ],
+ "css/css-writing-modes/writing-mode-vrl-forms-001-manual.html": [
+ "0548cb968286eff448017e243b0eed651ad6cfad",
+ "manual"
+ ],
+ "css/css-writing-modes/writing-mode-vrl-forms-002-manual.html": [
+ "3de4c72c3ff4b07865cbf5538902053351b66e58",
+ "manual"
+ ],
+ "css/css-writing-modes/writing-mode-vrl-forms-003-manual.html": [
+ "e07502e4fce16bf3c5bb8e4755cd3cae9f285662",
+ "manual"
+ ],
+ "css/css-writing-modes/writing-mode-vrl-forms-004-manual.html": [
+ "42bef3494f963bb0bd40400a4fe7e19a01ea9ca5",
+ "manual"
+ ],
+ "css/css-writing-modes/writing-mode-vrl-forms-005-manual.html": [
+ "7177c316d7128f1653953428d60f5cb2e6661676",
+ "manual"
+ ],
+ "css/css-writing-modes/writing-mode-vrl-forms-006-manual.html": [
+ "2ed6bc9982846ea4313ded2d54cc35a630e69eb2",
+ "manual"
+ ],
+ "css/css-writing-modes/writing-mode-vrl-table-001-manual.html": [
+ "1705beb791531eea974e77125e8aaae363570f91",
+ "manual"
+ ],
+ "css/css-writing-modes/writing-mode-vrl-table-002-manual.html": [
+ "0f1c1d19977cd65fbb7a0ea450d9a582d380f4d6",
+ "manual"
+ ],
"css/cssom-view/CaretPosition-001.html": [
"d8e97a92342cb8ba7e7a185132849ae60485c329",
"testharness"
@@ -629457,14 +630249,22 @@
"aa7dbee95667a5e3b829b7d3774311da49c01deb",
"testharness"
],
+ "css/cssom/getComputedStyle-insets-sticky-container-for-abspos.html": [
+ "7f5ec3064837f4af37cf33050917768eb8ee0584",
+ "testharness"
+ ],
"css/cssom/getComputedStyle-insets-sticky.html": [
- "6149acc6d7d0391d7a4d7ece12b9ec9c4b39041d",
+ "6b23fabcb1407c00ab1d35bbae77f6501b17f73f",
"testharness"
],
"css/cssom/getComputedStyle-pseudo.html": [
"340f9eed9b955467eb39c957222328baf2c41d4a",
"testharness"
],
+ "css/cssom/getComputedStyle-sticky-pos-percent.html": [
+ "12ad5e89653564f91006c78baeac353c12865c00",
+ "testharness"
+ ],
"css/cssom/historical.html": [
"44f3f6c8f15a13b2c32dad2672ea9383330e8082",
"testharness"
@@ -629682,7 +630482,7 @@
"support"
],
"css/cssom/support/getComputedStyle-insets.js": [
- "beec32e76bc5fcef4640193e321805975c8554b9",
+ "723990cafbca5aef05a32294d5db28b899a226cc",
"support"
],
"css/cssom/support/import-charset.css": [
@@ -633189,6 +633989,10 @@
"8b4b25364e0ffbe09e563e13b567fa57330e48d5",
"support"
],
+ "css/support/red-rect.svg": [
+ "3fe10a2b6fd33ad9da17729964dd6bf965474912",
+ "support"
+ ],
"css/support/red.ico": [
"22a7b36fe3ec2c05c348ba7b45c9fb764ef2def5",
"support"
@@ -643186,11 +643990,11 @@
"support"
],
"docs/_writing-tests/index.md": [
- "3922d7a4cc45a9b45edf61434d01c426c054c3db",
+ "7aeceb0b44f14c37938c5c8802a9730fb3459b29",
"support"
],
"docs/_writing-tests/lint-tool.md": [
- "774366159ab901f22973294bddfbb04f3341c5b0",
+ "712e8af72d0d5d8f9c3799faa3d53904b16fe932",
"support"
],
"docs/_writing-tests/manual.md": [
@@ -643233,6 +644037,10 @@
"2d46fbe10dd1be3a6e16dcc75c8b2f8d2b695d82",
"support"
],
+ "docs/_writing-tests/wdspec.md": [
+ "1164a5dd323e556638c2ed4493c6af73bd25f170",
+ "support"
+ ],
"docs/assets/_reftest_graph_example.dot": [
"9389f07dc2bd72c957e6bbaca6e3cfcd2a8afd68",
"support"
@@ -643294,7 +644102,7 @@
"support"
],
"docs/introduction.md": [
- "28d8f3ea3659ef42ae8ffc738236a622fd1b52b7",
+ "445bd5b131cfa22a41c8c8ba8bb79c779b40503d",
"support"
],
"dom/META.yml": [
@@ -645606,43 +646414,47 @@
"testharness"
],
"element-timing/background-image-data-uri.html": [
- "696f34ff14e8bad8ec68a8687cdbf0949ef6fdef",
+ "16d6dfcba037f77453c38ae1273fdb9182d6a531",
"testharness"
],
"element-timing/background-image-multiple-elements.html": [
- "669f94d6b0189ba387cf90c1b49c7d4120319673",
+ "22b4158cbe7289afb6a1ce038ef840933c92a7f0",
"testharness"
],
"element-timing/background-image-stretched.html": [
- "8f93b43524f7b3d051af90d9807a3f30ad299ae7",
+ "28c355398245252c536a247910f56ec6aba6ac58",
"testharness"
],
"element-timing/buffer-before-onload.html": [
- "805777f29c297a22497d3e4f07b6ea462b0a0b7c",
+ "03c7048be1134b45c6c966404ce27f9ed5c8204e",
"testharness"
],
"element-timing/cross-origin-element.sub.html": [
- "b1a5b7ccd7acd221daef9bbc259a4cf972075553",
+ "0af0ae96413eb8c22383b5e676f9a4f3a994aeb0",
"testharness"
],
"element-timing/cross-origin-iframe-element.sub.html": [
"a369d25bd43c6565ab4367b0a381ab39ec8664b7",
"testharness"
],
+ "element-timing/disconnect-image.html": [
+ "4ee0516fffecfe2f4c89ce4f789e7c6bb269ddd2",
+ "testharness"
+ ],
"element-timing/image-TAO-wildcard.sub.html": [
- "0e24af068a6d93920c268846442ab89b4a1b65ee",
+ "4ec8aa7d8dad99da4e183c6d9b0dd719199e28d9",
"testharness"
],
"element-timing/image-carousel.html": [
- "9f0ef79e354dfe8e505e8308561a1b0a1a33167c",
+ "404eca3b208cd0c77e454a0f9ae12f500d3d0f57",
"testharness"
],
"element-timing/image-clipped-svg.html": [
- "36cf1b15e0df0f99b8312ef56cde211f7c1358dd",
+ "3007bf726a6812d1fa607162999310da837f221e",
"testharness"
],
"element-timing/image-data-uri.html": [
- "22ff91189b1370b703f89f55d83cde014b6d367d",
+ "2b5d04e45a3f4cdf2277cc302574c62b6476f0af",
"testharness"
],
"element-timing/image-not-added.html": [
@@ -645650,31 +646462,31 @@
"testharness"
],
"element-timing/image-not-fully-visible.html": [
- "279fa03cc2b42029ed01a68f670829c13b282a5c",
+ "57162491a7927ddf3d4625750fbce6bf7537493a",
"testharness"
],
"element-timing/image-rect-iframe.html": [
- "94c872e8e02fe16e22b105c04cd1c9cc4e1cf9d8",
+ "f0511308c7192b26949c6855fbf4a779ce48a871",
"testharness"
],
"element-timing/image-with-css-scale.html": [
- "6d77429e485ede047122eb3c25221d5e394c2d98",
+ "bdffdb26b29e50ff73b8ca70a0e959bb031018ec",
"testharness"
],
"element-timing/image-with-rotation.html": [
- "70b635e012a6825bf5832594bd9e385173ab1878",
+ "4433ecbc5f114604fec821622673ecf15bf6030d",
"testharness"
],
"element-timing/images-repeated-resource.html": [
- "dbcad248e3aea0d148416275adeec93e20d8c267",
+ "fbb2d6a12cd39e9bcd96a610e87076d9d3d6f2d4",
"testharness"
],
"element-timing/multiple-background-images.html": [
- "ca349fec45f6ae4bde53dbe03de673d19d295794",
+ "f3fbe767303f91328a892686a6d0d5761b1b3575",
"testharness"
],
"element-timing/observe-background-image.html": [
- "0669b4c4d83b6c2e81de94beb7db15c6ca775d1b",
+ "680c5e475aad49b1963a7f45d908b47b04a3b77f",
"testharness"
],
"element-timing/observe-child-element.html": [
@@ -645682,35 +646494,35 @@
"testharness"
],
"element-timing/observe-elementtiming.html": [
- "39fea05431107efc251f820de1cc476aa8a3f37e",
+ "73f93519cdaecdce0bf8466a7473231f9b3ffef2",
"testharness"
],
"element-timing/observe-large-image.html": [
- "a08274caa52542f71a14002b4063cc9dc9736bb2",
+ "13fc71bc4e3316b23be58b71620f5aa3cba658c3",
"testharness"
],
"element-timing/observe-multiple-images.html": [
- "05c54ac050fe8caf5581dcbd1de5e30bb8681fd1",
+ "b9e82ed10b1c01b01be8a155f48ee3d610f3910b",
"testharness"
],
"element-timing/observe-shadow-image.html": [
- "1fa6dd41a95e9b610412a5ee22cbdb0c3cad5c3e",
+ "a4d21bea80892384ece7c8049c894bed23f739bb",
"testharness"
],
"element-timing/observe-svg-image.html": [
- "45e800d25da14d7052b42dab939ca49167bfedc3",
+ "c3c178e9b647752086248e4853d324940769c6f3",
"testharness"
],
"element-timing/observe-video-poster.html": [
- "d3a69937d3c3c0815f4f86e4b09acc1517aec491",
+ "500fcedcccf2682f15b4bb2aeffe046aa9eeb085",
"testharness"
],
"element-timing/progressively-loaded-image.html": [
- "c0a7d4f1fb76ffdade7df5f2663f1e33de84e7f3",
+ "c534621ccf86ae88daf96893373a0f691df804ad",
"testharness"
],
"element-timing/rectangular-image.html": [
- "b02808456a3de05fb2ac1ede3af33c056bfd77ad",
+ "a1af9616ea115a3686ce09a06853a8efc8adefa2",
"testharness"
],
"element-timing/resources/TAOImage.py": [
@@ -645722,11 +646534,11 @@
"support"
],
"element-timing/resources/element-timing-helpers.js": [
- "b0ddf308df2514bed7c14c3d83382afbc1ad0a21",
+ "e378d617f20f0d2c5d815d366b9c937ab46e6bd0",
"support"
],
"element-timing/resources/iframe-with-square-sends-entry.html": [
- "25bd67935a1a3b493233451da9f9cf89742275ec",
+ "b8af505d32bc68d7f98b79bf2d2575778a49b26e",
"support"
],
"element-timing/resources/iframe-with-square.html": [
@@ -664945,10 +665757,18 @@
"de56cf74eda506c55460cc6da85923b5b7001381",
"testharness"
],
+ "html/semantics/forms/autofocus/no-cross-origin-autofocus.sub.html": [
+ "cc018814c922534d57e3945bd3990444853a5131",
+ "testharness"
+ ],
"html/semantics/forms/autofocus/not-on-first-task.html": [
"50efc176935c710f43a42c31ecc0b7676e96b833",
"testharness"
],
+ "html/semantics/forms/autofocus/resources/child-autofocus.html": [
+ "afd5601a523ff0a1d60d37b171b2098a38600ace",
+ "support"
+ ],
"html/semantics/forms/constraints/contains.json": [
"67e4c3b12e0c74c3d04b21a80a902d1173772b55",
"support"
@@ -671758,11 +672578,11 @@
"reftest"
],
"infrastructure/reftest/reftest_fuzzy_no_differences.html": [
- "324873a8ccf70bed77a328a75ae8e2de08d1ba32",
+ "95863904aac993ca569e3d574737117962c1c4d2",
"reftest"
],
"infrastructure/reftest/reftest_fuzzy_no_differences_1.html": [
- "6bf85ceebedc63c0cefc7dce044739c46a08f350",
+ "9513f9bda82d0c40fe2b86a415d073e9863bf504",
"reftest"
],
"infrastructure/reftest/reftest_match.html": [
@@ -671958,7 +672778,7 @@
"support"
],
"interfaces/IndexedDB.idl": [
- "21ff252fffe57f1c49649790b7be8d59083aef86",
+ "f2625ebe53ddde37b5625802b7a417220e7cafbd",
"support"
],
"interfaces/InputDeviceCapabilities.idl": [
@@ -672426,7 +673246,7 @@
"support"
],
"interfaces/wake-lock.idl": [
- "c0d4bc9c239aae45d48924ef79c6fe354bbe7204",
+ "466d697cff81c37465c1f7ed73d40a93301832a2",
"support"
],
"interfaces/wasm-js-api.idl": [
@@ -672685,6 +673505,10 @@
"086301c44d4ef5f5dce2afb1d9ff6388f089fccf",
"testharness"
],
+ "intersection-observer/v2/drop-shadow-filter-vertical-rl.html": [
+ "fc5b145e1fb43e40fdc30a2ee2e91eff77fb3293",
+ "testharness"
+ ],
"intersection-observer/v2/iframe-target.html": [
"3e53ee5f5814e8ef69d8454011ceafabfe8d1f17",
"testharness"
@@ -672986,7 +673810,7 @@
"reftest"
],
"lint.whitelist": [
- "a7a4600d9cdceb5df65422ca08404d44df7c9989",
+ "f6411453345c249a4378709631569710a70945d2",
"support"
],
"loading/preloader-css-import-no-quote.tentative.html": [
@@ -673385,6 +674209,14 @@
"ddb2173a2e01ff78b16bc9c86f4a0f2ad37935dc",
"testharness"
],
+ "mathml/relations/css-styling/dynamic-dir-1-ref.html": [
+ "111ea79e243a83880783b5ab46ae6d989ead1f32",
+ "support"
+ ],
+ "mathml/relations/css-styling/dynamic-dir-1.html": [
+ "c4c99d878c19305d02d0ed450e46da66802c0746",
+ "reftest"
+ ],
"mathml/relations/css-styling/lengths-1-ref.html": [
"9fca6f49632ca080ee1b2a32a9ce2d251241dfcc",
"support"
@@ -674686,7 +675518,7 @@
"testharness"
],
"mediacapture-streams/idlharness.https.window.js": [
- "441a64e3a0c84d6b0da5010ecb65e431f2763942",
+ "976d31b6609350a0ccc18a4be7764e7e3797b614",
"testharness"
],
"mediasession/META.yml": [
@@ -685222,11 +686054,11 @@
"support"
],
"permissions/interfaces.any.js": [
- "77fa909a768fd89e2bb350ce9dc15849800a5bec",
+ "b93453886930679c557a5c4a01651150b82670d9",
"testharness"
],
"permissions/test-background-fetch-permission.html": [
- "c3da77d9f8cc76d0cb2523e5445d2aed7c1d97ac",
+ "c824ecf1d2b47630f8ebcef3ed42c8c908c8e9eb",
"testharness"
],
"picture-in-picture/META.yml": [
@@ -685282,7 +686114,7 @@
"support"
],
"picture-in-picture/shadow-dom.html": [
- "e2335cd5ddc77123340bc5f0767bd686a08dd032",
+ "adcd659762813e05ed1012768f98d8f196b974f4",
"testharness"
],
"pointerevents/META.yml": [
@@ -685581,29 +686413,29 @@
"5fe6179840eeda9a025e951f8ff28b211da9fafe",
"testharness"
],
- "pointerevents/pointerevent_touch-action-inherit_child-auto-child-none_touch-manual.html": [
- "dcea2837502b82b3fc873ddf3a4b044e38165c02",
- "manual"
+ "pointerevents/pointerevent_touch-action-inherit_child-auto-child-none_touch.html": [
+ "ae2373c3f532fdada27c941617f8d05d0d2a7da3",
+ "testharness"
],
- "pointerevents/pointerevent_touch-action-inherit_child-none_touch-manual.html": [
- "16e42954e51abc58c89e608c0edfa29d9a44b63b",
- "manual"
+ "pointerevents/pointerevent_touch-action-inherit_child-none_touch.html": [
+ "81f0ea6050a4b060708bcebc1eeb65d7ee904c70",
+ "testharness"
],
- "pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-x_touch-manual.html": [
- "c75d067e447f7382005542df6ed267850ef6aa0a",
- "manual"
+ "pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-x_touch.html": [
+ "775708d4a7741d053ea20472d94bf4f936175804",
+ "testharness"
],
- "pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-y_touch-manual.html": [
- "d420cc56c77b6910ee96d875ee24eb0b9b0a4c71",
- "manual"
+ "pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-y_touch.html": [
+ "592cfd6ae5367d2830ce3343aae7cae0e1d737a0",
+ "testharness"
],
"pointerevents/pointerevent_touch-action-inherit_highest-parent-none_touch.html": [
"a1fefe16982316546b2cb0a7bf14362fe21f7145",
"testharness"
],
- "pointerevents/pointerevent_touch-action-inherit_parent-none_touch-manual.html": [
- "5e674a14da550fb63bfe53859a8e4db529f559e8",
- "manual"
+ "pointerevents/pointerevent_touch-action-inherit_parent-none_touch.html": [
+ "45ea1432b4e4ad5de824bf1d1798e458a939dbc7",
+ "testharness"
],
"pointerevents/pointerevent_touch-action-keyboard-manual.html": [
"a41d7078f2ee87a8a5686379536aaf1e0de915df",
@@ -685613,25 +686445,25 @@
"fcc8584515c51d60bb01092ffe1f701273c7bb58",
"manual"
],
- "pointerevents/pointerevent_touch-action-none-css_touch-manual.html": [
- "dec694f3eca9dbfe35483d0783d716f42a0d7443",
- "manual"
+ "pointerevents/pointerevent_touch-action-none-css_touch.html": [
+ "cc9602442acb8f4267c2c4d0bf63097d9992b3e3",
+ "testharness"
],
- "pointerevents/pointerevent_touch-action-pan-x-css_touch-manual.html": [
- "e757baec6be427884d6270234f4c73e3ddb959b5",
- "manual"
+ "pointerevents/pointerevent_touch-action-pan-x-css_touch.html": [
+ "a91f1f55d101ba27d72636743ab8311270ebbba9",
+ "testharness"
],
- "pointerevents/pointerevent_touch-action-pan-x-pan-y-pan-y_touch-manual.html": [
- "e2a4386b27abcd29be0563a8537653bec0206ccd",
- "manual"
+ "pointerevents/pointerevent_touch-action-pan-x-pan-y-pan-y_touch.html": [
+ "d056eb9b0e5924561f2902424827aa1edac435fc",
+ "testharness"
],
"pointerevents/pointerevent_touch-action-pan-x-pan-y_touch.html": [
"0c88054379538b4287c9157124f68b9cbff82234",
"testharness"
],
- "pointerevents/pointerevent_touch-action-pan-y-css_touch-manual.html": [
- "44f89b8eb774f6aa8d4c6e3722508b63f42271fb",
- "manual"
+ "pointerevents/pointerevent_touch-action-pan-y-css_touch.html": [
+ "98168755a684e00595909e428b5a95b22c4b219c",
+ "testharness"
],
"pointerevents/pointerevent_touch-action-rotated-divs_touch-manual.html": [
"1c09b15f1f99eead72a0689ab14a4facb1c61e3f",
@@ -685829,6 +686661,10 @@
"e0f1d63743c54c687d62f86abe278873fa823430",
"testharness"
],
+ "portals/portals-host-post-message.sub.html": [
+ "a19715eb0af90c38aec08e3d488523a9c3674a1f",
+ "testharness"
+ ],
"portals/portals-nested.html": [
"26b264ee0509844141b9e8e4ae6999fa20ba04ef",
"testharness"
@@ -685893,6 +686729,22 @@
"586929e31d0efde5865b7416009ebcc1882d071c",
"support"
],
+ "portals/resources/portal-host-post-message-after-activate.html": [
+ "07db1a0d8341a88cc7918f56112ecf52f9f9e3fc",
+ "support"
+ ],
+ "portals/resources/portal-host-post-message-navigate-1.html": [
+ "3b36eaed05e95ad2b251d65598b1950d0f26e37e",
+ "support"
+ ],
+ "portals/resources/portal-host-post-message-navigate-2.html": [
+ "163c42e655d6aa69a8ba8ccfb8474072eac9d349",
+ "support"
+ ],
+ "portals/resources/portal-host-post-message.sub.html": [
+ "06d42820a3a9a907de9904fbe8e4b00c3dc55caf",
+ "support"
+ ],
"portals/resources/portal-host.html": [
"5043a158ea74ef173f166c0580f9c1a27242bd14",
"support"
@@ -685922,7 +686774,7 @@
"support"
],
"portals/resources/portal-post-message-portal.html": [
- "539048c13f5e8c21f7bda5e7d7e1b4772efb5ded",
+ "1dae5d1fb4528f640006fe4598c015db778d35c0",
"support"
],
"portals/resources/portals-adopt-predecessor-portal.html": [
@@ -686238,7 +687090,7 @@
"manual"
],
"presentation-api/controlling-ua/getAvailability.https.html": [
- "b6d8736f51a07e4af7911408b6a9184b918d3e16",
+ "71b19e6a4eb819c088020a17241851d5e01f756c",
"testharness"
],
"presentation-api/controlling-ua/getAvailability_sandboxing_success.https.html": [
@@ -706998,7 +707850,7 @@
"support"
],
"tools/gitignore/gitignore.py": [
- "9b661308ab179d48bc0fc946d078ef995225d572",
+ "901a1f418ba1d9f5d378bd38d0403b8adc1d798c",
"support"
],
"tools/gitignore/tests/__init__.py": [
@@ -707006,7 +707858,7 @@
"support"
],
"tools/gitignore/tests/test_gitignore.py": [
- "2a310046ffb70aefe78e867beaa4bbf858ec501f",
+ "c5a5504aa2650d5a75fa42ef73923779e4dca871",
"support"
],
"tools/lint/__init__.py": [
@@ -707026,7 +707878,7 @@
"support"
],
"tools/lint/rules.py": [
- "76d5d3e99264de999e999086436c8b524c62a297",
+ "94aff6430ed4a3bcde2704585f49ae21da85281b",
"support"
],
"tools/lint/tests/__init__.py": [
@@ -707166,7 +708018,7 @@
"support"
],
"tools/lint/tests/test_file_lints.py": [
- "ddf03986e10f5c336ea7ce7731bbcdd2135235d0",
+ "31456ae8bbca8129bbf1ef0702221a45e09d914a",
"support"
],
"tools/lint/tests/test_lint.py": [
@@ -707210,7 +708062,7 @@
"support"
],
"tools/manifest/manifest.py": [
- "5dde9374642381c42527289addf8d7687b08a245",
+ "b521040016843138f33120d46fa5556e53b6457c",
"support"
],
"tools/manifest/sourcefile.py": [
@@ -707686,7 +708538,7 @@
"support"
],
"tools/runner/index.html": [
- "2d7d25297ca2977465eed49585c9661283684c38",
+ "57940d02d0c32b366c407abec10a7d70d440d60d",
"support"
],
"tools/runner/report.css": [
@@ -713506,11 +714358,11 @@
"support"
],
"user-timing/clearMarks.html": [
- "22d67262c3d76698862e46756a793267423cb5b1",
+ "92c60a3bbb856bd05bf13f12bde09dac7eefb6e6",
"testharness"
],
"user-timing/clearMeasures.html": [
- "488bece373365ba78246b33bed4e8869370abdbd",
+ "54d41005698305844088b347c11982c626947504",
"testharness"
],
"user-timing/clear_all_marks.any.js": [
@@ -713518,7 +714370,7 @@
"testharness"
],
"user-timing/clear_all_measures.any.js": [
- "5fd2a29a8c08c4f51430c2036ae978bba8cfbda8",
+ "32c993f2827a301feb7bcb69c11317d4020f12f2",
"testharness"
],
"user-timing/clear_non_existent_mark.any.js": [
@@ -713526,7 +714378,7 @@
"testharness"
],
"user-timing/clear_non_existent_measure.any.js": [
- "5e2c7ed1d6411c98b699eb47d6d5f6dcfff978ec",
+ "9de0b5f266d4e2815f28fb29468ea571ba7a1bad",
"testharness"
],
"user-timing/clear_one_mark.any.js": [
@@ -713534,7 +714386,7 @@
"testharness"
],
"user-timing/clear_one_measure.any.js": [
- "a4db264d1887b80f517b75c4e984ab4b2420fb2e",
+ "a5e663772c8bbe9ce9f845ac471fbf10dd5a2867",
"testharness"
],
"user-timing/entry_type.any.js": [
@@ -713566,7 +714418,7 @@
"testharness"
],
"user-timing/mark-l3.html": [
- "429768d5557dbe04d6cddc20f526ab33ae8c9b44",
+ "bb4b22510c760940d4c8886b79401400a3fe8c6d",
"testharness"
],
"user-timing/mark-measure-feature-detection.html": [
@@ -713582,19 +714434,23 @@
"testharness"
],
"user-timing/mark.html": [
- "a7074f1efdb261298bd9260d944e51db02a42e93",
+ "e03e9e6247adabb186783e06a493dcc3a7ecb464",
"testharness"
],
"user-timing/mark_exceptions.html": [
"e1f4c4e0f49484cedd8b6025bbe854c0503c94c1",
"testharness"
],
+ "user-timing/measure-exceptions.html": [
+ "0c532e79390e81393fdb71ea5dd59bbed1e65c38",
+ "testharness"
+ ],
"user-timing/measure-l3.html": [
"0e8dacfef2bb71897bb5fe6872c783d71f8c36ef",
"testharness"
],
"user-timing/measure-with-dict.html": [
- "83990a6c33314e4a7f6b965e21f0eafe2a2d92fb",
+ "47a4f3f520af930e246f8195ee43294e13ebfa36",
"testharness"
],
"user-timing/measure.html": [
@@ -713602,7 +714458,7 @@
"testharness"
],
"user-timing/measure_associated_with_navigation_timing.html": [
- "9fd4664b9e9a5f1e974b469d6e67ff6dc0194bea",
+ "702e3d5f87f39e3b188f0190d7e5f3339f1ac704",
"testharness"
],
"user-timing/measure_exception.html": [
@@ -713622,7 +714478,7 @@
"testharness"
],
"user-timing/measures.html": [
- "d0ab11e39aeff5b51f9294396c037744682b4bf9",
+ "0de68965ddb9c7a53ca5595874bb20a3d7d2ca71",
"testharness"
],
"user-timing/resources/user-timing-helper.js": [
@@ -715710,7 +716566,7 @@
"support"
],
"web-share/META.yml": [
- "1197ab9f237637f15aedd9152a615c1776c2f2c3",
+ "e054ccc8ec34058cc749a04cb3f06c0a72368f76",
"support"
],
"web-share/canShare-files.https.html": [
@@ -715730,7 +716586,7 @@
"testharness"
],
"web-share/resources/manual-helper.js": [
- "2c38eab34ee51d4f50e6941b13e6743772d1fedd",
+ "e2ca229f4f9b229cfad9f84bed8b71ef96cb98d1",
"support"
],
"web-share/share-cancel-manual.html": [
@@ -715749,6 +716605,14 @@
"d601c7df7ab7896c775d26fb1a2488fa8f827dc7",
"manual"
],
+ "web-share/share-files-manual.html": [
+ "c3941bb4065b28c7f8fd4f615b8ec595ea5281a7",
+ "manual"
+ ],
+ "web-share/share-image-manual.html": [
+ "48ea4c378c194691b78d1b365999408322345a37",
+ "manual"
+ ],
"web-share/share-non-string-manual.html": [
"b70f8fc23d2e31e1f0ddc0aa62c7ad28917faabf",
"manual"
@@ -718881,6 +719745,10 @@
"1310717ccb9c035b011ff5fe5430fbd7e9f158f2",
"support"
],
+ "webrtc/protocol/ice-state.https.html": [
+ "99d2a25eede4a5f2f151bc5bad6abbada8a79784",
+ "testharness"
+ ],
"webrtc/protocol/jsep-initial-offer.https.html": [
"50527f88dfe8f3f025cfffae91b347fdc2527a1d",
"testharness"
@@ -721158,7 +722026,7 @@
"reftest"
],
"webvtt/rendering/cues-with-video/processing-model/align_end-ref.html": [
- "247e6e24bf3aa2fd5de4614ee954114f8136b8f6",
+ "e16f4afa0aa5a82e51868c63a4bcad4d2b4c356b",
"support"
],
"webvtt/rendering/cues-with-video/processing-model/align_end.html": [
@@ -721166,7 +722034,7 @@
"reftest"
],
"webvtt/rendering/cues-with-video/processing-model/align_end_wrapped-ref.html": [
- "f26b3a0761f2aaeadcbde9d0181f6d4e7db30160",
+ "ad69c500916f8ddb389bfdb67340a687f30b686f",
"support"
],
"webvtt/rendering/cues-with-video/processing-model/align_end_wrapped.html": [
@@ -721174,7 +722042,7 @@
"reftest"
],
"webvtt/rendering/cues-with-video/processing-model/align_start-ref.html": [
- "15f24fb74b958c082695cb5b71cc23fc5514523c",
+ "6c1120ca11d7d4eafc62e6e6de1ee58b2d0556e7",
"support"
],
"webvtt/rendering/cues-with-video/processing-model/align_start.html": [
@@ -721182,7 +722050,7 @@
"reftest"
],
"webvtt/rendering/cues-with-video/processing-model/align_start_wrapped-ref.html": [
- "6f5b6335235867bb8c5c0ce5c428f790155af50d",
+ "866ddb153bcd61f68ebf569dac9031755239ba94",
"support"
],
"webvtt/rendering/cues-with-video/processing-model/align_start_wrapped.html": [
@@ -723401,10 +724269,6 @@
"07abc39728c0453668a4fbdc785a9194a2dfb7a0",
"testharness"
],
- "webxr/xrSession_mode.https.html": [
- "a1d066084393742559a020cb6e71277740793db7",
- "testharness"
- ],
"webxr/xrSession_prevent_multiple_exclusive.https.html": [
"e61bd392718ae3b0f8ac8de0fa81604f2d32dcce",
"testharness"
diff --git a/tests/wpt/metadata/css/css-fonts/variations/at-font-face-font-matching.html.ini b/tests/wpt/metadata/css/css-fonts/variations/at-font-face-font-matching.html.ini
index 0a363fa8c93..128faf418a7 100644
--- a/tests/wpt/metadata/css/css-fonts/variations/at-font-face-font-matching.html.ini
+++ b/tests/wpt/metadata/css/css-fonts/variations/at-font-face-font-matching.html.ini
@@ -20,9 +20,6 @@
[Matching font-weight: '430' should prefer '400 425' over '350 399']
expected: FAIL
- [Matching font-weight: '430' should prefer '340 398' over '501 550']
- expected: FAIL
-
[Matching font-weight: '500' should prefer '351 398' over '501 550']
expected: FAIL
@@ -95,9 +92,6 @@
[Matching font-style: 'oblique -21deg' should prefer 'oblique -21deg' over 'oblique -60deg -40deg']
expected: FAIL
- [Matching font-style: 'oblique -21deg' should prefer 'italic' over 'oblique 0deg']
- expected: FAIL
-
[Matching font-style: 'oblique 20deg' should prefer 'oblique 30deg 60deg' over 'oblique 40deg 50deg']
expected: FAIL
@@ -134,9 +128,6 @@
[Descriptor matching priority: Style has higher priority than weight]
expected: FAIL
- [Matching font-weight: '430' should prefer '501 550' over '502 560']
- expected: FAIL
-
[Matching font-style: 'oblique -20deg' should prefer 'oblique -60deg -40deg' over 'oblique -10deg']
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-fonts/variations/font-weight-matching.html.ini b/tests/wpt/metadata/css/css-fonts/variations/font-weight-matching.html.ini
index 56101a229ad..3eafb6a9405 100644
--- a/tests/wpt/metadata/css/css-fonts/variations/font-weight-matching.html.ini
+++ b/tests/wpt/metadata/css/css-fonts/variations/font-weight-matching.html.ini
@@ -14,15 +14,6 @@
[Test @font-face matching for weight 1000]
expected: FAIL
- [Test @font-face matching for weight 99]
- expected: FAIL
-
- [Test @font-face matching for weight 100]
- expected: FAIL
-
- [Test @font-face matching for weight 249]
- expected: FAIL
-
[Test @font-face matching for weight 250]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/hyphens/hyphens-shaping-001.html.ini b/tests/wpt/metadata/css/css-text/hyphens/hyphens-shaping-001.html.ini
new file mode 100644
index 00000000000..e1f84085782
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/hyphens/hyphens-shaping-001.html.ini
@@ -0,0 +1,2 @@
+[hyphens-shaping-001.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/hyphens/hyphens-shaping-002.html.ini b/tests/wpt/metadata/css/css-text/hyphens/hyphens-shaping-002.html.ini
new file mode 100644
index 00000000000..3d01534bf8d
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/hyphens/hyphens-shaping-002.html.ini
@@ -0,0 +1,2 @@
+[hyphens-shaping-002.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/hyphens/hyphens-span-001.html.ini b/tests/wpt/metadata/css/css-text/hyphens/hyphens-span-001.html.ini
new file mode 100644
index 00000000000..bfacccb3df5
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/hyphens/hyphens-span-001.html.ini
@@ -0,0 +1,4 @@
+[hyphens-span-001.html]
+ expected:
+ if os == "linux": PASS
+ FAIL
diff --git a/tests/wpt/metadata/css/css-text/hyphens/shy-styling-001.html.ini b/tests/wpt/metadata/css/css-text/hyphens/shy-styling-001.html.ini
new file mode 100644
index 00000000000..28fba5b7deb
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/hyphens/shy-styling-001.html.ini
@@ -0,0 +1,2 @@
+[shy-styling-001.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-shaping-001.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-shaping-001.html.ini
new file mode 100644
index 00000000000..32c0af06758
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/line-break/line-break-shaping-001.html.ini
@@ -0,0 +1,2 @@
+[line-break-shaping-001.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-shaping-001.html.ini b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-shaping-001.html.ini
new file mode 100644
index 00000000000..7723a66c02d
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-shaping-001.html.ini
@@ -0,0 +1,2 @@
+[overflow-wrap-shaping-001.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-shaping-002.html.ini b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-shaping-002.html.ini
new file mode 100644
index 00000000000..8c4e84160fa
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-shaping-002.html.ini
@@ -0,0 +1,2 @@
+[overflow-wrap-shaping-002.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-002.html.ini b/tests/wpt/metadata/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-002.html.ini
deleted file mode 100644
index 6e57d825a39..00000000000
--- a/tests/wpt/metadata/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-002.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[white-space-pre-wrap-trailing-spaces-002.html]
- expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transitions/transitions-animatable-properties-01.html.ini b/tests/wpt/metadata/css/css-transitions/transitions-animatable-properties-01.html.ini
index 8850ec200da..c72c3772f60 100644
--- a/tests/wpt/metadata/css/css-transitions/transitions-animatable-properties-01.html.ini
+++ b/tests/wpt/metadata/css/css-transitions/transitions-animatable-properties-01.html.ini
@@ -74,3 +74,6 @@
[opacity end]
expected: FAIL
+ [padding-bottom intermediate]
+ 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/getComputedStyle-insets-sticky-container-for-abspos.html.ini b/tests/wpt/metadata/css/cssom/getComputedStyle-insets-sticky-container-for-abspos.html.ini
new file mode 100644
index 00000000000..41718a2bea7
--- /dev/null
+++ b/tests/wpt/metadata/css/cssom/getComputedStyle-insets-sticky-container-for-abspos.html.ini
@@ -0,0 +1,2 @@
+[getComputedStyle-insets-sticky-container-for-abspos.html]
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/css/cssom/getComputedStyle-sticky-pos-percent.html.ini b/tests/wpt/metadata/css/cssom/getComputedStyle-sticky-pos-percent.html.ini
new file mode 100644
index 00000000000..c251912d44a
--- /dev/null
+++ b/tests/wpt/metadata/css/cssom/getComputedStyle-sticky-pos-percent.html.ini
@@ -0,0 +1,4 @@
+[getComputedStyle-sticky-pos-percent.html]
+ [Sticky element's top property percentage value should be resolved against the div with overflow: hidden]
+ 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 841f2ab46db..18f786d4963 100644
--- a/tests/wpt/metadata/fetch/content-type/response.window.js.ini
+++ b/tests/wpt/metadata/fetch/content-type/response.window.js.ini
@@ -312,24 +312,3 @@
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
expected: FAIL
- [<iframe>: combined response Content-Type: */* text/html]
- expected: FAIL
-
- [<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
- expected: FAIL
-
- [<iframe>: separate response Content-Type: text/html;" text/plain]
- expected: FAIL
-
- [<iframe>: separate response Content-Type: text/html;charset=gbk text/plain text/html]
- expected: FAIL
-
- [<iframe>: separate response Content-Type: */* text/html]
- expected: FAIL
-
- [<iframe>: separate response Content-Type: text/html;x=" text/plain]
- expected: FAIL
-
- [<iframe>: separate response Content-Type: text/html;" \\" text/plain]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini
index 536384f36e1..87c807a49ff 100644
--- a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini
+++ b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini
@@ -11,6 +11,3 @@
[X-Content-Type-Options%3A%20nosniff%0C]
expected: FAIL
- [X-Content-Type-Options%3A%20%2Cnosniff]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini
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_5.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini
deleted file mode 100644
index dc2e45516de..00000000000
--- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[traverse_the_history_5.html]
- [Multiple history traversals, last would be aborted]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini b/tests/wpt/metadata/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini
index bf6bbbabedd..b7d7000b82c 100644
--- a/tests/wpt/metadata/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini
+++ b/tests/wpt/metadata/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini
@@ -18,9 +18,6 @@
[Set data URL frame location.protocol to http+x]
expected: FAIL
- [Set HTTP URL frame location.protocol to x]
- expected: FAIL
-
[Set HTTP URL frame location.protocol to gopher]
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/webappapis/dynamic-markup-insertion/document-write/iframe_005.html.ini b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/iframe_005.html.ini
deleted file mode 100644
index 6cf9d13975c..00000000000
--- a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/iframe_005.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[iframe_005.html]
- [document.write external script into iframe write back into parent]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/ignore-opens-during-unload.window.js.ini b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/ignore-opens-during-unload.window.js.ini
index 69bd952d756..910c88d3e81 100644
--- a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/ignore-opens-during-unload.window.js.ini
+++ b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/ignore-opens-during-unload.window.js.ini
@@ -1,5 +1,5 @@
[ignore-opens-during-unload.window.html]
- expected: TIMEOUT
+ expected: CRASH
[ignore-opens-during-unload]
expected: FAIL
diff --git a/tests/wpt/metadata/resource-timing/resource_timing_buffer_full_eventually.html.ini b/tests/wpt/metadata/resource-timing/resource_timing_buffer_full_eventually.html.ini
new file mode 100644
index 00000000000..aa1d99e9604
--- /dev/null
+++ b/tests/wpt/metadata/resource-timing/resource_timing_buffer_full_eventually.html.ini
@@ -0,0 +1,5 @@
+[resource_timing_buffer_full_eventually.html]
+ expected: TIMEOUT
+ [Finite resource timing entries buffer size]
+ expected: TIMEOUT
+
diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini
index b2efe349865..53d56b9ab59 100644
--- a/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini
+++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini
@@ -11,3 +11,21 @@
[X Stitched sine-wave buffers at sample rate 43800 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[30\]\t9.4836157560348511e-1\t9.5236867666244507e-1\t4.0071010589599609e-3\t4.2075103446311962e-3\t3.8985999999999999e-3\n\t[31\]\t9.2646563053131104e-1\t9.3139332532882690e-1\t4.9276947975158691e-3\t5.2906700783754857e-3\t3.8985999999999999e-3\n\t[32\]\t9.0087991952896118e-1\t9.0675884485244751e-1\t5.8789253234863281e-3\t6.4834496590358351e-3\t3.8985999999999999e-3\n\t[33\]\t8.7170630693435669e-1\t8.7856203317642212e-1\t6.8557262420654297e-3\t7.8033490899654511e-3\t3.8985999999999999e-3\n\t[34\]\t8.3906102180480957e-1\t8.4691369533538818e-1\t7.8526735305786133e-3\t9.2721059699818163e-3\t3.8985999999999999e-3\n\t...and 31035 more errors.\n\tMax AbsError of 8.5881388187408447e-1 at index of 1570.\n\t[1570\]\t0.0000000000000000e+0\t-8.5881388187408447e-1\t8.5881388187408447e-1\t1.0000000000000000e+0\t3.8985999999999999e-3\n\tMax RelError of 3.3137802965303198e+0 at index of 1253.\n\t[1253\]\t-4.3022233992815018e-2\t-9.9732093513011932e-3\t3.3049024641513824e-2\t3.3137802965303198e+0\t3.8985999999999999e-3\n]
expected: FAIL
+ [# AUDIT TASK RUNNER FINISHED: 2 out of 2 tasks were failed.]
+ expected: FAIL
+
+ [X Stitched sine-wave buffers at sample rate 43800 does not equal [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0...\] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[1\]\t6.3076853752136230e-2\t0.0000000000000000e+0\t6.3076853752136230e-2\tInfinity\t3.8985999999999999e-3\n\t[2\]\t1.2590248882770538e-1\t0.0000000000000000e+0\t1.2590248882770538e-1\tInfinity\t3.8985999999999999e-3\n\t[3\]\t1.8822671473026276e-1\t0.0000000000000000e+0\t1.8822671473026276e-1\tInfinity\t3.8985999999999999e-3\n\t[4\]\t2.4980127811431885e-1\t0.0000000000000000e+0\t2.4980127811431885e-1\tInfinity\t3.8985999999999999e-3\n\t[5\]\t3.1038099527359009e-1\t0.0000000000000000e+0\t3.1038099527359009e-1\tInfinity\t3.8985999999999999e-3\n\t...and 43675 more errors.\n\tMax AbsError of 9.9999898672103882e-1 at index of 225.\n\t[225\]\t9.9999898672103882e-1\t0.0000000000000000e+0\t9.9999898672103882e-1\tInfinity\t3.8985999999999999e-3\n\tMax RelError of Infinity at index of 1.\n]
+ expected: FAIL
+
+ [X SNR (-Infinity dB) is not greater than or equal to 85.58. Got -Infinity.]
+ expected: FAIL
+
+ [X SNR (-Infinity dB) is not greater than or equal to 65.737. Got -Infinity.]
+ expected: FAIL
+
+ [< [buffer-stitching-1\] 2 out of 3 assertions were failed.]
+ expected: FAIL
+
+ [X Stitched sine-wave buffers at sample rate 44100 does not equal [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0...\] with an element-wise tolerance of {"absoluteThreshold":0.000090957,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[1\]\t6.2648326158523560e-2\t0.0000000000000000e+0\t6.2648326158523560e-2\tInfinity\t9.0957000000000003e-5\n\t[2\]\t1.2505052983760834e-1\t0.0000000000000000e+0\t1.2505052983760834e-1\tInfinity\t9.0957000000000003e-5\n\t[3\]\t1.8696144223213196e-1\t0.0000000000000000e+0\t1.8696144223213196e-1\tInfinity\t9.0957000000000003e-5\n\t[4\]\t2.4813784658908844e-1\t0.0000000000000000e+0\t2.4813784658908844e-1\tInfinity\t9.0957000000000003e-5\n\t[5\]\t3.0833941698074341e-1\t0.0000000000000000e+0\t3.0833941698074341e-1\tInfinity\t9.0957000000000003e-5\n\t...and 44075 more errors.\n\tMax AbsError of 9.9999976158142090e-1 at index of 877.\n\t[877\]\t-9.9999976158142090e-1\t0.0000000000000000e+0\t9.9999976158142090e-1\tInfinity\t9.0957000000000003e-5\n\tMax RelError of Infinity at index of 1.\n]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/workers/semantics/multiple-workers/005.html.ini b/tests/wpt/metadata/workers/semantics/multiple-workers/005.html.ini
index f584fce5df1..268949ced5c 100644
--- a/tests/wpt/metadata/workers/semantics/multiple-workers/005.html.ini
+++ b/tests/wpt/metadata/workers/semantics/multiple-workers/005.html.ini
@@ -1,5 +1,4 @@
[005.html]
- expected: ERROR
[dedicated worker in shared worker in dedicated worker]
expected: FAIL
diff --git a/tests/wpt/metadata/workers/semantics/run-a-worker/003.html.ini b/tests/wpt/metadata/workers/semantics/run-a-worker/003.html.ini
index 49f489d2a1c..d6e39444229 100644
--- a/tests/wpt/metadata/workers/semantics/run-a-worker/003.html.ini
+++ b/tests/wpt/metadata/workers/semantics/run-a-worker/003.html.ini
@@ -1,6 +1,5 @@
[003.html]
type: testharness
- expected: ERROR
[shared]
expected: FAIL
diff --git a/tests/wpt/web-platform-tests/animation-worklet/stateful-animator.https.html b/tests/wpt/web-platform-tests/animation-worklet/stateful-animator.https.html
index c4b6301fd9d..dba3aa8dc8d 100644
--- a/tests/wpt/web-platform-tests/animation-worklet/stateful-animator.https.html
+++ b/tests/wpt/web-platform-tests/animation-worklet/stateful-animator.https.html
@@ -43,6 +43,31 @@
});
</script>
+<script id="stateless_animator_preserves_effect_local_time" type="text/worklet">
+ registerAnimator("stateless_animator_preserves_effect_local_time", class {
+ animate(currentTime, effect) {
+ // The local time will be carried over to the new global scope.
+ effect.localTime = effect.localTime ? effect.localTime + 1 : 1;
+ }
+ });
+</script>
+
+<script id="stateless_animator_does_not_copy_effect_object" type="text/worklet">
+ registerAnimator("stateless_animator_does_not_copy_effect_object", class {
+ animate(currentTime, effect) {
+ effect.localTime = effect.localTime ? effect.localTime + 1 : 1;
+ effect.foo = effect.foo ? effect.foo + 1 : 1;
+ // This condition becomes true once we switch global scope and only preserve local time
+ // otherwise these values keep increasing in lock step.
+ if (effect.localTime > effect.foo) {
+ // This works as long as we switch global scope before 10000 frames.
+ // which is a safe assumption.
+ effect.localTime = 10000;
+ }
+ }
+ });
+</script>
+
<script id="state_function_returns_empty" type="text/worklet">
registerAnimator("state_function_returns_empty", class {
constructor(options, state = { test_local_time: 0 }) {
@@ -70,6 +95,7 @@
</script>
<script>
+ const EXPECTED_FRAMES_TO_A_SCOPE_SWITCH = 15;
async function localTimeDoesNotUpdate(animation) {
// The local time stops increasing after the animator instance being dropped.
// e.g. 0, 1, 2, .., n, n, n, n, .. where n is the frame that the global
@@ -109,7 +135,6 @@
// effect.localTime should be correctly increased upon global scope
// switches for stateful animators.
- const EXPECTED_FRAMES_TO_A_SCOPE_SWITCH = 15;
await waitForAnimationFrameWithCondition(_ => {
return animation.effect.getComputedTiming().localTime ==
EXPECTED_FRAMES_TO_A_SCOPE_SWITCH;
@@ -133,6 +158,34 @@
}, "Stateless animator gets reecreated with 'undefined' state.");
promise_test(async t => {
+ await runInAnimationWorklet(document.getElementById('stateless_animator_preserves_effect_local_time').textContent);
+ const target = document.getElementById('target');
+ const effect = new KeyframeEffect(target, [{ opacity: 0 }], { duration: 1000 });
+ const animation = new WorkletAnimation('stateless_animator_preserves_effect_local_time', effect);
+ animation.play();
+
+ await waitForAnimationFrameWithCondition(_ => {
+ return animation.effect.getComputedTiming().localTime == EXPECTED_FRAMES_TO_A_SCOPE_SWITCH;
+ });
+
+ animation.cancel();
+ }, "Stateless animator should preserve the local time of its effect.");
+
+ promise_test(async t => {
+ await runInAnimationWorklet(document.getElementById('stateless_animator_does_not_copy_effect_object').textContent);
+ const target = document.getElementById('target');
+ const effect = new KeyframeEffect(target, [{ opacity: 0 }], { duration: 1000 });
+ const animation = new WorkletAnimation('stateless_animator_does_not_copy_effect_object', effect);
+ animation.play();
+
+ await waitForAnimationFrameWithCondition(_ => {
+ return animation.effect.getComputedTiming().localTime == 10000;
+ });
+
+ animation.cancel();
+ }, "Stateless animator should not copy the effect object.");
+
+ promise_test(async t => {
await runInAnimationWorklet(document.getElementById('state_function_returns_empty').textContent);
const target = document.getElementById('target');
const effect = new KeyframeEffect(target, [{ opacity: 0 }], { duration: 1000 });
diff --git a/tests/wpt/web-platform-tests/conformance-checkers/Makefile b/tests/wpt/web-platform-tests/conformance-checkers/Makefile
index 65836f9e1ac..81ef75c4681 100644
--- a/tests/wpt/web-platform-tests/conformance-checkers/Makefile
+++ b/tests/wpt/web-platform-tests/conformance-checkers/Makefile
@@ -28,16 +28,16 @@ README.md: index.html
| $(EXPAND) $(EXPANDFLAGS) > $@
messages.json: .FORCE
- $(CURL) $(CURLFLAGS) -O \
- https://sideshowbarker.net/nightlies/jar/vnu.jar
+ $(CURL) $(CURLFLAGS) -O -L \
+ https://github.com/validator/validator/releases/download/jar/vnu.jar
$(JAVA) $(JAVAFLAGS) -cp vnu.jar nu.validator.client.TestRunner \
--ignore=html-its --write-messages $@
$(PYTHON) $(PYTHONFLAGS) -mjson.tool $@ > $@.tmp
mv $@.tmp $@
test: .FORCE
- $(CURL) $(CURLFLAGS) -O \
- https://sideshowbarker.net/nightlies/jar/vnu.jar
+ $(CURL) $(CURLFLAGS) -O -L \
+ https://github.com/validator/validator/releases/download/jar/vnu.jar
$(JAVA) $(JAVAFLAGS) -cp vnu.jar nu.validator.client.TestRunner \
--ignore=html-its messages.json
diff --git a/tests/wpt/web-platform-tests/cookies/samesite/fetch.html b/tests/wpt/web-platform-tests/cookies/samesite/fetch.html
index 734462a3c53..3a2d5bf64c5 100644
--- a/tests/wpt/web-platform-tests/cookies/samesite/fetch.html
+++ b/tests/wpt/web-platform-tests/cookies/samesite/fetch.html
@@ -1,5 +1,6 @@
<!DOCTYPE html>
<meta charset="utf-8"/>
+<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/cookies/resources/cookie-helper.sub.js"></script>
diff --git a/tests/wpt/web-platform-tests/cookies/samesite/form-get-blank.html b/tests/wpt/web-platform-tests/cookies/samesite/form-get-blank.html
index a86f34b0fb4..b7351702b80 100644
--- a/tests/wpt/web-platform-tests/cookies/samesite/form-get-blank.html
+++ b/tests/wpt/web-platform-tests/cookies/samesite/form-get-blank.html
@@ -1,5 +1,6 @@
<!DOCTYPE html>
<meta charset="utf-8"/>
+<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/cookies/resources/cookie-helper.sub.js"></script>
diff --git a/tests/wpt/web-platform-tests/cookies/samesite/form-post-blank.html b/tests/wpt/web-platform-tests/cookies/samesite/form-post-blank.html
index 115c6a157a0..f2bb0cacfbc 100644
--- a/tests/wpt/web-platform-tests/cookies/samesite/form-post-blank.html
+++ b/tests/wpt/web-platform-tests/cookies/samesite/form-post-blank.html
@@ -1,5 +1,6 @@
<!DOCTYPE html>
<meta charset="utf-8"/>
+<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/cookies/resources/cookie-helper.sub.js"></script>
diff --git a/tests/wpt/web-platform-tests/cookies/samesite/iframe-reload.html b/tests/wpt/web-platform-tests/cookies/samesite/iframe-reload.html
index 759fc7b03c3..c4c3598ca44 100644
--- a/tests/wpt/web-platform-tests/cookies/samesite/iframe-reload.html
+++ b/tests/wpt/web-platform-tests/cookies/samesite/iframe-reload.html
@@ -1,5 +1,6 @@
<!DOCTYPE html>
<meta charset="utf-8"/>
+<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/cookies/resources/cookie-helper.sub.js"></script>
diff --git a/tests/wpt/web-platform-tests/cookies/samesite/iframe.html b/tests/wpt/web-platform-tests/cookies/samesite/iframe.html
index 38a7701bf8a..e511128f963 100644
--- a/tests/wpt/web-platform-tests/cookies/samesite/iframe.html
+++ b/tests/wpt/web-platform-tests/cookies/samesite/iframe.html
@@ -1,5 +1,6 @@
<!DOCTYPE html>
<meta charset="utf-8"/>
+<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/cookies/resources/cookie-helper.sub.js"></script>
diff --git a/tests/wpt/web-platform-tests/cookies/samesite/img.html b/tests/wpt/web-platform-tests/cookies/samesite/img.html
index b1b04340b79..bca84cbd28b 100644
--- a/tests/wpt/web-platform-tests/cookies/samesite/img.html
+++ b/tests/wpt/web-platform-tests/cookies/samesite/img.html
@@ -1,5 +1,6 @@
<!DOCTYPE html>
<meta charset="utf-8"/>
+<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/cookies/resources/cookie-helper.sub.js"></script>
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/align-items-007.html b/tests/wpt/web-platform-tests/css/css-flexbox/align-items-007.html
new file mode 100644
index 00000000000..01e8f001a8a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-flexbox/align-items-007.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<link rel="author" title="Google LLC" href="http://www.google.com" />
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#cross-sizing" />
+<title>css-flexbox: Tests that we size items in a wrapping column flexbox as fit-content</title>
+<link rel="match" href="../reference/ref-filled-green-100px-square.xht" />
+<meta name="assert" content="The image should fit wholly within the flexbox." />
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+
+<!-- This makes sure that we only see green if the flex items are sized correctly -->
+<div style="position: absolute; width: 100px; height: 100px; background: green;"></div>
+
+<div style="display: flex; flex-direction: column; width: 100px; height: 100px; line-height: 20px; align-items: center; background: green;">
+ <img src="../support/red-rect.svg">
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-lists/counter-set-001-ref.html b/tests/wpt/web-platform-tests/css/css-lists/counter-set-001-ref.html
index be06ea1dc94..301197904a5 100644
--- a/tests/wpt/web-platform-tests/css/css-lists/counter-set-001-ref.html
+++ b/tests/wpt/web-platform-tests/css/css-lists/counter-set-001-ref.html
@@ -18,8 +18,8 @@ html,body {
<span>7</span><!-- "7" -->
<span>0</span><!-- "0" -->
<span>7</span><!-- "7" -->
-<span>8</span><!-- "8" -->
-<span>2</span><!-- "2" -->
+<span>6</span><!-- "6" -->
+<span>0</span><!-- "0" -->
<x>
<span>2</span><!-- "2" -->
</x>
diff --git a/tests/wpt/web-platform-tests/css/css-lists/counter-set-001.html b/tests/wpt/web-platform-tests/css/css-lists/counter-set-001.html
index 3be4c737c2b..4e28367798a 100644
--- a/tests/wpt/web-platform-tests/css/css-lists/counter-set-001.html
+++ b/tests/wpt/web-platform-tests/css/css-lists/counter-set-001.html
@@ -21,8 +21,8 @@ span::before { content: counters(n, '.'); }
<span style="counter-set: n 7"></span><!-- "7" -->
<span style="counter-set: n"></span><!-- "0" -->
<span style="counter-set: n 8 n 7"></span><!-- "7" -->
-<span style="counter-set: n 6; counter-increment: n 2"></span><!-- "8" -->
-<span style="counter-set: n; counter-increment: n 2"></span><!-- "2" -->
+<span style="counter-set: n 6; counter-increment: n 2"></span><!-- "6" -->
+<span style="counter-set: n; counter-increment: n 2"></span><!-- "0" -->
<x style="counter-reset: n 9">
<span style="counter-set: n 2"></span><!-- "2" -->
</x>
diff --git a/tests/wpt/web-platform-tests/css/css-lists/li-list-item-counter-ref.html b/tests/wpt/web-platform-tests/css/css-lists/li-list-item-counter-ref.html
index 8340d6d7f65..96ca6c11221 100644
--- a/tests/wpt/web-platform-tests/css/css-lists/li-list-item-counter-ref.html
+++ b/tests/wpt/web-platform-tests/css/css-lists/li-list-item-counter-ref.html
@@ -17,10 +17,10 @@ body { margin-left: 10em; }
<body>
<ol><li value=0>a<li value=4>b<li value=4>c</ol>
-<ol><li value=0>a<li value=9>b<li value=9>c</ol>
-<ol><li value=-1>a<li value=3>b<li value=2>c</ol>
<ol><li value=0>a<li value=4>b<li value=4>c</ol>
-<ol><li value=2>a<li value=6>b<li value=8>c</ol>
+<ol><li value=-1>a<li value=4>b<li value=3>c</ol>
+<ol><li value=0>a<li value=4>b<li value=4>c</ol>
+<ol><li value=2>a<li value=4>b<li value=6>c</ol>
</body>
</html>
diff --git a/tests/wpt/web-platform-tests/css/css-lists/li-value-counter-reset-001-ref.html b/tests/wpt/web-platform-tests/css/css-lists/li-value-counter-reset-001-ref.html
index 9afb1ecfa05..6c6350c10f0 100644
--- a/tests/wpt/web-platform-tests/css/css-lists/li-value-counter-reset-001-ref.html
+++ b/tests/wpt/web-platform-tests/css/css-lists/li-value-counter-reset-001-ref.html
@@ -17,9 +17,9 @@ body { margin-left: 10em; }
<body>
<ol><li>a<li value=99>b</ol>
-<ol><li>a<li value=149>b</ol>
-<ol><li>a<li value=54>b</ol>
-<ol><li>a<li value=149>b</ol>
+<ol><li>a<li value=99>b</ol>
+<ol><li>a<li value=4>b</ol>
+<ol><li>a<li value=99>b</ol>
<ol><li>a<li value=51>b</ol>
<ol><li>a<li value=88>b</ol>
diff --git a/tests/wpt/web-platform-tests/css/css-position/position-absolute-crash-chrome-006.html b/tests/wpt/web-platform-tests/css/css-position/position-absolute-crash-chrome-006.html
new file mode 100644
index 00000000000..94b2469b0e6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-position/position-absolute-crash-chrome-006.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<title>CSS Position Absolute: Chrome crash</title>
+<link rel="author" href="mailto:atotic@chromium.org">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=952644">
+<meta name="assert" content="abspos iframe with zoom gets laid out">
+<style>
+ .boundary {
+ overflow: hidden;
+ width: 100px;
+ height: 100px;
+ }
+ .abs {
+ position: absolute;
+ background: green;
+ zoom: 2;
+ }
+</style>
+<!-- Containing block with zoom causes zoomed abspos iframe
+not to be laid out-->
+<div class="boundary">
+ <div id="parent">
+ </div>
+</div>
+<script>
+ document.body.offsetTop;
+ let abs = document.createElement("iframe");
+ abs.classList.add("abs");
+ document.querySelector("#parent").appendChild(abs);
+ test(() => {
+ }, 'test passes if it does not crash');
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-position/position-absolute-crash-chrome-007.html b/tests/wpt/web-platform-tests/css/css-position/position-absolute-crash-chrome-007.html
new file mode 100644
index 00000000000..9c24210c257
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-position/position-absolute-crash-chrome-007.html
@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<title>CSS Position Absolute: Chrome crash</title>
+<link rel="author" href="mailto:atotic@chromium.org">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<link rel="help" href="https://crbug.com/945696">
+<meta name="assert" content="Absolute descendant inside multiple nested split inlines does not crash.">
+<style>
+ body {
+ overflow: hidden;
+ margin: 0px;
+ font-size: 24px;
+ }
+ #block-container {
+ position: relative;
+ }
+ #css-container {
+ position: relative;
+ font-size: 12px;
+ }
+ #anonymous-parent {
+ background-color: #FFFF7F;
+ }
+ #anonymous-split {
+ background-color: #FFD997;
+ }
+ #css-container {
+ background-color: #BEE0FF;
+ }
+ #abs {
+ background-color: rgba(0, 255, 0, 0.5);
+ position:absolute;
+ top: 0px;
+ left: 0px;
+ }
+ #fullabs {
+ background-color: rgba(0, 255, 0, 0.5);
+ position: absolute;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ right: 0;
+ }
+</style>
+<div id="block-container">
+ <span id="anonymous-parent">
+ parent <br>start
+ <span id="anonymous-split">
+ split start
+ <div id="splitter" >splitter</div>
+ split middle
+ <span id="css-container">
+ css-container start
+ <div id="abs">ABS</div>
+ <div id="fullabs">FULLABS</div>
+ css container end
+ </span>
+ split end
+ </span>
+ parent end
+ </span>
+</div>
+<script>
+document.body.offsetTop;
+ test(() => {
+ }, 'test passes if it does not crash');
+</script>
+
diff --git a/tests/wpt/web-platform-tests/css/css-position/position-absolute-in-inline-002.html b/tests/wpt/web-platform-tests/css/css-position/position-absolute-in-inline-002.html
new file mode 100644
index 00000000000..8ec3838fc77
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-position/position-absolute-in-inline-002.html
@@ -0,0 +1,51 @@
+<!doctype html>
+
+<link rel="author" href="mailto:atotic@chromium.org">
+<link rel="help" href="https://www.w3.org/TR/css-position-3/#def-cb">
+<meta name="assert" content="split inline containing blocks are handled correctly.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+ body {
+ margin: 0;
+ }
+ #container-span {
+ position: relative;
+ outline: solid 1px gray;
+ }
+ #split {
+ width: 10px;
+ height: 10px;
+ }
+ #target {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background: rgba(0,255,0,0.3);
+ }
+</style>
+<!-- There should be a green rectangle spanning two "container span" lines below -->
+<span id="outer-span">
+outer span
+ <span id="container-span">
+ container span start
+ <div id="split"></div>
+ <div id="target"></div>
+ container span end
+ </span>
+outer span end
+</span>
+<script>
+ test(_ => {
+ let abs_bounds = document.querySelector("#target").getClientRects();
+ let container_bounds = document.querySelector("#container-span").getClientRects();
+ assert_equals(abs_bounds.length, 1);
+ assert_equals(container_bounds.length, 3);
+ assert_equals(abs_bounds[0].left, container_bounds[0].left, "left matches container");
+ assert_equals(abs_bounds[0].top, container_bounds[0].top, "top matches container");
+ assert_equals(abs_bounds[0].right, container_bounds[2].right, "right matches container");
+ assert_equals(abs_bounds[0].bottom, container_bounds[2].bottom, "bottom matches container");
+ }, "absolute inside inline container location should be correct.");
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-text/hyphens/hyphens-shaping-001.html b/tests/wpt/web-platform-tests/css/css-text/hyphens/hyphens-shaping-001.html
new file mode 100644
index 00000000000..0cd2243bdac
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/hyphens/hyphens-shaping-001.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text level 3 Test: hyphenation and text-shaping</title>
+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#word-break-shaping">
+<link rel="help" href="https://www.w3.org/TR/css-text-3/#hyphens-property">
+<link rel="match" href="reference/hyphens-shaping-001-ref.html">
+<meta name="assert" content="Shaping characters are still shaped as if the word were not broken when the word is hyphenated.">
+<style>
+ @font-face {
+ font-family: 'csstest_noto';
+ src: url('/fonts/noto/NotoNaskhArabic-regular.woff2') format('woff2');
+ }
+ div {
+ font-family: 'csstest_noto';
+ font-size: 3em;
+ line-height: 1; /* Not strictly needed, but it gets quite tall otherwise, so this helps fit the screen. */
+ width: 0;
+ hyphens: manual;
+ margin: 1em auto;
+ }
+ .ref { color: orange; }
+ span { color: transparent; }
+</style>
+
+<p>Test passes if the black text is identical to the orange text (except the color).
+
+<div dir=rtl lang=ug class=ref>&#xFEA9;&#xFE8D;&#xFEE3;&#xFEF4;<br>&#xFEAA;&#xFEEF;</div>
+
+<div dir=rtl lang=ug id=test>دامي<span>&shy;</span>دى</div>
+<!--
+Using an invisible hyphen because it isn't certain what character the UA will actually use,
+and we shouldn't fail the reftest because of a mismatch there.
+See also hyphens-shaping-002.html to check that some character is inserted.
+-->
diff --git a/tests/wpt/web-platform-tests/css/css-text/hyphens/hyphens-shaping-002.html b/tests/wpt/web-platform-tests/css/css-text/hyphens/hyphens-shaping-002.html
new file mode 100644
index 00000000000..57d23e585e9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/hyphens/hyphens-shaping-002.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text level 3 Test: hyphenation and text-shaping</title>
+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#word-break-shaping">
+<link rel="help" href="https://www.w3.org/TR/css-text-3/#hyphens-property">
+<link rel="mismatch" href="reference/hyphens-shaping-002-ref.html">
+<meta name="assert" content="Checks that some kind of hyphen does get inserted in Uyghur. (Complement fo hyphens-shaping-001.html)">
+<style>
+ @font-face {
+ font-family: 'csstest_noto';
+ src: url('/fonts/noto/NotoNaskhArabic-regular.woff2') format('woff2');
+ }
+ /* The main text is invisible,
+ but we want to give the UA a chance to use the right hyphen,
+ which may be font dependent.
+ */
+ div {
+ font-family: 'csstest_noto';
+ font-size: 4em;
+ hyphens: manual;
+ margin: auto;
+ width: 0;
+ }
+ #test { color: transparent; }
+ span { color: black; }
+</style>
+
+<p>Test passes if there is something below:
+
+<div dir=rtl lang=ug id=test>دامي<span>&shy;</span>دى</div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/hyphens/hyphens-span-001.html b/tests/wpt/web-platform-tests/css/css-text/hyphens/hyphens-span-001.html
new file mode 100644
index 00000000000..f7269e1cb94
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/hyphens/hyphens-span-001.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test: manual hyphen and span</title>
+<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#hyphens-property">
+<meta name="flags" content="">
+<link rel="match" href="reference/hyphens-span-001-ref.html">
+<meta name="assert" content="the presence of an unstyled inline element has no effect on text in general and on manual hyhenation in particular">
+<style>
+div {
+ border: solid orange;
+ margin: 5px;
+ width: 6ch;
+ hyphens: manual;
+}
+</style>
+
+<p>Test passes if the text in all orange boxes below is identical (including the presence and position of a hyphen).
+
+<div>high&shy;way</div>
+<div><span>high</span>&shy;way</div>
+<div><span>high&shy;</span>way</div>
+<div>high<span>&shy;</span>way</div>
+<div>high<span>&shy;way</span></div>
+<div>high&shy;<span>way</span></div>
+<div><span>high</span>&shy;<span>way</span></div>
+<div><span>high&shy;wa</span>y</div>
+<div><span>hi</span>gh&shy;way</div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/hyphens/hyphens-span-002.html b/tests/wpt/web-platform-tests/css/css-text/hyphens/hyphens-span-002.html
new file mode 100644
index 00000000000..07264faa7bb
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/hyphens/hyphens-span-002.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test: auto hyphen and span</title>
+<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#hyphens-property">
+<meta name="flags" content="">
+<link rel="match" href="reference/hyphens-span-002-ref.html">
+<meta name="assert" content="the presence of an unstyled inline element has no effect on text in general and on manual hyhenation in particular">
+<style>
+div {
+ border: solid orange;
+ margin: 5px;
+ width: 6ch;
+ hyphens: auto;
+}
+</style>
+
+<p>Test passes if the text in all orange boxes below is identical (including the presence and position of a hyphen).
+
+<div lang=en>highway</div>
+<div lang=en><span>high</span>way</div>
+<div lang=en>high<span></span>way</div>
+<div lang=en>high<span>way</span></div>
+<div lang=en><span>high</span><span>way</span></div>
+<div lang=en><span>highwa</span>y</div>
+<div lang=en><span>hi</span>ghway</div>
+
+<!--
+This test assumes the presence of "highway"
+with a hyphenation point between "high" and "way"
+in the hyphenation dictionary for English
+in order to be useful,
+but that assumption is not necessary for the test to be correct:
+if the word doesn't hyphenate,
+it will not hyphenate in any of the cases.
+-->
diff --git a/tests/wpt/web-platform-tests/css/css-text/hyphens/reference/hyphens-shaping-001-ref.html b/tests/wpt/web-platform-tests/css/css-text/hyphens/reference/hyphens-shaping-001-ref.html
new file mode 100644
index 00000000000..9eb1d7fd686
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/hyphens/reference/hyphens-shaping-001-ref.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text level 3 Test reference</title>
+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
+<style>
+ @font-face {
+ font-family: 'csstest_noto';
+ src: url('/fonts/noto/NotoNaskhArabic-regular.woff2') format('woff2');
+ }
+ div {
+ font-family: 'csstest_noto';
+ font-size: 3em;
+ line-height: 1; /* Not strictly needed, but it gets quite tall otherwise, so this helps fit the screen. */
+ width: 0;
+ hyphens: manual;
+ margin: 1em auto;
+ }
+ .ref { color: orange; }
+</style>
+
+<p>Test passes if the black text is identical to the orange text (except the color).
+
+<div dir=rtl lang=ug class=ref>&#xFEA9;&#xFE8D;&#xFEE3;&#xFEF4;<br>&#xFEAA;&#xFEEF;</div>
+
+<div dir=rtl lang=ug>&#xFEA9;&#xFE8D;&#xFEE3;&#xFEF4;<br>&#xFEAA;&#xFEEF;</div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/hyphens/reference/hyphens-shaping-002-ref.html b/tests/wpt/web-platform-tests/css/css-text/hyphens/reference/hyphens-shaping-002-ref.html
new file mode 100644
index 00000000000..d8e31d71e4b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/hyphens/reference/hyphens-shaping-002-ref.html
@@ -0,0 +1,6 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text level 3 Test reference</title>
+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
+
+<p>Test passes if there is something below:
diff --git a/tests/wpt/web-platform-tests/css/css-text/hyphens/reference/hyphens-span-001-ref.html b/tests/wpt/web-platform-tests/css/css-text/hyphens/reference/hyphens-span-001-ref.html
new file mode 100644
index 00000000000..cbe37261375
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/hyphens/reference/hyphens-span-001-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test reference</title>
+<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
+<style>
+div {
+ border: solid orange;
+ margin: 5px;
+ width: 6ch;
+ hyphens: manual;
+}
+</style>
+
+<p>Test passes if the text in all orange boxes below is identical (including the presence and position of a hyphen).
+
+<div>high&shy;way</div>
+<div>high&shy;way</div>
+<div>high&shy;way</div>
+<div>high&shy;way</div>
+<div>high&shy;way</div>
+<div>high&shy;way</div>
+<div>high&shy;way</div>
+<div>high&shy;way</div>
+<div>high&shy;way</div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/hyphens/reference/hyphens-span-002-ref.html b/tests/wpt/web-platform-tests/css/css-text/hyphens/reference/hyphens-span-002-ref.html
new file mode 100644
index 00000000000..7b3f8206417
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/hyphens/reference/hyphens-span-002-ref.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test reference</title>
+<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
+<style>
+div {
+ border: solid orange;
+ margin: 5px;
+ width: 6ch;
+ hyphens: auto;
+}
+</style>
+
+<p>Test passes if the text in all orange boxes below is identical (including the presence and position of a hyphen).
+
+<div lang=en>highway</div>
+<div lang=en>highway</div>
+<div lang=en>highway</div>
+<div lang=en>highway</div>
+<div lang=en>highway</div>
+<div lang=en>highway</div>
+<div lang=en>highway</div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/hyphens/reference/shy-styling-001-alt-ref.html b/tests/wpt/web-platform-tests/css/css-text/hyphens/reference/shy-styling-001-alt-ref.html
new file mode 100644
index 00000000000..c86cb500286
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/hyphens/reference/shy-styling-001-alt-ref.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>test reference</title>
+<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
+<style>
+span {
+ font-size: 3em;
+ color: red;
+ text-shadow: 3px 3px 3px black;
+}
+</style>
+
+<p>Test passes if the word “example” below is hyphenated, and the hyphen is large, red, and has a shadow
+
+<div>ex<span>&#x2010;</span><br>ample</div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/hyphens/reference/shy-styling-001-ref.html b/tests/wpt/web-platform-tests/css/css-text/hyphens/reference/shy-styling-001-ref.html
new file mode 100644
index 00000000000..ad9df16e35d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/hyphens/reference/shy-styling-001-ref.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>test reference</title>
+<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
+<style>
+span {
+ font-size: 3em;
+ color: red;
+ text-shadow: 3px 3px 3px black;
+}
+</style>
+
+<p>Test passes if the word “example” below is hyphenated, and the hyphen is large, red, and has a shadow
+
+<div>ex<span>&#x002D;</span><br>ample</div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/hyphens/shy-styling-001.html b/tests/wpt/web-platform-tests/css/css-text/hyphens/shy-styling-001.html
new file mode 100644
index 00000000000..98348d92a69
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/hyphens/shy-styling-001.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test: soft hyphen styling</title>
+<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#hyphens-property">
+<meta name="flags" content="">
+<link rel="match" href="reference/shy-styling-001-ref.html">
+<link rel="match" href="reference/shy-styling-001-alt-ref.html">
+<meta name="assert" content="hypens inserted where there was a soft-hyphen take on the styles that would have applied to the soft hyphen">
+<style>
+div {
+ width: 0ch;
+ hyphens: manual;
+}
+span {
+ font-size: 3em;
+ color: red;
+ text-shadow: 3px 3px 3px black;
+}
+</style>
+
+<p>Test passes if the word “example” below is hyphenated, and the hyphen is large, red, and has a shadow
+
+<div>ex<span>&shy;</span>ample</div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-shaping-001.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-shaping-001.html
new file mode 100644
index 00000000000..4ce1da2f30a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-shaping-001.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text level 3 Test: line-break:anywhere and text-shaping</title>
+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#word-break-shaping">
+<link rel="help" href="https://www.w3.org/TR/css-text-3/#line-break-property">
+<link rel="match" href="reference/line-break-shaping-001-ref.html">
+<meta name="assert" content="Shaping characters are still shaped as if the word were not broken when a line is broken by line-break:anywhere">
+<style>
+ @font-face {
+ font-family: 'csstest_noto';
+ src: url('/fonts/noto/NotoNaskhArabic-regular.woff2') format('woff2');
+ }
+ div {
+ font-family: 'csstest_noto';
+ font-size: 4em;
+ }
+ section {
+ float: left; /* to sizing to the intrinsic min of the ref box*/
+ position: relative;
+ }
+ #ref {
+ border: solid orange;
+ margin: 1rem;
+ }
+ #test {
+ border: solid blue;
+ position: absolute; /* to avoid influencing the size of the section */
+ left: 1rem;
+ right: 1rem;
+ line-break: anywhere;
+ }
+</style>
+
+<p>Test passes if the blue and organge boxes are identical. Pay attention to characters at the left of the first line, and on the second line.
+<section>
+<div dir=rtl lang=ar id=ref>&#xFECB;&#xFE8E;&#xFE8B;&#xFEE0;<br>&#xFE94;</div>
+<div dir=rtl lang=ar id=test>عائلة</div>
+</section>
diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/reference/line-break-shaping-001-ref.html b/tests/wpt/web-platform-tests/css/css-text/line-break/reference/line-break-shaping-001-ref.html
new file mode 100644
index 00000000000..5543ab07294
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/line-break/reference/line-break-shaping-001-ref.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text level 3 Test ref</title>
+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
+<style>
+ @font-face {
+ font-family: 'csstest_noto';
+ src: url('/fonts/noto/NotoNaskhArabic-regular.woff2') format('woff2');
+ }
+ div {
+ font-family: 'csstest_noto';
+ font-size: 4em;
+ margin: 1rem;
+ }
+ section {
+ float: left; /* to sizing to the intrinsic min of the ref box*/
+ }
+ #ref { border: solid orange; }
+ #test { border: solid blue; }
+</style>
+
+<p>Test passes if the blue and organge boxes are identical. Pay attention to characters at the left of the first line, and on the second line.
+<section>
+<div dir=rtl lang=ar id=ref>&#xFECB;&#xFE8E;&#xFE8B;&#xFEE0;<br>&#xFE94;</div>
+<div dir=rtl lang=ar id=test>&#xFECB;&#xFE8E;&#xFE8B;&#xFEE0;<br>&#xFE94;</div>
+</section>
diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-shaping-001.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-shaping-001.html
new file mode 100644
index 00000000000..8846038d0fc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-shaping-001.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text level 3 Test: overflow-wrap:break-word and text-shaping</title>
+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
+<link rel="help" href="https://www.w3.org/TR/css-text-3/#word-break-shaping">
+<link rel="help" href="https://www.w3.org/TR/css-text-3/#overflow-wrap-property">
+<link rel="match" href="reference/overflow-wrap-shaping-001-ref.html">
+<meta name="assert" content="Shaping characters are still shaped as if the word were not broken when a line is broken by overflow-wrap:break-word">
+<style>
+ @font-face {
+ font-family: 'csstest_noto';
+ src: url('/fonts/noto/NotoNaskhArabic-regular.woff2') format('woff2');
+ }
+ div {
+ font-family: 'csstest_noto';
+ font-size: 4em;
+ }
+ section {
+ float: left; /* to sizing to the intrinsic min of the ref box*/
+ position: relative;
+ }
+ #ref {
+ border: solid orange;
+ margin: 1rem;
+ }
+ #test {
+ border: solid blue;
+ position: absolute; /* to avoid influencing the size of the section */
+ left: 1rem;
+ right: 1rem;
+ overflow-wrap: break-word;
+ }
+</style>
+
+<p>Test passes if the blue and organge boxes are identical. Pay attention to characters at the left of the first line, and on the second line.
+<section>
+<div dir=rtl lang=ar id=ref>&#xFECB;&#xFE8E;&#xFE8B;&#xFEE0;<br>&#xFE94;</div>
+<div dir=rtl lang=ar id=test>عائلة</div>
+</section>
diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-shaping-002.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-shaping-002.html
new file mode 100644
index 00000000000..adb25c78b7a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-shaping-002.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text level 3 Test: overflow-wrap:anywhere and text-shaping</title>
+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
+<link rel="help" href="https://www.w3.org/TR/css-text-3/#word-break-shaping">
+<link rel="help" href="https://www.w3.org/TR/css-text-3/#overflow-wrap-property">
+<link rel="match" href="reference/overflow-wrap-shaping-001-ref.html">
+<meta name="assert" content="Shaping characters are still shaped as if the word were not broken when a line is broken by overflow-wrap:anywhere">
+<style>
+ @font-face {
+ font-family: 'csstest_noto';
+ src: url('/fonts/noto/NotoNaskhArabic-regular.woff2') format('woff2');
+ }
+ div {
+ font-family: 'csstest_noto';
+ font-size: 4em;
+ }
+ section {
+ float: left; /* to sizing to the intrinsic min of the ref box*/
+ position: relative;
+ }
+ #ref {
+ border: solid orange;
+ margin: 1rem;
+ }
+ #test {
+ border: solid blue;
+ position: absolute; /* to avoid influencing the size of the section */
+ left: 1rem;
+ right: 1rem;
+ overflow-wrap: anywhere;
+ }
+</style>
+
+<p>Test passes if the blue and organge boxes are identical. Pay attention to characters at the left of the first line, and on the second line.
+<section>
+<div dir=rtl lang=ar id=ref>&#xFECB;&#xFE8E;&#xFE8B;&#xFEE0;<br>&#xFE94;</div>
+<div dir=rtl lang=ar id=test>عائلة</div>
+</section>
diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/reference/overflow-wrap-shaping-001-ref.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/reference/overflow-wrap-shaping-001-ref.html
new file mode 100644
index 00000000000..5543ab07294
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/reference/overflow-wrap-shaping-001-ref.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text level 3 Test ref</title>
+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
+<style>
+ @font-face {
+ font-family: 'csstest_noto';
+ src: url('/fonts/noto/NotoNaskhArabic-regular.woff2') format('woff2');
+ }
+ div {
+ font-family: 'csstest_noto';
+ font-size: 4em;
+ margin: 1rem;
+ }
+ section {
+ float: left; /* to sizing to the intrinsic min of the ref box*/
+ }
+ #ref { border: solid orange; }
+ #test { border: solid blue; }
+</style>
+
+<p>Test passes if the blue and organge boxes are identical. Pay attention to characters at the left of the first line, and on the second line.
+<section>
+<div dir=rtl lang=ar id=ref>&#xFECB;&#xFE8E;&#xFE8B;&#xFEE0;<br>&#xFE94;</div>
+<div dir=rtl lang=ar id=test>&#xFECB;&#xFE8E;&#xFE8B;&#xFEE0;<br>&#xFE94;</div>
+</section>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/reference/white-space-intrinsic-size-004-ref.html b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/white-space-intrinsic-size-004-ref.html
index 34757067b15..490d61be712 100644
--- a/tests/wpt/web-platform-tests/css/css-text/white-space/reference/white-space-intrinsic-size-004-ref.html
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/white-space-intrinsic-size-004-ref.html
@@ -3,20 +3,16 @@
<title>test reference</title>
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
<style>
-aside {
- float: left;
- background: blue;
-}
div {
color: transparent;
font-family: Ahem;
font-size: 50px;
- width: 5ch;
+ width: 3ch;
+ height: 2ch;
+ background: green;
}
</style>
-<p>Test passes if there is a single blue rectangle below.
+<p>Test passes if there is a single green rectangle below and no red.
<div>
- <aside class=own>X</aside>
- <aside class=owbw>X</aside>
</div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-002-ref.html b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-002-ref.html
index 53cb2a083b0..5f94d076e84 100644
--- a/tests/wpt/web-platform-tests/css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-002-ref.html
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-002-ref.html
@@ -3,6 +3,6 @@
<title>CSS test Reference</title>
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
-<p>This test passes if you can see the word PASS below, without any extra spaces.
+<p>This test passes if the letters below are spaced equally.
-<div>PASS</div>
+<div>X X X X</div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-003-ref.html b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-003-ref.html
new file mode 100644
index 00000000000..736a2d5607b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-003-ref.html
@@ -0,0 +1,15 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>CSS test Reference</title>
+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
+
+<style>
+div {
+ font: 25px/1 Ahem;
+ color: green;
+}
+</style>
+
+<p>This test passes if there is a green rectangle and no red.
+
+<div>X<br>X<br>X<br>X</div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-intrinsic-size-004.html b/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-intrinsic-size-004.html
index 510a5c5d141..42b94a72a5c 100644
--- a/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-intrinsic-size-004.html
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-intrinsic-size-004.html
@@ -6,25 +6,25 @@
<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2">
<meta name="flags" content="">
<link rel="match" href="reference/white-space-intrinsic-size-004-ref.html">
-<meta name="assert" content="Preserved spaces at the end of the line do not affect the intrinsic max-content size when white-space is pre-wrap. The value of overflow-wrap makes no difference.">
+<meta name="assert" content="Preserved spaces at the end of the line do affect the intrinsic max-content size when white-space is pre-wrap, as hanging does not prevent contributing to the max-content size. The value of overflow-wrap makes no difference.">
<style>
aside {
float: left;
white-space: pre-wrap;
- background: blue;
- margin-bottom: 1em;
+ background: green;
}
aside:last-of-type { overflow-wrap: break-word; }
div {
+ background: red;
color: transparent;
font-family: Ahem;
font-size: 50px;
- width: 3ch; /* enough room for both floats if their max-content size does not include the preserved spaces,
- but not enough if they do, causing a line break in that case. */
+ width: 3ch;
+ height: 2em;
}
</style>
-<p>Test passes if there is a single blue rectangle below.
+<p>Test passes if there is a single green rectangle below and no red.
<div>
<aside>X </aside>
<aside>X </aside>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-002.html b/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-002.html
index d8e7c8278a9..76ca5ef77db 100644
--- a/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-002.html
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-002.html
@@ -4,7 +4,7 @@
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2">
<link rel="match" href="reference/white-space-pre-wrap-trailing-spaces-002-ref.html">
-<meta name="assert" content="Preserved white space at the end of the line is hanged when white-space is pre-wrap, and therefore does not count when computing the (maximum) intrinsic size.">
+<meta name="assert" content="Hanging preserved white space at the end of the line when white-space is pre-wrap has no effect on the max-content size.">
<style>
span {
@@ -15,6 +15,6 @@ span {
#s2 { text-align: center; }
</style>
-<p>This test passes if you can see the word PASS below, without any extra spaces.
+<p>This test passes if the letters below are spaced equally.
-<div><span id=s1>P </span><span id=s2>A </span>SS</div>
+<div><span id=s1>X </span><span id=s2>X </span>X X</div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-003.html b/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-003.html
index 6b21df62c5c..4b6df8e93e0 100644
--- a/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-003.html
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-003.html
@@ -3,25 +3,19 @@
<title>CSS Text test: intrinsic minimum sizing of trailing spaces with white-space:pre-wrap</title>
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2">
-<link rel="match" href="reference/white-space-pre-wrap-trailing-spaces-002-ref.html">
+<link rel="match" href="reference/white-space-pre-wrap-trailing-spaces-003-ref.html">
<meta name="assert" content="Preserved white space at the end of the line is hanged when white-space is pre-wrap, and therefore does not count when computing the (minimum) intrinsic size.">
<style>
-/* Make the table invisible */
-table { border-collapse: collapse; }
-td { padding: 0; }
-
-/* for the content of the table to be sized to their mininum intrinsic size */
-table { width: 0; }
-
-span {
- display: inline-block;
+div {
+ font: 25px/1 Ahem;
white-space: pre-wrap;
+ width: min-content;
+ color: green;
+ background: red;
}
-#s1 { text-align: right; }
-#s2 { text-align: center; }
</style>
-<p>This test passes if you can see the word PASS below, without any extra spaces.
+<p>This test passes if there is a green rectangle and no red.
-<table><td><span id=s1>P </span><td><span id=s2>A </span><td>SS</table>
+<div>X X X X</div>
diff --git a/tests/wpt/web-platform-tests/css/css-transitions/disconnected-element-001.html b/tests/wpt/web-platform-tests/css/css-transitions/disconnected-element-001.html
index b883ce8d18d..dd08e559c92 100644
--- a/tests/wpt/web-platform-tests/css/css-transitions/disconnected-element-001.html
+++ b/tests/wpt/web-platform-tests/css/css-transitions/disconnected-element-001.html
@@ -23,32 +23,27 @@ on it from the completed transitions.">
<script>
promise_test(async t => {
- // Create element but do not attach it to the document
+ // Create element and remove it from the document
const div = addDiv(t, {
style: 'transition: background-color 100s; background-color: red',
});
+ div.remove();
+
+ // Attach event listeners
+ div.addEventListener('transitionrun', t.step_func(() => {
+ assert_unreached('transitionrun event should not be fired');
+ }));
// Resolve before-change style
getComputedStyle(div).backgroundColor;
- // Set up after-change style
+ // Set up and resolve after-change style
div.style.backgroundColor = 'green';
+ getComputedStyle(div).backgroundColor;
- assert_equals(
- getComputedStyle(div).backgroundColor,
- 'rgb(255, 0, 0)',
- 'No transition should run'
- );
-
- // Wait a frame just to be sure the UA does not start the transition on the
- // next frame.
+ // There should be no events received for the triggered transition.
+ await waitForFrame();
await waitForFrame();
-
- assert_equals(
- getComputedStyle(div).backgroundColor,
- 'rgb(255, 0, 0)',
- 'No transition should run even after waiting a frame'
- );
}, 'Transitions do not run on an element not in the document');
test(t => {
@@ -56,6 +51,7 @@ test(t => {
const div = addDiv(t, {
style: 'transition: background-color 100s; background-color: red',
});
+ div.remove();
// Resolve before-change style
getComputedStyle(div).backgroundColor;
@@ -63,9 +59,12 @@ test(t => {
// Add to document
document.documentElement.append(div);
- // Set up after-change style
+ // Set up and resolve after-change style
div.style.backgroundColor = 'green';
+ getComputedStyle(div).backgroundColor;
+ // We should have jumped immediately to the after-change style rather than
+ // transitioning to it.
assert_equals(
getComputedStyle(div).backgroundColor,
'rgb(0, 128, 0)',
@@ -78,7 +77,6 @@ promise_test(async t => {
const div = addDiv(t, {
style: 'transition: background-color 100s; background-color: red',
});
- document.documentElement.append(div);
// Attach event listeners
div.addEventListener('transitionrun', t.step_func(() => {
@@ -95,9 +93,6 @@ promise_test(async t => {
div.remove();
// There should be no events received for the triggered transition.
- //
- // (We can't verify the presence/absence of transitions by querying
- // getComputedStyle for this case because it will return an empty string.)
await waitForFrame();
await waitForFrame();
}, 'Transitions do not run for an element newly removed from the document');
@@ -107,7 +102,6 @@ promise_test(async t => {
const div = addDiv(t, {
style: 'transition: background-color 100s; background-color: red',
});
- document.documentElement.append(div);
// Attach event listeners
const eventWatcher = new EventWatcher(t, div, [
@@ -131,13 +125,11 @@ promise_test(async t => {
promise_test(async t => {
// Create a container element. We'll need this later.
const container = addDiv(t);
- document.documentElement.append(container);
// Create element and attach it to the document
const div = addDiv(t, {
style: 'transition: background-color 100s; background-color: red',
});
- document.documentElement.append(div);
// Attach event listeners
const eventWatcher = new EventWatcher(t, div, [
@@ -164,15 +156,10 @@ promise_test(async t => {
}, 'Transitions are canceled when an element is re-parented');
promise_test(async t => {
- // Create a container element. We'll need this later.
- const container = addDiv(t);
- document.documentElement.append(container);
-
// Create element and attach it to the document
const div = addDiv(t, {
style: 'transition: background-color 100s; background-color: red',
});
- document.documentElement.append(div);
// Attach event listeners
const eventWatcher = new EventWatcher(t, div, [
@@ -187,7 +174,7 @@ promise_test(async t => {
await eventWatcher.wait_for('transitionrun');
- // Re-parent element to same container
+ // Re-parent element to same parent
document.documentElement.append(div);
await eventWatcher.wait_for('transitioncancel');
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-001-manual.html b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-001-manual.html
new file mode 100644
index 00000000000..31186029dec
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-001-manual.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>writing mode:vertical-lr, vertical lines</title>
+<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow"/>
+<meta name="assert" content="writing-mode:vertical-lr will display a line of text vertically."/>
+<style type="text/css">
+@font-face {
+ font-family: 'webfont';
+ src: url('../../fonts/noto/NotoSansMongolian-regular.woff2') format('woff2');
+ font-weight: normal;
+ font-style: normal;
+ }
+.test, .ref { font-family: webfont, serif; font-size: 24px; height: 300px; width: 300px; }
+.test span { background-color:orange; color:orange; }
+</style>
+<!-- this is the test -->
+<style type="text/css">
+.test { writing-mode: vertical-lr; }
+</style>
+</head>
+<body>
+<p class="instructions" dir="ltr">Test passes if you see a tall, thin orange rectangle.</p>
+<div class="test">
+<span lang="mn">ᠮᠤᠩᠭᠤᠯ ᠤᠯᠤᠰ</span>
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-002-manual.html b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-002-manual.html
new file mode 100644
index 00000000000..bb53c939e84
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-002-manual.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>writing mode:vertical-lr, line wrap</title>
+<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow"/>
+<meta name="assert" content="writing-mode:vertical-lr will wrap lines from left to right."/>
+<style type="text/css">
+@font-face {
+ font-family: 'webfont';
+ src: url('../../fonts/noto/NotoSansMongolian-regular.woff2') format('woff2');
+ font-weight: normal;
+ font-style: normal;
+ }
+.test { font-family: webfont, serif; font-size: 24px; height: 250px; width: 250px; }
+.test span { background-color:orange; color:orange; }
+.test span#end { background-color:blue; color:blue; }
+</style>
+<!-- this is the test -->
+<style type="text/css">
+.test { writing-mode: vertical-lr; }
+</style>
+</head>
+<body>
+<p class="instructions" dir="ltr">Test passes if the blue rectangle is on the right-most side.</p>
+<div class="test">
+<span lang="mn">ᠴᠤᠢᠵᠤᠩᠵᠠᠪ ᠪᠠᠭᠰᠢ ᠶᠢᠨ <span id="end">ᠦᠭᠦᠯᠡᠯ</span></span>
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-003-manual.html b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-003-manual.html
new file mode 100644
index 00000000000..1aaf29d2e6d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-003-manual.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>writing mode:vertical-lr, alignment</title>
+<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow"/>
+<meta name="assert" content="writing-mode:vertical-lr will cause lines to display from the left side of the enclosing box."/>
+<style type="text/css">
+@font-face {
+ font-family: 'webfont';
+ src: url('../../fonts/noto/NotoSansMongolian-regular.woff2') format('woff2');
+ font-weight: normal;
+ font-style: normal;
+ }
+.test { font-family: webfont, serif; font-size: 24px; height: 250px; width: 250px; border: 1px solid orange; }
+.test span { background-color:orange; color:orange; }
+</style>
+<!-- this is the test -->
+<style type="text/css">
+.test { writing-mode: vertical-lr; }
+</style>
+</head>
+<body>
+<p class="instructions" dir="ltr">Test passes if the orange filled rectangle is vertical and on the left side of the square box.</p>
+<div class="test">
+<span lang="mn">ᠴᠤᠢᠵᠤᠩᠵᠠᠪ</span>
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-005-manual.html b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-005-manual.html
new file mode 100644
index 00000000000..2bbdca59998
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-005-manual.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>writing mode:vertical-lr, default Mongolian orientation</title>
+<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow"/>
+<meta name="assert" content="By default, writing-mode:vertical-lr will display Mongolian characters with the right orientation."/>
+<style type="text/css">
+@font-face {
+ font-family: 'webfont';
+ src: url('../../fonts/noto/NotoSansMongolian-regular.woff2') format('woff2');
+ font-weight: normal;
+ font-style: normal;
+ }
+.test, .ref { font-family: webfont, serif; font-size: 24px; float: left; margin-right: 30px; }
+</style>
+<!-- this is the test -->
+<style type="text/css">
+.test { writing-mode: vertical-rl; }
+</style>
+</head>
+<body>
+<p class="instructions" dir="ltr">Test passes if text is vertical and the Mongolian characters are oriented the same way as on the blue background.</p>
+<div class="test" lang="mn">ᠮᠤᠩᠭᠤᠯ ᠤᠯᠤᠰ</div>
+<div class="ref"><img src="support/mn-orientation.png" alt="ref image"/></div>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-006-manual.html b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-006-manual.html
new file mode 100644
index 00000000000..0ceb4a74bb9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-006-manual.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>writing mode:vertical-lr, Mongolian joining</title>
+<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow"/>
+<meta name="assert" content="By default, writing-mode:vertical-lr will display Mongolian characters with correct joining behaviour."/>
+<style type="text/css">
+@font-face {
+ font-family: 'webfont';
+ src: url('../../fonts/noto/NotoSansMongolian-regular.woff2') format('woff2');
+ font-weight: normal;
+ font-style: normal;
+ }
+.test, .ref { font-family: webfont, serif; font-size: 24px; float: left; margin-right: 30px; }
+</style>
+<!-- this is the test -->
+<style type="text/css">
+.test { writing-mode: vertical-lr; }
+</style>
+</head>
+<body>
+<p class="instructions" dir="ltr">Test passes if the Mongolian characters are joined as shown on the blue background.</p>
+<div class="test" lang="mn">ᠮᠤᠩᠭᠤᠯ ᠤᠯᠤᠰ</div>
+<div class="ref"><img src="support/mn-orientation.png" alt="ref image"/></div>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-007-manual.html b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-007-manual.html
new file mode 100644
index 00000000000..8317c5c8efd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-007-manual.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>writing mode:vertical-lr, default Latin orientation</title>
+<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow"/>
+<meta name="assert" content="By default, writing-mode:vertical-lr will display Latin characters rotated 90° right."/>
+<style type="text/css">
+@font-face {
+ font-family: 'webfont';
+ src: url('../../fonts/noto/NotoSansMongolian-regular.woff2') format('woff2');
+ font-weight: normal;
+ font-style: normal;
+ }
+.test, .ref { font-family: webfont, serif; font-size: 24px; float: left; margin-right: 30px;color: #ccc; }
+span[lang=en] { color: black; }
+</style>
+<!-- this is the test -->
+<style type="text/css">
+.test { writing-mode: vertical-lr; }
+</style>
+</head>
+<body>
+<p class="instructions" dir="ltr">Test passes if the text runs vertically and the orientation of the Latin characters is the same as on the blue background.</p>
+<div class="test" lang="mn">ᠮᠤᠩᠭᠤᠯ <span lang="en">W3C i18n</span> ᠤᠯᠤᠰ</div>
+<div class="ref"><img src="support/mn+latin.png" alt="ref image"/></div>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-008-manual.html b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-008-manual.html
new file mode 100644
index 00000000000..21abffa9194
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-008-manual.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>writing mode:vertical-lr, default Arabic orientation</title>
+<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow"/>
+<meta name="assert" content="By default, writing-mode:vertical-lr will display Arabic characters rotated 90° right."/>
+<style type="text/css">
+@font-face {
+ font-family: 'webfont';
+ src: url('../../fonts/noto/NotoSansMongolian-regular.woff2') format('woff2');
+ font-weight: normal;
+ font-style: normal;
+ }
+.test, .ref { font-family: webfont, serif; font-size: 24px; float: left; margin-right: 30px; color: #ccc; }
+span[lang=ar] { color: black; }
+</style>
+<!-- this is the test -->
+<style type="text/css">
+.test { writing-mode: vertical-rl; }
+</style>
+</head>
+<body>
+<p class="instructions">Test passes if the text runs vertically and the orientation of the Arabic characters is the same as on the blue background.</p>
+<div class="test" lang="mn">ᠮᠤᠩᠭᠤᠯ <span lang="ar">نشاط التدويل</span> ᠤᠯᠤᠰ</div>
+<div class="ref"><img src="support/mn+arabic.png" alt="ref image"/></div>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-009-manual.html b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-009-manual.html
new file mode 100644
index 00000000000..ba2ca64828f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-009-manual.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>writing mode:vertical-rl, default Arabic direction</title>
+<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow"/>
+<meta name="assert" content="By default, writing-mode:vertical-lr will display Arabic characters progressing up the page."/>
+<style type="text/css">
+@font-face {
+ font-family: 'webfont';
+ src: url('../../fonts/noto/NotoSansMongolian-regular.woff2') format('woff2');
+ font-weight: normal;
+ font-style: normal;
+ }
+.test, .ref { font-family: webfont, serif; font-size: 24px; float: left; margin-right: 30px; color: #ccc; }
+span[lang=ar] { color: black; }
+</style>
+<!-- this is the test -->
+<style type="text/css">
+.test { writing-mode: vertical-rl; }
+</style>
+</head>
+<body>
+<p class="instructions">Test passes if the text runs vertically and the order of the Arabic characters is the same as on the blue background.</p>
+<div class="test" lang="mn">ᠮᠤᠩᠭᠤᠯ <span lang="ar">نشاط التدويل</span> ᠤᠯᠤᠰ</div>
+<div class="ref"><img src="support/mn+arabic.png" alt="ref image"/></div>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-010-manual.html b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-010-manual.html
new file mode 100644
index 00000000000..4dc9430b8da
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-010-manual.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>writing mode:vertical-lr, Arabic joining</title>
+<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow"/>
+<meta name="assert" content="By default, writing-mode:vertical-lr will display Arabic characters using cursive joining."/>
+<style type="text/css">
+@font-face {
+ font-family: 'webfont';
+ src: url('../../fonts/noto/NotoSansMongolian-regular.woff2') format('woff2');
+ font-weight: normal;
+ font-style: normal;
+ }
+.test, .ref { font-family: webfont, serif; font-size: 24px; float: left; margin-right: 30px; color: #ccc; }
+span[lang=ar] { color: black; }
+</style>
+<!-- this is the test -->
+<style type="text/css">
+.test { writing-mode: vertical-rl; }
+</style>
+</head>
+<body>
+<p class="instructions">Test passes if the text runs vertically and the Arabic characters are joined up as shown on the blue background.</p>
+<div class="test" lang="mn">ᠮᠤᠩᠭᠤᠯ <span lang="ar">نشاط التدويل</span> ᠤᠯᠤᠰ</div>
+<div class="ref"><img src="support/mn+arabic.png" alt="ref image"/></div>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-012-manual.html b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-012-manual.html
new file mode 100644
index 00000000000..ebf773c5559
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-012-manual.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>writing mode:vertical-lr, Latin wrapping</title>
+<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow"/>
+<meta name="assert" content="By default, writing-mode:vertical-lr will wrap Latin text across a line break such that the first word in memory is on the left."/>
+<style type="text/css">
+@font-face {
+ font-family: 'webfont';
+ src: url('../../fonts/noto/NotoSansMongolian-regular.woff2') format('woff2');
+ font-weight: normal;
+ font-style: normal;
+ }
+.test, .ref { font-family: webfont, serif; font-size: 24px; float: left; margin-right: 30px; height: 150px; color: #ccc; }
+span[lang=en] { color: black; }
+</style>
+<!-- this is the test -->
+<style type="text/css">
+.test { writing-mode: vertical-lr; }
+</style>
+<script>
+function setMargin (height) {
+ document.getElementById('test').style.height = height+'px'
+ }
+</script>
+</head>
+<body>
+<p class="instructions">Test passes if the two Latin script words are displayed in the same relative positions around the line break as on the blue background.</p>
+<p class="instructions">Use this control to set the line length, if necessary: <input type="text" value="150" style="width: 30px; text-align:right;" onChange="setMargin(this.value);"/>px</p>
+<div id="test" class="test" lang="mn">ᠮᠤᠩᠭᠤᠯ <span lang="en">W3C i18n</span> ᠤᠯᠤᠰ</div>
+<div class="ref"><img src="support/mn_en_wrap.png" alt="ref image"/></div>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-014-manual.html b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-014-manual.html
new file mode 100644
index 00000000000..656f78759db
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-014-manual.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>writing mode:vertical-lr, Arabic wrapping</title>
+<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow"/>
+<meta name="assert" content="By default, writing-mode:vertical-lr will arrange Arabic text across a line break such that the first word in memory is on the left side of the line break."/>
+<style type="text/css">
+@font-face {
+ font-family: 'webfont';
+ src: url('../../fonts/noto/NotoSansMongolian-regular.woff2') format('woff2');
+ font-weight: normal;
+ font-style: normal;
+ }
+.test { font-family: webfont, serif; font-size: 24px; float: left; margin-right: 30px; height: 150px; color: #ccc; }
+span[lang=ar] { color: black; }
+</style>
+<!-- this is the test -->
+<style type="text/css">
+.test { writing-mode: vertical-lr; }
+</style>
+<script>
+function setMargin (height) {
+ document.getElementById('test').style.height = height+'px'
+ }
+</script>
+</head>
+<body>
+<p class="instructions">Test passes if the two Arabic words are displayed in the same relative positions around the line break as on the blue background.</p>
+<p class="instructions">Use this control to set the line length, if necessary: <input type="text" value="150" style="width: 30px; text-align:right;" onChange="setMargin(this.value);"/>px</p>
+<div id="test" class="test" lang="mn">ᠮᠤᠩᠭᠤᠯ <span lang="ar">نشاط التدويل</span> ᠤᠯᠤᠰ</div>
+<div class="ref"><img src="support/mn_ar_wrap.png" alt="ref image"/></div>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-015-manual.html b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-015-manual.html
new file mode 100644
index 00000000000..a8fe0055395
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-015-manual.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>writing mode:vertical-lr, image orientation</title>
+<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow"/>
+<meta name="assert" content="By default, replaced content such as images is displayed upright."/>
+<style type="text/css">
+@font-face {
+ font-family: 'webfont';
+ src: url('../../fonts/noto/NotoSansMongolian-regular.woff2') format('woff2');
+ font-weight: normal;
+ font-style: normal;
+ }
+.test { font-family: webfont, serif; font-size: 24px; float: left; margin-right: 30px; color: #ccc; color: #ccc; }
+</style>
+<!-- this is the test -->
+<style type="text/css">
+.test { writing-mode: vertical-lr; }
+</style>
+</head>
+<body>
+<p class="instructions">Test passes if the text is vertical and the world map has north at the top.</p>
+<div id="test" class="test" lang="mn">ᠮᠤᠩᠭᠤᠯ <img src="support/world.gif" alt="ref image"/> ᠤᠯᠤᠰ</div>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-forms-001-manual.html b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-forms-001-manual.html
new file mode 100644
index 00000000000..02e0dd8da0d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-forms-001-manual.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>writing mode:vertical-lr, input type=text</title>
+<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow"/>
+<meta name="assert" content="writing-mode:vertical-lr will display an input field for text vertically, and with vertical text inside."/>
+<style type="text/css">
+@font-face {
+ font-family: 'webfont';
+ src: url('../../fonts/noto/NotoSansMongolian-regular.woff2') format('woff2');
+ font-weight: normal;
+ font-style: normal;
+ }
+input { font-family: webfont; font-size: 34px; }
+</style>
+<!-- this is the test -->
+<style type="text/css">
+.test { writing-mode: vertical-lr; }
+</style>
+</head>
+<body>
+<p class="instructions">Test passes if the input field is vertical and the text inside it has default vertical settings.</p>
+<div class="test">
+<input type="text" value="ᠮᠤᠩᠭᠤᠯ W3C i18n ᠤᠯᠤᠰ" />
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-forms-002-manual.html b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-forms-002-manual.html
new file mode 100644
index 00000000000..b89ea1addb3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-forms-002-manual.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>writing mode:vertical-lr, input type=text placeholder</title>
+<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow"/>
+<meta name="assert" content="writing-mode:vertical-lr will display an input field for text vertically, and with vertical placeholder text inside."/>
+<style type="text/css">
+@font-face {
+ font-family: 'webfont';
+ src: url('../../fonts/noto/NotoSansMongolian-regular.woff2') format('woff2');
+ font-weight: normal;
+ font-style: normal;
+ }
+input { font-family: webfont; font-size: 34px; }
+</style>
+<!-- this is the test -->
+<style type="text/css">
+.test { writing-mode: vertical-lr; }
+</style>
+</head>
+<body>
+<p class="instructions">Test passes if the input field is vertical and the text inside it has default vertical settings.</p>
+<div class="test">
+<input type="text" placeholder="ᠮᠤᠩᠭᠤᠯ W3C i18n ᠤᠯᠤᠰ" />
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-forms-003-manual.html b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-forms-003-manual.html
new file mode 100644
index 00000000000..bfd90f8438f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-forms-003-manual.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>writing mode:vertical-lr, textarea</title>
+<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow"/>
+<meta name="assert" content="writing-mode:vertical-lr will display a textarea field vertically, and with vertical text inside."/>
+<style type="text/css">
+@font-face {
+ font-family: 'webfont';
+ src: url('../../fonts/noto/NotoSansMongolian-regular.woff2') format('woff2');
+ font-weight: normal;
+ font-style: normal;
+ }
+textarea { font-family: webfont; font-size: 34px; }
+</style>
+<!-- this is the test -->
+<style type="text/css">
+.test { writing-mode: vertical-lr; }
+</style>
+</head>
+<body>
+<p class="instructions">Test passes if the input field is vertical and the text inside it has default vertical settings.</p>
+<div class="test">
+<textarea rows="3">ᠮᠤᠩᠭᠤᠯ W3C i18n ᠤᠯᠤᠰ</textarea>
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-forms-004-manual.html b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-forms-004-manual.html
new file mode 100644
index 00000000000..fd44a2b6ed7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-forms-004-manual.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>writing mode:vertical-lr, textarea placeholder</title>
+<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow"/>
+<meta name="assert" content="writing-mode:vertical-lr will display a textarea field vertically, and with vertical placeholder text inside."/>
+<style type="text/css">
+@font-face {
+ font-family: 'webfont';
+ src: url('../../fonts/noto/NotoSansMongolian-regular.woff2') format('woff2');
+ font-weight: normal;
+ font-style: normal;
+ }
+textarea { font-family: webfont; font-size: 34px; }
+</style>
+<!-- this is the test -->
+<style type="text/css">
+.test { writing-mode: vertical-lr; }
+</style>
+</head>
+<body>
+<p class="instructions">Test passes if the input field is vertical and the text inside it has default vertical settings.</p>
+<div class="test">
+<textarea rows="3" placeholder="ᠮᠤᠩᠭᠤᠯ W3C i18n ᠤᠯᠤᠰ"></textarea>
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-forms-005-manual.html b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-forms-005-manual.html
new file mode 100644
index 00000000000..0ef619a636f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-forms-005-manual.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>writing mode:vertical-lr, select, selected item</title>
+<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow"/>
+<meta name="assert" content="writing-mode:vertical-lr will display a select box vertically, and the selected item will be displayed vertically."/>
+<style type="text/css">
+@font-face {
+ font-family: 'webfont';
+ src: url('../../fonts/noto/NotoSansMongolian-regular.woff2') format('woff2');
+ font-weight: normal;
+ font-style: normal;
+ }
+select { font-family: webfont; font-size: 24px; }
+.test { text-align: center; vertical-align: middle; width: 100%; }
+</style>
+<!-- this is the test -->
+<style type="text/css">
+.test { writing-mode: vertical-lr; }
+</style>
+</head>
+<body>
+<p class="instructions">Test passes if the displayed selection area is vertical and the text inside it has default vertical settings.</p>
+<div class="test">
+<select>
+<option value="1">ᠮᠤᠩᠭᠤᠯ item 1 ᠤᠯᠤᠰ</option>
+<option value="2">ᠮᠤᠩᠭᠤᠯ item 2 ᠤᠯᠤᠰ</option>
+<option value="3">ᠮᠤᠩᠭᠤᠯ item 3 ᠤᠯᠤᠰ</option>
+</select>
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-forms-006-manual.html b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-forms-006-manual.html
new file mode 100644
index 00000000000..16162c2a3cd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-forms-006-manual.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>writing mode:vertical-lr, select, options</title>
+<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow"/>
+<meta name="assert" content="writing-mode:vertical-lr will display selection options vertically."/>
+<style type="text/css">
+@font-face {
+ font-family: 'webfont';
+ src: url('../../fonts/noto/NotoSansMongolian-regular.woff2') format('woff2');
+ font-weight: normal;
+ font-style: normal;
+ }
+select { font-family: webfont; font-size: 24px; }
+.test { text-align: center; vertical-align: middle; width: 100%; }
+</style>
+<!-- this is the test -->
+<style type="text/css">
+.test { writing-mode: vertical-lr; }
+</style>
+</head>
+<body>
+<p class="instructions">Test passes if the selection options displayed when you click on the selector are vertical.</p>
+<div class="test">
+<select>
+<option value="1">ᠮᠤᠩᠭᠤᠯ item 1 ᠤᠯᠤᠰ</option>
+<option value="2">ᠮᠤᠩᠭᠤᠯ item 2 ᠤᠯᠤᠰ</option>
+<option value="3">ᠮᠤᠩᠭᠤᠯ item 3 ᠤᠯᠤᠰ</option>
+</select>
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-table-001-manual.html b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-table-001-manual.html
new file mode 100644
index 00000000000..21bd590863b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-table-001-manual.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>writing mode:vertical-lr, vertical lines</title>
+<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow"/>
+<meta name="assert" content="writing-mode:vertical-lr will display a line of text vertically within a table cell."/>
+<style type="text/css">
+@font-face {
+ font-family: 'webfont';
+ src: url('../../fonts/noto/NotoSansMongolian-regular.woff2') format('woff2');
+ font-weight: normal;
+ font-style: normal;
+ }
+.test, .ref { font-family: webfont, serif; font-size: 14px; height: 300px; width: 300px; }
+.test span { background-color:orange; color:orange; }
+</style>
+<!-- this is the test -->
+<style type="text/css">
+.test { writing-mode: vertical-lr; }
+</style>
+</head>
+<body>
+<p class="instructions" dir="ltr">Test passes if you see 4 tall, thin orange rectangles.</p>
+<div class="test">
+<table><tbody>
+<tr><th><span lang="mn">ᠮᠤᠩᠭᠤᠯ</span></th><td><span lang="mn">ᠮᠤᠩᠭᠤᠯ</span></td></tr>
+<tr><th><span lang="mn">ᠮᠤᠩᠭᠤᠯ</span></th><td><span lang="mn">ᠮᠤᠩᠭᠤᠯ</span></td></tr>
+</tbody></table>
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-table-002-manual.html b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-table-002-manual.html
new file mode 100644
index 00000000000..3a41d1fa604
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vlr-table-002-manual.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>writing mode:vertical-lr, table cell order</title>
+<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow"/>
+<meta name="assert" content="writing-mode:vertical-lr will display table columns horizontally, with the top of the table on the left."/>
+<style type="text/css">
+.test { font-size: 34px; }
+</style>
+<!-- this is the test -->
+<style type="text/css">
+.test { writing-mode: vertical-lr; }
+</style>
+</head>
+<body>
+<p class="instructions">Test passes if the numbers increase top-to-bottom, starting on the left.</p>
+<div class="test">
+<table><tbody>
+<tr><th>1</th><th>2</th></tr>
+<tr><td>3</td><td>4</td></tr>
+</tbody></table>
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-001-manual.html b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-001-manual.html
new file mode 100644
index 00000000000..a4f995f4b7f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-001-manual.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>writing mode:vertical-rl, vertical lines</title>
+<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow"/>
+<meta name="assert" content="writing-mode:vertical-rl will display a line of text vertically."/>
+<style type="text/css">
+@font-face {
+ font-family: "webfont";
+ src: url("../../fonts/mplus-1p-regular.woff") format("woff");
+ font-weight: normal;
+ font-style: normal;
+ }
+.test, .ref { font-family: webfont, serif; font-size: 24px; height: 300px; width: 300px; }
+.test span { background-color:orange; color:orange; }
+</style>
+<!-- this is the test -->
+<style type="text/css">
+.test { writing-mode: vertical-rl; }
+</style>
+</head>
+<body>
+<p class="instructions" dir="ltr">Test passes if you see a tall, thin orange rectangle.</p>
+<div class="test">
+<span lang="zh-hans">国际化活动万维网联盟</span>
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-002-manual.html b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-002-manual.html
new file mode 100644
index 00000000000..7c7bcfbcdc6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-002-manual.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>writing mode:vertical-rl, line wrap</title>
+<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow"/>
+<meta name="assert" content="writing-mode:vertical-rl will wrap lines from right to left."/>
+<style type="text/css">
+@font-face {
+ font-family: "webfont";
+ src: url("../../fonts/mplus-1p-regular.woff") format("woff");
+ font-weight: normal;
+ font-style: normal;
+ }
+.test, .ref { font-family: webfont, serif; font-size: 24px; height: 300px; width: 300px; }
+.test span { background-color:orange; color:orange; }
+.test span#end { background-color:blue; color:blue; }
+</style>
+<!-- this is the test -->
+<style type="text/css">
+.test { writing-mode: vertical-rl; }
+</style>
+</head>
+<body>
+<p class="instructions" dir="ltr">Test passes if the blue rectangle is on the left-most side.</p>
+<div class="test">
+<span lang="zh-hans">国际化活动万维网联盟国际化活动万维<span id="end">网联盟</span></span>
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-003-manual.html b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-003-manual.html
new file mode 100644
index 00000000000..64fcb66b133
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-003-manual.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>writing mode:vertical-rl, alignment</title>
+<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow"/>
+<meta name="assert" content="writing-mode:vertical-lr will cause lines to display from the right side of the enclosing box."/>
+<style type="text/css">
+@font-face {
+ font-family: "webfont";
+ src: url("../../fonts/mplus-1p-regular.woff") format("woff");
+ font-weight: normal;
+ font-style: normal;
+ }
+.test, .ref { font-family: webfont, serif; font-size: 24px; height: 300px; width: 300px; }
+.test span { background-color:orange; color:orange; }
+</style>
+<!-- this is the test -->
+<style type="text/css">
+.test { writing-mode: vertical-rl; border: 1px solid orange; }
+</style>
+</head>
+<body>
+<p class="instructions" dir="ltr">Test passes if the orange filled rectangle is vertical and on the right side of the square box.</p>
+<div class="test">
+<span lang="zh-hans">国际化活动万维网联盟</span>
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-005-manual.html b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-005-manual.html
new file mode 100644
index 00000000000..c6462f2fe1a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-005-manual.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>writing mode:vertical-rl, default Han orientation</title>
+<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow"/>
+<meta name="assert" content="By default, writing-mode:vertical-rl will display chinese characters upright."/>
+<style type="text/css">
+@font-face {
+ font-family: "webfont";
+ src: url("../../fonts/mplus-1p-regular.woff") format("woff");
+ font-weight: normal;
+ font-style: normal;
+ }
+.test, .ref { font-family: webfont, serif; font-size: 24px; float: left; margin-right: 30px; }
+</style>
+<!-- this is the test -->
+<style type="text/css">
+.test { writing-mode: vertical-rl; }
+</style>
+</head>
+<body>
+<p class="instructions" dir="ltr">Test passes if the text is vertical and the Chinese characters are oriented the same way as on the blue background.</p>
+<div class="test" lang="mn">国际化活动万维网联盟</div>
+<div class="ref"><img src="support/zh-orientation.png" alt="ref image"/></div>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-007-manual.html b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-007-manual.html
new file mode 100644
index 00000000000..3427f74990c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-007-manual.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>writing mode:vertical-rl, default Latin orientation</title>
+<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow"/>
+<meta name="assert" content="writing-mode:vertical-lr will display Latin characters rotated 90° right by default."/>
+<style type="text/css">
+@font-face {
+ font-family: "webfont";
+ src: url("../../fonts/mplus-1p-regular.woff") format("woff");
+ font-weight: normal;
+ font-style: normal;
+ }
+.test { font-family: webfont, serif; font-size: 24px; float: left; margin-right: 30px; color: #ccc; }
+span[lang=en] { color: black; }
+</style>
+<!-- this is the test -->
+<style type="text/css">
+.test { writing-mode: vertical-rl; }
+</style>
+</head>
+<body>
+<p class="instructions">Test passes if the text runs vertically and the orientation of the Latin characters is the same as on the blue background.</p>
+<div class="test" lang="zh-hans">国际化活动<span lang="en">W3C i18n</span>万维网联盟</div>
+<div class="ref"><img src="support/zh+latin.png" alt="ref image"/></div>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-008-manual.html b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-008-manual.html
new file mode 100644
index 00000000000..7d2a3bb6a7b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-008-manual.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>writing mode:vertical-rl, default Arabic orientation</title>
+<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow"/>
+<meta name="assert" content="By default, writing-mode:vertical-lr will display Arabic characters rotated 90° right."/>
+<style type="text/css">
+@font-face {
+ font-family: "webfont";
+ src: url("../../fonts/mplus-1p-regular.woff") format("woff");
+ font-weight: normal;
+ font-style: normal;
+ }
+.test, .ref { font-family: webfont, serif; font-size: 24px; float: left; margin-right: 30px; color: #ccc; }
+span[lang=ar] { color: black; }
+</style>
+<!-- this is the test -->
+<style type="text/css">
+.test { writing-mode: vertical-rl; }
+</style>
+</head>
+<body>
+<p class="instructions">Test passes if the text runs vertically and the orientation of the Arabic characters is the same as on the blue background.</p>
+<div class="test" lang="zh-hans">国际化活动<span lang="ar">نشاط التدويل</span>万维网联盟</div>
+<div class="ref"><img src="support/zh+arabic.png" alt="ref image"/></div>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-009-manual.html b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-009-manual.html
new file mode 100644
index 00000000000..6dff8d7efbe
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-009-manual.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>writing mode:vertical-rl, default Arabic direction</title>
+<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow"/>
+<meta name="assert" content="By default, writing-mode:vertical-lr will display Arabic characters progressing up the page."/>
+<style type="text/css">
+@font-face {
+ font-family: "webfont";
+ src: url("../../fonts/mplus-1p-regular.woff") format("woff");
+ font-weight: normal;
+ font-style: normal;
+ }
+.test, .ref { font-family: webfont, serif; font-size: 24px; float: left; margin-right: 30px; color: #ccc; }
+span[lang=ar] { color: black; }
+</style>
+<!-- this is the test -->
+<style type="text/css">
+.test { writing-mode: vertical-rl; }
+</style>
+</head>
+<body>
+<p class="instructions">Test passes if the text runs vertically and the order of the Arabic characters is the same as on the blue background.</p>
+<div class="test" lang="zh-hans">国际化活动<span lang="ar">نشاط التدويل</span>万维网联盟</div>
+<div class="ref"><img src="support/zh+arabic.png" alt="ref image"/></div>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-010-manual.html b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-010-manual.html
new file mode 100644
index 00000000000..e81a579c75a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-010-manual.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>writing mode:vertical-rl, Arabic joining</title>
+<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow"/>
+<meta name="assert" content="By default, writing-mode:vertical-lr will display Arabic characters using cursive joining."/>
+<style type="text/css">
+@font-face {
+ font-family: "webfont";
+ src: url("../../fonts/mplus-1p-regular.woff") format("woff");
+ font-weight: normal;
+ font-style: normal;
+ }
+.test, .ref { font-family: webfont, serif; font-size: 24px; float: left; margin-right: 30px; color: #ccc; }
+span[lang=ar] { color: black; }
+</style>
+<!-- this is the test -->
+<style type="text/css">
+.test { writing-mode: vertical-rl; }
+</style>
+</head>
+<body>
+<p class="instructions">Test passes if the text runs vertically and the Arabic characters are joined up as shown on the blue background.</p>
+<div class="test" lang="zh-hans">国际化活动<span lang="ar">نشاط التدويل</span>万维网联盟</div>
+<div class="ref"><img src="support/zh+arabic.png" alt="ref image"/></div>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-012-manual.html b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-012-manual.html
new file mode 100644
index 00000000000..a53ec5c14f4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-012-manual.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>writing mode:vertical-rl, Latin wrapping</title>
+<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow"/>
+<meta name="assert" content="By default, writing-mode:vertical-rl will wrap Latin text across a line break such that the first word in memory is on the right."/>
+<style type="text/css">
+@font-face {
+ font-family: "webfont";
+ src: url("../../fonts/mplus-1p-regular.woff") format("woff");
+ font-weight: normal;
+ font-style: normal;
+ }
+.test, .ref { font-family: webfont, serif; font-size: 24px; float: left; margin-right: 30px; height: 250px; color: #ccc; }
+span[lang=en] { color: black; }
+</style>
+<!-- this is the test -->
+<style type="text/css">
+.test { writing-mode: vertical-rl; }
+</style>
+<script>
+function setMargin (height) {
+ document.getElementById('test').style.height = height+'px'
+ }
+</script>
+</head>
+<body>
+<p class="instructions">Test passes if the two Latin words on the left are displayed in the same relative positions around a line break as on the blue background.</p>
+<p class="instructions">Use this control to set the line length, if necessary: <input type="text" value="250" style="width: 30px; text-align:right;" onChange="setMargin(this.value);"/>px</p>
+<div id="test" class="test" lang="zh-hans">国际化活动<span lang="en">W3C i18n</span>万维网联盟</div>
+<div class="ref"><img src="support/zh_en_wrap.png" alt="ref image"/></div>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-014-manual.html b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-014-manual.html
new file mode 100644
index 00000000000..bf3424fd043
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-014-manual.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>writing mode:vertical-rl, Arabic wrapping</title>
+<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow"/>
+<meta name="assert" content="By default, writing-mode:vertical-rl will arrange Arabic text across a line break such that the first word in memory is on the right-hand side of the line break."/>
+<style type="text/css">
+@font-face {
+ font-family: "webfont";
+ src: url("../../fonts/mplus-1p-regular.woff") format("woff");
+ font-weight: normal;
+ font-style: normal;
+ }
+.test, .ref { font-family: webfont, serif; font-size: 24px; float: left; margin-right: 30px; height: 200px; color: #ccc; }
+span[lang=ar] { color: black; }
+</style>
+<!-- this is the test -->
+<style type="text/css">
+.test { writing-mode: vertical-rl; }
+</style>
+<script>
+function setMargin (height) {
+ document.getElementById('test').style.height = height+'px'
+ }
+</script>
+</head>
+<body>
+<p class="instructions">Test passes if the two Arabic words are displayed in the same relative positions around the line break as on the blue background.</p>
+<p class="instructions">Use this control to set the line length, if necessary: <input type="text" value="200" style="width: 30px; text-align:right;" onChange="setMargin(this.value);"/>px</p>
+<div id="test" class="test" lang="zh-hans">国际化活动<span lang="ar">نشاط التدويل</span>万维网联盟</div>
+<div class="ref"><img src="support/zh_ar_wrap.png" alt="ref image"/></div>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-015-manual.html b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-015-manual.html
new file mode 100644
index 00000000000..cfcdf2f51b7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-015-manual.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>writing mode:vertical-rl, image orientation</title>
+<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow"/>
+<meta name="assert" content="By default, replaced content such as images is displayed upright."/>
+<style type="text/css">
+@font-face {
+ font-family: "webfont";
+ src: url("../../fonts/mplus-1p-regular.woff") format("woff");
+ font-weight: normal;
+ font-style: normal;
+ }
+.test { font-family: webfont, serif; font-size: 24px; float: left; margin-right: 30px; color: #ccc; color: #ccc; }
+</style>
+<!-- this is the test -->
+<style type="text/css">
+.test { writing-mode: vertical-rl; }
+</style>
+</head>
+<body>
+<p class="instructions">Test passes if the text is vertical and the world map has north at the top.</p>
+<div id="test" class="test" lang="zh-hans">国际化活动<img src="support/world.gif" alt="ref image"/>万维网联盟</div>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-forms-001-manual.html b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-forms-001-manual.html
new file mode 100644
index 00000000000..0548cb96828
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-forms-001-manual.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>writing mode:vertical-rl, input type=text</title>
+<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow"/>
+<meta name="assert" content="writing-mode:vertical-rl will display an input field for text vertically, and with vertical text inside."/>
+<style type="text/css">
+@font-face {
+ font-family: "webfont";
+ src: url("../../fonts/mplus-1p-regular.woff") format("woff");
+ font-weight: normal;
+ font-style: normal;
+ }
+input { font-family: webfont; font-size: 34px; }
+</style>
+<!-- this is the test -->
+<style type="text/css">
+.test { writing-mode: vertical-rl; }
+</style>
+</head>
+<body>
+<p class="instructions">Test passes if the input field is vertical and the text inside it has default vertical settings.</p>
+<div class="test">
+<input type="text" value="国际化活动W3C i18n万维网联盟" />
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-forms-002-manual.html b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-forms-002-manual.html
new file mode 100644
index 00000000000..3de4c72c3ff
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-forms-002-manual.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>writing mode:vertical-rl, input type=text placeholder</title>
+<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow"/>
+<meta name="assert" content="writing-mode:vertical-rl will display an input field for text vertically, and with vertical placeholder text inside."/>
+<style type="text/css">
+@font-face {
+ font-family: "webfont";
+ src: url("../../fonts/mplus-1p-regular.woff") format("woff");
+ font-weight: normal;
+ font-style: normal;
+ }
+input { font-family: webfont; font-size: 34px; }
+</style>
+<!-- this is the test -->
+<style type="text/css">
+.test { writing-mode: vertical-rl; }
+</style>
+</head>
+<body>
+<p class="instructions">Test passes if the input field is vertical and the text inside it has default vertical settings.</p>
+<div class="test">
+<input type="text" placeholder="国际化活动W3C i18n万维网联盟" />
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-forms-003-manual.html b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-forms-003-manual.html
new file mode 100644
index 00000000000..e07502e4fce
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-forms-003-manual.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>writing mode:vertical-rl, textarea</title>
+<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow"/>
+<meta name="assert" content="writing-mode:vertical-rl will display a textarea field vertically, and with vertical text inside."/>
+<style type="text/css">
+@font-face {
+ font-family: "webfont";
+ src: url("../../fonts/mplus-1p-regular.woff") format("woff");
+ font-weight: normal;
+ font-style: normal;
+ }
+textarea { font-family: webfont; font-size: 34px; }
+</style>
+<!-- this is the test -->
+<style type="text/css">
+.test { writing-mode: vertical-rl; }
+</style>
+</head>
+<body>
+<p class="instructions">Test passes if the input field is vertical and the text inside it has default vertical settings.</p>
+<div class="test">
+<textarea rows="3">国际化活动W3C i18n万维网联盟</textarea>
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-forms-004-manual.html b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-forms-004-manual.html
new file mode 100644
index 00000000000..42bef3494f9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-forms-004-manual.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>writing mode:vertical-rl, textarea placeholder</title>
+<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow"/>
+<meta name="assert" content="writing-mode:vertical-rl will display a textarea field vertically, and with vertical placeholder text inside."/>
+<style type="text/css">
+@font-face {
+ font-family: "webfont";
+ src: url("../../fonts/mplus-1p-regular.woff") format("woff");
+ font-weight: normal;
+ font-style: normal;
+ }
+textarea { font-family: webfont; font-size: 34px; }
+</style>
+<!-- this is the test -->
+<style type="text/css">
+.test { writing-mode: vertical-rl; }
+</style>
+</head>
+<body>
+<p class="instructions">Test passes if the input field is vertical and the text inside it has default vertical settings.</p>
+<div class="test">
+<textarea rows="3" placeholder="国际化活动W3C i18n万维网联盟"></textarea>
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-forms-005-manual.html b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-forms-005-manual.html
new file mode 100644
index 00000000000..7177c316d71
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-forms-005-manual.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>writing mode:vertical-rl, select, selected item</title>
+<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow"/>
+<meta name="assert" content="writing-mode:vertical-rl will display a select box vertically, and the selected item will be displayed vertically."/>
+<style type="text/css">
+@font-face {
+ font-family: "webfont";
+ src: url("../../fonts/mplus-1p-regular.woff") format("woff");
+ font-weight: normal;
+ font-style: normal;
+ }
+select { font-family: webfont; font-size: 24px; }
+.test { text-align: center; vertical-align: middle; width: 100%; }
+</style>
+<!-- this is the test -->
+<style type="text/css">
+.test { writing-mode: vertical-rl; }
+</style>
+</head>
+<body>
+<p class="instructions">Test passes if the displayed selection area is vertical and the text inside it has default vertical settings.</p>
+<div class="test">
+<select>
+<option value="1">国际化活动item1万维网联盟</option>
+<option value="2">国际化活动item2万维网联盟</option>
+<option value="3">国际化活动item3万维网联盟</option>
+</select>
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-forms-006-manual.html b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-forms-006-manual.html
new file mode 100644
index 00000000000..2ed6bc99828
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-forms-006-manual.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>writing mode:vertical-rl, select, options</title>
+<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow"/>
+<meta name="assert" content="writing-mode:vertical-rl will display selection options vertically."/>
+<style type="text/css">
+@font-face {
+ font-family: "webfont";
+ src: url("../../fonts/mplus-1p-regular.woff") format("woff");
+ font-weight: normal;
+ font-style: normal;
+ }
+select { font-family: webfont; font-size: 24px; }
+.test { text-align: center; vertical-align: middle; width: 100%; }
+</style>
+<!-- this is the test -->
+<style type="text/css">
+.test { writing-mode: vertical-rl; }
+</style>
+</head>
+<body>
+<p class="instructions">Test passes if the selection options displayed when you click on the selector are vertical.</p>
+<div class="test">
+<select>
+<option value="1">国际化活动item1万维网联盟</option>
+<option value="2">国际化活动item2万维网联盟</option>
+<option value="3">国际化活动item3万维网联盟</option>
+</select>
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-table-001-manual.html b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-table-001-manual.html
new file mode 100644
index 00000000000..1705beb7915
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-table-001-manual.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>writing mode:vertical-rl, vertical lines</title>
+<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow"/>
+<meta name="assert" content="writing-mode:vertical-rl will display a line of text vertically within a table cell."/>
+<style type="text/css">
+@font-face {
+ font-family: "webfont";
+ src: url("../../fonts/mplus-1p-regular.woff") format("woff");
+ font-weight: normal;
+ font-style: normal;
+ }
+.test, .ref { font-family: webfont, serif; font-size: 14px; height: 300px; width: 300px; }
+.test span { background-color:orange; color:orange; }
+</style>
+<!-- this is the test -->
+<style type="text/css">
+.test { writing-mode: vertical-rl; }
+</style>
+</head>
+<body>
+<p class="instructions" dir="ltr">Test passes if you see 4 tall, thin orange rectangles.</p>
+<div class="test">
+<table><tbody>
+<tr><th><span lang="zh">国际化活动</span></th><td><span lang="zh">国际化活动</span></td></tr>
+<tr><th><span lang="zh">国际化活动</span></th><td><span lang="zh">国际化活动</span></td></tr>
+</tbody></table>
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-table-002-manual.html b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-table-002-manual.html
new file mode 100644
index 00000000000..0f1c1d19977
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/writing-mode-vrl-table-002-manual.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>writing mode:vertical-rl, table cell order</title>
+<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow"/>
+<meta name="assert" content="writing-mode:vertical-rl will display table columns horizontally, with the top of the table on the right."/>
+<style type="text/css">
+.test { font-size: 34px; }
+</style>
+<!-- this is the test -->
+<style type="text/css">
+.test { writing-mode: vertical-rl; }
+</style>
+</head>
+<body>
+<p class="instructions" dir="ltr">Test passes if the numbers increase top-to-bottom, starting on the right.</p>
+<div class="test">
+<table><tbody>
+<tr><th>1</th><th>2</th></tr>
+<tr><td>3</td><td>4</td></tr>
+</tbody></table>
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/cssom/getComputedStyle-insets-sticky-container-for-abspos.html b/tests/wpt/web-platform-tests/css/cssom/getComputedStyle-insets-sticky-container-for-abspos.html
new file mode 100644
index 00000000000..7f5ec306483
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/cssom/getComputedStyle-insets-sticky-container-for-abspos.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSSOM: resolved values of the inset properties for sticky positioning</title>
+<link rel="help" href="https://drafts.csswg.org/cssom/#resolved-value">
+<link rel="help" href="https://drafts.csswg.org/css-position/#sticky-pos">
+<link rel="author" title="Joonghun Park" href="mailto:pjh0718@gmail.com">
+<style>
+ #container-for-abspos {
+ height: 200px;
+ width: 400px;
+ overflow: hidden;
+ }
+</style>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script type="module">
+import {runTests, containerForAbspos} from "./support/getComputedStyle-insets.js";
+runTests({
+ style: "position: sticky;",
+ containingBlockElement: containerForAbspos,
+ containingBlockArea: "content",
+ preservesPercentages: false,
+ preservesAuto: true,
+ canStretchAutoSize: false,
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/css/cssom/getComputedStyle-insets-sticky.html b/tests/wpt/web-platform-tests/css/cssom/getComputedStyle-insets-sticky.html
index 6149acc6d7d..6b23fabcb14 100644
--- a/tests/wpt/web-platform-tests/css/cssom/getComputedStyle-insets-sticky.html
+++ b/tests/wpt/web-platform-tests/css/cssom/getComputedStyle-insets-sticky.html
@@ -4,12 +4,15 @@
<link rel="help" href="https://drafts.csswg.org/cssom/#resolved-value">
<link rel="help" href="https://drafts.csswg.org/css-position/#pos-sch">
<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com">
+<style>
+ #container-for-inflow { overflow: hidden; }
+</style>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script type="module">
import {runTests, containerForInflow} from "./support/getComputedStyle-insets.js";
runTests({
- style: "position: sticky; position: -webkit-sticky",
+ style: "position: sticky;",
containingBlockElement: containerForInflow,
containingBlockArea: "content",
preservesPercentages: false,
diff --git a/tests/wpt/web-platform-tests/css/cssom/getComputedStyle-sticky-pos-percent.html b/tests/wpt/web-platform-tests/css/cssom/getComputedStyle-sticky-pos-percent.html
new file mode 100644
index 00000000000..12ad5e89653
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/cssom/getComputedStyle-sticky-pos-percent.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<title>CSS Test: resolve top percentage value against proper box</title>
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3115" />
+<link rel="help" href="https://drafts.csswg.org/css-position/#sticky-pos" />
+<link rel="help" href="https://drafts.csswg.org/cssom/#resolved-values" />
+<meta name="assert" content="Test that the sticky percentage insets are
+resolved against the right ancestor, i.e. the nearest scrollport." />
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<div style="height: 500px; background: purple; overflow: hidden;">
+ <div style="height: 400px; background: yellow;">
+ <div id="target" style="height: 100px; position: sticky; left: 0; top: 50%; background: blue;">
+ </div>
+ </div>
+</div>
+<script>
+test(() => {
+ assert_equals(getComputedStyle(target).top, '250px');
+}, "Sticky element's top property percentage value should be resolved against the div with overflow: hidden");
+</script>
diff --git a/tests/wpt/web-platform-tests/css/cssom/support/getComputedStyle-insets.js b/tests/wpt/web-platform-tests/css/cssom/support/getComputedStyle-insets.js
index beec32e76bc..723990cafbc 100644
--- a/tests/wpt/web-platform-tests/css/cssom/support/getComputedStyle-insets.js
+++ b/tests/wpt/web-platform-tests/css/cssom/support/getComputedStyle-insets.js
@@ -22,7 +22,6 @@ stylesheet.textContent = `
padding: 1px 2px;
border-width: 2px 4px;
margin: 4px 8px;
- overflow: hidden;
}
#container-for-abspos {
/* Padding area: 200px tall, 400px wide */
@@ -48,7 +47,7 @@ stylesheet.textContent = `
border-style: solid;
}
`;
-document.head.appendChild(stylesheet);
+document.head.prepend(stylesheet);
function runTestsWithWM(data, testWM, cbWM) {
const {
@@ -149,10 +148,10 @@ function runTestsWithWM(data, testWM, cbWM) {
bottom: "50%",
right: "75%",
}, {
- top: .1 * cbHeight + "px",
- left: .25 * cbWidth + "px",
- bottom: .5 * cbHeight + "px",
- right: .75 * cbWidth + "px",
+ top: cbHeight * 10 / 100 + "px",
+ left: cbWidth * 25 / 100 + "px",
+ bottom: cbHeight * 50 / 100 + "px",
+ right: cbWidth * 75 / 100 + "px",
}, "Percentages are absolutized into pixels");
checkStyle({
@@ -161,10 +160,10 @@ function runTestsWithWM(data, testWM, cbWM) {
bottom: "calc(50% - 3px)",
right: "calc(75% - 4px)",
}, {
- top: .1 * cbHeight - 1 + "px",
- left: .25 * cbWidth - 2 + "px",
- bottom: .5 * cbHeight - 3 + "px",
- right: .75 * cbWidth - 4 + "px",
+ top: cbHeight * 10 / 100 - 1 + "px",
+ left: cbWidth * 25 / 100 - 2 + "px",
+ bottom: cbHeight * 50 / 100 - 3 + "px",
+ right: cbWidth * 75 / 100 - 4 + "px",
}, "calc() is absolutized into pixels");
}
diff --git a/tests/wpt/web-platform-tests/css/support/red-rect.svg b/tests/wpt/web-platform-tests/css/support/red-rect.svg
new file mode 100644
index 00000000000..3fe10a2b6fd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/support/red-rect.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
+ "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 100">
+ <rect width="200" height="100" style="fill:red;" />
+</svg>
diff --git a/tests/wpt/web-platform-tests/docs/_writing-tests/index.md b/tests/wpt/web-platform-tests/docs/_writing-tests/index.md
index 3922d7a4cc4..7aeceb0b44f 100644
--- a/tests/wpt/web-platform-tests/docs/_writing-tests/index.md
+++ b/tests/wpt/web-platform-tests/docs/_writing-tests/index.md
@@ -11,43 +11,48 @@ There's also a load of [general guidelines][] that apply to all tests.
## Test Type
-There are four main test types:
+Tests in this project use a few different approaches to verify expected
+behavior. The tests can be classified based on the way they express
+expectations:
-* [Reftests][] should be used to test rendering and layout. They
- consist of two or more pages with assertions as to whether they
- render identically or not.
+* Rendering tests should be used to verify that the browser graphically
+ displays pages as expected. See the [rendering test guidelines][rendering]
+ for tips on how to write great rendering tests. There are a few different
+ ways to write rendering tests:
-* [testharness.js][] tests should be used (where
- possible!) for testing everything else. They are built with the
- testharness.js unit testing framework, and consist of assertions
- written in JavaScript.
+ * [Reftests][] should be used to test rendering and layout. They consist of
+ two or more pages with assertions as to whether they render identically or
+ not.
-* [Visual tests][visual] should be used for checking rendering where
- there is a large number of conforming renderings such that reftests
- are impractical. They consist of a page that renders to final state
- at which point a screenshot can be taken and compared to an expected
- rendering for that user agent on that platform.
+ * [Visual tests][visual] should be used for checking rendering where there is
+ a large number of conforming renderings such that reftests are impractical.
+ They consist of a page that renders to final state at which point a
+ screenshot can be taken and compared to an expected rendering for that user
+ agent on that platform.
-* [Manual tests][manual] are used as a last resort for anything
- that can't be tested using any of the above. They consist of a page
- that needs manual interaction or verification of the final result.
+* [testharness.js][] tests should be used (where possible!) for testing
+ everything else. They are built with the testharness.js unit testing
+ framework, and consist of assertions written in JavaScript.
-In general, there is a strong preference towards the first two test
-types (as they can be easily run without human interaction), so they
+* [wdspec][] tests are written in Python using
+ [pytest](https://docs.pytest.org/en/latest/) and test [the WebDriver browser
+ automation protocol](https://w3c.github.io/webdriver/)
+
+* [Manual tests][manual] are used as a last resort for anything that can't be
+ tested using any of the above. They consist of a page that needs manual
+ interaction or verification of the final result.
+
+In general, there is a strong preference towards reftests and testharness.js
+tests types (as they can be easily run without human interaction), so they
should be used in preference to the others even if it results in a
somewhat cumbersome test; there is a far weaker preference between the
-first two, and it is at times advisable to use testharness.js tests
+two test types, and it is at times advisable to use testharness.js tests
for things which would typically be tested using reftests but for
which it would be overly cumbersome.
See [file names][] for test types and features determined by the file names,
and [server features][] for advanced testing features.
-In addition to the four main test types, there are also WebDriver
-tests, which are used exclusively for testing the WebDriver protocol
-itself. There is currently no documentation about these tests,
-however.
-
## Submitting Tests
Once you've written tests, please submit them using
@@ -58,9 +63,11 @@ make sure you run the [`lint` script][lint-tool] before opening a pull request!
[file names]: {{ site.baseurl }}{% link _writing-tests/file-names.md %}
[general guidelines]: {{ site.baseurl }}{% link _writing-tests/general-guidelines.md %}
[reftests]: {{ site.baseurl }}{% link _writing-tests/reftests.md %}
+[rendering]: {{ site.baseurl }}{% link _writing-tests/rendering.md %}
[server features]: {{ site.baseurl }}{% link _writing-tests/server-features.md %}
[testharness.js]: {{ site.baseurl }}{% link _writing-tests/testharness.md %}
[visual]: {{ site.baseurl }}{% link _writing-tests/visual.md %}
[manual]: {{ site.baseurl }}{% link _writing-tests/manual.md %}
[submission-process]: {{ site.baseurl }}{% link _writing-tests/submission-process.md %}
[lint-tool]: {{ site.baseurl }}{% link _writing-tests/lint-tool.md %}
+[wdspec]: {{ site.baseurl }}{% link _writing-tests/wdspec.md %}
diff --git a/tests/wpt/web-platform-tests/docs/_writing-tests/lint-tool.md b/tests/wpt/web-platform-tests/docs/_writing-tests/lint-tool.md
index 774366159ab..712e8af72d0 100644
--- a/tests/wpt/web-platform-tests/docs/_writing-tests/lint-tool.md
+++ b/tests/wpt/web-platform-tests/docs/_writing-tests/lint-tool.md
@@ -52,7 +52,7 @@ below to fix all errors reported.
the `<meta name="timeout"...>` element to precede the `script` element.
* **LAYOUTTESTS APIS**: Test file uses `eventSender`, `testRunner`, or
- `window.internals` which are LayoutTests-specific APIs used in WebKit/Blink.
+ `internals` which are LayoutTests-specific APIs used in WebKit/Blink.
* **MALFORMED-VARIANT**: Test file with a `<meta name='variant'...>`
element whose `content` attribute has a malformed value; **fix**: ensure
diff --git a/tests/wpt/web-platform-tests/docs/_writing-tests/wdspec.md b/tests/wpt/web-platform-tests/docs/_writing-tests/wdspec.md
new file mode 100644
index 00000000000..1164a5dd323
--- /dev/null
+++ b/tests/wpt/web-platform-tests/docs/_writing-tests/wdspec.md
@@ -0,0 +1,75 @@
+---
+layout: page
+title: wdspec tests
+order: -1
+---
+
+The term "wdspec" describes a type of test in WPT which verifies some aspect of
+[the WebDriver protocol](https://w3c.github.io/webdriver/). These tests are
+written in [the Python programming language](https://www.python.org/) and
+structured with [the pytest testing
+framework](https://docs.pytest.org/en/latest/).
+
+The test files are organized into subdirectories based on the WebDriver
+command under test. For example, tests for [the Close Window
+command](https://w3c.github.io/webdriver/#close-window) are located in then
+`close_window` directory.
+
+Similar to [testharness.js][] tests, wdspec tests contain within them any
+number of "sub-tests." Sub-tests are defined as Python functions whose name
+begins with `test_`, e.g. `test_stale_element`.
+
+## The `webdriver` client library
+
+web-platform-tests maintains a WebDriver client library called `webdriver`
+located in the `tools/webdriver/` directory. Like other client libraries, it
+makes it easier to write code which interfaces with a browser using the
+protocol.
+
+Many tests require some "set up" code--logic intended to bring the browser to a
+known state from which the expected behavior can be verified. The convenience
+methods in the `webdriver` library **should** be used to perform this task
+because they reduce duplication.
+
+However, the same methods **should not** be used to issue the command under
+test. Instead, the HTTP request describing the command should be sent directly.
+This practice promotes the descriptive quality of the tests and limits
+indirection that tends to obfuscate test failures.
+
+Here is an example of a test for [the Element Click
+command](https://w3c.github.io/webdriver/#element-click):
+
+```python
+from tests.support.asserts import assert_success
+from tests.support.inline import inline
+
+def test_null_response_value(session):
+ # The high-level API is used to set up a document and locate a click target
+ session.url = inline("<p>foo")
+ element = session.find.css("p", all=False)
+
+ # An HTTP request is explicitly constructed for the "click" command itself
+ response = session.transport.send(
+ "POST", "session/{session_id}/element/{element_id}/click".format(
+ session_id=session.session_id,
+ element_id=element.id))
+
+ assert_success(response)
+```
+
+## Utility functions
+
+The `wedbdriver` library is minimal by design. It mimics the structure of the
+WebDriver specification. Many conformance tests perform similar operations
+(e.g. calculating the center point of an element or creating a document), but
+the library does not expose methods to facilitate them. Instead, wdspec tests
+define shared functionality in the form of "support" files.
+
+Many of these functions are intended to be used directly from the tests using
+Python's built-in `import` keyword. Others (particularly those that operate on
+a WebDriver session) are defined in terms of Pytest "fixtures" and must be
+loaded accordingly. For more detail on how to define and use test fixtures,
+please refer to [the pytest project's documentation on the
+topic](https://docs.pytest.org/en/latest/fixture.html).
+
+[testharness.js]: {{ site.baseurl }}{% link _writing-tests/testharness.md %}
diff --git a/tests/wpt/web-platform-tests/docs/introduction.md b/tests/wpt/web-platform-tests/docs/introduction.md
index 28d8f3ea365..445bd5b131c 100644
--- a/tests/wpt/web-platform-tests/docs/introduction.md
+++ b/tests/wpt/web-platform-tests/docs/introduction.md
@@ -58,27 +58,32 @@ the filesystem, and is preferred for larger specifications.
## Test Types
-The testsuite has a few types of tests, outlined below:
+Tests in this project use a few different approaches to verify expected
+behavior. The tests can be classified based on the way they express
+expectations:
-* [testharness.js][] tests, which are run
- through a JS harness and report their result back with JS.
+* Rendering tests ensure that the browser graphically displays pages as
+ expected. There are a few different ways this is done:
-* [Reftests][], which render two (or more) web
- pages and combine them with equality assertions about their
- rendering (e.g., `A.html` and `B.html` must render identically), run
- either by the user switching between tabs/windows and trying to
- observe differences or through automated scripts.
+ * [Reftests][] render two (or more) web pages and combine them with equality
+ assertions about their rendering (e.g., `A.html` and `B.html` must render
+ identically), run either by the user switching between tabs/windows and
+ trying to observe differences or through [automated
+ scripts][running-from-local-system].
-* [Visual tests][visual] which display a page where the
- result is determined either by a human looking at it or by comparing
- it with a saved screenshot for that user agent on that platform.
+ * [Visual tests][visual] display a page where the result is determined either
+ by a human looking at it or by comparing it with a saved screenshot for
+ that user agent on that platform.
-* [Manual tests][manual], which rely on a human to run
- them and determine their result.
+* [testharness.js][] tests verify that JavaScript interfaces behave as
+ expected. They get their name from the JavaScript harness that's used to
+ execute them.
-* WebDriver tests, which are used for testing the WebDriver protocol
- itself.
+* [wdspec]() tests are written in Python and test [the WebDriver browser
+ automation protocol](https://w3c.github.io/webdriver/)
+* [Manual tests][manual] rely on a human to run them and determine their
+ result.
## GitHub
@@ -108,3 +113,5 @@ free to add yourself to the META.yml file!
[visual]: {{ site.baseurl }}{% link _writing-tests/visual.md %}
[manual]: {{ site.baseurl }}{% link _writing-tests/manual.md %}
[github-intro]: {{ site.baseurl }}{% link _appendix/github-intro.md %}
+[running-from-local-system]: {{ site.baseurl}}{% link _running-tests/from-local-system.md %}
+[wdspec]: {{ site.baseurl }}{% link _writing-tests/wdspec.md %}
diff --git a/tests/wpt/web-platform-tests/element-timing/background-image-data-uri.html b/tests/wpt/web-platform-tests/element-timing/background-image-data-uri.html
index 696f34ff14e..16d6dfcba03 100644
--- a/tests/wpt/web-platform-tests/element-timing/background-image-data-uri.html
+++ b/tests/wpt/web-platform-tests/element-timing/background-image-data-uri.html
@@ -25,7 +25,7 @@ body {
// Only the first characters of the data URI are included in the entry.
const uriPrefix = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKAQMAAAC3/F3+AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAA';
checkElementWithoutResourceTiming(entry, uriPrefix, 'my_div', 'target',
- beforeRender);
+ beforeRender, document.getElementById('target'));
// The background image is a red square of length 10.
checkRect(entry, [0, 100, 0, 50]);
checkNaturalSize(entry, 10, 10);
diff --git a/tests/wpt/web-platform-tests/element-timing/background-image-multiple-elements.html b/tests/wpt/web-platform-tests/element-timing/background-image-multiple-elements.html
index 669f94d6b01..22b4158cbe7 100644
--- a/tests/wpt/web-platform-tests/element-timing/background-image-multiple-elements.html
+++ b/tests/wpt/web-platform-tests/element-timing/background-image-multiple-elements.html
@@ -36,14 +36,16 @@ body {
numObservedElements++;
if (entry.id == 'div1') {
observedDiv1 = true;
- checkElement(entry, pathname, 'et1', 'div1', beforeRender);
+ checkElement(entry, pathname, 'et1', 'div1', beforeRender,
+ document.getElementById('div1'));
// Div is in the top left corner.
checkRect(entry, [0, 100, 0, 100]);
checkNaturalSize(entry, 100, 100);
}
else if (entry.id == 'div2') {
observedDiv2 = true;
- checkElement(entry, pathname, 'et2', 'div2', beforeRender);
+ checkElement(entry, pathname, 'et2', 'div2', beforeRender,
+ document.getElementById('div2'));
// Div is below div1, on the left.
checkRect(entry, [0, 200, 100, 200]);
checkNaturalSize(entry, 100, 100);
diff --git a/tests/wpt/web-platform-tests/element-timing/background-image-stretched.html b/tests/wpt/web-platform-tests/element-timing/background-image-stretched.html
index 8f93b43524f..28c35539824 100644
--- a/tests/wpt/web-platform-tests/element-timing/background-image-stretched.html
+++ b/tests/wpt/web-platform-tests/element-timing/background-image-stretched.html
@@ -25,7 +25,8 @@ body {
const index = window.location.href.lastIndexOf('/');
const pathname = window.location.href.substring(0, index) +
'/resources/square100.png';
- checkElement(entry, pathname, 'my_div', 'target', beforeRender);
+ checkElement(entry, pathname, 'my_div', 'target', beforeRender,
+ document.getElementById('target'));
// The background image extends to occupy to full size of the div.
checkRect(entry, [0, 200, 0, 150]);
// The natural size of the square remains unchanged.
diff --git a/tests/wpt/web-platform-tests/element-timing/buffer-before-onload.html b/tests/wpt/web-platform-tests/element-timing/buffer-before-onload.html
index 805777f29c2..03c7048be11 100644
--- a/tests/wpt/web-platform-tests/element-timing/buffer-before-onload.html
+++ b/tests/wpt/web-platform-tests/element-timing/buffer-before-onload.html
@@ -28,7 +28,7 @@
const index = window.location.href.lastIndexOf('/');
const pathname = window.location.href.substring(0, index) +
'/resources/square20.jpg';
- checkElement(entry, pathname, 'my_image', 'my_id', beforeRender);
+ checkElement(entry, pathname, 'my_image', 'my_id', beforeRender, img);
checkNaturalSize(entry, 20, 20);
});
}, "Element Timing: image loads before onload.");
diff --git a/tests/wpt/web-platform-tests/element-timing/cross-origin-element.sub.html b/tests/wpt/web-platform-tests/element-timing/cross-origin-element.sub.html
index b1a5b7ccd7a..0af0ae96413 100644
--- a/tests/wpt/web-platform-tests/element-timing/cross-origin-element.sub.html
+++ b/tests/wpt/web-platform-tests/element-timing/cross-origin-element.sub.html
@@ -12,13 +12,14 @@ body {
<script src="resources/element-timing-helpers.js"></script>
<script>
async_test((t) => {
+ let img;
const pathname = 'http://{{domains[www]}}:{{ports[http][1]}}'
+ '/element-timing/resources/square100.png';
const observer = new PerformanceObserver(
t.step_func_done((entryList) => {
assert_equals(entryList.getEntries().length, 1);
const entry = entryList.getEntries()[0];
- checkElement(entry, pathname, 'my_image', 'the_id', 0);
+ checkElement(entry, pathname, 'my_image', 'the_id', 0, img);
assert_equals(entry.startTime, 0,
'The startTime of a cross-origin image should be 0.');
checkRect(entry, [0, 100, 0, 100]);
@@ -31,7 +32,7 @@ body {
// TODO(npm): change observer to use buffered flag.
window.onload = t.step_func(() => {
// Add a cross origin image resource.
- const img = document.createElement('img');
+ img = document.createElement('img');
img.src = pathname;
img.setAttribute('elementtiming', 'my_image');
img.setAttribute('id', 'the_id');
diff --git a/tests/wpt/web-platform-tests/element-timing/disconnect-image.html b/tests/wpt/web-platform-tests/element-timing/disconnect-image.html
new file mode 100644
index 00000000000..4ee0516fffe
--- /dev/null
+++ b/tests/wpt/web-platform-tests/element-timing/disconnect-image.html
@@ -0,0 +1,42 @@
+<!DOCTYPE HTML>
+<meta charset=utf-8>
+<title>Element Timing: element attribute returns null when element is disconnected</title>
+<body>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/element-timing-helpers.js"></script>
+<script>
+ let beforeRender;
+ let img;
+ async_test(function (t) {
+ const observer = new PerformanceObserver(
+ t.step_func_done(function(entryList) {
+ assert_equals(entryList.getEntries().length, 1);
+ const entry = entryList.getEntries()[0];
+ const index = window.location.href.lastIndexOf('/');
+ const pathname = window.location.href.substring(0, index) +
+ '/resources/square100.png';
+ // This method will check that entry.element is |img|.
+ checkElement(entry, pathname, 'my_image', 'my_id', beforeRender, img);
+
+ img.parentNode.removeChild(img);
+ // After removing image, entry.element should return null.
+ assert_equals(entry.element, null);
+ })
+ );
+ observer.observe({entryTypes: ['element']});
+ // We add the image during onload to be sure that the observer is registered
+ // in time for it to observe the element timing.
+ window.onload = () => {
+ // Add image of width equal to 100 and height equal to 100.
+ img = document.createElement('img');
+ img.src = 'resources/square100.png';
+ img.setAttribute('elementtiming', 'my_image');
+ img.setAttribute('id', 'my_id');
+ document.body.appendChild(img);
+ beforeRender = performance.now();
+ };
+ }, 'Disconnected elements have null as their |element| attribute.');
+</script>
+
+</body>
diff --git a/tests/wpt/web-platform-tests/element-timing/image-TAO-wildcard.sub.html b/tests/wpt/web-platform-tests/element-timing/image-TAO-wildcard.sub.html
index 0e24af068a6..4ec8aa7d8da 100644
--- a/tests/wpt/web-platform-tests/element-timing/image-TAO-wildcard.sub.html
+++ b/tests/wpt/web-platform-tests/element-timing/image-TAO-wildcard.sub.html
@@ -13,13 +13,14 @@ body {
<script>
async_test((t) => {
let beforeRender;
+ let img;
const img_src = 'http://{{domains[www]}}:{{ports[http][1]}}/element-timing/'
+ 'resources/TAOImage.py?tao=wildcard';
const observer = new PerformanceObserver(
t.step_func_done((entryList) => {
assert_equals(entryList.getEntries().length, 1);
const entry = entryList.getEntries()[0];
- checkElement(entry, img_src, 'my_image', 'my_id', beforeRender);
+ checkElement(entry, img_src, 'my_image', 'my_id', beforeRender, img);
// Assume viewport has size at least 20, so the element is fully visible.
checkRect(entry, [0, 20, 0, 20]);
checkNaturalSize(entry, 20, 20);
@@ -30,7 +31,7 @@ body {
// in time for it to observe the element timing.
// TODO(npm): change observer to use buffered flag.
window.onload = t.step_func(() => {
- const img = document.createElement('img');
+ img = document.createElement('img');
img.src = img_src;
img.setAttribute('elementtiming', 'my_image');
img.setAttribute('id', 'my_id');
diff --git a/tests/wpt/web-platform-tests/element-timing/image-carousel.html b/tests/wpt/web-platform-tests/element-timing/image-carousel.html
index 9f0ef79e354..404eca3b208 100644
--- a/tests/wpt/web-platform-tests/element-timing/image-carousel.html
+++ b/tests/wpt/web-platform-tests/element-timing/image-carousel.html
@@ -37,13 +37,15 @@ body {
const observer = new PerformanceObserver(list => {
list.getEntries().forEach(entry => {
if (entry_count % 2 == 0) {
- checkElement(entry, pathname0, 'image0', 'image0', beforeRenderTimes[entry_count]);
+ checkElement(entry, pathname0, 'image0', 'image0', beforeRenderTimes[entry_count],
+ document.getElementById('image0'));
checkRect(entry, [0, 200, 0, 200]);
checkNaturalSize(entry, 200, 200);
entry_count_per_element[0]++;
}
else {
- checkElement(entry, pathname1, 'image1', 'image1', beforeRenderTimes[entry_count]);
+ checkElement(entry, pathname1, 'image1', 'image1', beforeRenderTimes[entry_count],
+ document.getElementById('image1'));
checkRect(entry, [0, 100, 0, 100]);
checkNaturalSize(entry, 100, 100);
entry_count_per_element[1]++;
diff --git a/tests/wpt/web-platform-tests/element-timing/image-clipped-svg.html b/tests/wpt/web-platform-tests/element-timing/image-clipped-svg.html
index 36cf1b15e0d..3007bf726a6 100644
--- a/tests/wpt/web-platform-tests/element-timing/image-clipped-svg.html
+++ b/tests/wpt/web-platform-tests/element-timing/image-clipped-svg.html
@@ -14,7 +14,8 @@ async_test(function (t) {
const index = window.location.href.lastIndexOf('/');
const pathname = window.location.href.substring(0, index) +
'/resources/circle.svg';
- checkElement(entry, pathname, 'my_svg', 'SVG', beforeRender);
+ checkElement(entry, pathname, 'my_svg', 'SVG', beforeRender,
+ document.getElementById('SVG'));
// Image size is 200x200 but SVG size is 100x100 so it is clipped.
checkRect(entry, [0, 100, 0, 100]);
checkNaturalSize(entry, 200, 200);
diff --git a/tests/wpt/web-platform-tests/element-timing/image-data-uri.html b/tests/wpt/web-platform-tests/element-timing/image-data-uri.html
index 22ff91189b1..2b5d04e45a3 100644
--- a/tests/wpt/web-platform-tests/element-timing/image-data-uri.html
+++ b/tests/wpt/web-platform-tests/element-timing/image-data-uri.html
@@ -23,7 +23,7 @@ body {
// Only the first characters of the data URI are included in the entry.
const uriPrefix = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKAQMAAAC3/F3+AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAA';
checkElementWithoutResourceTiming(entry, uriPrefix, 'my_img', 'inline_wee',
- beforeRender);
+ beforeRender, document.getElementById('inline_wee'));
// The image is a red square of length 10.
checkRect(entry, [0, 10, 0, 10]);
checkNaturalSize(entry, 10, 10);
diff --git a/tests/wpt/web-platform-tests/element-timing/image-not-fully-visible.html b/tests/wpt/web-platform-tests/element-timing/image-not-fully-visible.html
index 279fa03cc2b..57162491a79 100644
--- a/tests/wpt/web-platform-tests/element-timing/image-not-fully-visible.html
+++ b/tests/wpt/web-platform-tests/element-timing/image-not-fully-visible.html
@@ -12,6 +12,7 @@ body {
<script src="resources/element-timing-helpers.js"></script>
<script>
let beforeRender;
+ let img;
async_test(function (t) {
const observer = new PerformanceObserver(
t.step_func_done(function(entryList) {
@@ -20,7 +21,7 @@ body {
const index = window.location.href.lastIndexOf('/');
const pathname = window.location.href.substring(0, index) +
'/resources/square20.png';
- checkElement(entry, pathname, 'not_fully_visible', '', beforeRender);
+ checkElement(entry, pathname, 'not_fully_visible', '', beforeRender, img);
// Image will not be fully visible. It should start from the top left part
// of the document, excluding the margin, and then overflow.
checkRect(entry,
@@ -33,7 +34,7 @@ body {
// in time for it to observe the element timing.
window.onload = () => {
// Add an image setting width and height equal to viewport.
- const img = document.createElement('img');
+ img = document.createElement('img');
img.src = 'resources/square20.png';
img.setAttribute('elementtiming', 'not_fully_visible');
img.width = document.documentElement.clientWidth;
diff --git a/tests/wpt/web-platform-tests/element-timing/image-rect-iframe.html b/tests/wpt/web-platform-tests/element-timing/image-rect-iframe.html
index 94c872e8e02..f0511308c71 100644
--- a/tests/wpt/web-platform-tests/element-timing/image-rect-iframe.html
+++ b/tests/wpt/web-platform-tests/element-timing/image-rect-iframe.html
@@ -23,6 +23,7 @@ body {
assert_equals(e.data.naturalWidth, 100);
assert_equals(e.data.naturalHeight, 100);
assert_equals(e.data.id, 'iframe_img_id');
+ assert_equals(e.data.elementId, 'iframe_img_id');
t.done();
});
}, 'Element Timing entry in iframe has coordinates relative to the iframe.');
diff --git a/tests/wpt/web-platform-tests/element-timing/image-with-css-scale.html b/tests/wpt/web-platform-tests/element-timing/image-with-css-scale.html
index 6d77429e485..bdffdb26b29 100644
--- a/tests/wpt/web-platform-tests/element-timing/image-with-css-scale.html
+++ b/tests/wpt/web-platform-tests/element-timing/image-with-css-scale.html
@@ -28,7 +28,8 @@ body {
const index = window.location.href.lastIndexOf('/');
const pathname = window.location.href.substring(0, index - 14) +
'images/black-rectangle.png';
- checkElement(entry, pathname, 'rectangle', 'rect_id', beforeRender);
+ checkElement(entry, pathname, 'rectangle', 'rect_id', beforeRender,
+ document.getElementById('rect_id'));
checkRect(entry, [0, 200, 25, 125]);
checkNaturalSize(entry, 100, 50);
})
diff --git a/tests/wpt/web-platform-tests/element-timing/image-with-rotation.html b/tests/wpt/web-platform-tests/element-timing/image-with-rotation.html
index 70b635e012a..4433ecbc5f1 100644
--- a/tests/wpt/web-platform-tests/element-timing/image-with-rotation.html
+++ b/tests/wpt/web-platform-tests/element-timing/image-with-rotation.html
@@ -28,7 +28,8 @@ body {
const index = window.location.href.lastIndexOf('/');
const pathname = window.location.href.substring(0, index - 14) +
'images/black-rectangle.png';
- checkElement(entry, pathname, 'rectangle', 'rect_id', beforeRender);
+ checkElement(entry, pathname, 'rectangle', 'rect_id', beforeRender,
+ document.getElementById('rect_id'));
checkNaturalSize(entry, 100, 50);
const rect = entry.intersectionRect;
// The div rotates with respect to the origin, so part of it will be invisible.
diff --git a/tests/wpt/web-platform-tests/element-timing/images-repeated-resource.html b/tests/wpt/web-platform-tests/element-timing/images-repeated-resource.html
index dbcad248e3a..fbb2d6a12cd 100644
--- a/tests/wpt/web-platform-tests/element-timing/images-repeated-resource.html
+++ b/tests/wpt/web-platform-tests/element-timing/images-repeated-resource.html
@@ -15,6 +15,8 @@ body {
let numEntries = 0;
let responseEnd1;
let responseEnd2;
+ let img;
+ let img2;
const index = window.location.href.lastIndexOf('/');
const pathname = window.location.href.substring(0, index) +
'/resources/square100.png';
@@ -22,15 +24,18 @@ body {
const observer = new PerformanceObserver(
t.step_func(function(entryList) {
entryList.getEntries().forEach(entry => {
- checkElement(entry, pathname, entry.identifier, 'image_id', beforeRender);
+ // Easier to check the |element| attribute here since element ID is the same for both images.
+ checkElement(entry, pathname, entry.identifier, 'image_id', beforeRender, null);
checkNaturalSize(entry, 100, 100);
if (entry.identifier === 'my_image') {
++numEntries;
responseEnd1 = entry.responseEnd;
+ assert_equals(entry.element, img);
}
else if (entry.identifier === 'my_image2') {
++numEntries;
responseEnd2 = entry.responseEnd;
+ assert_equals(entry.element, img2);
}
});
if (numEntries == 2) {
@@ -44,13 +49,13 @@ body {
// in time for it to observe the element timing.
window.onload = () => {
// Add image of width and height equal to 100.
- const img = document.createElement('img');
+ img = document.createElement('img');
img.src = 'resources/square100.png';
img.setAttribute('elementtiming', 'my_image');
img.setAttribute('id', 'image_id');
document.body.appendChild(img);
- const img2 = document.createElement('img');
+ img2 = document.createElement('img');
img2.src = 'resources/square100.png';
img2.setAttribute('elementtiming', 'my_image2');
img2.setAttribute('id', 'image_id');
diff --git a/tests/wpt/web-platform-tests/element-timing/multiple-background-images.html b/tests/wpt/web-platform-tests/element-timing/multiple-background-images.html
index ca349fec45f..f3fbe767303 100644
--- a/tests/wpt/web-platform-tests/element-timing/multiple-background-images.html
+++ b/tests/wpt/web-platform-tests/element-timing/multiple-background-images.html
@@ -23,19 +23,20 @@ body {
let observedSquare = false;
const index = window.location.href.lastIndexOf('/');
const pathname = window.location.href.substring(0, index) + '/resources/';
+ let div = document.getElementById('target');
const observer = new PerformanceObserver(
t.step_func(entryList => {
entryList.getEntries().forEach(entry => {
numObservedElements++;
if (entry.name.endsWith('square100.png')) {
observedSquare = true;
- checkElement(entry, pathname + 'square100.png', 'multi', 'target', beforeRender);
+ checkElement(entry, pathname + 'square100.png', 'multi', 'target', beforeRender, div);
checkRect(entry, [0, 200, 0, 200]);
checkNaturalSize(entry, 100, 100);
}
else if (entry.name.endsWith('circle.svg')) {
observedCircle = true;
- checkElement(entry, pathname + 'circle.svg', 'multi', 'target', beforeRender);
+ checkElement(entry, pathname + 'circle.svg', 'multi', 'target', beforeRender, div);
checkRect(entry, [0, 200, 0, 200]);
checkNaturalSize(entry, 200, 200);
}
diff --git a/tests/wpt/web-platform-tests/element-timing/observe-background-image.html b/tests/wpt/web-platform-tests/element-timing/observe-background-image.html
index 0669b4c4d83..680c5e475aa 100644
--- a/tests/wpt/web-platform-tests/element-timing/observe-background-image.html
+++ b/tests/wpt/web-platform-tests/element-timing/observe-background-image.html
@@ -25,7 +25,8 @@ body {
const index = window.location.href.lastIndexOf('/');
const pathname = window.location.href.substring(0, index - 14) +
'images/black-rectangle.png';
- checkElement(entry, pathname, 'my_div', 'target', beforeRender);
+ checkElement(entry, pathname, 'my_div', 'target', beforeRender,
+ document.getElementById('target'));
checkRect(entry, [0, 100, 0, 50]);
checkNaturalSize(entry, 100, 50);
})
diff --git a/tests/wpt/web-platform-tests/element-timing/observe-elementtiming.html b/tests/wpt/web-platform-tests/element-timing/observe-elementtiming.html
index 39fea054311..73f93519cda 100644
--- a/tests/wpt/web-platform-tests/element-timing/observe-elementtiming.html
+++ b/tests/wpt/web-platform-tests/element-timing/observe-elementtiming.html
@@ -12,6 +12,7 @@ body {
<script src="resources/element-timing-helpers.js"></script>
<script>
let beforeRender;
+ let img;
async_test(function (t) {
const observer = new PerformanceObserver(
t.step_func_done(function(entryList) {
@@ -20,7 +21,7 @@ body {
const index = window.location.href.lastIndexOf('/');
const pathname = window.location.href.substring(0, index) +
'/resources/square100.png';
- checkElement(entry, pathname, 'my_image', 'my_id', beforeRender);
+ checkElement(entry, pathname, 'my_image', 'my_id', beforeRender, img);
// Assume viewport has size at least 100, so the element is fully visible.
checkRect(entry, [0, 100, 0, 100]);
checkNaturalSize(entry, 100, 100);
@@ -31,7 +32,7 @@ body {
// in time for it to observe the element timing.
window.onload = () => {
// Add image of width equal to 100 and height equal to 100.
- const img = document.createElement('img');
+ img = document.createElement('img');
img.src = 'resources/square100.png';
img.setAttribute('elementtiming', 'my_image');
img.setAttribute('id', 'my_id');
diff --git a/tests/wpt/web-platform-tests/element-timing/observe-large-image.html b/tests/wpt/web-platform-tests/element-timing/observe-large-image.html
index a08274caa52..13fc71bc4e3 100644
--- a/tests/wpt/web-platform-tests/element-timing/observe-large-image.html
+++ b/tests/wpt/web-platform-tests/element-timing/observe-large-image.html
@@ -12,6 +12,7 @@ body {
<script src="resources/element-timing-helpers.js"></script>
<script>
let beforeRender;
+ let img;
async_test(function (t) {
const observer = new PerformanceObserver(
t.step_func_done(function(entryList) {
@@ -20,7 +21,7 @@ body {
const index = window.location.href.lastIndexOf('/');
const pathname = window.location.href.substring(0, index) +
'/resources/square20.jpg';
- checkElement(entry, pathname, '', 'large_one', beforeRender);
+ checkElement(entry, pathname, '', 'large_one', beforeRender, img);
// Assume viewport hasn't changed, so the element occupies all of it.
checkRect(entry,
[0, document.documentElement.clientWidth, 0, document.documentElement.clientHeight]);
@@ -32,7 +33,7 @@ body {
// in time for it to observe the element timing.
window.onload = () => {
// Add an image setting width and height equal to viewport.
- const img = document.createElement('img');
+ img = document.createElement('img');
img.src = 'resources/square20.jpg';
img.width = document.documentElement.clientWidth;
img.height = document.documentElement.clientHeight;
diff --git a/tests/wpt/web-platform-tests/element-timing/observe-multiple-images.html b/tests/wpt/web-platform-tests/element-timing/observe-multiple-images.html
index 05c54ac050f..b9e82ed10b1 100644
--- a/tests/wpt/web-platform-tests/element-timing/observe-multiple-images.html
+++ b/tests/wpt/web-platform-tests/element-timing/observe-multiple-images.html
@@ -35,7 +35,8 @@ body {
const pathname1 = window.location.href.substring(0, index) +
'/resources/square100.png';
// The images do not contain ID, so expect an empty ID.
- checkElement(entry, pathname1, 'image1', 'img1', beforeRender);
+ checkElement(entry, pathname1, 'image1', 'img1', beforeRender,
+ document.getElementById('img1'));
// This image is horizontally centered.
// Using abs and comparing to 1 because the viewport sizes could be odd.
// If a size is odd, then image cannot be in the pure center, but left
@@ -59,7 +60,8 @@ body {
image2Observed = 1;
const pathname2 = window.location.href.substring(0, index) +
'/resources/square20.png';
- checkElement(entry, pathname2, 'image2', 'img2', beforeRender);
+ checkElement(entry, pathname2, 'image2', 'img2', beforeRender,
+ document.getElementById('img2'));
// This image should be below image 1, and should respect the margin.
checkRect(entry, [50, 250, 250, 450], "of image2");
checkNaturalSize(entry, 20, 20);
@@ -72,7 +74,8 @@ body {
image3Observed = 1;
const pathname3 = window.location.href.substring(0, index) +
'/resources/circle.svg';
- checkElement(entry, pathname3, 'image3', 'img3', beforeRender);
+ checkElement(entry, pathname3, 'image3', 'img3', beforeRender,
+ document.getElementById('img3'));
// This image is just to the right of image2.
checkRect(entry, [250, 450, 250, 450], "of image3");
checkNaturalSize(entry, 200, 200);
diff --git a/tests/wpt/web-platform-tests/element-timing/observe-shadow-image.html b/tests/wpt/web-platform-tests/element-timing/observe-shadow-image.html
index 1fa6dd41a95..a4d21bea808 100644
--- a/tests/wpt/web-platform-tests/element-timing/observe-shadow-image.html
+++ b/tests/wpt/web-platform-tests/element-timing/observe-shadow-image.html
@@ -12,13 +12,14 @@ body {
<div id='target'></div>
<script>
let beforeRender;
+ let img;
async_test(function (t) {
const observer = new PerformanceObserver(
t.step_func_done(function(entryList) {
assert_equals(entryList.getEntries().length, 1);
const entry = entryList.getEntries()[0];
const pathname = window.location.origin + '/element-timing/resources/square100.png';
- checkElement(entry, pathname, 'my_image', 'my_id', beforeRender);
+ checkElement(entry, pathname, 'my_image', 'my_id', beforeRender, img);
// Assume viewport has size at least 100, so the element is fully visible.
checkRect(entry, [0, 100, 0, 100]);
checkNaturalSize(entry, 100, 100);
@@ -29,7 +30,7 @@ body {
// in time for it to observe the element timing.
window.onload = () => {
// Add image of width equal to 100 and height equal to 100.
- const img = document.createElement('img');
+ img = document.createElement('img');
img.src = 'resources/square100.png';
img.setAttribute('elementtiming', 'my_image');
img.setAttribute('id', 'my_id');
diff --git a/tests/wpt/web-platform-tests/element-timing/observe-svg-image.html b/tests/wpt/web-platform-tests/element-timing/observe-svg-image.html
index 45e800d25da..c3c178e9b64 100644
--- a/tests/wpt/web-platform-tests/element-timing/observe-svg-image.html
+++ b/tests/wpt/web-platform-tests/element-timing/observe-svg-image.html
@@ -14,7 +14,8 @@ async_test(function (t) {
const index = window.location.href.lastIndexOf('/');
const pathname = window.location.href.substring(0, index) +
'/resources/circle.svg';
- checkElement(entry, pathname, 'my_svg', 'svg_id', beforeRender);
+ checkElement(entry, pathname, 'my_svg', 'svg_id', beforeRender,
+ document.getElementById('svg_id'));
// Assume viewport has size at least 200, so the element is fully visible.
checkRect(entry, [0, 200, 0, 200]);
checkNaturalSize(entry, 200, 200);
diff --git a/tests/wpt/web-platform-tests/element-timing/observe-video-poster.html b/tests/wpt/web-platform-tests/element-timing/observe-video-poster.html
index d3a69937d3c..500fcedcccf 100644
--- a/tests/wpt/web-platform-tests/element-timing/observe-video-poster.html
+++ b/tests/wpt/web-platform-tests/element-timing/observe-video-poster.html
@@ -14,7 +14,8 @@ async_test(function (t) {
const index = window.location.href.lastIndexOf('/');
const pathname = window.location.href.substring(0, index) +
'/resources/circle.svg';
- checkElement(entry, pathname, 'my_poster', 'the_poster', beforeRender);
+ checkElement(entry, pathname, 'my_poster', 'the_poster', beforeRender,
+ document.getElementById('the_poster'));
// Assume viewport has size at least 200, so the element is fully visible.
checkRect(entry, [0, 200, 0, 200]);
checkNaturalSize(entry, 200, 200);
diff --git a/tests/wpt/web-platform-tests/element-timing/progressively-loaded-image.html b/tests/wpt/web-platform-tests/element-timing/progressively-loaded-image.html
index c0a7d4f1fb7..c534621ccf8 100644
--- a/tests/wpt/web-platform-tests/element-timing/progressively-loaded-image.html
+++ b/tests/wpt/web-platform-tests/element-timing/progressively-loaded-image.html
@@ -8,6 +8,7 @@
<body>
<script>
let beforeRender;
+ let img;
// Number of characters to be read on the initial read, before sleeping.
// Should be sufficient to do at least a first scan.
let numInitial = 75;
@@ -24,13 +25,13 @@
img_src;
// Since the image is only fully loaded after the sleep, the render timestamp
// must be greater than |beforeRender| + |sleep|.
- checkElement(entry, pathname, 'my_image', '', beforeRender + sleep);
+ checkElement(entry, pathname, 'my_image', '', beforeRender + sleep, img);
checkNaturalSize(entry, 20, 20);
})
);
observer.observe({entryTypes: ['element']});
- const img = document.createElement('img');
+ img = document.createElement('img');
img.src = img_src;
img.setAttribute('elementtiming', 'my_image');
document.body.appendChild(img);
diff --git a/tests/wpt/web-platform-tests/element-timing/rectangular-image.html b/tests/wpt/web-platform-tests/element-timing/rectangular-image.html
index b02808456a3..a1af9616ea1 100644
--- a/tests/wpt/web-platform-tests/element-timing/rectangular-image.html
+++ b/tests/wpt/web-platform-tests/element-timing/rectangular-image.html
@@ -12,6 +12,7 @@ body {
<script src="resources/element-timing-helpers.js"></script>
<script>
let beforeRender;
+ let img;
async_test(function (t) {
const observer = new PerformanceObserver(
t.step_func_done(function(entryList) {
@@ -21,7 +22,7 @@ body {
// Subtracting 14 to remove 'element-timing'.
const pathname = window.location.href.substring(0, index - 14) +
'images/black-rectangle.png';
- checkElement(entry, pathname, 'my_image', 'rectangle', beforeRender);
+ checkElement(entry, pathname, 'my_image', 'rectangle', beforeRender, img);
// Assume viewport has size at least 100, so the element is fully visible.
checkRect(entry, [20, 120, 20, 70]);
checkNaturalSize(entry, 100, 50);
@@ -32,7 +33,7 @@ body {
// in time for it to observe the element timing.
window.onload = () => {
// Add image of width equal to 100 and height equal to 50.
- const img = document.createElement('img');
+ img = document.createElement('img');
img.src = '/images/black-rectangle.png';
img.id = 'rectangle';
img.setAttribute('elementtiming', 'my_image');
diff --git a/tests/wpt/web-platform-tests/element-timing/resources/element-timing-helpers.js b/tests/wpt/web-platform-tests/element-timing/resources/element-timing-helpers.js
index b0ddf308df2..e378d617f20 100644
--- a/tests/wpt/web-platform-tests/element-timing/resources/element-timing-helpers.js
+++ b/tests/wpt/web-platform-tests/element-timing/resources/element-timing-helpers.js
@@ -1,6 +1,6 @@
-// Checks that this is an ElementTiming entry with name |expectedName|. It also
-// does a very basic check on |startTime|: after |beforeRender| and before now().
-function checkElement(entry, expectedName, expectedIdentifier, expectedID, beforeRender) {
+// Common checks between checkElement() and checkElementWithoutResourceTiming().
+function checkElementInternal(entry, expectedName, expectedIdentifier, expectedID, beforeRender,
+ expectedElement) {
assert_equals(entry.entryType, 'element');
assert_equals(entry.name, expectedName);
assert_equals(entry.identifier, expectedIdentifier);
@@ -8,20 +8,25 @@ function checkElement(entry, expectedName, expectedIdentifier, expectedID, befor
assert_equals(entry.id, expectedID);
assert_greater_than_equal(entry.startTime, beforeRender);
assert_greater_than_equal(performance.now(), entry.startTime);
+ if (expectedElement !== null)
+ assert_equals(entry.element, expectedElement);
+}
+
+// Checks that this is an ElementTiming entry with name |expectedName|. It also
+// does a very basic check on |startTime|: after |beforeRender| and before now().
+function checkElement(entry, expectedName, expectedIdentifier, expectedID, beforeRender,
+ expectedElement) {
+ checkElementInternal(entry, expectedName, expectedIdentifier, expectedID, beforeRender,
+ expectedElement);
const rt_entries = performance.getEntriesByName(expectedName, 'resource');
assert_equals(rt_entries.length, 1);
assert_equals(rt_entries[0].responseEnd, entry.responseEnd);
}
function checkElementWithoutResourceTiming(entry, expectedName, expectedIdentifier,
- expectedID, beforeRender) {
- assert_equals(entry.entryType, 'element');
- assert_equals(entry.name, expectedName);
- assert_equals(entry.identifier, expectedIdentifier);
- assert_equals(entry.duration, 0);
- assert_equals(entry.id, expectedID);
- assert_greater_than_equal(entry.startTime, beforeRender);
- assert_greater_than_equal(performance.now(), entry.startTime);
+ expectedID, beforeRender, expectedElement) {
+ checkElementInternal(entry, expectedName, expectedIdentifier, expectedID, beforeRender,
+ expectedElement);
// No associated resource from ResourceTiming, so the responseEnd should be 0.
assert_equals(entry.responseEnd, 0);
}
diff --git a/tests/wpt/web-platform-tests/element-timing/resources/iframe-with-square-sends-entry.html b/tests/wpt/web-platform-tests/element-timing/resources/iframe-with-square-sends-entry.html
index 25bd67935a1..b8af505d32b 100644
--- a/tests/wpt/web-platform-tests/element-timing/resources/iframe-with-square-sends-entry.html
+++ b/tests/wpt/web-platform-tests/element-timing/resources/iframe-with-square-sends-entry.html
@@ -15,6 +15,8 @@ body {
'naturalWidth' : entryList.getEntries()[0].naturalWidth,
'naturalHeight' : entryList.getEntries()[0].naturalHeight,
'id': entryList.getEntries()[0].id,
+ // Elements cannot be cloned, so just send the element ID.
+ 'elementId' : entryList.getEntries()[0].element.id,
}, '*');
});
observer.observe({entryTypes: ['element']});
diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/autofocus/no-cross-origin-autofocus.sub.html b/tests/wpt/web-platform-tests/html/semantics/forms/autofocus/no-cross-origin-autofocus.sub.html
new file mode 100644
index 00000000000..cc018814c92
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/forms/autofocus/no-cross-origin-autofocus.sub.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<html>
+<head>
+<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>
+</head>
+<body>
+ <h1>Autofocus shouldn't work in cross-origin iframe.</h1>
+ <iframe id="child" width="200" height="100"></iframe>
+
+ <script>
+ let parent_loaded = false;
+ let child_loaded = false;
+
+ async_test(function(t) {
+ function pingChildIfBothFramesLoaded() {
+ if (parent_loaded && child_loaded)
+ frames[0].postMessage("report_focus_state", "*");
+ }
+
+ window.addEventListener("load", t.step_func(event => {
+ parent_loaded = true;
+ pingChildIfBothFramesLoaded();
+ }));
+
+ window.addEventListener("message", t.step_func(event => {
+ if (event.data == "child_loaded") {
+ child_loaded = true;
+ pingChildIfBothFramesLoaded();
+ } else if (event.data == "child_is_focused") {
+ assert_unreached("The iframe shouldn't get focus");
+ } else if (event.data == "child_is_not_focused") {
+ t.done();
+ }
+ }));
+ document.getElementById("child").src =
+ "http://{{domains[www]}}:{{ports[http][0]}}/html/semantics/forms/autofocus/resources/child-autofocus.html";
+ }, "Autofocus shouldn't work in cross-origin iframe");
+ </script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/autofocus/resources/child-autofocus.html b/tests/wpt/web-platform-tests/html/semantics/forms/autofocus/resources/child-autofocus.html
new file mode 100644
index 00000000000..afd5601a523
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/forms/autofocus/resources/child-autofocus.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<input id="target" value="This should be unfocused!" autofocus></input>
+
+<script>
+ let got_focus = false;
+ document.getElementById("target").addEventListener("focus", () => {
+ got_focus = true;
+ });
+
+ window.addEventListener("load", () => {
+ parent.postMessage("child_loaded", "*");
+ });
+
+ window.addEventListener("message", event => {
+ if (event.data == "report_focus_state") {
+ let msg = got_focus ? "child_is_focused" : "child_is_not_focused";
+ parent.postMessage(msg, "*");
+ }
+ });
+</script>
diff --git a/tests/wpt/web-platform-tests/infrastructure/reftest/reftest_fuzzy_no_differences.html b/tests/wpt/web-platform-tests/infrastructure/reftest/reftest_fuzzy_no_differences.html
index 324873a8ccf..95863904aac 100644
--- a/tests/wpt/web-platform-tests/infrastructure/reftest/reftest_fuzzy_no_differences.html
+++ b/tests/wpt/web-platform-tests/infrastructure/reftest/reftest_fuzzy_no_differences.html
@@ -1,6 +1,6 @@
<!DOCTYPE html>
<link rel=match href=fuzzy-ref-1.html>
-<!-- This exactly matches the reference, and includes the possibilty of
+<!-- This exactly matches the reference, and includes the possibility of
0 pixels different; in this case the maxDifference is ignored --->
<meta name=fuzzy content="fuzzy-ref-1.html:128;0-100">
<style>
diff --git a/tests/wpt/web-platform-tests/infrastructure/reftest/reftest_fuzzy_no_differences_1.html b/tests/wpt/web-platform-tests/infrastructure/reftest/reftest_fuzzy_no_differences_1.html
index 6bf85ceebed..9513f9bda82 100644
--- a/tests/wpt/web-platform-tests/infrastructure/reftest/reftest_fuzzy_no_differences_1.html
+++ b/tests/wpt/web-platform-tests/infrastructure/reftest/reftest_fuzzy_no_differences_1.html
@@ -1,6 +1,6 @@
<!DOCTYPE html>
<link rel=match href=fuzzy-ref-1.html>
-<!-- This exactly matches the reference, and includes the possibilty of
+<!-- This exactly matches the reference, and includes the possibility of
0 difference in the color channel; in this case the pixelsDifferent is ignored --->
<meta name=fuzzy content="fuzzy-ref-1.html:0-128;100">
<style>
diff --git a/tests/wpt/web-platform-tests/interfaces/IndexedDB.idl b/tests/wpt/web-platform-tests/interfaces/IndexedDB.idl
index 21ff252fffe..f2625ebe53d 100644
--- a/tests/wpt/web-platform-tests/interfaces/IndexedDB.idl
+++ b/tests/wpt/web-platform-tests/interfaces/IndexedDB.idl
@@ -171,7 +171,7 @@ interface IDBCursor {
readonly attribute IDBCursorDirection direction;
readonly attribute any key;
readonly attribute any primaryKey;
- readonly attribute IDBRequest request;
+ [SameObject] readonly attribute IDBRequest request;
void advance([EnforceRange] unsigned long count);
void continue(optional any key);
diff --git a/tests/wpt/web-platform-tests/interfaces/wake-lock.idl b/tests/wpt/web-platform-tests/interfaces/wake-lock.idl
index c0d4bc9c239..466d697cff8 100644
--- a/tests/wpt/web-platform-tests/interfaces/wake-lock.idl
+++ b/tests/wpt/web-platform-tests/interfaces/wake-lock.idl
@@ -15,11 +15,14 @@ interface WakeLock : EventTarget {
readonly attribute WakeLockType type;
readonly attribute boolean active;
attribute EventHandler onactivechange;
- Promise<void> request();
- void abort();
+ Promise<void> request(optional WakeLockRequestOptions options);
static sequence<WakeLock> query(optional WakeLockQueryFilter filter);
};
+dictionary WakeLockRequestOptions {
+ AbortSignal? signal = null;
+};
+
dictionary WakeLockQueryFilter {
WakeLockType? type;
boolean? active;
diff --git a/tests/wpt/web-platform-tests/intersection-observer/v2/drop-shadow-filter-vertical-rl.html b/tests/wpt/web-platform-tests/intersection-observer/v2/drop-shadow-filter-vertical-rl.html
new file mode 100644
index 00000000000..fc5b145e1fb
--- /dev/null
+++ b/tests/wpt/web-platform-tests/intersection-observer/v2/drop-shadow-filter-vertical-rl.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="../resources/intersection-observer-test-utils.js"></script>
+
+<style>
+body, html {
+ margin: 0;
+}
+pre, #log {
+ position: absolute;
+ top: 150px;
+}
+#target {
+ width: 100px;
+ height: 100px;
+ background-color: green;
+ float: left;
+}
+#occluder {
+ float: left;
+ margin-left: 10px;
+ width: 100px;
+ height: 100px;
+ background-color: blue;
+ filter: drop-shadow(-50px 0);
+ writing-mode: vertical-rl;
+}
+</style>
+
+<div id="target"></div>
+<div id="occluder"></div>
+
+<script>
+var delay = 100;
+var entries = [];
+var target;
+var occluder;
+
+runTestCycle(function() {
+ target = document.getElementById("target");
+ occluder = document.getElementById("occluder");
+ assert_true(!!target, "target exists");
+ assert_true(!!occluder, "occluder exists");
+ var observer = new IntersectionObserver(function(changes) {
+ entries = entries.concat(changes)
+ }, {trackVisibility: true, delay: delay});
+ observer.observe(target);
+ entries = entries.concat(observer.takeRecords());
+ assert_equals(entries.length, 0, "No initial notifications.");
+ runTestCycle(step0, "First rAF.", delay);
+}, "IntersectionObserverV2 in a single document using the implicit root, with an occluding element.", delay);
+
+function step0() {
+ // Occluding elements with opacity=0 should not affect target visibility.
+ occluder.style.opacity = "0";
+ runTestCycle(step2, "occluder.style.opacity = 0", delay);
+
+ // First notification should report occlusion due to drop shadow filter.
+ checkLastEntry(entries, 0, [0, 100, 0, 100, 0, 100, 0, 100, 0, 800, 0, 600, true, false]);
+}
+
+function step2() {
+ checkLastEntry(entries, 1, [0, 100, 0, 100, 0, 100, 0, 100, 0, 800, 0, 600, true, true]);
+}
+</script>
diff --git a/tests/wpt/web-platform-tests/lint.whitelist b/tests/wpt/web-platform-tests/lint.whitelist
index a7a4600d9cd..f6411453345 100644
--- a/tests/wpt/web-platform-tests/lint.whitelist
+++ b/tests/wpt/web-platform-tests/lint.whitelist
@@ -801,7 +801,10 @@ MISSING-LINK: css/filter-effects/*.any.js
# Tests that use WebKit/Blink testing APIs
LAYOUTTESTS APIS: css/css-regions/interactivity/*
+LAYOUTTESTS APIS: import-maps/resolving.tentative.html
+LAYOUTTESTS APIS: permissions/test-background-fetch-permission.html
LAYOUTTESTS APIS: resources/chromium/generic_sensor_mocks.js
+LAYOUTTESTS APIS: resources/chromium/webxr-test.js
# Gecko additons to remove
CSS-COLLIDING-REF-NAME: css/css-contain/reference/contain-size-fieldset-001-ref.html
diff --git a/tests/wpt/web-platform-tests/mathml/relations/css-styling/dynamic-dir-1-ref.html b/tests/wpt/web-platform-tests/mathml/relations/css-styling/dynamic-dir-1-ref.html
new file mode 100644
index 00000000000..111ea79e243
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mathml/relations/css-styling/dynamic-dir-1-ref.html
@@ -0,0 +1,75 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Test dynamically changing dir attribute</title>
+</head>
+<body>
+ <p>
+ math:
+ <math dir="rtl">
+ <mi>a</mi>
+ <mi>b</mi>
+ <mi>c</mi>
+ </math>
+ <math dir="rtl">
+ <mi>a</mi>
+ <mi>b</mi>
+ <mi>c</mi>
+ </math>
+ <math>
+ <mi>a</mi>
+ <mi>b</mi>
+ <mi>c</mi>
+ </math>
+ </p>
+ <p>
+ mstyle:
+ <math>
+ <mstyle dir="rtl">
+ <mi>a</mi>
+ <mi>b</mi>
+ <mi>c</mi>
+ </mstyle>
+ </math>
+ <math>
+ <mstyle dir="rtl">
+ <mi>a</mi>
+ <mi>b</mi>
+ <mi>c</mi>
+ </mstyle>
+ </math>
+ <math>
+ <mstyle>
+ <mi>a</mi>
+ <mi>b</mi>
+ <mi>c</mi>
+ </mstyle>
+ </math>
+ </p>
+ <p>
+ mrow:
+ <math>
+ <mrow dir="rtl">
+ <mi>a</mi>
+ <mi>b</mi>
+ <mi>c</mi>
+ </mrow>
+ </math>
+ <math>
+ <mrow dir="rtl">
+ <mi>a</mi>
+ <mi>b</mi>
+ <mi>c</mi>
+ </mrow>
+ </math>
+ <math>
+ <mrow>
+ <mi>a</mi>
+ <mi>b</mi>
+ <mi>c</mi>
+ </mrow>
+ </math>
+ </p>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/mathml/relations/css-styling/dynamic-dir-1.html b/tests/wpt/web-platform-tests/mathml/relations/css-styling/dynamic-dir-1.html
new file mode 100644
index 00000000000..c4c99d878c1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mathml/relations/css-styling/dynamic-dir-1.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<head>
+ <meta charset="utf-8">
+ <title>Test dynamically changing dir attribute</title></head>
+ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#cssproperties">
+ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#dom">
+ <meta name="assert" content="The dir attribute should update direction map to css properties dynamically">
+ <link rel="match" href="dynamic-dir-1-ref.html">
+ <script>
+ window.addEventListener("load", () => {
+
+ // force initial layout so we're sure what we're testing against
+ document.documentElement.getBoundingClientRect();
+
+ ["math", "mstyle", "mrow"].forEach((tag) => {
+ let elements = document.getElementsByTagName(tag);
+
+ // set an explcit rtl where there was none
+ elements[0].setAttribute("dir", "rtl");
+
+ // change explcit ltr to rtl
+ elements[1].setAttribute("dir", "rtl");
+
+ // remove an explicitly set dir="rtl"
+ elements[2].removeAttribute("dir");
+
+ })
+
+ document.documentElement.classList.remove('reftest-wait');
+ })
+ </script>
+</head>
+<body>
+ <p>
+ math:
+ <math>
+ <mi>a</mi>
+ <mi>b</mi>
+ <mi>c</mi>
+ </math>
+ <math dir="ltr">
+ <mi>a</mi>
+ <mi>b</mi>
+ <mi>c</mi>
+ </math>
+ <math dir="rtl">
+ <mi>a</mi>
+ <mi>b</mi>
+ <mi>c</mi>
+ </math>
+ </p>
+ <p>
+ mstyle:
+ <math>
+ <mstyle>
+ <mi>a</mi>
+ <mi>b</mi>
+ <mi>c</mi>
+ </mstyle>
+ </math>
+ <math>
+ <mstyle dir="ltr">
+ <mi>a</mi>
+ <mi>b</mi>
+ <mi>c</mi>
+ </mstyle>
+ </math>
+ <math>
+ <mstyle dir="rtl">
+ <mi>a</mi>
+ <mi>b</mi>
+ <mi>c</mi>
+ </mstyle>
+ </math>
+ </p>
+ <p>
+ mrow:
+ <math>
+ <mrow>
+ <mi>a</mi>
+ <mi>b</mi>
+ <mi>c</mi>
+ </mrow>
+ </math>
+ <math>
+ <mrow dir="ltr">
+ <mi>a</mi>
+ <mi>b</mi>
+ <mi>c</mi>
+ </mrow>
+ </math>
+ <math>
+ <mrow dir="rtl">
+ <mi>a</mi>
+ <mi>b</mi>
+ <mi>c</mi>
+ </mrow>
+ </math>
+ </p>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/mediacapture-streams/idlharness.https.window.js b/tests/wpt/web-platform-tests/mediacapture-streams/idlharness.https.window.js
index 441a64e3a0c..976d31b6609 100644
--- a/tests/wpt/web-platform-tests/mediacapture-streams/idlharness.https.window.js
+++ b/tests/wpt/web-platform-tests/mediacapture-streams/idlharness.https.window.js
@@ -54,7 +54,6 @@ promise_test(async () => {
MediaDevices: ['navigator.mediaDevices'],
MediaStreamTrack: [track],
MediaStreamTrackEvent: [trackEvent],
- OverconstrainedErrorEvent: ['new OverconstrainedErrorEvent("type", {})'],
});
idl_array.test();
}, 'mediacapture-streams interfaces.');
diff --git a/tests/wpt/web-platform-tests/permissions/interfaces.any.js b/tests/wpt/web-platform-tests/permissions/interfaces.any.js
index 77fa909a768..b9345388693 100644
--- a/tests/wpt/web-platform-tests/permissions/interfaces.any.js
+++ b/tests/wpt/web-platform-tests/permissions/interfaces.any.js
@@ -22,7 +22,7 @@ promise_test(async () => {
try {
self.permissionStatus = await navigator.permissions.query({ name: "geolocation" });
- self.permissionStatus = await navigator.permissions.query({ name: "background-fetch"});
+ self.permissionStatus = await navigator.permissions.query({ name: "background-fetch" });
} catch (e) {
// Will be surfaced in idlharness.js's test_object below.
}
diff --git a/tests/wpt/web-platform-tests/permissions/test-background-fetch-permission.html b/tests/wpt/web-platform-tests/permissions/test-background-fetch-permission.html
index c3da77d9f8c..c824ecf1d2b 100644
--- a/tests/wpt/web-platform-tests/permissions/test-background-fetch-permission.html
+++ b/tests/wpt/web-platform-tests/permissions/test-background-fetch-permission.html
@@ -7,7 +7,6 @@
<script>
promise_test(function(test) {
- internals.runtimeFlags.backgroundFetchEnabled = true;
return navigator.permissions.query({name:'background-fetch'}).then(function(result) {
assert_true(result instanceof PermissionStatus);
});
diff --git a/tests/wpt/web-platform-tests/picture-in-picture/shadow-dom.html b/tests/wpt/web-platform-tests/picture-in-picture/shadow-dom.html
index e2335cd5ddc..adcd6597628 100644
--- a/tests/wpt/web-platform-tests/picture-in-picture/shadow-dom.html
+++ b/tests/wpt/web-platform-tests/picture-in-picture/shadow-dom.html
@@ -18,10 +18,10 @@
</template>
<div id='host2'>
<template data-mode='open' id='root2'>
- <style>
- #host3 { color: rgb(0, 0, 127); }
- #host3:picture-in-picture { color: rgb(0, 0, 128); }
- </style>
+ <style>
+ #host3 { color: rgb(0, 0, 127); }
+ #host3:picture-in-picture { color: rgb(0, 0, 128); }
+ </style>
<div id='host3'>
<template data-mode='open' id='root3'>
<style>
@@ -75,8 +75,8 @@ promise_test(async t => {
assert_equals(ids.root5.pictureInPictureElement, null);
assert_equals(getComputedStyle(ids.video).color, 'rgb(0, 255, 0)');
- assert_equals(getComputedStyle(ids.host3).color, 'rgb(0, 0, 128)');
- assert_equals(getComputedStyle(ids.host2).color, 'rgb(0, 0, 255)');
+ assert_equals(getComputedStyle(ids.host3).color, 'rgb(0, 0, 127)');
+ assert_equals(getComputedStyle(ids.host2).color, 'rgb(0, 0, 254)');
})
.then(() => document.exitPictureInPicture())
.then(() => {
diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-inherit_child-auto-child-none_touch-manual.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-inherit_child-auto-child-none_touch.html
index dcea2837502..ae2373c3f53 100644
--- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-inherit_child-auto-child-none_touch-manual.html
+++ b/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-inherit_child-auto-child-none_touch.html
@@ -7,6 +7,9 @@
<link rel="stylesheet" type="text/css" href="pointerevent_styles.css">
<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>
<script src="pointerevent_support.js"></script>
<style>
.scroller > div {
@@ -89,6 +92,7 @@
function run() {
var target0 = document.getElementById("target0");
var btnComplete = document.getElementById("btnComplete");
+ var clickIsReceived = false;
// Check if touch-action attribute works properly for embedded divs
// Scrollable-Parent, Child: `auto`, Grand-Child: `none`
@@ -99,13 +103,25 @@
assert_equals(target0.scrollLeft, 0, "scroll x offset should be 0 in the end of the test");
assert_equals(target0.scrollTop, 0, "scroll y offset should be 0 in the end of the test");
});
- test_touchaction.done();
+ clickIsReceived = true;
updateDescriptionComplete();
});
on_event(target0, 'scroll', function(event) {
test_touchaction.step(failOnScroll, "scroll received while touch-action is none");
});
+
+ // Inject touch inputs.
+ touchScrollInTarget(scrollTarget, 'down').then(function() {
+ return touchScrollInTarget(scrollTarget, 'right');
+ }).then(function() {
+ return touchTapInTarget(btnComplete);
+ }).then(function() {
+ test_touchaction.step(function () {
+ assert_true(clickIsReceived, "click should be received before the test finishes");
+ }, "click should be received before the test finishes");
+ test_touchaction.done();
+ });
}
</script>
<h1>behaviour: none</h1>
diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-inherit_child-none_touch-manual.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-inherit_child-none_touch.html
index 16e42954e51..81f0ea6050a 100644
--- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-inherit_child-none_touch-manual.html
+++ b/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-inherit_child-none_touch.html
@@ -7,6 +7,9 @@
<link rel="stylesheet" type="text/css" href="pointerevent_styles.css">
<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>
<script src="pointerevent_support.js"></script>
<style>
.scroller > div {
@@ -84,6 +87,7 @@
function run() {
var target0 = document.getElementById("target0");
var btnComplete = document.getElementById("btnComplete");
+ var clickIsReceived = false;
// Check if touch-action attribute works properly for embedded divs
//
@@ -94,13 +98,25 @@
assert_equals(target0.scrollLeft, 0, "scroll x offset should be 0 in the end of the test");
assert_equals(target0.scrollTop, 0, "scroll y offset should be 0 in the end of the test");
});
- test_touchaction.done();
+ clickIsReceived = true;
updateDescriptionComplete();
});
on_event(target0, 'scroll', function(event) {
test_touchaction.step(failOnScroll, "scroll received while touch-action is none");
});
+
+ // Inject touch inputs.
+ touchScrollInTarget(scrollTarget, 'down').then(function() {
+ return touchScrollInTarget(scrollTarget, 'right');
+ }).then(function() {
+ return touchTapInTarget(btnComplete);
+ }).then(function() {
+ test_touchaction.step(function () {
+ assert_true(clickIsReceived, "click should be received before the test finishes");
+ }, "click should be received before the test finishes");
+ test_touchaction.done();
+ });
}
</script>
<h1>behaviour: none</h1>
diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-x_touch-manual.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-x_touch.html
index c75d067e447..775708d4a77 100644
--- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-x_touch-manual.html
+++ b/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-x_touch.html
@@ -7,6 +7,9 @@
<link rel="stylesheet" type="text/css" href="pointerevent_styles.css">
<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>
<script src="pointerevent_support.js"></script>
<style>
.scroller > div {
@@ -88,6 +91,7 @@
function run() {
var target0 = document.getElementById("target0");
var btnComplete = document.getElementById("btnComplete");
+ var clickIsReceived = false;
// Check if touch-action attribute works properly for embedded divs
//
@@ -98,9 +102,21 @@
assert_not_equals(target0.scrollLeft, 0, "scroll x offset should not be 0 in the end of the test");
assert_equals(target0.scrollTop, 0, "scroll y offset should be 0 in the end of the test");
});
- test_touchaction.done();
+ clickIsReceived = true;
updateDescriptionComplete();
});
+
+ // Inject touch inputs.
+ touchScrollInTarget(scrollTarget, 'down').then(function() {
+ return touchScrollInTarget(scrollTarget, 'right');
+ }).then(function() {
+ return touchTapInTarget(btnComplete);
+ }).then(function() {
+ test_touchaction.step(function () {
+ assert_true(clickIsReceived, "click should be received before the test finishes");
+ }, "click should be received before the test finishes");
+ test_touchaction.done();
+ });
}
</script>
<h1>behaviour: pan-x</h1>
diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-y_touch-manual.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-y_touch.html
index d420cc56c77..592cfd6ae53 100644
--- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-y_touch-manual.html
+++ b/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-y_touch.html
@@ -7,6 +7,9 @@
<link rel="stylesheet" type="text/css" href="pointerevent_styles.css">
<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>
<script src="pointerevent_support.js"></script>
<style>
.scroller > div {
@@ -89,6 +92,7 @@
function run() {
var target0 = document.getElementById("target0");
var btnComplete = document.getElementById("btnComplete");
+ var clickIsReceived = false;
// Check if touch-action attribute works properly for embedded divs
// Scrollable-Parent, Child: `pan-x`, Grand-Child: `pan-y`
@@ -99,13 +103,25 @@
assert_equals(target0.scrollLeft, 0, "scroll x offset should be 0 in the end of the test");
assert_equals(target0.scrollTop, 0, "scroll y offset should be 0 in the end of the test");
});
- test_touchaction.done();
+ clickIsReceived = true;
updateDescriptionComplete();
});
on_event(target0, 'scroll', function(event) {
test_touchaction.step(failOnScroll, "scroll received while touch-action is none");
});
+
+ // Inject touch inputs.
+ touchScrollInTarget(scrollTarget, 'down').then(function() {
+ return touchScrollInTarget(scrollTarget, 'right');
+ }).then(function() {
+ return touchTapInTarget(btnComplete);
+ }).then(function() {
+ test_touchaction.step(function () {
+ assert_true(clickIsReceived, "click should be received before the test finishes");
+ }, "click should be received before the test finishes");
+ test_touchaction.done();
+ });
}
</script>
<h1>behaviour: none</h1>
diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-inherit_parent-none_touch-manual.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-inherit_parent-none_touch.html
index 5e674a14da5..45ea1432b4e 100644
--- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-inherit_parent-none_touch-manual.html
+++ b/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-inherit_parent-none_touch.html
@@ -7,6 +7,9 @@
<link rel="stylesheet" type="text/css" href="pointerevent_styles.css">
<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>
<script src="pointerevent_support.js"></script>
<style>
.scroller {
@@ -84,6 +87,7 @@
function run() {
var target0 = document.getElementById("target0");
var btnComplete = document.getElementById("btnComplete");
+ var clickIsReceived = false;
// Check if touch-action attribute works properly for embedded divs
//
@@ -94,13 +98,25 @@
assert_equals(target0.scrollLeft, 0, "scroll x offset should be 0 in the end of the test");
assert_equals(target0.scrollTop, 0, "scroll y offset should be 0 in the end of the test");
});
- test_touchaction.done();
+ clickIsReceived = true;
updateDescriptionComplete();
});
on_event(target0, 'scroll', function(event) {
test_touchaction.step(failOnScroll, "scroll received while touch-action is none");
});
+
+ // Inject touch inputs.
+ touchScrollInTarget(scrollTarget, 'down').then(function() {
+ return touchScrollInTarget(scrollTarget, 'right');
+ }).then(function() {
+ return touchTapInTarget(btnComplete);
+ }).then(function() {
+ test_touchaction.step(function () {
+ assert_true(clickIsReceived, "click should be received before the test finishes");
+ }, "click should be received before the test finishes");
+ test_touchaction.done();
+ });
}
</script>
<h1>behaviour: none</h1>
diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-none-css_touch-manual.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-none-css_touch.html
index dec694f3eca..cc9602442ac 100644
--- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-none-css_touch-manual.html
+++ b/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-none-css_touch.html
@@ -7,6 +7,9 @@
<link rel="stylesheet" type="text/css" href="pointerevent_styles.css">
<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>
<script src="pointerevent_support.js"></script>
<style>
#target0 {
@@ -84,6 +87,7 @@
function run() {
var target0 = document.getElementById("target0");
var btnComplete = document.getElementById("btnComplete");
+ var clickIsReceived = false;
// Check if "touch-action: none" attribute works properly
//TA: 15.2
@@ -93,13 +97,25 @@
assert_equals(target0.scrollLeft, 0, "scroll x offset should be 0 in the end of the test");
assert_equals(target0.scrollTop, 0, "scroll y offset should be 0 in the end of the test");
});
- test_touchaction.done();
+ clickIsReceived = true;
updateDescriptionComplete();
});
on_event(target0, 'scroll', function(event) {
test_touchaction.step(failOnScroll, "scroll received while touch-action is none");
});
+
+ // Inject touch inputs.
+ touchScrollInTarget(target0, 'down').then(function() {
+ return touchScrollInTarget(target0, 'right');
+ }).then(function() {
+ return touchTapInTarget(btnComplete);
+ }).then(function() {
+ test_touchaction.step(function () {
+ assert_true(clickIsReceived, "click should be received before the test finishes");
+ }, "click should be received before the test finishes");
+ test_touchaction.done();
+ });
}
</script>
<h1>touch-action: none</h1>
diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-pan-x-css_touch-manual.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-pan-x-css_touch.html
index e757baec6be..a91f1f55d10 100644
--- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-pan-x-css_touch-manual.html
+++ b/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-pan-x-css_touch.html
@@ -7,6 +7,9 @@
<link rel="stylesheet" type="text/css" href="pointerevent_styles.css">
<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>
<script src="pointerevent_support.js"></script>
<style>
#target0 {
@@ -83,6 +86,7 @@
function run() {
var target0 = document.getElementById("target0");
var btnComplete = document.getElementById("btnComplete");
+ var clickIsReceived = false;
// Check if "touch-action: pan-x" attribute works properly
//TA: 15.3
@@ -92,9 +96,21 @@
assert_not_equals(target0.scrollLeft, 0, "scroll x offset should not be 0 in the end of the test");
assert_equals(target0.scrollTop, 0, "scroll y offset should be 0 in the end of the test");
});
- test_touchaction.done();
+ clickIsReceived = true;
updateDescriptionComplete();
});
+
+ // Inject touch inputs.
+ touchScrollInTarget(target0, 'down').then(function() {
+ return touchScrollInTarget(target0, 'right');
+ }).then(function() {
+ return touchTapInTarget(btnComplete);
+ }).then(function() {
+ test_touchaction.step(function () {
+ assert_true(clickIsReceived, "click should be received before the test finishes");
+ }, "click should be received before the test finishes");
+ test_touchaction.done();
+ });
}
</script>
<h1>touch-action: pan-x</h1>
diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-pan-x-pan-y-pan-y_touch-manual.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-pan-x-pan-y-pan-y_touch.html
index e2a4386b27a..d056eb9b0e5 100644
--- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-pan-x-pan-y-pan-y_touch-manual.html
+++ b/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-pan-x-pan-y-pan-y_touch.html
@@ -7,6 +7,9 @@
<link rel="stylesheet" type="text/css" href="pointerevent_styles.css">
<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>
<script src="pointerevent_support.js"></script>
<style>
.scroller > div {
@@ -87,6 +90,7 @@
function run() {
var target0 = document.getElementById("target0");
var btnComplete = document.getElementById("btnComplete");
+ var clickIsReceived = false;
// Check if touch-action attribute works properly for embedded divs
//
@@ -97,9 +101,21 @@
assert_equals(target0.scrollLeft, 0, "scroll x offset should be 0 in the end of the test");
assert_not_equals(target0.scrollTop, 0, "scroll y offset should not be 0 in the end of the test");
});
- test_touchaction.done();
+ clickIsReceived = true;
updateDescriptionComplete();
});
+
+ // Inject touch inputs.
+ touchScrollInTarget(target0, 'down').then(function() {
+ return touchScrollInTarget(target0, 'right');
+ }).then(function() {
+ return touchTapInTarget(btnComplete);
+ }).then(function() {
+ test_touchaction.step(function () {
+ assert_true(clickIsReceived, "click should be received before the test finishes");
+ }, "click should be received before the test finishes");
+ test_touchaction.done();
+ });
}
</script>
<h1>behaviour: pan-y</h1>
diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-pan-y-css_touch-manual.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-pan-y-css_touch.html
index 44f89b8eb77..98168755a68 100644
--- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-pan-y-css_touch-manual.html
+++ b/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-pan-y-css_touch.html
@@ -8,6 +8,9 @@
<link rel="stylesheet" type="text/css" href="pointerevent_styles.css">
<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>
<script src="pointerevent_support.js"></script>
<style>
#target0 {
@@ -84,6 +87,7 @@
function run() {
var target0 = document.getElementById("target0");
var btnComplete = document.getElementById("btnComplete");
+ var clickIsReceived = false;
// Check if "touch-action: pan-y" attribute works properly
//TA: 15.4
@@ -93,9 +97,21 @@
assert_equals(target0.scrollLeft, 0, "scroll x offset should be 0 in the end of the test");
assert_not_equals(target0.scrollTop, 0, "scroll y offset should not be 0 in the end of the test");
});
- test_touchaction.done();
+ clickIsReceived = true;
updateDescriptionComplete();
});
+
+ // Inject touch inputs.
+ touchScrollInTarget(target0, 'down').then(function() {
+ return touchScrollInTarget(target0, 'right');
+ }).then(function() {
+ return touchTapInTarget(btnComplete);
+ }).then(function() {
+ test_touchaction.step(function () {
+ assert_true(clickIsReceived, "click should be received before the test finishes");
+ }, "click should be received before the test finishes");
+ test_touchaction.done();
+ });
}
</script>
<h1>touch-action: pan-y</h1>
diff --git a/tests/wpt/web-platform-tests/portals/portals-host-post-message.sub.html b/tests/wpt/web-platform-tests/portals/portals-host-post-message.sub.html
new file mode 100644
index 00000000000..a19715eb0af
--- /dev/null
+++ b/tests/wpt/web-platform-tests/portals/portals-host-post-message.sub.html
@@ -0,0 +1,180 @@
+<!DOCTYPE html>
+<title>Test postMessage on PortalHost</title>
+<meta name="timeout" content="long">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<body>
+ <script>
+ function createPortal(portalSrc) {
+ var portal = document.createElement("portal");
+ portal.src = portalSrc;
+ return new Promise((resolve, reject) => {
+ portal.onmessage = e => {
+ if (e.data == "loaded")
+ resolve(portal);
+ };
+ document.body.appendChild(portal);
+ });
+ }
+
+ async function createPortalAndLoopMessage(portalSrc, params) {
+ var portal = await createPortal(portalSrc);
+ var waitForResponse = new Promise((resolve, reject) => {
+ portal.addEventListener("message", e => { resolve(e); });
+ });
+ portal.postMessage(params, "*");
+ return waitForResponse;
+ }
+
+ const crossOriginUrl = "http://{{hosts[alt][www]}}:{{ports[http][0]}}/portals/resources/portal-host-post-message.sub.html";
+
+ promise_test(async () => {
+ var {data, origin} = await createPortalAndLoopMessage(
+ "resources/portal-host-post-message.sub.html", ["test", "*"]);
+ assert_equals(data, "test");
+ assert_equals(origin, "http://{{host}}:{{ports[http][0]}}");
+ }, "Message received after postMessage from portal host");
+
+ promise_test(async () => {
+ var {data, origin} = await createPortalAndLoopMessage(
+ crossOriginUrl, ["test", "*"]);
+ assert_equals(data, "test");
+ assert_equals(origin, "http://{{hosts[alt][www]}}:{{ports[http][0]}}");
+ }, "Message received after postMessage from portal host in cross-origin-portal");
+
+ promise_test(async () => {
+ var {data, origin} = await createPortalAndLoopMessage(
+ "resources/portal-host-post-message.sub.html", ["test"]);
+ assert_equals(data, "test");
+ assert_equals(origin, "http://{{host}}:{{ports[http][0]}}");
+ }, "Message received from same-origin portal host with no target origin specified");
+
+ promise_test(async () => {
+ var {data, origin} = await createPortalAndLoopMessage(
+ crossOriginUrl, ["test", "http://{{host}}:{{ports[http][0]}}"]);
+ assert_equals(data, "test");
+ }, "Message received from cross-origin portal host with target origin correctly specified");
+
+ promise_test(async () => {
+ var message = {
+ prop1: "value1",
+ prop2: 2.5,
+ prop3: [1, 2, "3"],
+ prop4: {
+ prop4_1: "value4_1"
+ }
+ };
+ var {data} = await createPortalAndLoopMessage(
+ "resources/portal-host-post-message.sub.html", [message]);
+ assert_object_equals(data, message);
+ var {data} = await createPortalAndLoopMessage(crossOriginUrl,
+ [message, "*"]);
+ assert_object_equals(data, message);
+ }, "postMessage with object message");
+
+ promise_test(async () => {
+ function checkPort(port) {
+ return new Promise((resolve, reject) => {
+ var channel = new MessageChannel();
+ channel.port1.onmessage = resolve;
+ port.postMessage("sending port", [channel.port2]);
+ });
+ }
+
+ var {ports} = await createPortalAndLoopMessage(
+ "resources/portal-host-post-message.sub.html",
+ {type: "message-port"});
+ await checkPort(ports[0]);
+
+ var {ports} = await createPortalAndLoopMessage(
+ crossOriginUrl,
+ {type: "message-port"});
+ await checkPort(ports[0]);
+ }, "postMessage with message ports");
+
+ promise_test(async () => {
+ var {data} = await createPortalAndLoopMessage(
+ "resources/portal-host-post-message.sub.html", {
+ type: "array-buffer-without-transfer",
+ array: [0, 1, 2, 3, 4]
+ });
+ assert_array_equals([0, 1, 2, 3, 4], new Int8Array(data.arrayBuffer));
+
+ var {data} = await createPortalAndLoopMessage(crossOriginUrl, {
+ type: "array-buffer-without-transfer",
+ array: [0, 1, 2, 3, 4]
+ });
+ assert_array_equals([0, 1, 2, 3, 4], new Int8Array(data.arrayBuffer));
+ }, "postMessage with array buffer without transfer");
+
+ promise_test(async () => {
+ var {data} = await createPortalAndLoopMessage(
+ "resources/portal-host-post-message.sub.html", {
+ type: "array-buffer-with-transfer",
+ array: [0, 1, 2, 3, 4]
+ });
+ assert_array_equals([0, 1, 2, 3, 4], new Int8Array(data.arrayBuffer));
+
+ var {data} = await createPortalAndLoopMessage(crossOriginUrl, {
+ type: "array-buffer-with-transfer",
+ array: [0, 1, 2, 3, 4]
+ });
+ assert_array_equals([0, 1, 2, 3, 4], new Int8Array(data.arrayBuffer));
+ }, "postMessage with array buffer with transfer");
+
+ promise_test(async () => {
+ var {data} = await createPortalAndLoopMessage(
+ "resources/portal-host-post-message.sub.html",
+ {type: "invalid-message"});
+ assert_equals(data.errorType, "DataCloneError");
+ }, "postMessage should throw error when serialization fails");
+
+ promise_test(async () => {
+ var {data} = await createPortalAndLoopMessage(
+ "resources/portal-host-post-message.sub.html",
+ {type: "invalid-port"});
+ assert_equals(data.errorType, "TypeError");
+ }, "postMessage with invalid transferable should throw error");
+
+ promise_test(async () => {
+ var receiveMessage = new Promise((resolve, reject) => {
+ var bc = new BroadcastChannel("portal-host-post-message-after-activate");
+ bc.onmessage = e => { resolve(e); };
+ });
+ const portalUrl = encodeURIComponent(
+ "portal-host-post-message-after-activate.html");
+ window.open(`resources/portal-embed-and-activate.html?url=${portalUrl}`);
+ var message = await receiveMessage;
+ assert_equals(message.data, "InvalidStateError");
+ }, "Calling postMessage after receiving onactivate event should fail");
+
+ promise_test(() => {
+ var portal = document.createElement("portal");
+ portal.src = "resources/portal-host-post-message-navigate-1.html";
+ var count = 0;
+ var waitForMessages = new Promise((resolve, reject) => {
+ portal.addEventListener("message", e => {
+ count++;
+ if (count == 2)
+ resolve();
+ });
+ });
+ document.body.appendChild(portal);
+ return waitForMessages;
+ }, "postMessage before and after portal navigation should work");
+
+ async_test(t => {
+ createPortalAndLoopMessage("resources/portal-host-post-message.sub.html",
+ ["test", "http://{{hosts[alt][www]}}:{{ports[http][0]}}"])
+ .then(t.step_func(() => { assert_unreached("message delivered"); }));
+ t.step_timeout(t.done, 2000);
+ }, "Message should not be received from portal host with target set to different origin");
+
+ async_test(t => {
+ createPortalAndLoopMessage(crossOriginUrl, ["test"]).then(t.step_func(() => {
+ assert_unreached("message delivered");
+ }));
+ t.step_timeout(t.done, 2000);
+ }, "Message should not be received cross origin-portal host with no target origin set");
+ </script>
+</body>
diff --git a/tests/wpt/web-platform-tests/portals/resources/portal-host-post-message-after-activate.html b/tests/wpt/web-platform-tests/portals/resources/portal-host-post-message-after-activate.html
new file mode 100644
index 00000000000..07db1a0d834
--- /dev/null
+++ b/tests/wpt/web-platform-tests/portals/resources/portal-host-post-message-after-activate.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<script>
+ var bc = new BroadcastChannel("portal");
+ bc.postMessage("loaded");
+ bc.close();
+
+ var ph = window.portalHost;
+
+ window.onportalactivate = e => {
+ var exception_name = ""
+ try {
+ ph.postMessage("message", "*");
+ }
+ catch (error) {
+ exception_name = error.name;
+ }
+ bc = new BroadcastChannel("portal-host-post-message-after-activate");
+ bc.postMessage(exception_name, "*");
+ bc.close();
+ };
+</script>
diff --git a/tests/wpt/web-platform-tests/portals/resources/portal-host-post-message-navigate-1.html b/tests/wpt/web-platform-tests/portals/resources/portal-host-post-message-navigate-1.html
new file mode 100644
index 00000000000..3b36eaed05e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/portals/resources/portal-host-post-message-navigate-1.html
@@ -0,0 +1,5 @@
+<!DOCTYPE html>
+<script>
+ window.portalHost.postMessage("loaded", "*");
+ window.location.href = "portal-host-post-message-navigate-2.html"
+</script>
diff --git a/tests/wpt/web-platform-tests/portals/resources/portal-host-post-message-navigate-2.html b/tests/wpt/web-platform-tests/portals/resources/portal-host-post-message-navigate-2.html
new file mode 100644
index 00000000000..163c42e655d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/portals/resources/portal-host-post-message-navigate-2.html
@@ -0,0 +1,4 @@
+<!DOCTYPE html>
+<script>
+ window.portalHost.postMessage("loaded", "*");
+</script>
diff --git a/tests/wpt/web-platform-tests/portals/resources/portal-host-post-message.sub.html b/tests/wpt/web-platform-tests/portals/resources/portal-host-post-message.sub.html
new file mode 100644
index 00000000000..06d42820a3a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/portals/resources/portal-host-post-message.sub.html
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+<script>
+ function postMessageWithMessagePorts() {
+ var channel = new MessageChannel();
+ channel.port1.onmessage = e => {
+ e.ports[0].postMessage("received");
+ }
+ window.portalHost.postMessage("sending port", "*", [channel.port2]);
+ }
+
+ function postMessageWithArrayBuffer(array, withTransfer) {
+ var arrayBuffer = new Int8Array(array).buffer;
+ if (withTransfer) {
+ window.portalHost.postMessage({arrayBuffer}, "*", [arrayBuffer]);
+ } else {
+ window.portalHost.postMessage({arrayBuffer}, "*");
+ }
+ }
+
+ function postMessageAndCatchException(...params) {
+ try {
+ window.portalHost.postMessage(...params);
+ } catch (e) {
+ window.portalHost.postMessage({errorType: e.name}, "*");
+ }
+ }
+
+ window.portalHost.postMessage("loaded", "*");
+ window.portalHost.addEventListener("message", e => {
+ if (e.data.type) {
+ var type = e.data.type;
+ switch (type) {
+ case "message-port":
+ postMessageWithMessagePorts();
+ return;
+ case "array-buffer-without-transfer":
+ postMessageWithArrayBuffer(e.data.array, false);
+ return;
+ case "array-buffer-with-transfer":
+ postMessageWithArrayBuffer(e.data.array, true);
+ return;
+ case "invalid-message":
+ postMessageAndCatchException(document.body, "*");
+ return;
+ case "invalid-port":
+ postMessageAndCatchException("", "*", [null]);
+ return;
+ }
+ }
+ window.portalHost.postMessage(...e.data);
+ });
+</script>
diff --git a/tests/wpt/web-platform-tests/portals/resources/portal-post-message-portal.html b/tests/wpt/web-platform-tests/portals/resources/portal-post-message-portal.html
index 539048c13f5..1dae5d1fb45 100644
--- a/tests/wpt/web-platform-tests/portals/resources/portal-post-message-portal.html
+++ b/tests/wpt/web-platform-tests/portals/resources/portal-post-message-portal.html
@@ -3,7 +3,7 @@
var bc = new BroadcastChannel("portals-post-message");
bc.postMessage("loaded");
bc.close();
- window.portalHost.addEventListener("message", e => {
+ window.portalHost.onmessage = e => {
var message = {
origin: e.origin,
data: e.data,
@@ -30,5 +30,5 @@
bc = new BroadcastChannel("portals-post-message");
bc.postMessage(message);
bc.close();
- });
+ };
</script>
diff --git a/tests/wpt/web-platform-tests/presentation-api/controlling-ua/getAvailability.https.html b/tests/wpt/web-platform-tests/presentation-api/controlling-ua/getAvailability.https.html
index b6d8736f51a..71b19e6a4eb 100644
--- a/tests/wpt/web-platform-tests/presentation-api/controlling-ua/getAvailability.https.html
+++ b/tests/wpt/web-platform-tests/presentation-api/controlling-ua/getAvailability.https.html
@@ -17,6 +17,10 @@
// Presentation Availability Tests - begin
// ---------------------------------------
+ const catchNotSupported = err => {
+ assert_equals(err.name, 'NotSupportedError', 'getAvailability() rejects a Promise with a NotSupportedError exception, if the browser can find presentation displays only when starting a connection.')
+ };
+
promise_test(t => {
let availability;
@@ -24,39 +28,27 @@
assert_true(request instanceof PresentationRequest, 'The request is an instance of PresentationRequest.');
const promise = request.getAvailability();
- assert_equals(promise, request.getAvailability(), 'If the PresentationRequest object has an unsettled Promise, getAvailability returns that Promise.');
-
- function catchNotSupported(err) {
- assert_equals(err.name, 'NotSupportedError', 'getAvailability() rejects a Promise with a NotSupportedError exception, if the browser can find presentation displays only when starting a connection.')
- }
+ assert_true(promise instanceof Promise, 'PresentationRequest.getAvailability() returns a Promise.');
+ const samePromise = request.getAvailability();
+ assert_true(samePromise instanceof Promise, 'PresentationRequest.getAvailabilty() returns a Promise.');
+ assert_equals(promise, samePromise, 'If the PresentationRequest object has an unsettled Promise, getAvailability returns that Promise.');
return promise.then(a => {
- availability = a;
-
- assert_true(availability instanceof PresentationAvailability, 'The promise is resolved with an instance of PresentationAvailability.');
- assert_equals(typeof availability.value, 'boolean', 'The availability has an boolean value.');
-
- // The value of the presentation availability object is set to false, when the object is newly created.
- const waitForChange = () => {
- const eventWatcher = new EventWatcher(t, availability, 'change');
- return eventWatcher.wait_for('change');
- };
-
- return (availability.value ? Promise.resolve() : waitForChange()).then(() => {
- assert_true(availability.value, 'The availability value is true when any presentation display is available.');
+ availability = a;
+ assert_true(availability instanceof PresentationAvailability, 'The promise is resolved with an instance of PresentationAvailability.');
+ assert_equals(typeof availability.value, 'boolean', 'The availability has an boolean value.');
- const request2 = new PresentationRequest('https://example.com');
- return request2.getAvailability();
- }).then(a => {
- assert_not_equals(availability, a, 'A presentation availability object is newly created if the presentation request has a newly added presentation URLs.');
+ const request2 = new PresentationRequest('https://example.com');
+ return request2.getAvailability();
+ }).then(a => {
+ assert_not_equals(availability, a, 'A presentation availability object is newly created if the presentation request has a newly added presentation URLs.');
- const newPromise = request.getAvailability();
- assert_not_equals(promise, newPromise, 'If the Promise from a previous call to getAvailability has already been settled, getAvailability returns a new Promise.');
+ const newPromise = request.getAvailability();
+ assert_not_equals(promise, newPromise, 'If the Promise from a previous call to getAvailability has already been settled, getAvailability returns a new Promise.');
- return newPromise.then(newAvailability => {
- assert_equals(availability, newAvailability, 'Promises from a PresentationRequest\'s getAvailability are resolved with the same PresentationAvailability object.');
- }, catchNotSupported);
- }, catchNotSupported);
+ return newPromise.then(newAvailability => {
+ assert_equals(availability, newAvailability, 'Promises from a PresentationRequest\'s getAvailability are resolved with the same PresentationAvailability object.');
+ }, catchNotSupported);
}, catchNotSupported);
});
</script>
diff --git a/tests/wpt/web-platform-tests/tools/gitignore/gitignore.py b/tests/wpt/web-platform-tests/tools/gitignore/gitignore.py
index 9b661308ab1..901a1f418ba 100644
--- a/tests/wpt/web-platform-tests/tools/gitignore/gitignore.py
+++ b/tests/wpt/web-platform-tests/tools/gitignore/gitignore.py
@@ -216,7 +216,8 @@ class PathFilter(object):
for rule_dir in [None, dirpath]:
if name in literals.get(rule_dir, empty):
exclude = literals[rule_dir][name]
- if not any(rule.match(path) for rule in exclude):
+ if not any(rule.match(name if name_only else path)
+ for name_only, rule in exclude):
# Skip this item
self.cache[path] = True
break
diff --git a/tests/wpt/web-platform-tests/tools/gitignore/tests/test_gitignore.py b/tests/wpt/web-platform-tests/tools/gitignore/tests/test_gitignore.py
index 2a310046ffb..c5a5504aa26 100644
--- a/tests/wpt/web-platform-tests/tools/gitignore/tests/test_gitignore.py
+++ b/tests/wpt/web-platform-tests/tools/gitignore/tests/test_gitignore.py
@@ -51,6 +51,9 @@ filter_data = [
(["#foo", "", "a*", "!a.py"],
[("", ["foo"], ["a", "a.foo", "a.py"])],
[(["foo"], ["a.py"])]),
+ (["a.foo", "!a.py"],
+ [("", ["foo"], ["a", "a.foo", "a.py"])],
+ [(["foo"], ["a", "a.py"])]),
]
diff --git a/tests/wpt/web-platform-tests/tools/lint/rules.py b/tests/wpt/web-platform-tests/tools/lint/rules.py
index 76d5d3e9926..94aff6430ed 100644
--- a/tests/wpt/web-platform-tests/tools/lint/rules.py
+++ b/tests/wpt/web-platform-tests/tools/lint/rules.py
@@ -327,10 +327,10 @@ class PrintRegexp(Regexp):
description = "Print function used"
class LayoutTestsRegexp(Regexp):
- pattern = br"eventSender|testRunner|window\.internals"
+ pattern = br"(eventSender|testRunner|internals)\."
name = "LAYOUTTESTS APIS"
file_extensions = [".html", ".htm", ".js", ".xht", ".xhtml", ".svg"]
- description = "eventSender/testRunner/window.internals used; these are LayoutTests-specific APIs (WebKit/Blink)"
+ description = "eventSender/testRunner/internals used; these are LayoutTests-specific APIs (WebKit/Blink)"
class SpecialPowersRegexp(Regexp):
pattern = b"SpecialPowers"
diff --git a/tests/wpt/web-platform-tests/tools/lint/tests/test_file_lints.py b/tests/wpt/web-platform-tests/tools/lint/tests/test_file_lints.py
index ddf03986e10..31456ae8bbc 100644
--- a/tests/wpt/web-platform-tests/tools/lint/tests/test_file_lints.py
+++ b/tests/wpt/web-platform-tests/tools/lint/tests/test_file_lints.py
@@ -168,7 +168,7 @@ def test_eventSender():
assert errors == [("PARSE-FAILED", "Unable to parse file", filename, 1)]
else:
assert errors == [('LAYOUTTESTS APIS',
- 'eventSender/testRunner/window.internals used; these are LayoutTests-specific APIs (WebKit/Blink)',
+ 'eventSender/testRunner/internals used; these are LayoutTests-specific APIs (WebKit/Blink)',
filename,
1)]
@@ -183,12 +183,12 @@ def test_testRunner():
assert errors == [("PARSE-FAILED", "Unable to parse file", filename, 1)]
else:
assert errors == [('LAYOUTTESTS APIS',
- 'eventSender/testRunner/window.internals used; these are LayoutTests-specific APIs (WebKit/Blink)',
+ 'eventSender/testRunner/internals used; these are LayoutTests-specific APIs (WebKit/Blink)',
filename,
1)]
-def test_windowDotInternals():
+def test_internals():
error_map = check_with_files(b"<script>if (window.internals) { internals.doAThing(); }</script>")
for (filename, (errors, kind)) in error_map.items():
@@ -198,7 +198,7 @@ def test_windowDotInternals():
assert errors == [("PARSE-FAILED", "Unable to parse file", filename, 1)]
else:
assert errors == [('LAYOUTTESTS APIS',
- 'eventSender/testRunner/window.internals used; these are LayoutTests-specific APIs (WebKit/Blink)',
+ 'eventSender/testRunner/internals used; these are LayoutTests-specific APIs (WebKit/Blink)',
filename,
1)]
diff --git a/tests/wpt/web-platform-tests/tools/manifest/manifest.py b/tests/wpt/web-platform-tests/tools/manifest/manifest.py
index 5dde9374642..b5210400168 100644
--- a/tests/wpt/web-platform-tests/tools/manifest/manifest.py
+++ b/tests/wpt/web-platform-tests/tools/manifest/manifest.py
@@ -483,17 +483,17 @@ def load_and_update(tests_root,
allow_cached=allow_cached)
except ManifestVersionMismatch:
logger.info("Manifest version changed, rebuilding")
- rebuild = True
if manifest is not None and manifest.url_base != url_base:
logger.info("Manifest url base did not match, rebuilding")
- rebuild = True
+ manifest = None
if manifest is None:
manifest = Manifest(tests_root, url_base)
+ rebuild = True
update = True
- if update:
+ if rebuild or update:
tree = vcs.get_tree(tests_root, manifest, manifest_path, cache_root,
working_copy, rebuild)
changed = manifest.update(tree)
diff --git a/tests/wpt/web-platform-tests/tools/runner/index.html b/tests/wpt/web-platform-tests/tools/runner/index.html
index 2d7d25297ca..57940d02d0c 100644
--- a/tests/wpt/web-platform-tests/tools/runner/index.html
+++ b/tests/wpt/web-platform-tests/tools/runner/index.html
@@ -23,8 +23,16 @@
<div class="alert alert-warning">
This runner does not fully support all test types and has a number of
<a href="https://github.com/web-platform-tests/wpt/labels/runner">known issues</a>.
+ <span id="runner-contact-info"></span>
<code>./wpt run</code> is a more well-supported runner, see the documentation on
<a href="https://web-platform-tests.org/running-tests/">running tests</a>.
+ <script>
+ if (location.host == "w3c-test.org") {
+ document.getElementById("runner-contact-info")
+ .innerHTML = ' If this runner isn’t working, contact'
+ + ' <a href="mailto:mike@w3.org">mike@w3.org</a>. '
+ }
+ </script>
</div>
<div id="testControl" class="panel panel-default">
diff --git a/tests/wpt/web-platform-tests/user-timing/clearMarks.html b/tests/wpt/web-platform-tests/user-timing/clearMarks.html
index 22d67262c3d..92c60a3bbb8 100644
--- a/tests/wpt/web-platform-tests/user-timing/clearMarks.html
+++ b/tests/wpt/web-platform-tests/user-timing/clearMarks.html
@@ -17,7 +17,9 @@ function onload_test()
{
const entrylist_checker = new performance_entrylist_checker('mark');
const string_mark_names = mark_names.map(function (x) { return String(x)});
- mark_names.forEach(performance.mark, performance);
+ mark_names.forEach(function(name) {
+ performance.mark(name);
+ });
for (let i = 0; i < mark_names.length; ++i)
{
@@ -30,13 +32,19 @@ function onload_test()
'First loop: marks that we cleared for "' + mark_names[i] + '" should not exist anymore.');
}
- mark_names.forEach(performance.mark, performance);
+ mark_names.forEach(function(name) {
+ performance.mark(name);
+ });
performance.clearMarks();
test_equals(performance.getEntriesByType('mark').length, 0, 'No marks should exist after we clear all.');
// Following cases test clear existed mark name that is tied for two times.
- mark_names.forEach(performance.mark, performance);
- mark_names.forEach(performance.mark, performance);
+ mark_names.forEach(function(name) {
+ performance.mark(name);
+ });
+ mark_names.forEach(function(name) {
+ performance.mark(name);
+ });
for (let i = 0; i < mark_names.length; ++i)
{
@@ -50,8 +58,12 @@ function onload_test()
}
// Following cases test clear functionality when mark names are tied for two times.
- mark_names.forEach(performance.mark, performance);
- mark_names.forEach(performance.mark, performance);
+ mark_names.forEach(function(name) {
+ performance.mark(name);
+ });
+ mark_names.forEach(function(name) {
+ performance.mark(name);
+ });
var entry_number_before_useless_clear = performance.getEntriesByType('Mark').length;
performance.clearMarks('NonExist');
var entry_number_after_useless_clear = performance.getEntriesByType('Mark').length;
diff --git a/tests/wpt/web-platform-tests/user-timing/clearMeasures.html b/tests/wpt/web-platform-tests/user-timing/clearMeasures.html
index 488bece3733..54d41005698 100644
--- a/tests/wpt/web-platform-tests/user-timing/clearMeasures.html
+++ b/tests/wpt/web-platform-tests/user-timing/clearMeasures.html
@@ -19,7 +19,9 @@ function onload_test()
const entrylist_checker = new performance_entrylist_checker('measure');
const measure_names = measures.map(function(x) {return x[0];});
- mark_names.forEach(context.mark, context);
+ mark_names.forEach(function(name) {
+ context.mark(name);
+ });
measures.forEach(context.initialMeasures, context);
for (let i = 0; i < measures.length; ++i)
{
@@ -38,7 +40,9 @@ function onload_test()
// Following cases test clear existed measure name that is tied twice.
measures.forEach(context.initialMeasures, context);
- mark_names.forEach(context.mark, context);
+ mark_names.forEach(function(name) {
+ context.mark(name);
+ });
measures.forEach(context.initialMeasures, context);
for (let i = 0; i < measures.length; ++i)
{
diff --git a/tests/wpt/web-platform-tests/user-timing/clear_all_measures.any.js b/tests/wpt/web-platform-tests/user-timing/clear_all_measures.any.js
index 5fd2a29a8c0..32c993f2827 100644
--- a/tests/wpt/web-platform-tests/user-timing/clear_all_measures.any.js
+++ b/tests/wpt/web-platform-tests/user-timing/clear_all_measures.any.js
@@ -1,8 +1,8 @@
test(function()
{
- self.performance.mark("mark1", "responseStart");
+ self.performance.mark("mark1");
self.performance.measure("measure1", "mark1");
- self.performance.mark("mark2", "responseStart");
+ self.performance.mark("mark2");
self.performance.measure("measure2", "mark2");
// test that two measures have been created
diff --git a/tests/wpt/web-platform-tests/user-timing/clear_non_existent_measure.any.js b/tests/wpt/web-platform-tests/user-timing/clear_non_existent_measure.any.js
index 5e2c7ed1d64..9de0b5f266d 100644
--- a/tests/wpt/web-platform-tests/user-timing/clear_non_existent_measure.any.js
+++ b/tests/wpt/web-platform-tests/user-timing/clear_non_existent_measure.any.js
@@ -1,8 +1,8 @@
test(function()
{
- self.performance.mark("mark1", "responseStart");
+ self.performance.mark("mark1");
self.performance.measure("measure1", "mark1");
- self.performance.mark("mark2", "responseStart");
+ self.performance.mark("mark2");
self.performance.measure("measure2", "mark2");
// test that two measures have been created
diff --git a/tests/wpt/web-platform-tests/user-timing/clear_one_measure.any.js b/tests/wpt/web-platform-tests/user-timing/clear_one_measure.any.js
index a4db264d188..a5e663772c8 100644
--- a/tests/wpt/web-platform-tests/user-timing/clear_one_measure.any.js
+++ b/tests/wpt/web-platform-tests/user-timing/clear_one_measure.any.js
@@ -1,8 +1,8 @@
test(function()
{
- self.performance.mark("mark1", "responseStart");
+ self.performance.mark("mark1");
self.performance.measure("measure1", "mark1");
- self.performance.mark("mark2", "responseStart");
+ self.performance.mark("mark2");
self.performance.measure("measure2", "mark2");
// test that two measures have been created
diff --git a/tests/wpt/web-platform-tests/user-timing/mark-l3.html b/tests/wpt/web-platform-tests/user-timing/mark-l3.html
index 429768d5557..bb4b22510c7 100644
--- a/tests/wpt/web-platform-tests/user-timing/mark-l3.html
+++ b/tests/wpt/web-platform-tests/user-timing/mark-l3.html
@@ -3,7 +3,7 @@
<title>User Timing L3: mark</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
-<script src="resources/user-timing-helpers.js"></script>
+<script src="resources/user-timing-helper.js"></script>
<script>
async_test(function (t) {
let mark_entries = [];
diff --git a/tests/wpt/web-platform-tests/user-timing/mark.html b/tests/wpt/web-platform-tests/user-timing/mark.html
index a7074f1efdb..e03e9e6247a 100644
--- a/tests/wpt/web-platform-tests/user-timing/mark.html
+++ b/tests/wpt/web-platform-tests/user-timing/mark.html
@@ -19,7 +19,9 @@ function onload_test()
const string_mark_names = mark_names.map(function (x) { return String(x)});
test_equals(performance.getEntriesByType("mark").length, 0, 'There should be ' + 0 + ' marks');
- mark_names.forEach(performance.mark, performance);
+ mark_names.forEach(function(name) {
+ performance.mark(name);
+ });
let mark_entrylist = performance.getEntriesByType('mark');
entrylist_checker.entrylist_check(mark_entrylist, mark_names.length, string_mark_names, 'Checking all entries.');
@@ -31,7 +33,9 @@ function onload_test()
'First loop: checking entry of name "' + mark_entrylist[i].name + '".');
}
- mark_names.forEach(performance.mark, performance);
+ mark_names.forEach(function(name) {
+ performance.mark(name);
+ });
mark_entrylist = performance.getEntriesByType('mark');
entrylist_checker.entrylist_check(mark_entrylist, mark_names.length * 2, string_mark_names, 'Checking all doubly marked entries.');
diff --git a/tests/wpt/web-platform-tests/user-timing/measure-exceptions.html b/tests/wpt/web-platform-tests/user-timing/measure-exceptions.html
new file mode 100644
index 00000000000..0c532e79390
--- /dev/null
+++ b/tests/wpt/web-platform-tests/user-timing/measure-exceptions.html
@@ -0,0 +1,49 @@
+<!DOCTYPE html>
+<html>
+<head>
+ This tests that 'performance.measure' throws exceptions with reasonable messages.
+</head>
+<body>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+ window.performance.clearMarks();
+ window.performance.clearMeasures();
+
+ window.performance.mark('mark');
+
+ const eventMarks = [
+ 'unloadEventStart',
+ 'unloadEventEnd',
+ 'redirectStart',
+ 'redirectEnd',
+ 'secureConnectionStart',
+ 'domInteractive',
+ 'domContentLoadedEventStart',
+ 'domContentLoadedEventEnd',
+ 'domComplete',
+ 'loadEventStart',
+ 'loadEventEnd',
+ ];
+ eventMarks.forEach(function(name) {
+ test(()=>{
+ assert_throws("InvalidAccessError", ()=>{
+ window.performance.measure("measuring", name, "mark");
+ }, "Should throw");
+ }, `Passing '${name}' as a mark to measure API should cause error when the mark is empty.`);
+ });
+
+ const args = [
+ 51.15, // Verify that number is parsed as string, not number.
+ "DoesNotExist", // Non-existant mark name should cause error.
+ ];
+ args.forEach(each => {
+ test(()=>{
+ assert_throws("SyntaxError", ()=>{
+ window.performance.measure("measuring", each, "mark");
+ }, "Should throw");
+ }, `Passing ${each} as a mark to measure API should cause error.`);
+ });
+</script>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/user-timing/measure-with-dict.html b/tests/wpt/web-platform-tests/user-timing/measure-with-dict.html
index 83990a6c333..47a4f3f520a 100644
--- a/tests/wpt/web-platform-tests/user-timing/measure-with-dict.html
+++ b/tests/wpt/web-platform-tests/user-timing/measure-with-dict.html
@@ -3,7 +3,7 @@
<title>User Timing L3: measure is customizable</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
-<script src="resources/user-timing-helpers.js"></script>
+<script src="resources/user-timing-helper.js"></script>
<script>
async_test(function (t) {
let measureEntries = [];
diff --git a/tests/wpt/web-platform-tests/user-timing/measure_associated_with_navigation_timing.html b/tests/wpt/web-platform-tests/user-timing/measure_associated_with_navigation_timing.html
index 9fd4664b9e9..702e3d5f87f 100644
--- a/tests/wpt/web-platform-tests/user-timing/measure_associated_with_navigation_timing.html
+++ b/tests/wpt/web-platform-tests/user-timing/measure_associated_with_navigation_timing.html
@@ -25,7 +25,9 @@ function onload_test()
];
const context = new PerformanceContext(window.performance);
- mark_names.forEach(context.mark, context);
+ mark_names.forEach(function(name) {
+ context.mark(name);
+ });
measures_for_timing_order.forEach(context.initialMeasures, context);
test_greater_than(context.getEntriesByName('nav2now', 'measure')[0].duration, 0, 'Measure of navigationStart to now should be positive value.');
test_greater_than(context.getEntriesByName('loadTime', 'measure')[0].duration, 0, 'Measure of navigationStart to loadEventEnd should be positive value.');
@@ -33,7 +35,9 @@ function onload_test()
test_equals(context.getEntriesByName('loadTime', 'measure')[0].duration + context.getEntriesByName('loadEventEnd2a', 'measure')[0].duration, context.getEntriesByName('nav2a', 'measure')[0].duration, 'loadTime plus loadEventEnd to a mark "a" should equal to navigationStart to "a".');
// Following cases test for scenarios that measure names are tied twice.
- mark_names.forEach(context.mark, context);
+ mark_names.forEach(function(name) {
+ context.mark(name);
+ });
measures_for_timing_order.forEach(context.initialMeasures, context);
test_greater_than(context.getEntriesByName('nav2now', 'measure')[1].duration, context.getEntriesByName('nav2now', 'measure')[0].duration, 'Second measure of current mark to navigationStart should be negative value.');
diff --git a/tests/wpt/web-platform-tests/user-timing/measures.html b/tests/wpt/web-platform-tests/user-timing/measures.html
index d0ab11e39ae..0de68965ddb 100644
--- a/tests/wpt/web-platform-tests/user-timing/measures.html
+++ b/tests/wpt/web-platform-tests/user-timing/measures.html
@@ -21,7 +21,9 @@ function onload_test()
test_equals(context.getEntriesByType('measure').length, 0, 'There should be ' + 0 + ' entries returned.');
- mark_names.forEach(context.mark, context);
+ mark_names.forEach(function(name) {
+ context.mark(name);
+ });
measures.forEach(context.initialMeasures, context);
let measure_entrylist = context.getEntriesByType('measure');
@@ -36,7 +38,9 @@ function onload_test()
}
// Following cases test for scenarios that measure names are tied for two times
- mark_names.forEach(context.mark, context);
+ mark_names.forEach(function(name) {
+ context.mark(name);
+ });
measures.forEach(context.initialMeasures, context);
measure_entrylist = context.getEntriesByType('measure');
diff --git a/tests/wpt/web-platform-tests/web-share/META.yml b/tests/wpt/web-platform-tests/web-share/META.yml
index 1197ab9f237..e054ccc8ec3 100644
--- a/tests/wpt/web-platform-tests/web-share/META.yml
+++ b/tests/wpt/web-platform-tests/web-share/META.yml
@@ -1,4 +1,5 @@
spec: https://wicg.github.io/web-share/
suggested_reviewers:
+ - ewilligers
- mgiuca
- marcoscaceres
diff --git a/tests/wpt/web-platform-tests/web-share/resources/manual-helper.js b/tests/wpt/web-platform-tests/web-share/resources/manual-helper.js
index 2c38eab34ee..e2ca229f4f9 100644
--- a/tests/wpt/web-platform-tests/web-share/resources/manual-helper.js
+++ b/tests/wpt/web-platform-tests/web-share/resources/manual-helper.js
@@ -28,7 +28,7 @@ function setupManualShareTestCommon() {
// Sets up the page for running manual tests. Automatically creates the
// instructions (based on the parameters) and the share button.
function setupManualShareTest(expected_share_data) {
- const {title, text, url} = expected_share_data;
+ const {title, text, url, files} = expected_share_data;
let [instruction, list] = setupManualShareTestCommon();
let item = document.createElement('li');
list.appendChild(item);
@@ -50,6 +50,27 @@ function setupManualShareTest(expected_share_data) {
item = document.createElement('li');
list.appendChild(item);
item.innerText = `url = "${url}"`;
+ if (files) {
+ item = document.createElement('li');
+ list.appendChild(item);
+ item.innerText = `files = ${files.length} file(s)`;
+ for (let file of files) {
+ const div = document.createElement('div');
+ if (file.type.startsWith('text/')) {
+ const reader = new FileReader();
+ reader.onload = () => {
+ div.textContent = reader.result;
+ };
+ reader.readAsText(file);
+ } else if (file.type.startsWith('image/')) {
+ const image = document.createElement('img');
+ image.src = URL.createObjectURL(file);
+ image.alt = file.name;
+ div.appendChild(image);
+ }
+ item.appendChild(div);
+ }
+ }
}
function setupManualShareTestRequiringCancellation() {
diff --git a/tests/wpt/web-platform-tests/web-share/share-files-manual.html b/tests/wpt/web-platform-tests/web-share/share-files-manual.html
new file mode 100644
index 00000000000..c3941bb4065
--- /dev/null
+++ b/tests/wpt/web-platform-tests/web-share/share-files-manual.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>WebShare Test: Share multiple files</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="resources/manual-helper.js"></script>
+ </head>
+ <body>
+ <script>
+ setup({explicit_timeout: true});
+
+ const options = {type: 'text/plain'};
+ const first = new File(['one'], 'first.txt', options);
+ const second = new File(['two'], 'second.txt', options);
+ const third = new File(['three'], 'third.txt', options);
+ const fourth = new File(['four'], 'fourth.txt', options);
+ const fifth = new File(['five'], 'fifth.txt', options);
+ const data = {
+ title: 'Counting to 5',
+ text: 'Here are the numbers',
+ url: 'https://example.com/',
+ files: [first, second, third, fourth, fifth]
+ };
+ setupManualShareTest(data);
+ callWhenButtonClicked(() => navigator.share(data));
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/web-share/share-image-manual.html b/tests/wpt/web-platform-tests/web-share/share-image-manual.html
new file mode 100644
index 00000000000..48ea4c378c1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/web-share/share-image-manual.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>WebShare Test: Share single image file</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="resources/manual-helper.js"></script>
+ </head>
+ <body>
+ <script>
+ setup({explicit_timeout: true});
+
+ const fileBits = [
+ '<svg xmlns="http://www.w3.org/2000/svg" width="80px" height="80px">',
+ '<circle cx="40" cy="40" r="28" fill="lime" />',
+ '</svg>'
+ ];
+ const fileName = 'circle.svg';
+ const options = {type: 'image/svg+xml'};
+ const file = new File(fileBits, fileName, options);
+ setupManualShareTest({title: '', text: '', url: '', files: [file]});
+ callWhenButtonClicked(() => navigator.share({files: [file]}));
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/webrtc/protocol/ice-state.https.html b/tests/wpt/web-platform-tests/webrtc/protocol/ice-state.https.html
new file mode 100644
index 00000000000..99d2a25eede
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webrtc/protocol/ice-state.https.html
@@ -0,0 +1,130 @@
+<!doctype html>
+<meta charset=utf-8>
+<meta name="timeout" content="long">
+<title>RTCPeerConnection Failed State</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="../RTCPeerConnection-helper.js"></script>
+<script>
+'use strict';
+
+// Tests for correct behavior of ICE state.
+
+// SDP copied from JSEP Example 7.1
+// It contains two media streams with different ufrags, and bundle
+// turned on.
+const kSdp = `v=0
+o=- 4962303333179871722 1 IN IP4 0.0.0.0
+s=-
+t=0 0
+a=ice-options:trickle
+a=group:BUNDLE a1 v1
+a=group:LS a1 v1
+m=audio 10100 UDP/TLS/RTP/SAVPF 96 0 8 97 98
+c=IN IP4 203.0.113.100
+a=mid:a1
+a=sendrecv
+a=rtpmap:96 opus/48000/2
+a=rtpmap:0 PCMU/8000
+a=rtpmap:8 PCMA/8000
+a=rtpmap:97 telephone-event/8000
+a=rtpmap:98 telephone-event/48000
+a=maxptime:120
+a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
+a=extmap:2 urn:ietf:params:rtp-hdrext:ssrc-audio-level
+a=msid:47017fee-b6c1-4162-929c-a25110252400 f83006c5-a0ff-4e0a-9ed9-d3e6747be7d9
+a=ice-ufrag:ETEn
+a=ice-pwd:OtSK0WpNtpUjkY4+86js7ZQl
+a=fingerprint:sha-256 19:E2:1C:3B:4B:9F:81:E6:B8:5C:F4:A5:A8:D8:73:04:BB:05:2F:70:9F:04:A9:0E:05:E9:26:33:E8:70:88:A2
+a=setup:actpass
+a=dtls-id:1
+a=rtcp:10101 IN IP4 203.0.113.100
+a=rtcp-mux
+a=rtcp-rsize
+m=video 10102 UDP/TLS/RTP/SAVPF 100 101
+c=IN IP4 203.0.113.100
+a=mid:v1
+a=sendrecv
+a=rtpmap:100 VP8/90000
+a=rtpmap:101 rtx/90000
+a=fmtp:101 apt=100
+a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
+a=rtcp-fb:100 ccm fir
+a=rtcp-fb:100 nack
+a=rtcp-fb:100 nack pli
+a=msid:47017fee-b6c1-4162-929c-a25110252400 f30bdb4a-5db8-49b5-bcdc-e0c9a23172e0
+a=ice-ufrag:BGKk
+a=ice-pwd:mqyWsAjvtKwTGnvhPztQ9mIf
+a=fingerprint:sha-256 19:E2:1C:3B:4B:9F:81:E6:B8:5C:F4:A5:A8:D8:73:04:BB:05:2F:70:9F:04:A9:0E:05:E9:26:33:E8:70:88:A2
+a=setup:actpass
+a=dtls-id:1
+a=rtcp:10103 IN IP4 203.0.113.100
+a=rtcp-mux
+a=rtcp-rsize
+`;
+
+// Returns a promise that resolves when |pc.iceConnectionState| is in one of the
+// wanted states, and rejects if it is in one of the unwanted states.
+// This is a variant of the function in RTCPeerConnection-helper.js.
+function waitForIceStateChange(pc, wantedStates, unwantedStates=[]) {
+ return new Promise((resolve, reject) => {
+ if (wantedStates.includes(pc.iceConnectionState)) {
+ resolve();
+ return;
+ } else if (unwantedStates.includes(pc.iceConnectionState)) {
+ reject('Unexpected state encountered: ' + pc.iceConnectionState);
+ return;
+ }
+ pc.addEventListener('iceconnectionstatechange', () => {
+ if (wantedStates.includes(pc.iceConnectionState)) {
+ resolve();
+ } else if (unwantedStates.includes(pc.iceConnectionState)) {
+ reject('Unexpected state encountered: ' + pc.iceConnectionState);
+ }
+ });
+ });
+}
+
+promise_test(async t => {
+ const pc1 = new RTCPeerConnection();
+ const pc2 = new RTCPeerConnection();
+ t.add_cleanup(() => pc1.close());
+ t.add_cleanup(() => pc2.close());
+ let [track, streams] = await getTrackFromUserMedia('video');
+ const sender = pc1.addTrack(track);
+ exchangeIceCandidates(pc1, pc2);
+ await doSignalingHandshake(pc1, pc2);
+ await waitForIceStateChange(pc1, ['connected']);
+}, 'PC should enter connected state when candidates are sent');
+
+promise_test(async t => {
+ const pc1 = new RTCPeerConnection();
+ t.add_cleanup(() => pc1.close());
+ let [track, streams] = await getTrackFromUserMedia('video');
+ const sender = pc1.addTrack(track);
+ const offer = await pc1.createOffer();
+ assert_greater_than_equal(offer.sdp.search('a=ice-options:trickle'), 0);
+}, 'PC should generate offer with a=ice-options:trickle');
+
+promise_test(async t => {
+ const pc1 = new RTCPeerConnection();
+ t.add_cleanup(() => pc1.close());
+ await pc1.setRemoteDescription({type: 'offer', sdp: kSdp});
+ const answer = await pc1.createAnswer();
+ await pc1.setLocalDescription(answer);
+ assert_greater_than_equal(answer.sdp.search('a=ice-options:trickle'), 0);
+ // When we use trickle ICE, and don't signal end-of-caniddates, we
+ // expect failure to result in 'disconnected' state rather than 'failed'.
+ const stateWaiter = waitForIceStateChange(pc1, ['disconnected'],
+ ['failed']);
+ // Add a bogus candidate. The candidate is drawn from the
+ // IANA "test-net-3" pool (RFC5737), so is guaranteed not to respond.
+ const candidateStr1 =
+ 'candidate:1 1 udp 2113929471 203.0.113.100 10100 typ host';
+ await pc1.addIceCandidate({candidate: candidateStr1,
+ sdpMid: 'a1',
+ usernameFragment: 'ETEn'});
+ await stateWaiter;
+}, 'PC should enter disconnected state when a failing candidate is sent');
+
+</script>
diff --git a/tests/wpt/web-platform-tests/webvtt/rendering/cues-with-video/processing-model/align_end-ref.html b/tests/wpt/web-platform-tests/webvtt/rendering/cues-with-video/processing-model/align_end-ref.html
index 247e6e24bf3..e16f4afa0aa 100644
--- a/tests/wpt/web-platform-tests/webvtt/rendering/cues-with-video/processing-model/align_end-ref.html
+++ b/tests/wpt/web-platform-tests/webvtt/rendering/cues-with-video/processing-model/align_end-ref.html
@@ -15,7 +15,6 @@ body { margin:0 }
bottom: 0;
left: 0;
right: 0;
- width: 50%;
text-align: right;
}
.cue > span {
diff --git a/tests/wpt/web-platform-tests/webvtt/rendering/cues-with-video/processing-model/align_end_wrapped-ref.html b/tests/wpt/web-platform-tests/webvtt/rendering/cues-with-video/processing-model/align_end_wrapped-ref.html
index f26b3a0761f..ad69c500916 100644
--- a/tests/wpt/web-platform-tests/webvtt/rendering/cues-with-video/processing-model/align_end_wrapped-ref.html
+++ b/tests/wpt/web-platform-tests/webvtt/rendering/cues-with-video/processing-model/align_end_wrapped-ref.html
@@ -15,7 +15,6 @@ body { margin:0 }
bottom: 0;
left: 0;
right: 0;
- width: 50%;
text-align: right
}
.cue > span {
diff --git a/tests/wpt/web-platform-tests/webvtt/rendering/cues-with-video/processing-model/align_start-ref.html b/tests/wpt/web-platform-tests/webvtt/rendering/cues-with-video/processing-model/align_start-ref.html
index 15f24fb74b9..6c1120ca11d 100644
--- a/tests/wpt/web-platform-tests/webvtt/rendering/cues-with-video/processing-model/align_start-ref.html
+++ b/tests/wpt/web-platform-tests/webvtt/rendering/cues-with-video/processing-model/align_start-ref.html
@@ -13,8 +13,9 @@ body { margin:0 }
.cue {
position: absolute;
bottom: 0;
- left: 50%;
+ left: 0;
right: 0;
+ text-align: left;
}
.cue > span {
font-family: Ahem, sans-serif;
diff --git a/tests/wpt/web-platform-tests/webvtt/rendering/cues-with-video/processing-model/align_start_wrapped-ref.html b/tests/wpt/web-platform-tests/webvtt/rendering/cues-with-video/processing-model/align_start_wrapped-ref.html
index 6f5b6335235..866ddb153bc 100644
--- a/tests/wpt/web-platform-tests/webvtt/rendering/cues-with-video/processing-model/align_start_wrapped-ref.html
+++ b/tests/wpt/web-platform-tests/webvtt/rendering/cues-with-video/processing-model/align_start_wrapped-ref.html
@@ -13,8 +13,9 @@ body { margin:0 }
.cue {
position: absolute;
bottom: 0;
- left: 50%;
+ left: 0;
right: 0;
+ text-align: left;
}
.cue > span {
font-family: Ahem, sans-serif;
diff --git a/tests/wpt/web-platform-tests/webxr/xrSession_mode.https.html b/tests/wpt/web-platform-tests/webxr/xrSession_mode.https.html
deleted file mode 100644
index a1d06608439..00000000000
--- a/tests/wpt/web-platform-tests/webxr/xrSession_mode.https.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE html>
-<body>
- <script src=/resources/testharness.js></script>
- <script src=/resources/testharnessreport.js></script>
- <script src="resources/webxr_util.js"></script>
- <canvas></canvas>
-
- <script>
- xr_promise_test("Requested session has it's mode set",
- (t) => {
- return XRTest.simulateDeviceConnection({ supportsImmersive:true })
- .then( (controller) => new Promise((resolve) => {
- XRTest.simulateUserActivation( () => {
- resolve(navigator.xr.requestSession('immersive-vr').then( (session) => {
- assert_equals(session.mode, 'immersive-vr');
- }));
- });
- }));
- });
- </script>
-</body>
-
diff --git a/tests/wpt/webgl/meta/conformance/textures/misc/texture-upload-size.html.ini b/tests/wpt/webgl/meta/conformance/textures/misc/texture-upload-size.html.ini
index 2d2287c3de7..9b0cee9d527 100644
--- a/tests/wpt/webgl/meta/conformance/textures/misc/texture-upload-size.html.ini
+++ b/tests/wpt/webgl/meta/conformance/textures/misc/texture-upload-size.html.ini
@@ -44,3 +44,6 @@
[WebGL test #68: could not create image (SVG)]
expected: FAIL
+ [WebGL test #236: could not create image (SVG)]
+ expected: FAIL
+