aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWPT Sync Bot <josh+wptsync@joshmatthews.net>2020-01-10 08:22:32 +0000
committerWPT Sync Bot <josh+wptsync@joshmatthews.net>2020-01-10 10:58:32 +0000
commit41b281893fbffb7b4013a43575a2d84c74963f8b (patch)
tree3f98945488f2265868f7a7a3d09ff537232c7dd0
parentc6192dc286ce0496b76998c900b48cdf7cdabdfe (diff)
downloadservo-41b281893fbffb7b4013a43575a2d84c74963f8b.tar.gz
servo-41b281893fbffb7b4013a43575a2d84c74963f8b.zip
Update web-platform-tests to revision 2a73e37c60b18846d9d2798c845242f209d74644
-rw-r--r--tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini3
-rw-r--r--tests/wpt/metadata/MANIFEST.json212
-rw-r--r--tests/wpt/metadata/css/CSS2/ui/outline-width-013.xht.ini2
-rw-r--r--tests/wpt/metadata/css/css-animations/animation-before-initial-box-construction-001.html.ini5
-rw-r--r--tests/wpt/metadata/css/cssom-view/MediaQueryList-addListener-removeListener.html.ini3
-rw-r--r--tests/wpt/metadata/css/cssom-view/elementsFromPoint-iframes.html.ini3
-rw-r--r--tests/wpt/metadata/fetch/content-type/response.window.js.ini11
-rw-r--r--tests/wpt/metadata/fetch/content-type/script.window.js.ini3
-rw-r--r--tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini3
-rw-r--r--tests/wpt/metadata/fetch/security/embedded-credentials.tentative.sub.html.ini8
-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/interaction/focus/the-autofocus-attribute/skip-document-with-fragment.html.ini4
-rw-r--r--tests/wpt/metadata/html/rendering/the-details-element/summary-display-list-item.html.ini2
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini3
-rw-r--r--tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/iframe_005.html.ini4
-rw-r--r--tests/wpt/metadata/resource-timing/crossorigin-sandwich-TAO.sub.html.ini1
-rw-r--r--tests/wpt/metadata/webdriver/tests/take_element_screenshot/iframe.py.ini3
-rw-r--r--tests/wpt/metadata/webdriver/tests/take_screenshot/iframe.py.ini7
-rw-r--r--tests/wpt/metadata/webmessaging/with-ports/018.html.ini5
-rw-r--r--tests/wpt/metadata/workers/semantics/multiple-workers/005.html.ini1
-rw-r--r--tests/wpt/web-platform-tests/2dcontext/imagebitmap/canvas-createImageBitmap-video-resize.html2
-rw-r--r--tests/wpt/web-platform-tests/compat/webkit-box-horizontal-reverse-variants-ref.html73
-rw-r--r--tests/wpt/web-platform-tests/compat/webkit-box-horizontal-reverse-variants.html70
-rw-r--r--tests/wpt/web-platform-tests/compat/webkit-box-horizontal-rtl-variants-ref.html72
-rw-r--r--tests/wpt/web-platform-tests/compat/webkit-box-horizontal-rtl-variants.html69
-rw-r--r--tests/wpt/web-platform-tests/compat/webkit-box-rtl-flex-ref.html24
-rw-r--r--tests/wpt/web-platform-tests/compat/webkit-box-rtl-flex.html26
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/general-tests.html20
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0004-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0021-expected2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0023-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0024-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0025-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0026-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0027-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0028-expected1
-rw-r--r--tests/wpt/web-platform-tests/css/css-animations/animation-before-initial-box-construction-001.html53
-rw-r--r--tests/wpt/web-platform-tests/css/css-animations/support/empty-sheet.css0
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-content-distribution-vertical-lr.html358
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-content-distribution-vertical-rl.html358
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-content-distribution.html358
-rw-r--r--tests/wpt/web-platform-tests/html/cross-origin-opener-policy/coop-navigated-history-popup.https.html18
-rw-r--r--tests/wpt/web-platform-tests/html/cross-origin-opener-policy/resources/common.js14
-rw-r--r--tests/wpt/web-platform-tests/html/cross-origin-opener-policy/resources/coop-coep.py33
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/the-details-element/summary-display-list-item-ref.html28
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/the-details-element/summary-display-list-item.html34
-rw-r--r--tests/wpt/web-platform-tests/interfaces/reporting.idl27
-rw-r--r--tests/wpt/web-platform-tests/interfaces/webauthn.idl4
-rw-r--r--tests/wpt/web-platform-tests/interfaces/webrtc.idl2
-rw-r--r--tests/wpt/web-platform-tests/lint.whitelist1
-rw-r--r--tests/wpt/web-platform-tests/resources/test/conftest.py19
-rw-r--r--tests/wpt/web-platform-tests/resources/test/tests/functional/assert-array-equals.html163
-rw-r--r--tests/wpt/web-platform-tests/resources/test/variants.js2
-rw-r--r--tests/wpt/web-platform-tests/resources/testharness.js56
-rw-r--r--tests/wpt/web-platform-tests/tools/ci/azure/install_chrome.yml9
-rw-r--r--tests/wpt/web-platform-tests/tools/ci/azure/safari-technology-preview.rb8
-rw-r--r--tests/wpt/web-platform-tests/tools/webdriver/webdriver/client.py4
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/__init__.py20
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/iframe.py100
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/screenshot.py5
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/take_screenshot/__init__.py14
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/take_screenshot/iframe.py64
62 files changed, 2230 insertions, 174 deletions
diff --git a/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini b/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini
index abf0d50aff3..4c1aa18e695 100644
--- a/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini
+++ b/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini
@@ -2,6 +2,9 @@
[Revoke blob URL after creating Request, will fetch]
expected: FAIL
+ [Revoke blob URL after calling fetch, fetch should succeed]
+ expected: FAIL
+
[url-with-fetch.any.html]
[Revoke blob URL after creating Request, will fetch]
diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json
index be1d74a725a..99bd02de024 100644
--- a/tests/wpt/metadata/MANIFEST.json
+++ b/tests/wpt/metadata/MANIFEST.json
@@ -20399,6 +20399,42 @@
{}
]
],
+ "compat/webkit-box-horizontal-reverse-variants.html": [
+ [
+ "compat/webkit-box-horizontal-reverse-variants.html",
+ [
+ [
+ "/compat/webkit-box-horizontal-reverse-variants-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "compat/webkit-box-horizontal-rtl-variants.html": [
+ [
+ "compat/webkit-box-horizontal-rtl-variants.html",
+ [
+ [
+ "/compat/webkit-box-horizontal-rtl-variants-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "compat/webkit-box-rtl-flex.html": [
+ [
+ "compat/webkit-box-rtl-flex.html",
+ [
+ [
+ "/compat/webkit-box-rtl-flex-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"compat/webkit-linear-gradient-diff-unprefixed.html": [
[
"compat/webkit-linear-gradient-diff-unprefixed.html",
@@ -206867,6 +206903,18 @@
{}
]
],
+ "html/rendering/the-details-element/summary-display-list-item.html": [
+ [
+ "html/rendering/the-details-element/summary-display-list-item.html",
+ [
+ [
+ "/html/rendering/the-details-element/summary-display-list-item-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"html/rendering/widgets/button-layout/anonymous-button-content-box.html": [
[
"html/rendering/widgets/button-layout/anonymous-button-content-box.html",
@@ -218528,6 +218576,15 @@
"compat/webkit-box-fieldset-ref.html": [
[]
],
+ "compat/webkit-box-horizontal-reverse-variants-ref.html": [
+ []
+ ],
+ "compat/webkit-box-horizontal-rtl-variants-ref.html": [
+ []
+ ],
+ "compat/webkit-box-rtl-flex-ref.html": [
+ []
+ ],
"compat/webkit-linear-gradient-diff-unprefixed-ref.html": [
[]
],
@@ -247355,6 +247412,9 @@
"css/css-animations/animationevent-interface.js": [
[]
],
+ "css/css-animations/support/empty-sheet.css": [
+ []
+ ],
"css/css-animations/support/testcommon.js": [
[]
],
@@ -276905,6 +276965,9 @@
"html/rendering/the-details-element/single-summary.html": [
[]
],
+ "html/rendering/the-details-element/summary-display-list-item-ref.html": [
+ []
+ ],
"html/rendering/widgets/button-layout/anonymous-button-content-box-ref.html": [
[]
],
@@ -284861,6 +284924,9 @@
"resources/test/tests/functional/api-tests-3.html": [
[]
],
+ "resources/test/tests/functional/assert-array-equals.html": [
+ []
+ ],
"resources/test/tests/functional/force_timeout.html": [
[]
],
@@ -321851,6 +321917,12 @@
{}
]
],
+ "css/css-animations/animation-before-initial-box-construction-001.html": [
+ [
+ "css/css-animations/animation-before-initial-box-construction-001.html",
+ {}
+ ]
+ ],
"css/css-animations/animation-iteration-count-calc.html": [
[
"css/css-animations/animation-iteration-count-calc.html",
@@ -325407,6 +325479,24 @@
{}
]
],
+ "css/css-grid/alignment/grid-align-content-distribution-vertical-lr.html": [
+ [
+ "css/css-grid/alignment/grid-align-content-distribution-vertical-lr.html",
+ {}
+ ]
+ ],
+ "css/css-grid/alignment/grid-align-content-distribution-vertical-rl.html": [
+ [
+ "css/css-grid/alignment/grid-align-content-distribution-vertical-rl.html",
+ {}
+ ]
+ ],
+ "css/css-grid/alignment/grid-align-content-distribution.html": [
+ [
+ "css/css-grid/alignment/grid-align-content-distribution.html",
+ {}
+ ]
+ ],
"css/css-grid/alignment/grid-align-content.html": [
[
"css/css-grid/alignment/grid-align-content.html",
@@ -361856,6 +361946,14 @@
{}
]
],
+ "html/cross-origin-opener-policy/coop-navigated-history-popup.https.html": [
+ [
+ "html/cross-origin-opener-policy/coop-navigated-history-popup.https.html",
+ {
+ "timeout": "long"
+ }
+ ]
+ ],
"html/cross-origin-opener-policy/coop-navigated-popup.https.html": [
[
"html/cross-origin-opener-policy/coop-navigated-popup.https.html",
@@ -467883,7 +467981,7 @@
"testharness"
],
"2dcontext/imagebitmap/canvas-createImageBitmap-video-resize.html": [
- "94fc0d1c57ac6cab4e5f637584d5e1d9db7e1a5c",
+ "0a4f91d085d60523d49b190d3064aad222cc56d3",
"testharness"
],
"2dcontext/imagebitmap/common.sub.js": [
@@ -476926,6 +477024,22 @@
"c3a2e64c114ef78507213ab95f5cde91cac3bbbe",
"reftest"
],
+ "compat/webkit-box-horizontal-reverse-variants-ref.html": [
+ "72d0b2c6f6851764453f79cf71fc19be73bcb0e8",
+ "support"
+ ],
+ "compat/webkit-box-horizontal-reverse-variants.html": [
+ "09dba694f260c6e5536663cac6151427a49d6dc5",
+ "reftest"
+ ],
+ "compat/webkit-box-horizontal-rtl-variants-ref.html": [
+ "42321c506979b2ec08814cf024dc95da24f3d6d2",
+ "support"
+ ],
+ "compat/webkit-box-horizontal-rtl-variants.html": [
+ "085a5899bc8e78214d57e691b0e5c3b3fc2904aa",
+ "reftest"
+ ],
"compat/webkit-box-ignore-box-pack.html": [
"80b52fbf1fe13a7c9ec5288f301194e40a381430",
"testharness"
@@ -476934,6 +477048,14 @@
"30c243b301fbafc55a03aae0286ba4c2b1983da1",
"testharness"
],
+ "compat/webkit-box-rtl-flex-ref.html": [
+ "10b9eb73fd9017746116e55d42df434ba33fec1e",
+ "support"
+ ],
+ "compat/webkit-box-rtl-flex.html": [
+ "d20b3a0a9dbab237a799f62504b9b1ea7b90a564",
+ "reftest"
+ ],
"compat/webkit-box-vertically-centered.html": [
"4932274e906172f37ceed65067141817aa1b26ab",
"testharness"
@@ -497883,7 +498005,7 @@
"testharness"
],
"cookies/http-state/general-tests.html": [
- "d80527f9b0aa22c0611edff546d5663198a412bb",
+ "f563bf7c68d662be8182ade0b4fd1629295df754",
"testharness"
],
"cookies/http-state/mozilla-tests.html": [
@@ -497951,7 +498073,7 @@
"support"
],
"cookies/http-state/resources/test-files/0004-expected": [
- "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "5ab27668fdbdd021d29abbda3acd08e94aa92b0b",
"support"
],
"cookies/http-state/resources/test-files/0004-test": [
@@ -498087,7 +498209,7 @@
"support"
],
"cookies/http-state/resources/test-files/0021-expected": [
- "a43cb004436a02f18cda39625fc2126f373dd7ae",
+ "445a5929e81e05151a90913c6ef2597a1aafd3e8",
"support"
],
"cookies/http-state/resources/test-files/0021-test": [
@@ -498103,7 +498225,7 @@
"support"
],
"cookies/http-state/resources/test-files/0023-expected": [
- "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "5ab27668fdbdd021d29abbda3acd08e94aa92b0b",
"support"
],
"cookies/http-state/resources/test-files/0023-test": [
@@ -498111,7 +498233,7 @@
"support"
],
"cookies/http-state/resources/test-files/0024-expected": [
- "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "5ab27668fdbdd021d29abbda3acd08e94aa92b0b",
"support"
],
"cookies/http-state/resources/test-files/0024-test": [
@@ -498119,7 +498241,7 @@
"support"
],
"cookies/http-state/resources/test-files/0025-expected": [
- "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "5ab27668fdbdd021d29abbda3acd08e94aa92b0b",
"support"
],
"cookies/http-state/resources/test-files/0025-test": [
@@ -498127,7 +498249,7 @@
"support"
],
"cookies/http-state/resources/test-files/0026-expected": [
- "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "5ab27668fdbdd021d29abbda3acd08e94aa92b0b",
"support"
],
"cookies/http-state/resources/test-files/0026-test": [
@@ -498135,7 +498257,7 @@
"support"
],
"cookies/http-state/resources/test-files/0027-expected": [
- "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "973d3847c04c2243d89086aa490a5e54f2d41f10",
"support"
],
"cookies/http-state/resources/test-files/0027-test": [
@@ -498143,7 +498265,7 @@
"support"
],
"cookies/http-state/resources/test-files/0028-expected": [
- "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "5ab27668fdbdd021d29abbda3acd08e94aa92b0b",
"support"
],
"cookies/http-state/resources/test-files/0028-test": [
@@ -560922,6 +561044,10 @@
"3ef19970007d4bb6a889f9601bc7c910f619f841",
"support"
],
+ "css/css-animations/animation-before-initial-box-construction-001.html": [
+ "558c5ea18699f3856c7d34b976f920b1fd7fd5b0",
+ "testharness"
+ ],
"css/css-animations/animation-common-ref.html": [
"ddc7da67ddf5fed83e653d1130a65f5c1e3a6dec",
"support"
@@ -561410,6 +561536,10 @@
"792fda33ed8b0bacf355e62066ec05d54cc5c729",
"testharness"
],
+ "css/css-animations/support/empty-sheet.css": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
"css/css-animations/support/testcommon.js": [
"b4fde4b967de2eb67cb3e0819c3a896375e861f9",
"support"
@@ -582706,6 +582836,18 @@
"d45df4bc2231cbda5dee1bafc3f386f008024d79",
"support"
],
+ "css/css-grid/alignment/grid-align-content-distribution-vertical-lr.html": [
+ "8217f4dd2c3cfd031aece87d54a78d5bcec640ca",
+ "testharness"
+ ],
+ "css/css-grid/alignment/grid-align-content-distribution-vertical-rl.html": [
+ "096e3fd6910a09ba5097b66acdb1dcf8a6d5326e",
+ "testharness"
+ ],
+ "css/css-grid/alignment/grid-align-content-distribution.html": [
+ "7b66ddb995191c67278d861aa6cb6a637bc6adaf",
+ "testharness"
+ ],
"css/css-grid/alignment/grid-align-content.html": [
"fb3f7007ee19189a09de9c1f786176c317b7ee14",
"testharness"
@@ -654318,6 +654460,10 @@
"63b60e490f47f4db77d33d7a4ca2f5b9a4181de8",
"support"
],
+ "html/cross-origin-opener-policy/coop-navigated-history-popup.https.html": [
+ "bd1cabafd4164e51804b0760dbf45885f3df3520",
+ "testharness"
+ ],
"html/cross-origin-opener-policy/coop-navigated-popup.https.html": [
"3c6019ace0b308562cca08d6d6bfd6484882e1db",
"testharness"
@@ -654519,11 +654665,11 @@
"support"
],
"html/cross-origin-opener-policy/resources/common.js": [
- "53b80bb6e998e6f93a46176b58be4c016275ce0f",
+ "477bc6c948f29cc18dc987e828eb5799b4a946ab",
"support"
],
"html/cross-origin-opener-policy/resources/coop-coep.py": [
- "8691e1b59d3134ef210259ed9501d123c002f88c",
+ "e6f655ab728107e4bac31cd7748711f719b01bd3",
"support"
],
"html/cross-origin-opener-policy/resources/postback.html": [
@@ -661522,6 +661668,14 @@
"1f09e7e75f9126982a07902ae0693f9ea2fd5823",
"support"
],
+ "html/rendering/the-details-element/summary-display-list-item-ref.html": [
+ "31e98d3fdca8fff9fe88929c8075643fca3abb40",
+ "support"
+ ],
+ "html/rendering/the-details-element/summary-display-list-item.html": [
+ "c2e96e987ea943e29626e0cfd013ef6d6cae3bbc",
+ "reftest"
+ ],
"html/rendering/unmapped-attributes.html": [
"3f457eb492f0b72b2a9c5891e8784d0b69958b38",
"testharness"
@@ -673435,7 +673589,7 @@
"support"
],
"interfaces/reporting.idl": [
- "f5370e8f1e656acf7409dbda907ee9672d5e8ed1",
+ "d42f0bac59c2fa6d8f94402f7b6e1e29de379123",
"support"
],
"interfaces/requestidlecallback.idl": [
@@ -673551,7 +673705,7 @@
"support"
],
"interfaces/webauthn.idl": [
- "29025f35eecb5c82b33ffcc7039c4a99f081f4e3",
+ "56c2856b19a76d85a0b0495d620c025247ad3f42",
"support"
],
"interfaces/webdriver.idl": [
@@ -673583,7 +673737,7 @@
"support"
],
"interfaces/webrtc.idl": [
- "badbe4df1dccd4113cb76e47f4a842f20d0d8963",
+ "053afdcb13587543e7da6140e72101f3892a05a0",
"support"
],
"interfaces/webusb.idl": [
@@ -674371,7 +674525,7 @@
"testharness"
],
"lint.whitelist": [
- "353922a456c4dbeacd2ab6d651b64be00c9a4903",
+ "425730feea72429b66926298d3716b8164648211",
"support"
],
"loading/lazyload/META.yml": [
@@ -702511,7 +702665,7 @@
"support"
],
"resources/test/conftest.py": [
- "4caa7943fb7ba125e5c51437e7a70aecbd3989dd",
+ "857f1b41bcb11c422d6603e79d8c98a6b1dfbb07",
"support"
],
"resources/test/harness.html": [
@@ -702582,6 +702736,10 @@
"d32b4d8bc7ddfef398d769f73478e0f3f075f871",
"support"
],
+ "resources/test/tests/functional/assert-array-equals.html": [
+ "d56419d1f313f34674d778236c5f6e74b5260def",
+ "support"
+ ],
"resources/test/tests/functional/force_timeout.html": [
"a43759530ad8cd7e6bc61fe367db34bbf7a32e15",
"support"
@@ -702851,7 +703009,7 @@
"support"
],
"resources/test/variants.js": [
- "eebac6f7d14c2f8ee4b4eead727081a5e494cee4",
+ "c40085a329f7ad5fbb34ed842542db29c2bc3734",
"support"
],
"resources/test/wptserver.py": [
@@ -702879,7 +703037,7 @@
"support"
],
"resources/testharness.js": [
- "f289e7797201d7d9fa569c2864649571bd50b54c",
+ "2c3664dfa6ab5518019dc6f2c27e275bb6a62a16",
"support"
],
"resources/testharness.js.headers": [
@@ -713459,7 +713617,7 @@
"support"
],
"tools/ci/azure/install_chrome.yml": [
- "6bd5c2334ad4e3e4d5d6faaf8005f4e0b44cf1fe",
+ "fd650e80aaad309c8e983274d2b823bba91b1fb1",
"support"
],
"tools/ci/azure/install_edge.yml": [
@@ -713487,7 +713645,7 @@
"support"
],
"tools/ci/azure/safari-technology-preview.rb": [
- "a3772b75e462194eb0de5ea2c7532a8248ec3d79",
+ "2d4912abbff674291e4e9497b0a37b6c6a9989c8",
"support"
],
"tools/ci/azure/system_info.yml": [
@@ -718351,7 +718509,7 @@
"support"
],
"tools/webdriver/webdriver/client.py": [
- "0c5bbff5629868fdc48a1a41cf882fabe5617c1b",
+ "cf4c5fd35fd98bb54ba248d1c1c31590310727ed",
"support"
],
"tools/webdriver/webdriver/error.py": [
@@ -727775,15 +727933,15 @@
"wdspec"
],
"webdriver/tests/take_element_screenshot/__init__.py": [
- "9de8792460797f4a31ee50d112c7132a2c2714ad",
+ "9a82cc48eab7993dcd6588d89b5aae9ed4ebfc82",
"support"
],
"webdriver/tests/take_element_screenshot/iframe.py": [
- "242122f0b5e7359c364a8aa1da345fc3da15acf1",
+ "83f55deff753a4525839d3c0675acfb459f64395",
"wdspec"
],
"webdriver/tests/take_element_screenshot/screenshot.py": [
- "fd460b656ae307a289174f9180ecc9ed23f0da07",
+ "50d33a266db75f0fc918ac5fa6d1edc6e548385f",
"wdspec"
],
"webdriver/tests/take_element_screenshot/user_prompts.py": [
@@ -727791,11 +727949,11 @@
"wdspec"
],
"webdriver/tests/take_screenshot/__init__.py": [
- "c07f8d167030d03abbb263ef08d8846bb7a71eba",
+ "f3001d946df56e58c4e3fa1319db12bf29f3e341",
"support"
],
"webdriver/tests/take_screenshot/iframe.py": [
- "66df6ec94935554340f916e4c2d9bb88012de1b5",
+ "601c039d56de0aa2937ac73675ba59792cbdcd17",
"wdspec"
],
"webdriver/tests/take_screenshot/screenshot.py": [
diff --git a/tests/wpt/metadata/css/CSS2/ui/outline-width-013.xht.ini b/tests/wpt/metadata/css/CSS2/ui/outline-width-013.xht.ini
new file mode 100644
index 00000000000..ea59bb35dd5
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/ui/outline-width-013.xht.ini
@@ -0,0 +1,2 @@
+[outline-width-013.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-animations/animation-before-initial-box-construction-001.html.ini b/tests/wpt/metadata/css/css-animations/animation-before-initial-box-construction-001.html.ini
new file mode 100644
index 00000000000..695b6eadc72
--- /dev/null
+++ b/tests/wpt/metadata/css/css-animations/animation-before-initial-box-construction-001.html.ini
@@ -0,0 +1,5 @@
+[animation-before-initial-box-construction-001.html]
+ expected: ERROR
+ [animations started before initial-containing-block creation properly function]
+ expected: TIMEOUT
+
diff --git a/tests/wpt/metadata/css/cssom-view/MediaQueryList-addListener-removeListener.html.ini b/tests/wpt/metadata/css/cssom-view/MediaQueryList-addListener-removeListener.html.ini
index 628b1fab770..c884dc82eab 100644
--- a/tests/wpt/metadata/css/cssom-view/MediaQueryList-addListener-removeListener.html.ini
+++ b/tests/wpt/metadata/css/cssom-view/MediaQueryList-addListener-removeListener.html.ini
@@ -2,3 +2,6 @@
[listeners are called when <iframe> is resized]
expected: FAIL
+ [listeners are called correct number of times]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/cssom-view/elementsFromPoint-iframes.html.ini b/tests/wpt/metadata/css/cssom-view/elementsFromPoint-iframes.html.ini
index 6ef8bb1049f..171592fc08f 100644
--- a/tests/wpt/metadata/css/cssom-view/elementsFromPoint-iframes.html.ini
+++ b/tests/wpt/metadata/css/cssom-view/elementsFromPoint-iframes.html.ini
@@ -2,6 +2,3 @@
[elementsFromPoint on the root document for points in iframe elements]
expected: FAIL
- [elementsFromPoint on inner documents]
- 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 8c8f83c357c..07769384006 100644
--- a/tests/wpt/metadata/fetch/content-type/response.window.js.ini
+++ b/tests/wpt/metadata/fetch/content-type/response.window.js.ini
@@ -321,6 +321,15 @@
[<iframe>: combined response Content-Type: text/html */*;charset=gbk]
expected: FAIL
- [<iframe>: combined response Content-Type: text/html;x=" text/plain]
+ [<iframe>: separate response Content-Type: text/html */*;charset=gbk]
+ expected: FAIL
+
+ [<iframe>: separate response Content-Type: text/plain */*]
+ expected: FAIL
+
+ [<iframe>: separate response Content-Type: text/html;" \\" text/plain]
+ expected: FAIL
+
+ [<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
expected: FAIL
diff --git a/tests/wpt/metadata/fetch/content-type/script.window.js.ini b/tests/wpt/metadata/fetch/content-type/script.window.js.ini
index d2df9b78483..b2ffc8abf78 100644
--- a/tests/wpt/metadata/fetch/content-type/script.window.js.ini
+++ b/tests/wpt/metadata/fetch/content-type/script.window.js.ini
@@ -56,3 +56,6 @@
[separate text/javascript x/x]
expected: FAIL
+ [separate text/javascript error]
+ 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 b7052af5b5c..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%0D%0AX-Content-Type-Options%3A%20nosniff]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/fetch/security/embedded-credentials.tentative.sub.html.ini b/tests/wpt/metadata/fetch/security/embedded-credentials.tentative.sub.html.ini
index 26e02f24468..62068b05a2f 100644
--- a/tests/wpt/metadata/fetch/security/embedded-credentials.tentative.sub.html.ini
+++ b/tests/wpt/metadata/fetch/security/embedded-credentials.tentative.sub.html.ini
@@ -5,7 +5,7 @@
expected: FAIL
[Embedded credentials are treated as network errors in frames.]
- expected: TIMEOUT
+ expected: FAIL
[Embedded credentials are treated as network errors in new windows.]
expected: FAIL
@@ -13,9 +13,3 @@
[Embedded credentials matching the top-level are treated as network errors for cross-origin URLs.]
expected: TIMEOUT
- [Embedded credentials matching the top-level are not treated as network errors for relative URLs.]
- expected: TIMEOUT
-
- [Embedded credentials matching the top-level are not treated as network errors for same-origin URLs.]
- expected: TIMEOUT
-
diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini
deleted file mode 100644
index 87b07c3e670..00000000000
--- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[traverse_the_history_1.html]
- [Multiple history traversals from the same task]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/skip-document-with-fragment.html.ini b/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/skip-document-with-fragment.html.ini
index 6852d7663de..c12c0f8ae48 100644
--- a/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/skip-document-with-fragment.html.ini
+++ b/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/skip-document-with-fragment.html.ini
@@ -1,8 +1,4 @@
[skip-document-with-fragment.html]
- expected: TIMEOUT
[Autofocus elements in iframed documents with URL fragments should be skipped.]
expected: FAIL
- [Autofocus elements in top-level browsing context's documents with URI fragments should be skipped.]
- expected: TIMEOUT
-
diff --git a/tests/wpt/metadata/html/rendering/the-details-element/summary-display-list-item.html.ini b/tests/wpt/metadata/html/rendering/the-details-element/summary-display-list-item.html.ini
new file mode 100644
index 00000000000..2d53b7836aa
--- /dev/null
+++ b/tests/wpt/metadata/html/rendering/the-details-element/summary-display-list-item.html.ini
@@ -0,0 +1,2 @@
+[summary-display-list-item.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini
index e440b1e38c6..dc856a3d5a3 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini
@@ -1,6 +1,5 @@
[iframe_sandbox_popups_nonescaping-3.html]
type: testharness
- expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox]
- expected: NOTRUN
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/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
new file mode 100644
index 00000000000..6cf9d13975c
--- /dev/null
+++ b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/iframe_005.html.ini
@@ -0,0 +1,4 @@
+[iframe_005.html]
+ [document.write external script into iframe write back into parent]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/resource-timing/crossorigin-sandwich-TAO.sub.html.ini b/tests/wpt/metadata/resource-timing/crossorigin-sandwich-TAO.sub.html.ini
index b4090ef9fe2..1c7ec9ce1db 100644
--- a/tests/wpt/metadata/resource-timing/crossorigin-sandwich-TAO.sub.html.ini
+++ b/tests/wpt/metadata/resource-timing/crossorigin-sandwich-TAO.sub.html.ini
@@ -1,5 +1,4 @@
[crossorigin-sandwich-TAO.sub.html]
- expected: ERROR
[There should be one entry.]
expected: FAIL
diff --git a/tests/wpt/metadata/webdriver/tests/take_element_screenshot/iframe.py.ini b/tests/wpt/metadata/webdriver/tests/take_element_screenshot/iframe.py.ini
index 6a671eb554c..2d6c14f5351 100644
--- a/tests/wpt/metadata/webdriver/tests/take_element_screenshot/iframe.py.ini
+++ b/tests/wpt/metadata/webdriver/tests/take_element_screenshot/iframe.py.ini
@@ -5,3 +5,6 @@
[test_source_origin[same_origin\]]
expected: FAIL
+ [test_frame_element]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/webdriver/tests/take_screenshot/iframe.py.ini b/tests/wpt/metadata/webdriver/tests/take_screenshot/iframe.py.ini
new file mode 100644
index 00000000000..6a671eb554c
--- /dev/null
+++ b/tests/wpt/metadata/webdriver/tests/take_screenshot/iframe.py.ini
@@ -0,0 +1,7 @@
+[iframe.py]
+ [test_source_origin[cross_origin\]]
+ expected: FAIL
+
+ [test_source_origin[same_origin\]]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/webmessaging/with-ports/018.html.ini b/tests/wpt/metadata/webmessaging/with-ports/018.html.ini
deleted file mode 100644
index 663a1f8fa30..00000000000
--- a/tests/wpt/metadata/webmessaging/with-ports/018.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[018.html]
- expected: TIMEOUT
- [origin of the script that invoked the method, javascript:]
- expected: TIMEOUT
-
diff --git a/tests/wpt/metadata/workers/semantics/multiple-workers/005.html.ini b/tests/wpt/metadata/workers/semantics/multiple-workers/005.html.ini
index 268949ced5c..f584fce5df1 100644
--- a/tests/wpt/metadata/workers/semantics/multiple-workers/005.html.ini
+++ b/tests/wpt/metadata/workers/semantics/multiple-workers/005.html.ini
@@ -1,4 +1,5 @@
[005.html]
+ expected: ERROR
[dedicated worker in shared worker in dedicated worker]
expected: FAIL
diff --git a/tests/wpt/web-platform-tests/2dcontext/imagebitmap/canvas-createImageBitmap-video-resize.html b/tests/wpt/web-platform-tests/2dcontext/imagebitmap/canvas-createImageBitmap-video-resize.html
index 94fc0d1c57a..0a4f91d085d 100644
--- a/tests/wpt/web-platform-tests/2dcontext/imagebitmap/canvas-createImageBitmap-video-resize.html
+++ b/tests/wpt/web-platform-tests/2dcontext/imagebitmap/canvas-createImageBitmap-video-resize.html
@@ -55,5 +55,5 @@ video.preload = "auto";
video.oncanplaythrough = t.step_func(function() {
return generateTest();
});
-video.src = "/media/video.ogv";
+video.src = '/media/counting.' + (video.canPlayType('video/ogg') ? 'ogv' : 'mp4');
</script>
diff --git a/tests/wpt/web-platform-tests/compat/webkit-box-horizontal-reverse-variants-ref.html b/tests/wpt/web-platform-tests/compat/webkit-box-horizontal-reverse-variants-ref.html
new file mode 100644
index 00000000000..72d0b2c6f68
--- /dev/null
+++ b/tests/wpt/web-platform-tests/compat/webkit-box-horizontal-reverse-variants-ref.html
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<style>
+.flexbox {
+ width: 300px;
+ display: flex;
+ border-style: solid;
+ border-width: 1px 2px 1px 4px;
+}
+
+.reverse {
+ flex-direction: row-reverse;
+}
+
+.redbox {
+ background: red;
+ width: 100px;
+ flex-shrink: 0;
+}
+
+.greenbox {
+ background: green;
+ width: 100px;
+ flex-shrink: 0;
+}
+
+</style>
+<p>Exercises -webkit-box with various box-pack settings when direction is
+ reverse. In all cases the order of letters in the boxes should be
+ alphabetized left to right.
+<p>Start. Boxes should be aligned to left side.
+<div class="flexbox reverse" style="justify-content: flex-end;">
+ <div class="redbox">B</div>
+ <div class="greenbox">A</div>
+</div>
+
+<p>Centered. Boxes should be centered.
+<div class="flexbox reverse" style="justify-content: center;">
+ <div class="redbox">B</div>
+ <div class="greenbox">A</div>
+</div>
+
+<p>End. Boxes should be aligned to right side.
+<div class="flexbox reverse">
+ <div class="redbox">B</div>
+ <div class="greenbox">A</div>
+</div>
+
+<p>Start, content too big. Boxes should start at left edge and extend
+ outside border.
+<div class="flexbox">
+ <div class="greenbox">A</div>
+ <div class="redbox">B</div>
+ <div class="greenbox">C</div>
+ <div class="redbox">D</div>
+</div>
+
+<p>Center, content too big. Boxes should start at left edge and extend
+ outside border.
+<div class="flexbox">
+ <div class="greenbox">A</div>
+ <div class="redbox">B</div>
+ <div class="greenbox">C</div>
+ <div class="redbox">D</div>
+</div>
+
+<p>End, content too big. Boxes should start at left edge and extend
+ outside border.
+<div class="flexbox">
+ <div class="greenbox">A</div>
+ <div class="redbox">B</div>
+ <div class="greenbox">C</div>
+ <div class="redbox">D</div>
+</div>
diff --git a/tests/wpt/web-platform-tests/compat/webkit-box-horizontal-reverse-variants.html b/tests/wpt/web-platform-tests/compat/webkit-box-horizontal-reverse-variants.html
new file mode 100644
index 00000000000..09dba694f26
--- /dev/null
+++ b/tests/wpt/web-platform-tests/compat/webkit-box-horizontal-reverse-variants.html
@@ -0,0 +1,70 @@
+<!DOCTYPE html>
+<link rel="help" href="https://crbug.com/1034461">
+<link rel="match" href="webkit-box-horizontal-reverse-variants-ref.html">
+<style>
+.webkitbox {
+ width: 300px;
+ display: -webkit-box;
+ -webkit-box-direction: reverse;
+ border-style: solid;
+ border-width: 1px 2px 1px 4px;
+}
+
+.redbox {
+ background: red;
+ width: 100px;
+}
+
+.greenbox {
+ background: green;
+ width: 100px;
+}
+
+</style>
+<p>Exercises -webkit-box with various box-pack settings when direction is
+ reverse. In all cases the order of letters in the boxes should be
+ alphabetized left to right.
+<p>Start. Boxes should be aligned to left side.
+<div class="webkitbox">
+ <div class="redbox">B</div>
+ <div class="greenbox">A</div>
+</div>
+
+<p>Centered. Boxes should be centered.
+<div class="webkitbox" style="-webkit-box-pack: center">
+ <div class="redbox">B</div>
+ <div class="greenbox">A</div>
+</div>
+
+<p>End. Boxes should be aligned to right side.
+<div class="webkitbox" style="-webkit-box-pack: end">
+ <div class="redbox">B</div>
+ <div class="greenbox">A</div>
+</div>
+
+<p>Start, content too big. Boxes should start at left edge and extend
+ outside border.
+<div class="webkitbox">
+ <div class="redbox">D</div>
+ <div class="greenbox">C</div>
+ <div class="redbox">B</div>
+ <div class="greenbox">A</div>
+</div>
+
+<p>Center, content too big. Boxes should start at left edge and extend
+ outside border.
+<div class="webkitbox" style="-webkit-box-pack: center">
+ <div class="redbox">D</div>
+ <div class="greenbox">C</div>
+ <div class="redbox">B</div>
+ <div class="greenbox">A</div>
+</div>
+
+<p>End, content too big. Boxes should start at left edge and extend
+ outside border.
+<div class="webkitbox" style="-webkit-box-pack: end">
+ <div class="redbox">D</div>
+ <div class="greenbox">C</div>
+ <div class="redbox">B</div>
+ <div class="greenbox">A</div>
+</div>
diff --git a/tests/wpt/web-platform-tests/compat/webkit-box-horizontal-rtl-variants-ref.html b/tests/wpt/web-platform-tests/compat/webkit-box-horizontal-rtl-variants-ref.html
new file mode 100644
index 00000000000..42321c50697
--- /dev/null
+++ b/tests/wpt/web-platform-tests/compat/webkit-box-horizontal-rtl-variants-ref.html
@@ -0,0 +1,72 @@
+<!DOCTYPE html>
+<style>
+.flexbox {
+ width: 300px;
+ display: flex;
+ border-style: solid;
+ border-width: 1px 2px 1px 4px;
+}
+
+.rtl {
+ direction: rtl;
+}
+
+.redbox {
+ background: red;
+ width: 100px;
+ flex-shrink: 0;
+}
+
+.greenbox {
+ background: green;
+ width: 100px;
+ flex-shrink: 0;
+}
+
+</style>
+<p>Exercises -webkit-box with various box-pack settings when rtl. In all cases
+ the order of letters in the boxes should be alphabetized left to right.
+<p>Start. Boxes should be aligned to right side.
+<div class="flexbox rtl">
+ <div class="redbox">B</div>
+ <div class="greenbox">A</div>
+</div>
+
+<p>Centered. Boxes should be centered.
+<div class="flexbox rtl" style="justify-content: center;">
+ <div class="redbox">B</div>
+ <div class="greenbox">A</div>
+</div>
+
+<p>End. Boxes should be aligned to left side.
+<div class="flexbox rtl" style="justify-content: flex-end;">
+ <div class="redbox">B</div>
+ <div class="greenbox">A</div>
+</div>
+
+<p>Start, content too big. Boxes should start at left edge and extend
+ outside border.
+<div class="flexbox">
+ <div class="greenbox rtl">A</div>
+ <div class="redbox rtl">B</div>
+ <div class="greenbox rtl">C</div>
+ <div class="redbox rtl">D</div>
+</div>
+
+<p>Center, content too big. Boxes should start at left edge and extend
+ outside border.
+<div class="flexbox">
+ <div class="greenbox rtl">A</div>
+ <div class="redbox rtl">B</div>
+ <div class="greenbox rtl">C</div>
+ <div class="redbox rtl">D</div>
+</div>
+
+<p>End, content too big. Boxes should start at left edge and extend
+ outside border.
+<div class="flexbox">
+ <div class="greenbox rtl">A</div>
+ <div class="redbox rtl">B</div>
+ <div class="greenbox rtl">C</div>
+ <div class="redbox rtl">D</div>
+</div>
diff --git a/tests/wpt/web-platform-tests/compat/webkit-box-horizontal-rtl-variants.html b/tests/wpt/web-platform-tests/compat/webkit-box-horizontal-rtl-variants.html
new file mode 100644
index 00000000000..085a5899bc8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/compat/webkit-box-horizontal-rtl-variants.html
@@ -0,0 +1,69 @@
+<!DOCTYPE html>
+<link rel="help" href="https://crbug.com/1034461">
+<link rel="match" href="webkit-box-horizontal-rtl-variants-ref.html">
+<style>
+.webkitbox {
+ width: 300px;
+ display: -webkit-box;
+ direction: rtl;
+ border-style: solid;
+ border-width: 1px 2px 1px 4px;
+}
+
+.redbox {
+ background: red;
+ width: 100px;
+}
+
+.greenbox {
+ background: green;
+ width: 100px;
+}
+
+</style>
+<p>Exercises -webkit-box with various box-pack settings when rtl. In all cases
+ the order of letters in the boxes should be alphabetized left to right.
+<p>Start. Boxes should be aligned to right side.
+<div class="webkitbox">
+ <div class="redbox">B</div>
+ <div class="greenbox">A</div>
+</div>
+
+<p>Centered. Boxes should be centered.
+<div class="webkitbox" style="-webkit-box-pack: center">
+ <div class="redbox">B</div>
+ <div class="greenbox">A</div>
+</div>
+
+<p>End. Boxes should be aligned to left side.
+<div class="webkitbox" style="-webkit-box-pack: end">
+ <div class="redbox">B</div>
+ <div class="greenbox">A</div>
+</div>
+
+<p>Start, content too big. Boxes should start at left edge and extend
+ outside border.
+<div class="webkitbox">
+ <div class="redbox">D</div>
+ <div class="greenbox">C</div>
+ <div class="redbox">B</div>
+ <div class="greenbox">A</div>
+</div>
+
+<p>Center, content too big. Boxes should start at left edge and extend
+ outside border.
+<div class="webkitbox" style="-webkit-box-pack: center">
+ <div class="redbox">D</div>
+ <div class="greenbox">C</div>
+ <div class="redbox">B</div>
+ <div class="greenbox">A</div>
+</div>
+
+<p>End, content too big. Boxes should start at left edge and extend
+ outside border.
+<div class="webkitbox" style="-webkit-box-pack: end">
+ <div class="redbox">D</div>
+ <div class="greenbox">C</div>
+ <div class="redbox">B</div>
+ <div class="greenbox">A</div>
+</div>
diff --git a/tests/wpt/web-platform-tests/compat/webkit-box-rtl-flex-ref.html b/tests/wpt/web-platform-tests/compat/webkit-box-rtl-flex-ref.html
new file mode 100644
index 00000000000..10b9eb73fd9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/compat/webkit-box-rtl-flex-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<style>
+#flexbox {
+ width: 500px;
+ display: flex;
+ direction: rtl;
+}
+
+#redbox {
+ background: red;
+ flex: 1;
+}
+
+#greenbox {
+ background: green;
+ flex: 1;
+}
+
+</style>
+<p>There should be a green box followed by a red box, both on the same line.
+<div id="flexbox">
+ <div id="redbox">A</div>
+ <div id="greenbox">B</div>
+</div>
diff --git a/tests/wpt/web-platform-tests/compat/webkit-box-rtl-flex.html b/tests/wpt/web-platform-tests/compat/webkit-box-rtl-flex.html
new file mode 100644
index 00000000000..d20b3a0a9db
--- /dev/null
+++ b/tests/wpt/web-platform-tests/compat/webkit-box-rtl-flex.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<link rel="help" href="https://crbug.com/1034461">
+<link rel="match" href="webkit-box-rtl-flex-ref.html">
+<style>
+#webkitbox {
+ width: 500px;
+ display: -webkit-box;
+ direction: rtl;
+}
+
+#redbox {
+ background: red;
+ -webkit-box-flex: 1;
+}
+
+#greenbox {
+ background: green;
+ -webkit-box-flex: 1;
+}
+
+</style>
+<p>There should be a green box followed by a red box, both on the same line.
+<div id="webkitbox">
+ <div id="redbox">A</div>
+ <div id="greenbox">B</div>
+</div>
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/general-tests.html b/tests/wpt/web-platform-tests/cookies/http-state/general-tests.html
index d80527f9b0a..f563bf7c68d 100644
--- a/tests/wpt/web-platform-tests/cookies/http-state/general-tests.html
+++ b/tests/wpt/web-platform-tests/cookies/http-state/general-tests.html
@@ -24,7 +24,7 @@
{file: "0001", name: "Set cookie."},
{file: "0002", name: "Set cookie with future expiration."},
{file: "0003", name: "Set expired cookie along with valid cookie."},
- {file: "0004", name: "Ignore cookie without key."},
+ {file: "0004", name: "Set nameless cookie."},
{file: "0005", name: "Set cookie with age."},
{file: "0006", name: "Set no cookie with max-age=0."},
{file: "0007", name: "Set cookie with version=1."},
@@ -41,15 +41,15 @@
{file: "0017", name: "Keep order if comma-separated."},
{file: "0018", name: "Ignore keys after semicolon."},
{file: "0019", name: "Ignore attributes after semicolon."},
- {file: "0020", name: "Ignore cookies without key and value."},
- {file: "0021", name: "Ignore cookie without key in all 'Set-Cookie'."},
- {file: "0022", name: "Set cookie without value in all 'Set-Cookie'."},
- {file: "0023", name: "Ignore cookies without '=' in all 'Set-Cookie'."},
- {file: "0024", name: "Ignore malformed cookies in all 'Set-Cookie'."},
- {file: "0025", name: "Ignore cookies with ';' in all 'Set-Cookie'."},
- {file: "0026", name: "Ignore malformed cookies in all 'Set-Cookie' v2."},
- {file: "0027", name: "Ignore malformed cookies in all 'Set-Cookie' v3."},
- {file: "0028", name: "Ignore malformed cookies in all 'Set-Cookie' v4."},
+ {file: "0020", name: "Ignore `Set-Cookie: =`."},
+ {file: "0021", name: "Set nameless cookie, given `Set-Cookie: =x`"},
+ {file: "0022", name: "Set valueless cookie, given `Set-Cookie: x=`"},
+ {file: "0023", name: "Ignore empty cookie string."},
+ {file: "0024", name: "Ignore `Set-Cookie: =` with other `Set-Cookie` headers."},
+ {file: "0025", name: "Ignore name- and value-less `Set-Cookie: ; bar`."},
+ {file: "0026", name: "Ignore name- and value-less `Set-Cookie: `."},
+ {file: "0027", name: "Overwrite nameless cookie."},
+ {file: "0028", name: "Ignore name- and value-less `Set-Cookie: \t"},
];
for (const i in TEST_CASES) {
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0004-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0004-expected
index e69de29bb2d..5ab27668fdb 100644
--- a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0004-expected
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0004-expected
@@ -0,0 +1 @@
+Cookie: foo
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0021-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0021-expected
index a43cb004436..445a5929e81 100644
--- a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0021-expected
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0021-expected
@@ -1 +1 @@
-Cookie: a=b; c=d
+Cookie: a=b; x; c=d
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0023-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0023-expected
index e69de29bb2d..5ab27668fdb 100644
--- a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0023-expected
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0023-expected
@@ -0,0 +1 @@
+Cookie: foo
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0024-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0024-expected
index e69de29bb2d..5ab27668fdb 100644
--- a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0024-expected
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0024-expected
@@ -0,0 +1 @@
+Cookie: foo
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0025-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0025-expected
index e69de29bb2d..5ab27668fdb 100644
--- a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0025-expected
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0025-expected
@@ -0,0 +1 @@
+Cookie: foo
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0026-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0026-expected
index e69de29bb2d..5ab27668fdb 100644
--- a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0026-expected
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0026-expected
@@ -0,0 +1 @@
+Cookie: foo
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0027-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0027-expected
index e69de29bb2d..973d3847c04 100644
--- a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0027-expected
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0027-expected
@@ -0,0 +1 @@
+Cookie: bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0028-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0028-expected
index e69de29bb2d..5ab27668fdb 100644
--- a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0028-expected
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/0028-expected
@@ -0,0 +1 @@
+Cookie: foo
diff --git a/tests/wpt/web-platform-tests/css/css-animations/animation-before-initial-box-construction-001.html b/tests/wpt/web-platform-tests/css/css-animations/animation-before-initial-box-construction-001.html
new file mode 100644
index 00000000000..558c5ea1869
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-animations/animation-before-initial-box-construction-001.html
@@ -0,0 +1,53 @@
+<!doctype html>
+<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez">
+<link rel="author" href="mailto:https://mozilla.org" title="Mozilla">
+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1605610">
+<link rel="help" href="https://drafts.csswg.org/web-animations/#extensions-to-the-element-interface">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+let t = async_test("animations started before initial-containing-block creation properly function");
+let loaded = false;
+let finished = false;
+let span;
+
+function check() {
+ if (!loaded || !finished)
+ return;
+
+ assert_equals(getComputedStyle(span).opacity, "1", "Animation should be properly finished");
+ t.done();
+}
+
+document.addEventListener("DOMContentLoaded", function() {
+ span = document.createElement("span");
+ span.id = "myspan";
+ span.innerHTML = `Some content`;
+ document.body.appendChild(span);
+
+ let anim = span.animate([
+ {
+ opacity: "0",
+ },
+ {
+ opacity: "1",
+ },
+ ], {
+ duration: 300,
+ });
+
+ anim.finished.then(t.step_func(function() {
+ finished = true;
+ check();
+ }));
+});
+
+window.addEventListener("load", t.step_func(function() {
+ loaded = true;
+ check();
+}));
+</script>
+<!-- It is important that there are no more script after this stylesheet -->
+<link rel="stylesheet" href="empty-sheet.css?pipe=trickle(d2)">
+<body>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-animations/support/empty-sheet.css b/tests/wpt/web-platform-tests/css/css-animations/support/empty-sheet.css
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-animations/support/empty-sheet.css
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-content-distribution-vertical-lr.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-content-distribution-vertical-lr.html
new file mode 100644
index 00000000000..8217f4dd2c3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-content-distribution-vertical-lr.html
@@ -0,0 +1,358 @@
+<meta charset="utf-8">
+<title>CSS Grid Layout Test: aligned content distribution for vertical lr</title>
+<link rel="author" title="Rossana Monteriso" href="mailto:rmonteriso@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#distribution-values">
+<meta name="assert" content="This test checks that the align-content property is applied correctly when using content-distribution values for the vertical-lr writing mode.">
+<meta name="flags" content="ahem">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<link rel="stylesheet" href="/css/support/grid.css">
+
+<style>
+
+.grid {
+ grid-auto-columns: 20px;
+ grid-auto-rows: 40px;
+ position: relative;
+ width: 400px;
+ height: 300px;
+}
+
+.stretchedGrid {
+ grid-auto-rows: auto;
+}
+
+.thirdRowFirstColumn {
+ background-color: green;
+ grid-column: 1;
+ grid-row: 3;
+}
+
+.fourthRowFirstColumn {
+ background-color: deepskyblue;
+ grid-column: 1;
+ grid-row: 4;
+}
+
+.fourthRowSecondColumn {
+ background-color: maroon;
+ grid-column: 2;
+ grid-row: 4;
+}
+
+.thirdRowFirstColumn {
+ background-color: green;
+ grid-column: 1;
+ grid-row: 3;
+}
+
+.fourthRowFirstColumn {
+ background-color: deepskyblue;
+ grid-column: 1;
+ grid-row: 4;
+}
+
+.fourthRowSecondColumn {
+ background-color: maroon;
+ grid-column: 2;
+ grid-row: 4;
+}
+
+</style>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+<body onload="checkLayout('.grid')">
+
+<p>This test checks that the align-content property is applied correctly when using content-distribution values in vertical-lr writing mode.</p>
+
+<div style="position: relative">
+ <p>direction: LTR | align-content: 'space-between'</p>
+ <div class="grid alignContentSpaceBetween verticalLR" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="0" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="360" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="360" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: LTR | align-content: 'space-around'</p>
+ <div class="grid alignContentSpaceAround verticalLR" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="80" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="80" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="280" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="280" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: LTR | align-content: 'space-evenly'</p>
+ <div class="grid alignContentSpaceEvenly verticalLR" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="107" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="107" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="253" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="253" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: LTR | align-content: 'stretch'</p>
+ <div class="grid stretchedGrid alignContentStretch verticalLR" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="200" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="0" data-offset-y="20" data-expected-width="200" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="200" data-offset-y="0" data-expected-width="200" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="200" data-offset-y="20" data-expected-width="200" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: LTR | align-content: 'space-between'</p>
+ <div class="grid alignContentSpaceBetween verticalLR" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="0" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="180" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="360" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="360" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: LTR | align-content: 'space-around'</p>
+ <div class="grid alignContentSpaceAround verticalLR" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="47" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="47" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="180" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="313" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="313" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: LTR | align-content: 'space-evenly'</p>
+ <div class="grid alignContentSpaceEvenly verticalLR" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="70" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="70" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="180" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="290" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="290" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: LTR | align-content: 'stretch'</p>
+ <div class="grid stretchedGrid alignContentStretch verticalLR" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="133" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="0" data-offset-y="20" data-expected-width="133" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="133" data-offset-y="0" data-expected-width="133" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="133" data-offset-y="20" data-expected-width="133" data-expected-height="20"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="267" data-offset-y="0" data-expected-width="133" data-expected-height="20"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="267" data-offset-y="20" data-expected-width="133" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: LTR | align-content: 'space-between'</p>
+ <div class="grid alignContentSpaceBetween verticalLR" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="0" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="120" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="120" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="240" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="240" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ <div class="fourthRowFirstColumn" data-offset-x="360" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="fourthRowSecondColumn" data-offset-x="360" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: LTR | align-content: 'space-around'</p>
+ <div class="grid alignContentSpaceAround verticalLR" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="30" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="30" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="130" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="130" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="230" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="230" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ <div class="fourthRowFirstColumn" data-offset-x="330" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="fourthRowSecondColumn" data-offset-x="330" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: LTR | align-content: 'space-evenly'</p>
+ <div class="grid alignContentSpaceEvenly verticalLR" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="48" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="48" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="136" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="136" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="224" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="224" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ <div class="fourthRowFirstColumn" data-offset-x="312" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="fourthRowSecondColumn" data-offset-x="312" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: LTR | align-content: 'stretch'</p>
+ <div class="grid stretchedGrid alignContentStretch verticalLR" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="0" data-offset-y="20" data-expected-width="100" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="100" data-offset-y="20" data-expected-width="100" data-expected-height="20"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="200" data-offset-y="0" data-expected-width="100" data-expected-height="20"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="200" data-offset-y="20" data-expected-width="100" data-expected-height="20"></div>
+ <div class="fourthRowFirstColumn" data-offset-x="300" data-offset-y="0" data-expected-width="100" data-expected-height="20"></div>
+ <div class="fourthRowSecondColumn" data-offset-x="300" data-offset-y="20" data-expected-width="100" data-expected-height="20"></div>
+ </div>
+</div>
+
+<!-- RTL direction. -->
+<div style="position: relative">
+ <p>direction: RTL | align-content: 'space-between'</p>
+ <div class="grid alignContentSpaceBetween verticalLR directionRTL" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="0" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="360" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="360" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: RTL | align-content: 'space-around'</p>
+ <div class="grid alignContentSpaceAround verticalLR directionRTL" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="80" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="80" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="280" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="280" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: RTL | align-content: 'space-evenly'</p>
+ <div class="grid alignContentSpaceEvenly verticalLR directionRTL" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="107" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="107" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="253" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="253" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: RTL | align-content: 'stretch'</p>
+ <div class="grid stretchedGrid alignContentStretch verticalLR directionRTL" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="280" data-expected-width="200" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="0" data-offset-y="260" data-expected-width="200" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="200" data-offset-y="280" data-expected-width="200" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="200" data-offset-y="260" data-expected-width="200" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: RTL | align-content: 'space-between'</p>
+ <div class="grid alignContentSpaceBetween verticalLR directionRTL" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="0" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="180" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="360" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="360" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: RTL | align-content: 'space-around'</p>
+ <div class="grid alignContentSpaceAround verticalLR directionRTL" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="47" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="47" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="180" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="313" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="313" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: RTL | align-content: 'space-evenly'</p>
+ <div class="grid alignContentSpaceEvenly verticalLR directionRTL" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="70" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="70" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="180" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="290" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="290" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: RTL | align-content: 'stretch'</p>
+ <div class="grid stretchedGrid alignContentStretch verticalLR directionRTL" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="280" data-expected-width="133" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="0" data-offset-y="260" data-expected-width="133" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="133" data-offset-y="280" data-expected-width="133" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="133" data-offset-y="260" data-expected-width="133" data-expected-height="20"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="267" data-offset-y="280" data-expected-width="133" data-expected-height="20"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="267" data-offset-y="260" data-expected-width="133" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: RTL | align-content: 'space-between'</p>
+ <div class="grid alignContentSpaceBetween verticalLR directionRTL" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="0" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="120" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="120" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="240" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="240" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ <div class="fourthRowFirstColumn" data-offset-x="360" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="fourthRowSecondColumn" data-offset-x="360" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: RTL | align-content: 'space-around'</p>
+ <div class="grid alignContentSpaceAround verticalLR directionRTL" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="30" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="30" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="130" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="130" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="230" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="230" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ <div class="fourthRowFirstColumn" data-offset-x="330" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="fourthRowSecondColumn" data-offset-x="330" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: RTL | align-content: 'space-evenly'</p>
+ <div class="grid alignContentSpaceEvenly verticalLR directionRTL" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="48" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="48" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="136" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="136" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="224" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="224" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ <div class="fourthRowFirstColumn" data-offset-x="312" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="fourthRowSecondColumn" data-offset-x="312" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: RTL | align-content: 'stretch'</p>
+ <div class="grid stretchedGrid alignContentStretch verticalLR directionRTL" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="280" data-expected-width="100" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="0" data-offset-y="260" data-expected-width="100" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="100" data-offset-y="280" data-expected-width="100" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="100" data-offset-y="260" data-expected-width="100" data-expected-height="20"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="200" data-offset-y="280" data-expected-width="100" data-expected-height="20"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="200" data-offset-y="260" data-expected-width="100" data-expected-height="20"></div>
+ <div class="fourthRowFirstColumn" data-offset-x="300" data-offset-y="280" data-expected-width="100" data-expected-height="20"></div>
+ <div class="fourthRowSecondColumn" data-offset-x="300" data-offset-y="260" data-expected-width="100" data-expected-height="20"></div>
+ </div>
+</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-content-distribution-vertical-rl.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-content-distribution-vertical-rl.html
new file mode 100644
index 00000000000..096e3fd6910
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-content-distribution-vertical-rl.html
@@ -0,0 +1,358 @@
+<meta charset="utf-8">
+<title>CSS Grid Layout Test: aligned content distribution for vertical rl</title>
+<link rel="author" title="Rossana Monteriso" href="mailto:rmonteriso@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#distribution-values">
+<meta name="assert" content="This test checks that the align-content property is applied correctly when using content-distribution values for the vertical-rl writing mode.">
+<meta name="flags" content="ahem">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<link rel="stylesheet" href="/css/support/grid.css">
+
+<style>
+
+.grid {
+ grid-auto-columns: 20px;
+ grid-auto-rows: 40px;
+ position: relative;
+ width: 400px;
+ height: 300px;
+}
+
+.stretchedGrid {
+ grid-auto-rows: auto;
+}
+
+.thirdRowFirstColumn {
+ background-color: green;
+ grid-column: 1;
+ grid-row: 3;
+}
+
+.fourthRowFirstColumn {
+ background-color: deepskyblue;
+ grid-column: 1;
+ grid-row: 4;
+}
+
+.fourthRowSecondColumn {
+ background-color: maroon;
+ grid-column: 2;
+ grid-row: 4;
+}
+
+.thirdRowFirstColumn {
+ background-color: green;
+ grid-column: 1;
+ grid-row: 3;
+}
+
+.fourthRowFirstColumn {
+ background-color: deepskyblue;
+ grid-column: 1;
+ grid-row: 4;
+}
+
+.fourthRowSecondColumn {
+ background-color: maroon;
+ grid-column: 2;
+ grid-row: 4;
+}
+
+</style>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+<body onload="checkLayout('.grid')">
+
+<p>This test checks that the align-content property is applied correctly when using content-distribution values for vertical-rl mode.</p>
+
+<div style="position: relative">
+ <p>direction: LTR | align-content: 'space-between'</p>
+ <div class="grid alignContentSpaceBetween verticalRL" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="360" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="360" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="0" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: LTR | align-content: 'space-around'</p>
+ <div class="grid alignContentSpaceAround verticalRL" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="280" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="280" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="80" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="80" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: LTR | align-content: 'space-evenly'</p>
+ <div class="grid alignContentSpaceEvenly verticalRL" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="253" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="253" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="107" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="107" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: LTR | align-content: 'stretch'</p>
+ <div class="grid stretchedGrid alignContentStretch verticalRL" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="200" data-offset-y="0" data-expected-width="200" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="200" data-offset-y="20" data-expected-width="200" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="200" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="0" data-offset-y="20" data-expected-width="200" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: LTR | align-content: 'space-between'</p>
+ <div class="grid alignContentSpaceBetween verticalRL" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="360" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="360" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="180" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="0" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: LTR | align-content: 'space-around'</p>
+ <div class="grid alignContentSpaceAround verticalRL" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="313" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="313" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="180" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="47" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="47" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: LTR | align-content: 'space-evenly'</p>
+ <div class="grid alignContentSpaceEvenly verticalRL" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="290" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="290" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="180" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="70" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="70" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: LTR | align-content: 'stretch'</p>
+ <div class="grid stretchedGrid alignContentStretch verticalRL" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="267" data-offset-y="0" data-expected-width="133" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="267" data-offset-y="20" data-expected-width="133" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="133" data-offset-y="0" data-expected-width="133" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="133" data-offset-y="20" data-expected-width="133" data-expected-height="20"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="133" data-expected-height="20"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="0" data-offset-y="20" data-expected-width="133" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: LTR | align-content: 'space-between'</p>
+ <div class="grid alignContentSpaceBetween verticalRL" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="360" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="360" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="240" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="240" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="120" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="120" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ <div class="fourthRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="fourthRowSecondColumn" data-offset-x="0" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: LTR | align-content: 'space-around'</p>
+ <div class="grid alignContentSpaceAround verticalRL" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="330" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="330" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="230" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="230" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="130" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="130" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ <div class="fourthRowFirstColumn" data-offset-x="30" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="fourthRowSecondColumn" data-offset-x="30" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: LTR | align-content: 'space-evenly'</p>
+ <div class="grid alignContentSpaceEvenly verticalRL" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="312" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="312" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="224" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="224" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="136" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="136" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ <div class="fourthRowFirstColumn" data-offset-x="48" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div>
+ <div class="fourthRowSecondColumn" data-offset-x="48" data-offset-y="20" data-expected-width="40" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: LTR | align-content: 'stretch'</p>
+ <div class="grid stretchedGrid alignContentStretch verticalRL" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="300" data-offset-y="0" data-expected-width="100" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="300" data-offset-y="20" data-expected-width="100" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="200" data-offset-y="0" data-expected-width="100" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="200" data-offset-y="20" data-expected-width="100" data-expected-height="20"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="20"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="100" data-offset-y="20" data-expected-width="100" data-expected-height="20"></div>
+ <div class="fourthRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="20"></div>
+ <div class="fourthRowSecondColumn" data-offset-x="0" data-offset-y="20" data-expected-width="100" data-expected-height="20"></div>
+ </div>
+</div>
+
+<!-- RTL direction. -->
+<div style="position: relative">
+ <p>direction: RTL | align-content: 'space-between'</p>
+ <div class="grid alignContentSpaceBetween verticalRL directionRTL" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="360" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="360" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="0" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: RTL | align-content: 'space-around'</p>
+ <div class="grid alignContentSpaceAround verticalRL directionRTL" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="280" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="280" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="80" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="80" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: RTL | align-content: 'space-evenly'</p>
+ <div class="grid alignContentSpaceEvenly verticalRL directionRTL" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="253" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="253" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="107" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="107" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: RTL | align-content: 'stretch'</p>
+ <div class="grid stretchedGrid alignContentStretch verticalRL directionRTL" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="200" data-offset-y="280" data-expected-width="200" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="200" data-offset-y="260" data-expected-width="200" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="280" data-expected-width="200" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="0" data-offset-y="260" data-expected-width="200" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: RTL | align-content: 'space-between'</p>
+ <div class="grid alignContentSpaceBetween verticalRL directionRTL" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="360" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="360" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="180" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="0" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="0" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: RTL | align-content: 'space-around'</p>
+ <div class="grid alignContentSpaceAround verticalRL directionRTL" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="313" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="313" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="180" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="47" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="47" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: RTL | align-content: 'space-evenly'</p>
+ <div class="grid alignContentSpaceEvenly verticalRL directionRTL" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="290" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="290" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="180" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="70" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="70" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: RTL | align-content: 'stretch'</p>
+ <div class="grid stretchedGrid alignContentStretch verticalRL directionRTL" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="267" data-offset-y="280" data-expected-width="133" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="267" data-offset-y="260" data-expected-width="133" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="133" data-offset-y="280" data-expected-width="133" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="133" data-offset-y="260" data-expected-width="133" data-expected-height="20"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="0" data-offset-y="280" data-expected-width="133" data-expected-height="20"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="0" data-offset-y="260" data-expected-width="133" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: RTL | align-content: 'space-between'</p>
+ <div class="grid alignContentSpaceBetween verticalRL directionRTL" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="360" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="360" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="240" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="240" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="120" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="120" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ <div class="fourthRowFirstColumn" data-offset-x="0" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="fourthRowSecondColumn" data-offset-x="0" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: RTL | align-content: 'space-around'</p>
+ <div class="grid alignContentSpaceAround verticalRL directionRTL" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="330" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="330" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="230" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="230" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="130" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="130" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ <div class="fourthRowFirstColumn" data-offset-x="30" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="fourthRowSecondColumn" data-offset-x="30" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: RTL | align-content: 'space-evenly'</p>
+ <div class="grid alignContentSpaceEvenly verticalRL directionRTL" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="312" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="312" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="224" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="224" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="136" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="136" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ <div class="fourthRowFirstColumn" data-offset-x="48" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div>
+ <div class="fourthRowSecondColumn" data-offset-x="48" data-offset-y="260" data-expected-width="40" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: RTL | align-content: 'stretch'</p>
+ <div class="grid stretchedGrid alignContentStretch verticalRL directionRTL" data-expected-width="400" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="300" data-offset-y="280" data-expected-width="100" data-expected-height="20"></div>
+ <div class="firstRowSecondColumn" data-offset-x="300" data-offset-y="260" data-expected-width="100" data-expected-height="20"></div>
+ <div class="secondRowFirstColumn" data-offset-x="200" data-offset-y="280" data-expected-width="100" data-expected-height="20"></div>
+ <div class="secondRowSecondColumn" data-offset-x="200" data-offset-y="260" data-expected-width="100" data-expected-height="20"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="100" data-offset-y="280" data-expected-width="100" data-expected-height="20"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="100" data-offset-y="260" data-expected-width="100" data-expected-height="20"></div>
+ <div class="fourthRowFirstColumn" data-offset-x="0" data-offset-y="280" data-expected-width="100" data-expected-height="20"></div>
+ <div class="fourthRowSecondColumn" data-offset-x="0" data-offset-y="260" data-expected-width="100" data-expected-height="20"></div>
+ </div>
+</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-content-distribution.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-content-distribution.html
new file mode 100644
index 00000000000..7b66ddb9951
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-content-distribution.html
@@ -0,0 +1,358 @@
+<meta charset="utf-8">
+<title>CSS Grid Layout Test: aligned content distribution</title>
+<link rel="author" title="Rossana Monteriso" href="mailto:rmonteriso@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#distribution-values">
+<meta name="assert" content="This test checks that the align-content property is applied correctly when using content-distribution values.">
+<meta name="flags" content="ahem">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<link rel="stylesheet" href="/css/support/grid.css">
+
+<style>
+
+.grid {
+ grid-auto-columns: 20px;
+ grid-auto-rows: 40px;
+ position: relative;
+ width: 200px;
+ height: 300px;
+}
+
+.stretchedGrid {
+ grid-auto-rows: auto;
+}
+
+.thirdRowFirstColumn {
+ background-color: green;
+ grid-column: 1;
+ grid-row: 3;
+}
+
+.fourthRowFirstColumn {
+ background-color: deepskyblue;
+ grid-column: 1;
+ grid-row: 4;
+}
+
+.fourthRowSecondColumn {
+ background-color: maroon;
+ grid-column: 2;
+ grid-row: 4;
+}
+
+.thirdRowFirstColumn {
+ background-color: green;
+ grid-column: 1;
+ grid-row: 3;
+}
+
+.fourthRowFirstColumn {
+ background-color: deepskyblue;
+ grid-column: 1;
+ grid-row: 4;
+}
+
+.fourthRowSecondColumn {
+ background-color: maroon;
+ grid-column: 2;
+ grid-row: 4;
+}
+
+</style>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+<body onload="checkLayout('.grid')">
+
+<p>This test checks that the align-content property is applied correctly when using content-distribution values.</p>
+
+<div style="position: relative">
+ <p>direction: LTR | align-content: 'space-between'</p>
+ <div class="grid alignContentSpaceBetween" data-expected-width="200" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div>
+ <div class="firstRowSecondColumn" data-offset-x="20" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div>
+ <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="260" data-expected-width="20" data-expected-height="40"></div>
+ <div class="secondRowSecondColumn" data-offset-x="20" data-offset-y="260" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: LTR | align-content: 'space-around'</p>
+ <div class="grid alignContentSpaceAround" data-expected-width="200" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="55" data-expected-width="20" data-expected-height="40"></div>
+ <div class="firstRowSecondColumn" data-offset-x="20" data-offset-y="55" data-expected-width="20" data-expected-height="40"></div>
+ <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="205" data-expected-width="20" data-expected-height="40"></div>
+ <div class="secondRowSecondColumn" data-offset-x="20" data-offset-y="205" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: LTR | align-content: 'space-evenly'</p>
+ <div class="grid alignContentSpaceEvenly" data-expected-width="200" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="73" data-expected-width="20" data-expected-height="40"></div>
+ <div class="firstRowSecondColumn" data-offset-x="20" data-offset-y="73" data-expected-width="20" data-expected-height="40"></div>
+ <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="187" data-expected-width="20" data-expected-height="40"></div>
+ <div class="secondRowSecondColumn" data-offset-x="20" data-offset-y="187" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: LTR | align-content: 'stretch'</p>
+ <div class="grid stretchedGrid alignContentStretch" data-expected-width="200" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="20" data-expected-height="150"></div>
+ <div class="firstRowSecondColumn" data-offset-x="20" data-offset-y="0" data-expected-width="20" data-expected-height="150"></div>
+ <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="150" data-expected-width="20" data-expected-height="150"></div>
+ <div class="secondRowSecondColumn" data-offset-x="20" data-offset-y="150" data-expected-width="20" data-expected-height="150"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: LTR | align-content: 'space-between'</p>
+ <div class="grid alignContentSpaceBetween" data-expected-width="200" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div>
+ <div class="firstRowSecondColumn" data-offset-x="20" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div>
+ <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="130" data-expected-width="20" data-expected-height="40"></div>
+ <div class="secondRowSecondColumn" data-offset-x="20" data-offset-y="130" data-expected-width="20" data-expected-height="40"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="0" data-offset-y="260" data-expected-width="20" data-expected-height="40"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="20" data-offset-y="260" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: LTR | align-content: 'space-around'</p>
+ <div class="grid alignContentSpaceAround" data-expected-width="200" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="30" data-expected-width="20" data-expected-height="40"></div>
+ <div class="firstRowSecondColumn" data-offset-x="20" data-offset-y="30" data-expected-width="20" data-expected-height="40"></div>
+ <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="130" data-expected-width="20" data-expected-height="40"></div>
+ <div class="secondRowSecondColumn" data-offset-x="20" data-offset-y="130" data-expected-width="20" data-expected-height="40"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="0" data-offset-y="230" data-expected-width="20" data-expected-height="40"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="20" data-offset-y="230" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: LTR | align-content: 'space-evenly'</p>
+ <div class="grid alignContentSpaceEvenly" data-expected-width="200" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="45" data-expected-width="20" data-expected-height="40"></div>
+ <div class="firstRowSecondColumn" data-offset-x="20" data-offset-y="45" data-expected-width="20" data-expected-height="40"></div>
+ <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="130" data-expected-width="20" data-expected-height="40"></div>
+ <div class="secondRowSecondColumn" data-offset-x="20" data-offset-y="130" data-expected-width="20" data-expected-height="40"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="0" data-offset-y="215" data-expected-width="20" data-expected-height="40"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="20" data-offset-y="215" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: LTR | align-content: 'stretch'</p>
+ <div class="grid stretchedGrid alignContentStretch" data-expected-width="200" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="20" data-expected-height="100"></div>
+ <div class="firstRowSecondColumn" data-offset-x="20" data-offset-y="0" data-expected-width="20" data-expected-height="100"></div>
+ <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="100" data-expected-width="20" data-expected-height="100"></div>
+ <div class="secondRowSecondColumn" data-offset-x="20" data-offset-y="100" data-expected-width="20" data-expected-height="100"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="0" data-offset-y="200" data-expected-width="20" data-expected-height="100"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="20" data-offset-y="200" data-expected-width="20" data-expected-height="100"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: LTR | align-content: 'space-between'</p>
+ <div class="grid alignContentSpaceBetween" data-expected-width="200" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div>
+ <div class="firstRowSecondColumn" data-offset-x="20" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div>
+ <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="87" data-expected-width="20" data-expected-height="40"></div>
+ <div class="secondRowSecondColumn" data-offset-x="20" data-offset-y="87" data-expected-width="20" data-expected-height="40"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="0" data-offset-y="173" data-expected-width="20" data-expected-height="40"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="20" data-offset-y="173" data-expected-width="20" data-expected-height="40"></div>
+ <div class="fourthRowFirstColumn" data-offset-x="0" data-offset-y="260" data-expected-width="20" data-expected-height="40"></div>
+ <div class="fourthRowSecondColumn" data-offset-x="20" data-offset-y="260" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: LTR | align-content: 'space-around'</p>
+ <div class="grid alignContentSpaceAround" data-expected-width="200" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="18" data-expected-width="20" data-expected-height="40"></div>
+ <div class="firstRowSecondColumn" data-offset-x="20" data-offset-y="18" data-expected-width="20" data-expected-height="40"></div>
+ <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="93" data-expected-width="20" data-expected-height="40"></div>
+ <div class="secondRowSecondColumn" data-offset-x="20" data-offset-y="93" data-expected-width="20" data-expected-height="40"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="0" data-offset-y="168" data-expected-width="20" data-expected-height="40"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="20" data-offset-y="168" data-expected-width="20" data-expected-height="40"></div>
+ <div class="fourthRowFirstColumn" data-offset-x="0" data-offset-y="243" data-expected-width="20" data-expected-height="40"></div>
+ <div class="fourthRowSecondColumn" data-offset-x="20" data-offset-y="243" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: LTR | align-content: 'space-evenly'</p>
+ <div class="grid alignContentSpaceEvenly" data-expected-width="200" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="28" data-expected-width="20" data-expected-height="40"></div>
+ <div class="firstRowSecondColumn" data-offset-x="20" data-offset-y="28" data-expected-width="20" data-expected-height="40"></div>
+ <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="96" data-expected-width="20" data-expected-height="40"></div>
+ <div class="secondRowSecondColumn" data-offset-x="20" data-offset-y="96" data-expected-width="20" data-expected-height="40"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="0" data-offset-y="164" data-expected-width="20" data-expected-height="40"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="20" data-offset-y="164" data-expected-width="20" data-expected-height="40"></div>
+ <div class="fourthRowFirstColumn" data-offset-x="0" data-offset-y="232" data-expected-width="20" data-expected-height="40"></div>
+ <div class="fourthRowSecondColumn" data-offset-x="20" data-offset-y="232" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: LTR | align-content: 'stretch'</p>
+ <div class="grid stretchedGrid alignContentStretch" data-expected-width="200" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="20" data-expected-height="75"></div>
+ <div class="firstRowSecondColumn" data-offset-x="20" data-offset-y="0" data-expected-width="20" data-expected-height="75"></div>
+ <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="75" data-expected-width="20" data-expected-height="75"></div>
+ <div class="secondRowSecondColumn" data-offset-x="20" data-offset-y="75" data-expected-width="20" data-expected-height="75"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="0" data-offset-y="150" data-expected-width="20" data-expected-height="75"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="20" data-offset-y="150" data-expected-width="20" data-expected-height="75"></div>
+ <div class="fourthRowFirstColumn" data-offset-x="0" data-offset-y="225" data-expected-width="20" data-expected-height="75"></div>
+ <div class="fourthRowSecondColumn" data-offset-x="20" data-offset-y="225" data-expected-width="20" data-expected-height="75"></div>
+ </div>
+</div>
+
+<!-- RTL direction. -->
+<div style="position: relative">
+ <p>direction: RTL | align-content: 'space-between'</p>
+ <div class="grid alignContentSpaceBetween directionRTL" data-expected-width="200" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div>
+ <div class="firstRowSecondColumn" data-offset-x="160" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div>
+ <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="260" data-expected-width="20" data-expected-height="40"></div>
+ <div class="secondRowSecondColumn" data-offset-x="160" data-offset-y="260" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: RTL | align-content: 'space-around'</p>
+ <div class="grid alignContentSpaceAround directionRTL" data-expected-width="200" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="180" data-offset-y="55" data-expected-width="20" data-expected-height="40"></div>
+ <div class="firstRowSecondColumn" data-offset-x="160" data-offset-y="55" data-expected-width="20" data-expected-height="40"></div>
+ <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="205" data-expected-width="20" data-expected-height="40"></div>
+ <div class="secondRowSecondColumn" data-offset-x="160" data-offset-y="205" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: RTL | align-content: 'space-evenly'</p>
+ <div class="grid alignContentSpaceEvenly directionRTL" data-expected-width="200" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="180" data-offset-y="73" data-expected-width="20" data-expected-height="40"></div>
+ <div class="firstRowSecondColumn" data-offset-x="160" data-offset-y="73" data-expected-width="20" data-expected-height="40"></div>
+ <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="187" data-expected-width="20" data-expected-height="40"></div>
+ <div class="secondRowSecondColumn" data-offset-x="160" data-offset-y="187" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: RTL | align-content: 'stretch'</p>
+ <div class="grid stretchedGrid alignContentStretch directionRTL" data-expected-width="200" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="20" data-expected-height="150"></div>
+ <div class="firstRowSecondColumn" data-offset-x="160" data-offset-y="0" data-expected-width="20" data-expected-height="150"></div>
+ <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="150" data-expected-width="20" data-expected-height="150"></div>
+ <div class="secondRowSecondColumn" data-offset-x="160" data-offset-y="150" data-expected-width="20" data-expected-height="150"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: RTL | align-content: 'space-between'</p>
+ <div class="grid alignContentSpaceBetween directionRTL" data-expected-width="200" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div>
+ <div class="firstRowSecondColumn" data-offset-x="160" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div>
+ <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="130" data-expected-width="20" data-expected-height="40"></div>
+ <div class="secondRowSecondColumn" data-offset-x="160" data-offset-y="130" data-expected-width="20" data-expected-height="40"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="180" data-offset-y="260" data-expected-width="20" data-expected-height="40"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="160" data-offset-y="260" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: RTL | align-content: 'space-around'</p>
+ <div class="grid alignContentSpaceAround directionRTL" data-expected-width="200" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="180" data-offset-y="30" data-expected-width="20" data-expected-height="40"></div>
+ <div class="firstRowSecondColumn" data-offset-x="160" data-offset-y="30" data-expected-width="20" data-expected-height="40"></div>
+ <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="130" data-expected-width="20" data-expected-height="40"></div>
+ <div class="secondRowSecondColumn" data-offset-x="160" data-offset-y="130" data-expected-width="20" data-expected-height="40"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="180" data-offset-y="230" data-expected-width="20" data-expected-height="40"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="160" data-offset-y="230" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: RTL | align-content: 'space-evenly'</p>
+ <div class="grid alignContentSpaceEvenly directionRTL" data-expected-width="200" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="180" data-offset-y="45" data-expected-width="20" data-expected-height="40"></div>
+ <div class="firstRowSecondColumn" data-offset-x="160" data-offset-y="45" data-expected-width="20" data-expected-height="40"></div>
+ <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="130" data-expected-width="20" data-expected-height="40"></div>
+ <div class="secondRowSecondColumn" data-offset-x="160" data-offset-y="130" data-expected-width="20" data-expected-height="40"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="180" data-offset-y="215" data-expected-width="20" data-expected-height="40"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="160" data-offset-y="215" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: RTL | align-content: 'stretch'</p>
+ <div class="grid stretchedGrid alignContentStretch directionRTL" data-expected-width="200" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="20" data-expected-height="100"></div>
+ <div class="firstRowSecondColumn" data-offset-x="160" data-offset-y="0" data-expected-width="20" data-expected-height="100"></div>
+ <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="100" data-expected-width="20" data-expected-height="100"></div>
+ <div class="secondRowSecondColumn" data-offset-x="160" data-offset-y="100" data-expected-width="20" data-expected-height="100"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="180" data-offset-y="200" data-expected-width="20" data-expected-height="100"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="160" data-offset-y="200" data-expected-width="20" data-expected-height="100"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: RTL | align-content: 'space-between'</p>
+ <div class="grid alignContentSpaceBetween directionRTL" data-expected-width="200" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div>
+ <div class="firstRowSecondColumn" data-offset-x="160" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div>
+ <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="87" data-expected-width="20" data-expected-height="40"></div>
+ <div class="secondRowSecondColumn" data-offset-x="160" data-offset-y="87" data-expected-width="20" data-expected-height="40"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="180" data-offset-y="173" data-expected-width="20" data-expected-height="40"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="160" data-offset-y="173" data-expected-width="20" data-expected-height="40"></div>
+ <div class="fourthRowFirstColumn" data-offset-x="180" data-offset-y="260" data-expected-width="20" data-expected-height="40"></div>
+ <div class="fourthRowSecondColumn" data-offset-x="160" data-offset-y="260" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: RTL | align-content: 'space-around'</p>
+ <div class="grid alignContentSpaceAround directionRTL" data-expected-width="200" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="180" data-offset-y="18" data-expected-width="20" data-expected-height="40"></div>
+ <div class="firstRowSecondColumn" data-offset-x="160" data-offset-y="18" data-expected-width="20" data-expected-height="40"></div>
+ <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="93" data-expected-width="20" data-expected-height="40"></div>
+ <div class="secondRowSecondColumn" data-offset-x="160" data-offset-y="93" data-expected-width="20" data-expected-height="40"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="180" data-offset-y="168" data-expected-width="20" data-expected-height="40"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="160" data-offset-y="168" data-expected-width="20" data-expected-height="40"></div>
+ <div class="fourthRowFirstColumn" data-offset-x="180" data-offset-y="243" data-expected-width="20" data-expected-height="40"></div>
+ <div class="fourthRowSecondColumn" data-offset-x="160" data-offset-y="243" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: RTL | align-content: 'space-evenly'</p>
+ <div class="grid alignContentSpaceEvenly directionRTL" data-expected-width="200" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="180" data-offset-y="28" data-expected-width="20" data-expected-height="40"></div>
+ <div class="firstRowSecondColumn" data-offset-x="160" data-offset-y="28" data-expected-width="20" data-expected-height="40"></div>
+ <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="96" data-expected-width="20" data-expected-height="40"></div>
+ <div class="secondRowSecondColumn" data-offset-x="160" data-offset-y="96" data-expected-width="20" data-expected-height="40"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="180" data-offset-y="164" data-expected-width="20" data-expected-height="40"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="160" data-offset-y="164" data-expected-width="20" data-expected-height="40"></div>
+ <div class="fourthRowFirstColumn" data-offset-x="180" data-offset-y="232" data-expected-width="20" data-expected-height="40"></div>
+ <div class="fourthRowSecondColumn" data-offset-x="160" data-offset-y="232" data-expected-width="20" data-expected-height="40"></div>
+ </div>
+</div>
+
+<div style="position: relative">
+ <p>direction: RTL | align-content: 'stretch'</p>
+ <div class="grid stretchedGrid alignContentStretch directionRTL" data-expected-width="200" data-expected-height="300">
+ <div class="firstRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="20" data-expected-height="75"></div>
+ <div class="firstRowSecondColumn" data-offset-x="160" data-offset-y="0" data-expected-width="20" data-expected-height="75"></div>
+ <div class="secondRowFirstColumn" data-offset-x="180" data-offset-y="75" data-expected-width="20" data-expected-height="75"></div>
+ <div class="secondRowSecondColumn" data-offset-x="160" data-offset-y="75" data-expected-width="20" data-expected-height="75"></div>
+ <div class="thirdRowFirstColumn" data-offset-x="180" data-offset-y="150" data-expected-width="20" data-expected-height="75"></div>
+ <div class="thirdRowSecondColumn" data-offset-x="160" data-offset-y="150" data-expected-width="20" data-expected-height="75"></div>
+ <div class="fourthRowFirstColumn" data-offset-x="180" data-offset-y="225" data-expected-width="20" data-expected-height="75"></div>
+ <div class="fourthRowSecondColumn" data-offset-x="160" data-offset-y="225" data-expected-width="20" data-expected-height="75"></div>
+ </div>
+</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/coop-navigated-history-popup.https.html b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/coop-navigated-history-popup.https.html
new file mode 100644
index 00000000000..bd1cabafd41
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/coop-navigated-history-popup.https.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<title>Cross-Origin-Opener-Policy: a navigating popup that then goes back in history</title>
+<meta name="timeout" content="long">
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src="/common/get-host-info.sub.js"></script>
+<script src="resources/common.js"></script>
+<script>
+const title = `Popup navigating to other origin with COOP: same-origin and back in history`;
+const channel = title.replace(/ /g,"-");
+const opener = false;
+const openerDOMAccess = false;
+const navigateURL = `${CROSS_ORIGIN.origin}/html/cross-origin-opener-policy/resources/coop-coep.py?coop=same-origin&coep=&navHistory=-1`;
+
+async_test(t => {
+ url_test(t, `${SAME_ORIGIN.origin}/html/cross-origin-opener-policy/resources/coop-coep.py?coop=&coep=&navigate=${encodeURIComponent(navigateURL)}&avoidBackAndForth=1&channel=${channel}`, channel, opener, openerDOMAccess);
+}, title);
+</script>
diff --git a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/resources/common.js b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/resources/common.js
index 53b80bb6e99..477bc6c948f 100644
--- a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/resources/common.js
+++ b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/resources/common.js
@@ -2,12 +2,16 @@ const SAME_ORIGIN = {origin: get_host_info().HTTPS_ORIGIN, name: "SAME_ORIGIN"};
const SAME_SITE = {origin: get_host_info().HTTPS_REMOTE_ORIGIN, name: "SAME_SITE"};
const CROSS_ORIGIN = {origin: get_host_info().HTTPS_NOTSAMESITE_ORIGIN, name: "CROSS_ORIGIN"}
-function url_test(t, url, channelName, hasOpener) {
+function url_test(t, url, channelName, hasOpener, openerDOMAccess) {
const bc = new BroadcastChannel(channelName);
bc.onmessage = t.step_func_done(event => {
const payload = event.data;
- assert_equals(payload.name, hasOpener ? channelName : "");
- assert_equals(payload.opener, hasOpener);
+ assert_equals(payload.name, hasOpener ? channelName : "", 'name');
+ assert_equals(payload.opener, hasOpener, 'opener');
+ // TODO(zcorpan): add openerDOMAccess expectations to all tests
+ if (openerDOMAccess !== undefined) {
+ assert_equals(payload.openerDOMAccess, openerDOMAccess, 'openerDOMAccess');
+ }
});
const w = window.open(url, channelName);
@@ -17,8 +21,8 @@ function url_test(t, url, channelName, hasOpener) {
t.add_cleanup(() => w.close());
}
-function coop_coep_test(t, host, coop, coep, channelName, hasOpener) {
- url_test(t, `${host.origin}/html/cross-origin-opener-policy/resources/coop-coep.py?coop=${encodeURIComponent(coop)}&coep=${coep}&channel=${channelName}`, channelName, hasOpener);
+function coop_coep_test(t, host, coop, coep, channelName, hasOpener, openerDOMAccess) {
+ url_test(t, `${host.origin}/html/cross-origin-opener-policy/resources/coop-coep.py?coop=${encodeURIComponent(coop)}&coep=${coep}&channel=${channelName}`, channelName, hasOpener, openerDOMAccess);
}
function coop_test(t, host, coop, channelName, hasOpener) {
diff --git a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/resources/coop-coep.py b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/resources/coop-coep.py
index 8691e1b59d3..e6f655ab728 100644
--- a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/resources/coop-coep.py
+++ b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/resources/coop-coep.py
@@ -21,13 +21,38 @@ def main(request, response):
<script src="/common/get-host-info.sub.js"></script>
<iframe></iframe>
<script>
- const navigate = new URL(location).searchParams.get("navigate");
- if (navigate !== null) {
- self.location = navigate;
+ const params = new URL(location).searchParams;
+ const navHistory = params.get("navHistory");
+ const avoidBackAndForth = params.get("avoidBackAndForth");
+ const navigate = params.get("navigate");
+ // Need to wait until the page is fully loaded before navigating
+ // so that it creates a history entry properly.
+ const fullyLoaded = new Promise((resolve, reject) => {
+ addEventListener('load', () => {
+ requestAnimationFrame(() => {
+ requestAnimationFrame(() => {
+ resolve();
+ });
+ });
+ });
+ });
+ if (navHistory !== null) {
+ fullyLoaded.then(() => {
+ history.go(Number(navHistory));
+ });
+ } else if (navigate !== null && (history.length === 1 || !avoidBackAndForth)) {
+ fullyLoaded.then(() => {
+ self.location = navigate;
+ });
} else {
+ let openerDOMAccessAllowed = false;
+ try {
+ openerDOMAccessAllowed = !!self.opener.document.URL;
+ } catch(ex) {
+ }
const iframe = document.querySelector("iframe");
iframe.onload = () => {
- const payload = { name: self.name, opener: !!self.opener };
+ const payload = { name: self.name, opener: !!self.opener, openerDOMAccess: openerDOMAccessAllowed };
iframe.contentWindow.postMessage(payload, "*");
};
const channelName = new URL(location).searchParams.get("channel");
diff --git a/tests/wpt/web-platform-tests/html/rendering/the-details-element/summary-display-list-item-ref.html b/tests/wpt/web-platform-tests/html/rendering/the-details-element/summary-display-list-item-ref.html
new file mode 100644
index 00000000000..31e98d3fdca
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/rendering/the-details-element/summary-display-list-item-ref.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Reference: summary with 'display: list-item'</title>
+<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com">
+<style>
+details {
+ margin-left: 50px;
+}
+.inside {
+ list-style-position: inside;
+}
+</style>
+<details>
+ <summary>summary</summary>
+ content
+</details>
+<details>
+ <summary class="inside">summary</summary>
+ content
+</details>
+<details open>
+ <summary>summary</summary>
+ content
+</details>
+<details open>
+ <summary class="inside">summary</summary>
+ content
+</details>
diff --git a/tests/wpt/web-platform-tests/html/rendering/the-details-element/summary-display-list-item.html b/tests/wpt/web-platform-tests/html/rendering/the-details-element/summary-display-list-item.html
new file mode 100644
index 00000000000..c2e96e987ea
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/rendering/the-details-element/summary-display-list-item.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Test: summary with 'display: list-item'</title>
+<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com">
+<link rel="match" href="summary-display-list-item-ref.html">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#the-details-and-summary-elements">
+<meta name="assert" content="Checks that styling a <summary> with 'display: list-item' has no effect since it should already be a list item by default.">
+<style>
+summary {
+ display: list-item;
+}
+details {
+ margin-left: 50px;
+}
+.inside {
+ list-style-position: inside;
+}
+</style>
+<details>
+ <summary>summary</summary>
+ content
+</details>
+<details>
+ <summary class="inside">summary</summary>
+ content
+</details>
+<details open>
+ <summary>summary</summary>
+ content
+</details>
+<details open>
+ <summary class="inside">summary</summary>
+ content
+</details>
diff --git a/tests/wpt/web-platform-tests/interfaces/reporting.idl b/tests/wpt/web-platform-tests/interfaces/reporting.idl
index f5370e8f1e6..d42f0bac59c 100644
--- a/tests/wpt/web-platform-tests/interfaces/reporting.idl
+++ b/tests/wpt/web-platform-tests/interfaces/reporting.idl
@@ -33,33 +33,6 @@ dictionary ReportingObserverOptions {
typedef sequence<Report> ReportList;
-[Exposed=(Window,Worker)]
-interface DeprecationReportBody : ReportBody {
- [Default] object toJSON();
- readonly attribute DOMString id;
- readonly attribute Date? anticipatedRemoval;
- readonly attribute DOMString message;
- readonly attribute DOMString? sourceFile;
- readonly attribute unsigned long? lineNumber;
- readonly attribute unsigned long? columnNumber;
-};
-
-[Exposed=(Window,Worker)]
-interface InterventionReportBody : ReportBody {
- [Default] object toJSON();
- readonly attribute DOMString id;
- readonly attribute DOMString message;
- readonly attribute DOMString? sourceFile;
- readonly attribute unsigned long? lineNumber;
- readonly attribute unsigned long? columnNumber;
-};
-
-[Exposed=(Window,Worker)]
-interface CrashReportBody : ReportBody {
- [Default] object toJSON();
- readonly attribute DOMString? reason;
-};
-
dictionary GenerateTestReportParameters {
required DOMString message;
DOMString group = "default";
diff --git a/tests/wpt/web-platform-tests/interfaces/webauthn.idl b/tests/wpt/web-platform-tests/interfaces/webauthn.idl
index 29025f35eec..56c2856b19a 100644
--- a/tests/wpt/web-platform-tests/interfaces/webauthn.idl
+++ b/tests/wpt/web-platform-tests/interfaces/webauthn.idl
@@ -236,10 +236,10 @@ partial dictionary AuthenticationExtensionsClientOutputs {
UvmEntries uvm;
};
-dictionary authenticatorBiometricPerfBounds{
+dictionary AuthenticatorBiometricPerfBounds {
float FAR;
float FRR;
- };
+};
partial dictionary AuthenticationExtensionsClientInputs {
boolean credProps;
diff --git a/tests/wpt/web-platform-tests/interfaces/webrtc.idl b/tests/wpt/web-platform-tests/interfaces/webrtc.idl
index badbe4df1dc..053afdcb135 100644
--- a/tests/wpt/web-platform-tests/interfaces/webrtc.idl
+++ b/tests/wpt/web-platform-tests/interfaces/webrtc.idl
@@ -588,7 +588,6 @@ interface RTCError : DOMException {
constructor(RTCErrorInit init, optional DOMString message = "");
readonly attribute RTCErrorDetailType errorDetail;
readonly attribute long? sdpLineNumber;
- readonly attribute long? httpRequestStatusCode;
readonly attribute long? sctpCauseCode;
readonly attribute unsigned long? receivedAlert;
readonly attribute unsigned long? sentAlert;
@@ -597,7 +596,6 @@ interface RTCError : DOMException {
dictionary RTCErrorInit {
required RTCErrorDetailType errorDetail;
long sdpLineNumber;
- long httpRequestStatusCode;
long sctpCauseCode;
unsigned long receivedAlert;
unsigned long sentAlert;
diff --git a/tests/wpt/web-platform-tests/lint.whitelist b/tests/wpt/web-platform-tests/lint.whitelist
index 353922a456c..425730feea7 100644
--- a/tests/wpt/web-platform-tests/lint.whitelist
+++ b/tests/wpt/web-platform-tests/lint.whitelist
@@ -99,6 +99,7 @@ TRAILING WHITESPACE: cookies/http-state/resources/test-files/*
# Intentional use of print statements
PRINT STATEMENT: dom/nodes/Document-createElement-namespace-tests/generate.py
PRINT STATEMENT: encrypted-media/polyfill/make-polyfill-tests.py
+PRINT STATEMENT: resources/test/conftest.py
PRINT STATEMENT: webdriver/tests/support/helpers.py
# semi-legitimate use of console.*
diff --git a/tests/wpt/web-platform-tests/resources/test/conftest.py b/tests/wpt/web-platform-tests/resources/test/conftest.py
index 4caa7943fb7..857f1b41bcb 100644
--- a/tests/wpt/web-platform-tests/resources/test/conftest.py
+++ b/tests/wpt/web-platform-tests/resources/test/conftest.py
@@ -1,4 +1,4 @@
-import io
+import copy
import json
import os
import ssl
@@ -16,6 +16,7 @@ HERE = os.path.dirname(os.path.abspath(__file__))
WPT_ROOT = os.path.normpath(os.path.join(HERE, '..', '..'))
HARNESS = os.path.join(HERE, 'harness.html')
TEST_TYPES = ('functional', 'unit')
+DEFAULT_VARIANTS = ["?default"]
def pytest_addoption(parser):
@@ -108,14 +109,15 @@ class HTMLItem(pytest.Item, pytest.Collector):
raise ValueError('Could not resolve path "%s" from %s' % (src, filename))
if not name:
- raise ValueError('No name found in file: %s' % filename)
+ raise ValueError('No name found in %s add a <title> element' % filename)
elif self.type == 'functional':
if not self.expected:
raise ValueError('Functional tests must specify expected report data')
if not includes_variants_script:
- raise ValueError('No variants script found in file: %s' % filename)
+ raise ValueError('No variants script found in file %s add '
+ '\'<script src="../../variants.js"></script>\'' % filename)
if len(self.variants) == 0:
- raise ValueError('No test variants specified in file %s' % filename)
+ self.variants = DEFAULT_VARIANTS
elif self.type == 'unit' and self.expected:
raise ValueError('Unit tests must not specify expected report data')
@@ -153,7 +155,9 @@ class HTMLItem(pytest.Item, pytest.Collector):
'runTest("%s", "foo", arguments[0])' % self.url
)
- summarized = self._summarize(actual)
+ summarized = self._summarize(copy.deepcopy(actual))
+
+ print(json.dumps(summarized, indent=2))
assert summarized[u'summarized_status'][u'status_string'] == u'OK', summarized[u'summarized_status'][u'message']
for test in summarized[u'summarized_tests']:
@@ -173,12 +177,15 @@ class HTMLItem(pytest.Item, pytest.Collector):
test_url = self.url + variant
actual = driver.execute_async_script('runTest("%s", "foo", arguments[0])' % test_url)
+ summarized = self._summarize(copy.deepcopy(actual))
+
+ print(json.dumps(summarized, indent=2))
+
# Test object ordering is not guaranteed. This weak assertion verifies
# that the indices are unique and sequential
indices = [test_obj.get('index') for test_obj in actual['tests']]
self._assert_sequence(indices)
- summarized = self._summarize(actual)
self.expected[u'summarized_tests'].sort(key=lambda test_obj: test_obj.get('name'))
assert summarized == self.expected
diff --git a/tests/wpt/web-platform-tests/resources/test/tests/functional/assert-array-equals.html b/tests/wpt/web-platform-tests/resources/test/tests/functional/assert-array-equals.html
new file mode 100644
index 00000000000..d56419d1f31
--- /dev/null
+++ b/tests/wpt/web-platform-tests/resources/test/tests/functional/assert-array-equals.html
@@ -0,0 +1,163 @@
+<!DOCTYPE HTML>
+<title>assert_array_equals</title>
+<script src="../../variants.js"></script>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+test(() => {
+ assert_array_equals([], []);
+}, "empty and equal");
+test(() => {
+ assert_array_equals([1], [1]);
+}, "non-empty and equal");
+test(() => {
+ assert_array_equals([], [1]);
+}, "length differs");
+test(() => {
+ assert_array_equals([1], [,]);
+}, "property is present");
+test(() => {
+ assert_array_equals([,], [1]);
+}, "property is missing");
+test(() => {
+ assert_array_equals([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20], ["x",1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]);
+}, "property 0 differs");
+test(() => {
+ assert_array_equals([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20], [0,1,2,3,4,"x",6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]);
+}, "property 5 differs");
+test(() => {
+ assert_array_equals([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21], [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]);
+}, "lengths differ and input array beyond display limit");
+test(() => {
+ assert_array_equals([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21], [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]);
+}, "lengths differ and expected array beyond display limit");
+test(() => {
+ assert_array_equals([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21], [,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]);
+}, "property 0 is present and arrays are beyond display limit");
+test(() => {
+ assert_array_equals([,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21], [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]);
+}, "property 0 is missing and arrays are beyond display limit");
+test(() => {
+ assert_array_equals([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21], [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,,19,20,21]);
+}, "property 18 is present and arrays are beyond display limit");
+test(() => {
+ assert_array_equals([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,,19,20,21], [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]);
+}, "property 18 is missing and arrays are beyond display limit");
+test(() => {
+ assert_array_equals([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21], ["x",1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]);
+}, "property 0 differs and arrays are beyond display limit");
+test(() => {
+ assert_array_equals([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21], [0,1,2,3,4,"x",6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]);
+}, "property 5 differs and arrays are beyond display limit");
+test(() => {
+ assert_array_equals([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26], [0,1,2,3,4,5,6,7,8,9,10,11,"x",13,14,15,16,17,18,19,20,21,22,23,24,25,26]);
+}, "property 5 differs and arrays are beyond display limit on both sides");
+</script>
+<script type="text/json" id="expected">
+{
+ "type": "complete",
+ "summarized_status": {
+ "message": null,
+ "status_string": "OK"
+ },
+ "summarized_tests": [
+ {
+ "name": "empty and equal",
+ "message": null,
+ "properties": {},
+ "status_string": "PASS"
+ },
+ {
+ "name": "length differs",
+ "message": "assert_array_equals: lengths differ, expected array [1] length 1, got [] length 0",
+ "properties": {},
+ "status_string": "FAIL"
+ },
+ {
+ "name": "lengths differ and expected array beyond display limit",
+ "message": "assert_array_equals: lengths differ, expected array [\u2026, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] length 22, got [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] length 21",
+ "properties": {},
+ "status_string": "FAIL"
+ },
+ {
+ "name": "lengths differ and input array beyond display limit",
+ "message": "assert_array_equals: lengths differ, expected array [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] length 21, got [\u2026, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] length 22",
+ "properties": {},
+ "status_string": "FAIL"
+ },
+ {
+ "name": "non-empty and equal",
+ "message": null,
+ "properties": {},
+ "status_string": "PASS"
+ },
+ {
+ "name": "property 0 differs",
+ "message": "assert_array_equals: expected property 0 to be \"x\" but got 0 (expected array [\"x\", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] got [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20])",
+ "properties": {},
+ "status_string": "FAIL"
+ },
+ {
+ "name": "property 0 differs and arrays are beyond display limit",
+ "message": "assert_array_equals: expected property 0 to be \"x\" but got 0 (expected array [\"x\", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, \u2026] got [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, \u2026])",
+ "properties": {},
+ "status_string": "FAIL"
+ },
+ {
+ "name": "property 0 is missing and arrays are beyond display limit",
+ "message": "assert_array_equals: expected property 0 to be \"present\" but was \"missing\" (expected array [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, \u2026] got [, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, \u2026])",
+ "properties": {},
+ "status_string": "FAIL"
+ },
+ {
+ "name": "property 0 is present and arrays are beyond display limit",
+ "message": "assert_array_equals: expected property 0 to be \"missing\" but was \"present\" (expected array [, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, \u2026] got [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, \u2026])",
+ "properties": {},
+ "status_string": "FAIL"
+ },
+ {
+ "name": "property 18 is missing and arrays are beyond display limit",
+ "message": "assert_array_equals: expected property 18 to be \"present\" but was \"missing\" (expected array [\u2026, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] got [\u2026, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, , 19, 20, 21])",
+ "properties": {},
+ "status_string": "FAIL"
+ },
+ {
+ "name": "property 18 is present and arrays are beyond display limit",
+ "message": "assert_array_equals: expected property 18 to be \"missing\" but was \"present\" (expected array [\u2026, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, , 19, 20, 21] got [\u2026, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21])",
+ "properties": {},
+ "status_string": "FAIL"
+ },
+ {
+ "name": "property 5 differs",
+ "message": "assert_array_equals: expected property 5 to be \"x\" but got 5 (expected array [0, 1, 2, 3, 4, \"x\", 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] got [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20])",
+ "properties": {},
+ "status_string": "FAIL"
+ },
+ {
+ "name": "property 5 differs and arrays are beyond display limit",
+ "message": "assert_array_equals: expected property 5 to be \"x\" but got 5 (expected array [0, 1, 2, 3, 4, \"x\", 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, \u2026] got [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, \u2026])",
+ "properties": {},
+ "status_string": "FAIL"
+ },
+ {
+ "name": "property 5 differs and arrays are beyond display limit on both sides",
+ "message": "assert_array_equals: expected property 12 to be \"x\" but got 12 (expected array [\u2026, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, \"x\", 13, 14, 15, 16, 17, 18, 19, 20, 21, \u2026] got [\u2026, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, \u2026])",
+ "properties": {},
+ "status_string": "FAIL"
+ },
+ {
+ "name": "property is missing",
+ "message": "assert_array_equals: expected property 0 to be \"present\" but was \"missing\" (expected array [1] got [])",
+ "properties": {},
+ "status_string": "FAIL"
+ },
+ {
+ "name": "property is present",
+ "message": "assert_array_equals: expected property 0 to be \"missing\" but was \"present\" (expected array [] got [1])",
+ "properties": {},
+ "status_string": "FAIL"
+ }
+ ]
+}
+</script>
diff --git a/tests/wpt/web-platform-tests/resources/test/variants.js b/tests/wpt/web-platform-tests/resources/test/variants.js
index eebac6f7d14..c40085a329f 100644
--- a/tests/wpt/web-platform-tests/resources/test/variants.js
+++ b/tests/wpt/web-platform-tests/resources/test/variants.js
@@ -1,5 +1,7 @@
(function() {
'use strict';
+ // NOTE: When new default variants are added DEFAULT_VARIANTS in conftest.py
+ // must also be updated
var variants = {
/**
* Tests are executed in the absence of the global Promise constructor by
diff --git a/tests/wpt/web-platform-tests/resources/testharness.js b/tests/wpt/web-platform-tests/resources/testharness.js
index f289e779720..2c3664dfa6a 100644
--- a/tests/wpt/web-platform-tests/resources/testharness.js
+++ b/tests/wpt/web-platform-tests/resources/testharness.js
@@ -1006,7 +1006,15 @@ policies and contribution forms [3].
seen.push(val);
}
if (Array.isArray(val)) {
- return "[" + val.map(function(x) {return format_value(x, seen);}).join(", ") + "]";
+ let output = "[";
+ if (val.beginEllipsis !== undefined) {
+ output += "…, ";
+ }
+ output += val.map(function(x) {return format_value(x, seen);}).join(", ");
+ if (val.endEllipsis !== undefined) {
+ output += ", …";
+ }
+ return output + "]";
}
switch (typeof val) {
@@ -1178,25 +1186,57 @@ policies and contribution forms [3].
function assert_array_equals(actual, expected, description)
{
+ const max_array_length = 20;
+ function shorten_array(arr, offset = 0) {
+ // Make ", …" only show up when it would likely reduce the length, not accounting for
+ // fonts.
+ if (arr.length < max_array_length + 2) {
+ return arr;
+ }
+ // By default we want half the elements after the offset and half before
+ // But if that takes us past the end of the array, we have more before, and
+ // if it takes us before the start we have more after.
+ const length_after_offset = Math.floor(max_array_length / 2);
+ let upper_bound = Math.min(length_after_offset + offset, arr.length);
+ const lower_bound = Math.max(upper_bound - max_array_length, 0);
+
+ if (lower_bound === 0) {
+ upper_bound = max_array_length;
+ }
+
+ const output = arr.slice(lower_bound, upper_bound);
+ if (lower_bound > 0) {
+ output.beginEllipsis = true;
+ }
+ if (upper_bound < arr.length) {
+ output.endEllipsis = true;
+ }
+ return output;
+ }
+
assert(typeof actual === "object" && actual !== null && "length" in actual,
"assert_array_equals", description,
"value is ${actual}, expected array",
{actual:actual});
assert(actual.length === expected.length,
"assert_array_equals", description,
- "lengths differ, expected ${expected} got ${actual}",
- {expected:expected.length, actual:actual.length});
+ "lengths differ, expected array ${expected} length ${expectedLength}, got ${actual} length ${actualLength}",
+ {expected:shorten_array(expected, expected.length - 1), expectedLength:expected.length,
+ actual:shorten_array(actual, actual.length - 1), actualLength:actual.length
+ });
for (var i = 0; i < actual.length; i++) {
assert(actual.hasOwnProperty(i) === expected.hasOwnProperty(i),
"assert_array_equals", description,
- "property ${i}, property expected to be ${expected} but was ${actual}",
+ "expected property ${i} to be ${expected} but was ${actual} (expected array ${arrayExpected} got ${arrayActual})",
{i:i, expected:expected.hasOwnProperty(i) ? "present" : "missing",
- actual:actual.hasOwnProperty(i) ? "present" : "missing"});
+ actual:actual.hasOwnProperty(i) ? "present" : "missing",
+ arrayExpected:shorten_array(expected, i), arrayActual:shorten_array(actual, i)});
assert(same_value(expected[i], actual[i]),
"assert_array_equals", description,
- "property ${i}, expected ${expected} but got ${actual}",
- {i:i, expected:expected[i], actual:actual[i]});
+ "expected property ${i} to be ${expected} but got ${actual} (expected array ${arrayExpected} got ${arrayActual})",
+ {i:i, expected:expected[i], actual:actual[i],
+ arrayExpected:shorten_array(expected, i), arrayActual:shorten_array(actual, i)});
}
}
expose(assert_array_equals, "assert_array_equals");
@@ -1216,7 +1256,7 @@ policies and contribution forms [3].
"assert_array_approx_equals", description,
"property ${i}, property expected to be ${expected} but was ${actual}",
{i:i, expected:expected.hasOwnProperty(i) ? "present" : "missing",
- actual:actual.hasOwnProperty(i) ? "present" : "missing"});
+ actual:actual.hasOwnProperty(i) ? "present" : "missing"});
assert(typeof actual[i] === "number",
"assert_array_approx_equals", description,
"property ${i}, expected a number but got a ${type_actual}",
diff --git a/tests/wpt/web-platform-tests/tools/ci/azure/install_chrome.yml b/tests/wpt/web-platform-tests/tools/ci/azure/install_chrome.yml
index 6bd5c2334ad..fd650e80aaa 100644
--- a/tests/wpt/web-platform-tests/tools/ci/azure/install_chrome.yml
+++ b/tests/wpt/web-platform-tests/tools/ci/azure/install_chrome.yml
@@ -1,6 +1,9 @@
steps:
-# This is equivalent to `Homebrew/homebrew-cask-versions/google-chrome-dev`,
-# but the raw URL is used to bypass caching.
-- script: HOMEBREW_NO_AUTO_UPDATE=1 brew cask install https://raw.githubusercontent.com/Homebrew/homebrew-cask-versions/master/Casks/google-chrome-dev.rb
+# The conflicting google-chrome and chromedriver casks are first uninstalled.
+# The raw google-chrome-dev cask URL is used to bypass caching.
+- script: |
+ HOMEBREW_NO_AUTO_UPDATE=1 brew cask uninstall google-chrome || true
+ HOMEBREW_NO_AUTO_UPDATE=1 brew cask uninstall chromedriver || true
+ HOMEBREW_NO_AUTO_UPDATE=1 brew cask install https://raw.githubusercontent.com/Homebrew/homebrew-cask-versions/master/Casks/google-chrome-dev.rb
displayName: 'Install Chrome Dev'
condition: and(succeeded(), eq(variables['Agent.OS'], 'Darwin'))
diff --git a/tests/wpt/web-platform-tests/tools/ci/azure/safari-technology-preview.rb b/tests/wpt/web-platform-tests/tools/ci/azure/safari-technology-preview.rb
index a3772b75e46..2d4912abbff 100644
--- a/tests/wpt/web-platform-tests/tools/ci/azure/safari-technology-preview.rb
+++ b/tests/wpt/web-platform-tests/tools/ci/azure/safari-technology-preview.rb
@@ -1,10 +1,10 @@
cask 'safari-technology-preview' do
if MacOS.version <= :mojave
- version '97,061-62396-20191217-bcf15e6a-ba77-4912-bd7a-5c136c6a9bb0'
- sha256 '75678852258e1869daf69e853b345556fea05adcd5d71530501c3be584212830'
+ version '98,061-66319-20200108-e9d7f579-fba9-46c9-97fc-9445bed56df0'
+ sha256 '860305b6e60915a71a15fa6267c549e635a415db66c220d1deee6e482a50299c'
else
- version '97,061-62395-20191217-fd754f32-1f09-4449-8aab-ebb9ba1ab1c4'
- sha256 'bfce6e57c4aad6b0423cabc54176de1e3115c656496a5a28dd91a7b78e16bf58'
+ version '98,061-66316-20200108-559ee008-6ff9-4219-8256-3c0464bbe29b'
+ sha256 '9bac3e5e278adfe817db69b976d4be0903d9903ae48d3d7d3744626b5c178f03'
end
url "https://secure-appldnld.apple.com/STP/#{version.after_comma}/SafariTechnologyPreview.dmg"
diff --git a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/client.py b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/client.py
index 0c5bbff5629..cf4c5fd35fd 100644
--- a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/client.py
+++ b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/client.py
@@ -738,6 +738,10 @@ class Element(object):
return self.send_element_command("GET", "selected")
@command
+ def screenshot(self):
+ return self.send_element_command("GET", "screenshot")
+
+ @command
def attribute(self, name):
return self.send_element_command("GET", "attribute/%s" % name)
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/__init__.py b/tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/__init__.py
index 9de87924607..9a82cc48eab 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/__init__.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/__init__.py
@@ -1,12 +1,10 @@
-def element_rect(session, element):
- return session.execute_script("""
- let {devicePixelRatio} = window;
- let {left, top, width, height} = arguments[0].getBoundingClientRect();
+def element_dimensions(session, element):
+ return tuple(session.execute_script("""
+ const {devicePixelRatio} = window;
+ let {width, height} = arguments[0].getBoundingClientRect();
- return {
- x: Math.floor((left + window.pageXOffset) * devicePixelRatio),
- y: Math.floor((top + window.pageYOffset) * devicePixelRatio),
- width: Math.floor(width * devicePixelRatio),
- height: Math.floor(height * devicePixelRatio),
- };
- """, args=(element,))
+ return [
+ Math.floor(width * devicePixelRatio),
+ Math.floor(height * devicePixelRatio),
+ ];
+ """, args=(element,)))
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/iframe.py b/tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/iframe.py
index 242122f0b5e..83f55deff75 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/iframe.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/iframe.py
@@ -4,21 +4,58 @@ from tests.support.asserts import assert_success
from tests.support.image import png_dimensions
from tests.support.inline import iframe, inline
-from . import element_rect
+from . import element_dimensions
+DEFAULT_CONTENT = "<div id='content'>Lorem ipsum dolor sit amet.</div>"
-DEFAULT_CSS_STYLE = """
+REFERENCE_CONTENT = "<div id='outer'>{}</div>".format(DEFAULT_CONTENT)
+REFERENCE_STYLE = """
<style>
- div, iframe {
+ #outer {
display: block;
- border: 1px solid blue;
- width: 10em;
- height: 10em;
+ margin: 0;
+ border: 0;
+ width: 200px;
+ height: 200px;
+ }
+ #content {
+ display: block;
+ margin: 0;
+ border: 0;
+ width: 100px;
+ height: 100px;
+ background: green;
+ }
+ </style>
+"""
+
+OUTER_IFRAME_STYLE = """
+ <style>
+ iframe {
+ display: block;
+ margin: 0;
+ border: 0;
+ width: 200px;
+ height: 200px;
}
</style>
"""
-DEFAULT_CONTENT = "<div>Lorem ipsum dolor sit amet.</div>"
+INNER_IFRAME_STYLE = """
+ <style>
+ body {
+ margin: 0;
+ }
+ div {
+ display: block;
+ margin: 0;
+ border: 0;
+ width: 100px;
+ height: 100px;
+ background: green;
+ }
+ </style>
+"""
def take_element_screenshot(session, element_id):
@@ -31,24 +68,55 @@ def take_element_screenshot(session, element_id):
)
+def test_frame_element(session):
+ # Create a reference element which looks exactly like the frame's content
+ session.url = inline("{0}{1}".format(REFERENCE_STYLE, REFERENCE_CONTENT))
+
+ # Capture the inner content as reference image
+ ref_el = session.find.css("#content", all=False)
+ ref_screenshot = ref_el.screenshot()
+ ref_dimensions = element_dimensions(session, ref_el)
+
+ assert png_dimensions(ref_screenshot) == ref_dimensions
+
+ # Capture the frame's element
+ iframe_content = "{0}{1}".format(INNER_IFRAME_STYLE, DEFAULT_CONTENT)
+ session.url = inline("""{0}{1}""".format(OUTER_IFRAME_STYLE, iframe(iframe_content)))
+
+ frame = session.find.css("iframe", all=False)
+ session.switch_frame(frame)
+ div = session.find.css("div", all=False)
+ div_dimensions = element_dimensions(session, div)
+ assert div_dimensions == ref_dimensions
+
+ response = take_element_screenshot(session, div.id)
+ div_screenshot = assert_success(response)
+
+ assert png_dimensions(div_screenshot) == ref_dimensions
+ assert div_screenshot == ref_screenshot
+
+
@pytest.mark.parametrize("domain", ["", "alt"], ids=["same_origin", "cross_origin"])
def test_source_origin(session, url, domain):
- session.url = inline("""{0}{1}""".format(DEFAULT_CSS_STYLE, DEFAULT_CONTENT))
- element = session.find.css("div", all=False)
- rect = element_rect(session, element)
+ # Create a reference element which looks exactly like the iframe
+ session.url = inline("{0}{1}".format(REFERENCE_STYLE, REFERENCE_CONTENT))
+
+ div = session.find.css("div", all=False)
+ div_dimensions = element_dimensions(session, div)
- response = take_element_screenshot(session, element.id)
+ response = take_element_screenshot(session, div.id)
reference_screenshot = assert_success(response)
- assert png_dimensions(reference_screenshot) == (rect["width"], rect["height"])
+ assert png_dimensions(reference_screenshot) == div_dimensions
- iframe_content = "<style>body {{ margin: 0; }}</style>{}".format(DEFAULT_CONTENT)
+ iframe_content = "{0}{1}".format(INNER_IFRAME_STYLE, DEFAULT_CONTENT)
session.url = inline("""{0}{1}""".format(
- DEFAULT_CSS_STYLE, iframe(iframe_content, domain=domain)))
+ OUTER_IFRAME_STYLE, iframe(iframe_content, domain=domain)))
+
frame_element = session.find.css("iframe", all=False)
- frame_rect = element_rect(session, frame_element)
+ frame_dimensions = element_dimensions(session, frame_element)
response = take_element_screenshot(session, frame_element.id)
screenshot = assert_success(response)
- assert png_dimensions(screenshot) == (frame_rect["width"], frame_rect["height"])
+ assert png_dimensions(screenshot) == frame_dimensions
assert screenshot == reference_screenshot
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/screenshot.py b/tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/screenshot.py
index fd460b656ae..50d33a266db 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/screenshot.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/screenshot.py
@@ -2,7 +2,7 @@ from tests.support.asserts import assert_error, assert_success
from tests.support.image import png_dimensions
from tests.support.inline import inline
-from . import element_rect
+from . import element_dimensions
def take_element_screenshot(session, element_id):
@@ -32,9 +32,8 @@ def test_stale(session):
def test_format_and_dimensions(session):
session.url = inline("<input>")
element = session.find.css("input", all=False)
- rect = element_rect(session, element)
response = take_element_screenshot(session, element.id)
screenshot = assert_success(response)
- assert png_dimensions(screenshot) == (rect["width"], rect["height"])
+ assert png_dimensions(screenshot) == element_dimensions(session, element)
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/take_screenshot/__init__.py b/tests/wpt/web-platform-tests/webdriver/tests/take_screenshot/__init__.py
index c07f8d16703..f3001d946df 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/take_screenshot/__init__.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/take_screenshot/__init__.py
@@ -1,6 +1,18 @@
+def element_dimensions(session, element):
+ return tuple(session.execute_script("""
+ const {devicePixelRatio} = window;
+ let {width, height} = arguments[0].getBoundingClientRect();
+
+ return [
+ Math.floor(width * devicePixelRatio),
+ Math.floor(height * devicePixelRatio),
+ ];
+ """, args=(element,)))
+
+
def viewport_dimensions(session):
return tuple(session.execute_script("""
- let {devicePixelRatio, innerHeight, innerWidth} = window;
+ const {devicePixelRatio, innerHeight, innerWidth} = window;
return [
Math.floor(innerWidth * devicePixelRatio),
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/take_screenshot/iframe.py b/tests/wpt/web-platform-tests/webdriver/tests/take_screenshot/iframe.py
index 66df6ec9493..601c039d56d 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/take_screenshot/iframe.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/take_screenshot/iframe.py
@@ -4,21 +4,58 @@ from tests.support.asserts import assert_success
from tests.support.image import png_dimensions
from tests.support.inline import iframe, inline
-from . import viewport_dimensions
+from . import element_dimensions, viewport_dimensions
+DEFAULT_CONTENT = "<div id='content'>Lorem ipsum dolor sit amet.</div>"
-DEFAULT_CSS_STYLE = """
+REFERENCE_CONTENT = "<div id='outer'>{}</div>".format(DEFAULT_CONTENT)
+REFERENCE_STYLE = """
<style>
- div, iframe {
+ #outer {
display: block;
- border: 1px solid blue;
- width: 10em;
- height: 10em;
+ margin: 0;
+ border: 0;
+ width: 200px;
+ height: 200px;
+ }
+ #content {
+ display: block;
+ margin: 0;
+ border: 0;
+ width: 100px;
+ height: 100px;
+ background: green;
+ }
+ </style>
+"""
+
+OUTER_IFRAME_STYLE = """
+ <style>
+ iframe {
+ display: block;
+ margin: 0;
+ border: 0;
+ width: 200px;
+ height: 200px;
}
</style>
"""
-DEFAULT_CONTENT = "<div>Lorem ipsum dolor sit amet.</div>"
+INNER_IFRAME_STYLE = """
+ <style>
+ body {
+ margin: 0;
+ }
+ div {
+ display: block;
+ margin: 0;
+ border: 0;
+ width: 100px;
+ height: 100px;
+ background: green;
+ }
+ </style>
+"""
def take_screenshot(session):
@@ -27,8 +64,8 @@ def take_screenshot(session):
def test_always_captures_top_browsing_context(session):
- iframe_content = "<style>body {{ margin: 0; }}</style>{}".format(DEFAULT_CONTENT)
- session.url = inline("""{0}{1}""".format(DEFAULT_CSS_STYLE, iframe(iframe_content)))
+ iframe_content = "{0}{1}".format(INNER_IFRAME_STYLE, DEFAULT_CONTENT)
+ session.url = inline("""{0}{1}""".format(OUTER_IFRAME_STYLE, iframe(iframe_content)))
response = take_screenshot(session)
reference_screenshot = assert_success(response)
@@ -40,20 +77,21 @@ def test_always_captures_top_browsing_context(session):
response = take_screenshot(session)
screenshot = assert_success(response)
+ assert png_dimensions(screenshot) == png_dimensions(reference_screenshot)
assert screenshot == reference_screenshot
@pytest.mark.parametrize("domain", ["", "alt"], ids=["same_origin", "cross_origin"])
-def test_source_origin(session, url, domain):
- session.url = inline("""{0}{1}""".format(DEFAULT_CSS_STYLE, DEFAULT_CONTENT))
+def test_source_origin(session, domain):
+ session.url = inline("{0}{1}".format(REFERENCE_STYLE, REFERENCE_CONTENT))
response = take_screenshot(session)
reference_screenshot = assert_success(response)
assert png_dimensions(reference_screenshot) == viewport_dimensions(session)
- iframe_content = "<style>body {{ margin: 0; }}</style>{}".format(DEFAULT_CONTENT)
+ iframe_content = "{0}{1}".format(INNER_IFRAME_STYLE, DEFAULT_CONTENT)
session.url = inline("""{0}{1}""".format(
- DEFAULT_CSS_STYLE, iframe(iframe_content, domain=domain)))
+ OUTER_IFRAME_STYLE, iframe(iframe_content, domain=domain)))
response = take_screenshot(session)
screenshot = assert_success(response)