aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/wpt/metadata/MANIFEST.json1582
-rw-r--r--tests/wpt/metadata/css/css-flexbox/dynamic-bsize-change.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-000.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-001.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-002.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-003.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-004.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-005.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-006.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-007.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-008.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-00B.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-00D.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-00E.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-00F.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-010.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-011.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-012.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-013.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-014.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-015.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-016.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-017.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-018.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-019.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-01A.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-01B.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-01C.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-01D.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-01E.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-01F.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-07F.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-080.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-081.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-082.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-083.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-084.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-085.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-086.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-087.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-088.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-089.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-08A.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-08B.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-08C.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-08D.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-08E.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-08F.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-090.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-091.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-092.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-093.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-094.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-095.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-096.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-097.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-098.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-099.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-09A.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-09B.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-09C.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-09D.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-09E.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/control-chars-09F.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/line-edge-white-space-collapse-001.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/line-edge-white-space-collapse-002.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-transitions/transitions-animatable-properties-01.html.ini2
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini4
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini4
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html.ini11
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini10
-rw-r--r--tests/wpt/metadata/quirks/unitless-length/quirks.html.ini (renamed from tests/wpt/metadata/quirks/unitless-length/no-quirks.html.ini)2
-rw-r--r--tests/wpt/metadata/url/urlencoded-parser.any.js.ini25
-rw-r--r--tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini1
-rw-r--r--tests/wpt/metadata/workers/baseurl/alpha/import-in-moduleworker.html.ini1
-rw-r--r--tests/wpt/web-platform-tests/.travis.yml23
-rw-r--r--tests/wpt/web-platform-tests/background-fetch/abort.https.window.js50
-rw-r--r--tests/wpt/web-platform-tests/background-fetch/service_workers/sw.js1
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/generic/directive-name-case-insensitive.sub.html32
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/inheritance/blob-url-self-navigate-inherits.sub.html23
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/inheritance/support/navigate-self-to-blob.html6
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/inheritance/support/navigate-self-to-blob.html.sub.headers4
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-1.html20
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-1.html.sub.headers1
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-3.html20
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-3.html.sub.headers1
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-7.html20
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-7.html.sub.headers1
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-9.html20
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-9.html.sub.headers1
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8-lone-surrogate.html31
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8-lone-surrogate.html.sub.headers1
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8.html36
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8.html.sub.headers1
-rw-r--r--tests/wpt/web-platform-tests/css/CSS2/positioning/absolute-non-replaced-height-013.html9
-rw-r--r--tests/wpt/web-platform-tests/css/css-flexbox/dynamic-bsize-change-ref.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-flexbox/dynamic-bsize-change.html28
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/abspos/support/grid.css6
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/grid-definition/support/grid.css6
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-relative-offsets-001.html95
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-relative-offsets-002.html94
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/grid-items/support/grid.css6
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/grid-model/support/grid.css6
-rw-r--r--tests/wpt/web-platform-tests/css/css-properties-values-api/typedom.tentative.html57
-rw-r--r--tests/wpt/web-platform-tests/css/css-scoping/host-context-specificity-001.html21
-rw-r--r--tests/wpt/web-platform-tests/css/css-scoping/host-context-specificity-002.html23
-rw-r--r--tests/wpt/web-platform-tests/css/css-scoping/host-context-specificity-003.html22
-rw-r--r--tests/wpt/web-platform-tests/css/css-scoping/host-specificity-003.html26
-rw-r--r--tests/wpt/web-platform-tests/css/css-scroll-anchoring/text-anchor-in-vertical-rl.html30
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/text-indent/reference/text-indent-percentage-002-ref.html11
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-002.html27
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-003.html27
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-004.html27
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-000.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-001.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-002.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-003.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-004.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-005.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-006.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-007.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-008.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-00B.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-00D.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-00E.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-00F.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-010.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-011.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-012.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-013.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-014.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-015.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-016.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-017.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-018.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-019.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01A.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01B.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01C.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01D.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01E.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01F.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-07F.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-080.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-081.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-082.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-083.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-084.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-085.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-086.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-087.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-088.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-089.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08A.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08B.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08C.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08D.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08E.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08F.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-090.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-091.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-092.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-093.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-094.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-095.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-096.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-097.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-098.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-099.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09A.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09B.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09C.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09D.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09E.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09F.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/line-edge-white-space-collapse-001.html40
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/line-edge-white-space-collapse-002.html40
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/reference/control-chars-000-ref.html6
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/reference/line-edge-white-space-collapse-001-ref.html23
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/reference/line-edge-white-space-collapse-002-ref.html24
-rw-r--r--tests/wpt/web-platform-tests/css/support/grid.css6
-rw-r--r--tests/wpt/web-platform-tests/docs/_writing-tests/testdriver.md8
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/vertical-scroll-scrollable-content.html16
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/experimental-features/vertical-scroll-disabled-frame-no-scroll-manual.tentative.html113
-rw-r--r--tests/wpt/web-platform-tests/html/dom/elements/the-innertext-idl-attribute/getter-tests.js2
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/elementPosition.html.ini3
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/elementTiming.html.ini3
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/eventOrder.html.ini3
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/multiDevice.html.ini3
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/testdriver/actions/elementPosition.html43
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/testdriver/actions/elementTiming.html56
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/testdriver/actions/eventOrder.html37
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/testdriver/actions/multiDevice.html36
-rw-r--r--tests/wpt/web-platform-tests/payment-request/META.yml1
-rw-r--r--tests/wpt/web-platform-tests/resources/testdriver-actions.js391
-rw-r--r--tests/wpt/web-platform-tests/resources/testdriver.js33
-rw-r--r--tests/wpt/web-platform-tests/tools/serve/test_functional.py2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/base.py43
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executormarionette.py14
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorselenium.py16
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py11
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/protocol.py22
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testdriver-extra.js18
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py31
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py1
-rw-r--r--tests/wpt/web-platform-tests/tools/wptserve/.travis.yml24
-rw-r--r--tests/wpt/web-platform-tests/tools/wptserve/tests/functional/base.py2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_pipes.py27
-rw-r--r--tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_request.py35
-rw-r--r--tests/wpt/web-platform-tests/tools/wptserve/wptserve/pipes.py18
-rw-r--r--tests/wpt/web-platform-tests/tools/wptserve/wptserve/ranges.py4
-rw-r--r--tests/wpt/web-platform-tests/tools/wptserve/wptserve/request.py58
214 files changed, 4692 insertions, 245 deletions
diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json
index 96cb3684e4d..3aa3d2388ba 100644
--- a/tests/wpt/metadata/MANIFEST.json
+++ b/tests/wpt/metadata/MANIFEST.json
@@ -11347,6 +11347,12 @@
{}
]
],
+ "feature-policy/experimental-features/vertical-scroll-disabled-frame-no-scroll-manual.tentative.html": [
+ [
+ "/feature-policy/experimental-features/vertical-scroll-disabled-frame-no-scroll-manual.tentative.html",
+ {}
+ ]
+ ],
"feature-policy/experimental-features/vertical-scroll-touch-action-manual.tentative.html": [
[
"/feature-policy/experimental-features/vertical-scroll-touch-action-manual.tentative.html",
@@ -73863,6 +73869,18 @@
{}
]
],
+ "css/CSS2/positioning/absolute-non-replaced-height-013.html": [
+ [
+ "/css/CSS2/positioning/absolute-non-replaced-height-013.html",
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square.xht",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/CSS2/positioning/absolute-non-replaced-max-height-002.xht": [
[
"/css/CSS2/positioning/absolute-non-replaced-max-height-002.xht",
@@ -114307,6 +114325,18 @@
{}
]
],
+ "css/css-flexbox/dynamic-bsize-change.html": [
+ [
+ "/css/css-flexbox/dynamic-bsize-change.html",
+ [
+ [
+ "/css/css-flexbox/dynamic-bsize-change-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-flexbox/flex-001.htm": [
[
"/css/css-flexbox/flex-001.htm",
@@ -132319,6 +132349,42 @@
{}
]
],
+ "css/css-scoping/host-context-specificity-001.html": [
+ [
+ "/css/css-scoping/host-context-specificity-001.html",
+ [
+ [
+ "/css/css-scoping/reference/green-box.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-scoping/host-context-specificity-002.html": [
+ [
+ "/css/css-scoping/host-context-specificity-002.html",
+ [
+ [
+ "/css/css-scoping/reference/green-box.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-scoping/host-context-specificity-003.html": [
+ [
+ "/css/css-scoping/host-context-specificity-003.html",
+ [
+ [
+ "/css/css-scoping/reference/green-box.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-scoping/host-descendant-001.html": [
[
"/css/css-scoping/host-descendant-001.html",
@@ -132391,6 +132457,18 @@
{}
]
],
+ "css/css-scoping/host-specificity-003.html": [
+ [
+ "/css/css-scoping/host-specificity-003.html",
+ [
+ [
+ "/css/css-scoping/reference/green-box.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-scoping/host-specificity.html": [
[
"/css/css-scoping/host-specificity.html",
@@ -138211,6 +138289,42 @@
{}
]
],
+ "css/css-text/text-indent/text-indent-percentage-002.html": [
+ [
+ "/css/css-text/text-indent/text-indent-percentage-002.html",
+ [
+ [
+ "/css/css-text/text-indent/reference/text-indent-percentage-002-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/text-indent/text-indent-percentage-003.html": [
+ [
+ "/css/css-text/text-indent/text-indent-percentage-003.html",
+ [
+ [
+ "/css/css-text/text-indent/reference/text-indent-percentage-002-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/text-indent/text-indent-percentage-004.html": [
+ [
+ "/css/css-text/text-indent/text-indent-percentage-004.html",
+ [
+ [
+ "/css/css-text/text-indent/reference/text-indent-percentage-002-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-text/text-justify/text-justify-001.html": [
[
"/css/css-text/text-justify/text-justify-001.html",
@@ -139171,6 +139285,774 @@
{}
]
],
+ "css/css-text/white-space/control-chars-000.html": [
+ [
+ "/css/css-text/white-space/control-chars-000.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-001.html": [
+ [
+ "/css/css-text/white-space/control-chars-001.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-002.html": [
+ [
+ "/css/css-text/white-space/control-chars-002.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-003.html": [
+ [
+ "/css/css-text/white-space/control-chars-003.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-004.html": [
+ [
+ "/css/css-text/white-space/control-chars-004.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-005.html": [
+ [
+ "/css/css-text/white-space/control-chars-005.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-006.html": [
+ [
+ "/css/css-text/white-space/control-chars-006.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-007.html": [
+ [
+ "/css/css-text/white-space/control-chars-007.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-008.html": [
+ [
+ "/css/css-text/white-space/control-chars-008.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-00B.html": [
+ [
+ "/css/css-text/white-space/control-chars-00B.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-00D.html": [
+ [
+ "/css/css-text/white-space/control-chars-00D.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-00E.html": [
+ [
+ "/css/css-text/white-space/control-chars-00E.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-00F.html": [
+ [
+ "/css/css-text/white-space/control-chars-00F.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-010.html": [
+ [
+ "/css/css-text/white-space/control-chars-010.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-011.html": [
+ [
+ "/css/css-text/white-space/control-chars-011.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-012.html": [
+ [
+ "/css/css-text/white-space/control-chars-012.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-013.html": [
+ [
+ "/css/css-text/white-space/control-chars-013.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-014.html": [
+ [
+ "/css/css-text/white-space/control-chars-014.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-015.html": [
+ [
+ "/css/css-text/white-space/control-chars-015.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-016.html": [
+ [
+ "/css/css-text/white-space/control-chars-016.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-017.html": [
+ [
+ "/css/css-text/white-space/control-chars-017.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-018.html": [
+ [
+ "/css/css-text/white-space/control-chars-018.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-019.html": [
+ [
+ "/css/css-text/white-space/control-chars-019.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-01A.html": [
+ [
+ "/css/css-text/white-space/control-chars-01A.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-01B.html": [
+ [
+ "/css/css-text/white-space/control-chars-01B.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-01C.html": [
+ [
+ "/css/css-text/white-space/control-chars-01C.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-01D.html": [
+ [
+ "/css/css-text/white-space/control-chars-01D.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-01E.html": [
+ [
+ "/css/css-text/white-space/control-chars-01E.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-01F.html": [
+ [
+ "/css/css-text/white-space/control-chars-01F.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-07F.html": [
+ [
+ "/css/css-text/white-space/control-chars-07F.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-080.html": [
+ [
+ "/css/css-text/white-space/control-chars-080.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-081.html": [
+ [
+ "/css/css-text/white-space/control-chars-081.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-082.html": [
+ [
+ "/css/css-text/white-space/control-chars-082.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-083.html": [
+ [
+ "/css/css-text/white-space/control-chars-083.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-084.html": [
+ [
+ "/css/css-text/white-space/control-chars-084.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-085.html": [
+ [
+ "/css/css-text/white-space/control-chars-085.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-086.html": [
+ [
+ "/css/css-text/white-space/control-chars-086.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-087.html": [
+ [
+ "/css/css-text/white-space/control-chars-087.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-088.html": [
+ [
+ "/css/css-text/white-space/control-chars-088.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-089.html": [
+ [
+ "/css/css-text/white-space/control-chars-089.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-08A.html": [
+ [
+ "/css/css-text/white-space/control-chars-08A.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-08B.html": [
+ [
+ "/css/css-text/white-space/control-chars-08B.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-08C.html": [
+ [
+ "/css/css-text/white-space/control-chars-08C.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-08D.html": [
+ [
+ "/css/css-text/white-space/control-chars-08D.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-08E.html": [
+ [
+ "/css/css-text/white-space/control-chars-08E.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-08F.html": [
+ [
+ "/css/css-text/white-space/control-chars-08F.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-090.html": [
+ [
+ "/css/css-text/white-space/control-chars-090.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-091.html": [
+ [
+ "/css/css-text/white-space/control-chars-091.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-092.html": [
+ [
+ "/css/css-text/white-space/control-chars-092.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-093.html": [
+ [
+ "/css/css-text/white-space/control-chars-093.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-094.html": [
+ [
+ "/css/css-text/white-space/control-chars-094.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-095.html": [
+ [
+ "/css/css-text/white-space/control-chars-095.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-096.html": [
+ [
+ "/css/css-text/white-space/control-chars-096.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-097.html": [
+ [
+ "/css/css-text/white-space/control-chars-097.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-098.html": [
+ [
+ "/css/css-text/white-space/control-chars-098.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-099.html": [
+ [
+ "/css/css-text/white-space/control-chars-099.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-09A.html": [
+ [
+ "/css/css-text/white-space/control-chars-09A.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-09B.html": [
+ [
+ "/css/css-text/white-space/control-chars-09B.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-09C.html": [
+ [
+ "/css/css-text/white-space/control-chars-09C.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-09D.html": [
+ [
+ "/css/css-text/white-space/control-chars-09D.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-09E.html": [
+ [
+ "/css/css-text/white-space/control-chars-09E.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/control-chars-09F.html": [
+ [
+ "/css/css-text/white-space/control-chars-09F.html",
+ [
+ [
+ "/css/css-text/white-space/reference/control-chars-000-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/line-edge-white-space-collapse-001.html": [
+ [
+ "/css/css-text/white-space/line-edge-white-space-collapse-001.html",
+ [
+ [
+ "/css/css-text/white-space/reference/line-edge-white-space-collapse-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/line-edge-white-space-collapse-002.html": [
+ [
+ "/css/css-text/white-space/line-edge-white-space-collapse-002.html",
+ [
+ [
+ "/css/css-text/white-space/reference/line-edge-white-space-collapse-002-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-text/white-space/pre-wrap-001.html": [
[
"/css/css-text/white-space/pre-wrap-001.html",
@@ -221636,6 +222518,16 @@
{}
]
],
+ "content-security-policy/inheritance/support/navigate-self-to-blob.html": [
+ [
+ {}
+ ]
+ ],
+ "content-security-policy/inheritance/support/navigate-self-to-blob.html.sub.headers": [
+ [
+ {}
+ ]
+ ],
"content-security-policy/inside-worker/support/connect-src-allow.sub.js": [
[
{}
@@ -222026,6 +222918,36 @@
{}
]
],
+ "content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-1.html.sub.headers": [
+ [
+ {}
+ ]
+ ],
+ "content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-3.html.sub.headers": [
+ [
+ {}
+ ]
+ ],
+ "content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-7.html.sub.headers": [
+ [
+ {}
+ ]
+ ],
+ "content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-9.html.sub.headers": [
+ [
+ {}
+ ]
+ ],
+ "content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8-lone-surrogate.html.sub.headers": [
+ [
+ {}
+ ]
+ ],
+ "content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8.html.sub.headers": [
+ [
+ {}
+ ]
+ ],
"content-security-policy/script-src/inlineSuccessTest.js": [
[
{}
@@ -249321,6 +250243,11 @@
{}
]
],
+ "css/css-flexbox/dynamic-bsize-change-ref.html": [
+ [
+ {}
+ ]
+ ],
"css/css-flexbox/flex-flow-001-ref.html": [
[
{}
@@ -265481,6 +266408,11 @@
{}
]
],
+ "css/css-text/text-indent/reference/text-indent-percentage-002-ref.html": [
+ [
+ {}
+ ]
+ ],
"css/css-text/text-justify/reference/text-justify-ref-001.html": [
[
{}
@@ -265866,6 +266798,21 @@
{}
]
],
+ "css/css-text/white-space/reference/control-chars-000-ref.html": [
+ [
+ {}
+ ]
+ ],
+ "css/css-text/white-space/reference/line-edge-white-space-collapse-001-ref.html": [
+ [
+ {}
+ ]
+ ],
+ "css/css-text/white-space/reference/line-edge-white-space-collapse-002-ref.html": [
+ [
+ {}
+ ]
+ ],
"css/css-text/white-space/reference/pre-wrap-001-ref.html": [
[
{}
@@ -280926,6 +281873,11 @@
{}
]
],
+ "feature-policy/experimental-features/resources/vertical-scroll-scrollable-content.html": [
+ [
+ {}
+ ]
+ ],
"feature-policy/experimental-features/resources/vertical-scroll-scrollintoview.html": [
[
{}
@@ -293536,6 +294488,26 @@
{}
]
],
+ "infrastructure/metadata/infrastructure/testdriver/actions/elementPosition.html.ini": [
+ [
+ {}
+ ]
+ ],
+ "infrastructure/metadata/infrastructure/testdriver/actions/elementTiming.html.ini": [
+ [
+ {}
+ ]
+ ],
+ "infrastructure/metadata/infrastructure/testdriver/actions/eventOrder.html.ini": [
+ [
+ {}
+ ]
+ ],
+ "infrastructure/metadata/infrastructure/testdriver/actions/multiDevice.html.ini": [
+ [
+ {}
+ ]
+ ],
"infrastructure/reftest-wait-ref.html": [
[
{}
@@ -300611,6 +301583,11 @@
{}
]
],
+ "resources/testdriver-actions.js": [
+ [
+ {}
+ ]
+ ],
"resources/testdriver-vendor.js": [
[
{}
@@ -312566,11 +313543,6 @@
{}
]
],
- "tools/wptserve/.travis.yml": [
- [
- {}
- ]
- ],
"tools/wptserve/LICENSE": [
[
{}
@@ -327080,12 +328052,6 @@
{}
]
],
- "background-fetch/abort.https.window.js": [
- [
- "/background-fetch/abort.https.window.html",
- {}
- ]
- ],
"background-fetch/content-security-policy.https.window.js": [
[
"/background-fetch/content-security-policy.https.window.html",
@@ -329452,6 +330418,12 @@
{}
]
],
+ "content-security-policy/generic/directive-name-case-insensitive.sub.html": [
+ [
+ "/content-security-policy/generic/directive-name-case-insensitive.sub.html",
+ {}
+ ]
+ ],
"content-security-policy/generic/duplicate-directive.sub.html": [
[
"/content-security-policy/generic/duplicate-directive.sub.html",
@@ -329614,6 +330586,12 @@
{}
]
],
+ "content-security-policy/inheritance/blob-url-self-navigate-inherits.sub.html": [
+ [
+ "/content-security-policy/inheritance/blob-url-self-navigate-inherits.sub.html",
+ {}
+ ]
+ ],
"content-security-policy/inheritance/iframe.html": [
[
"/content-security-policy/inheritance/iframe.html",
@@ -330330,6 +331308,42 @@
{}
]
],
+ "content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-1.html": [
+ [
+ "/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-1.html",
+ {}
+ ]
+ ],
+ "content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-3.html": [
+ [
+ "/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-3.html",
+ {}
+ ]
+ ],
+ "content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-7.html": [
+ [
+ "/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-7.html",
+ {}
+ ]
+ ],
+ "content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-9.html": [
+ [
+ "/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-9.html",
+ {}
+ ]
+ ],
+ "content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8-lone-surrogate.html": [
+ [
+ "/content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8-lone-surrogate.html",
+ {}
+ ]
+ ],
+ "content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8.html": [
+ [
+ "/content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8.html",
+ {}
+ ]
+ ],
"content-security-policy/script-src/injected-inline-script-allowed.sub.html": [
[
"/content-security-policy/script-src/injected-inline-script-allowed.sub.html",
@@ -335660,6 +336674,18 @@
{}
]
],
+ "css/css-grid/grid-items/grid-items-relative-offsets-001.html": [
+ [
+ "/css/css-grid/grid-items/grid-items-relative-offsets-001.html",
+ {}
+ ]
+ ],
+ "css/css-grid/grid-items/grid-items-relative-offsets-002.html": [
+ [
+ "/css/css-grid/grid-items/grid-items-relative-offsets-002.html",
+ {}
+ ]
+ ],
"css/css-grid/grid-items/grid-minimum-size-grid-items-021.html": [
[
"/css/css-grid/grid-items/grid-minimum-size-grid-items-021.html",
@@ -336680,6 +337706,12 @@
{}
]
],
+ "css/css-scroll-anchoring/text-anchor-in-vertical-rl.html": [
+ [
+ "/css/css-scroll-anchoring/text-anchor-in-vertical-rl.html",
+ {}
+ ]
+ ],
"css/css-scroll-anchoring/wrapped-text.html": [
[
"/css/css-scroll-anchoring/wrapped-text.html",
@@ -371888,6 +372920,38 @@
{}
]
],
+ "infrastructure/testdriver/actions/elementPosition.html": [
+ [
+ "/infrastructure/testdriver/actions/elementPosition.html",
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "infrastructure/testdriver/actions/elementTiming.html": [
+ [
+ "/infrastructure/testdriver/actions/elementTiming.html",
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "infrastructure/testdriver/actions/eventOrder.html": [
+ [
+ "/infrastructure/testdriver/actions/eventOrder.html",
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "infrastructure/testdriver/actions/multiDevice.html": [
+ [
+ "/infrastructure/testdriver/actions/multiDevice.html",
+ {
+ "testdriver": true
+ }
+ ]
+ ],
"infrastructure/testdriver/bless.html": [
[
"/infrastructure/testdriver/bless.html",
@@ -433046,7 +434110,7 @@
"support"
],
".travis.yml": [
- "e0abc3cb953a49eb7018bda4bf118be5be5f22e0",
+ "b14cfafbdf7a3b4380e746e939d1512ef55785ea",
"support"
],
".well-known/README.md": [
@@ -442725,10 +443789,6 @@
"8ce9f8faa2acdfe7a2ef8dfc6c1ad8cbdf01c72d",
"support"
],
- "background-fetch/abort.https.window.js": [
- "588fcac012ff9046370d3484f88342180bcb1961",
- "testharness"
- ],
"background-fetch/content-security-policy.https.window.js": [
"0b5b1cb5e94d3f27bebbb5a462bf1e823dfc57b4",
"testharness"
@@ -442774,7 +443834,7 @@
"support"
],
"background-fetch/service_workers/sw.js": [
- "2e3fbfff1a83e2d1f4aa40e738fa305a6eba513c",
+ "af4655dbad4ef6ad6b17d79bb2645aee98ce1102",
"support"
],
"background-fetch/update-ui.https.window.js": [
@@ -462345,6 +463405,10 @@
"b9e9a6c856bfdba59caddc249c0f61b731ae6701",
"support"
],
+ "content-security-policy/generic/directive-name-case-insensitive.sub.html": [
+ "c65c59fb23fdc6d21eefc090927c1cfd4cd6702a",
+ "testharness"
+ ],
"content-security-policy/generic/duplicate-directive.sub.html": [
"7810533e455968eea8eb0bdf4d8edf62e495f956",
"testharness"
@@ -462525,6 +463589,10 @@
"7ef1e978fedc83e92b17384d7462793a83011791",
"testharness"
],
+ "content-security-policy/inheritance/blob-url-self-navigate-inherits.sub.html": [
+ "3b54528d56a445e6ef723371f5bb7a858ee016c8",
+ "testharness"
+ ],
"content-security-policy/inheritance/iframe.html": [
"6f5d0f75260113a4d565a6320996345972d9e38c",
"testharness"
@@ -462533,6 +463601,14 @@
"c473b3f4262230f6e052d149d6461b7c0cabeff7",
"testharness"
],
+ "content-security-policy/inheritance/support/navigate-self-to-blob.html": [
+ "9ea069969cafff022e94fef3de535feafaca1de7",
+ "support"
+ ],
+ "content-security-policy/inheritance/support/navigate-self-to-blob.html.sub.headers": [
+ "27aa5f4a1023ffd9c975acc42cf7b89b9fff2faf",
+ "support"
+ ],
"content-security-policy/inheritance/window.html": [
"86f2e4bc13f7fe811810d74550174a6acba57c68",
"testharness"
@@ -463305,6 +464381,54 @@
"2920b03c9bc98d16d4c7ebefaf8bcef268c3796c",
"support"
],
+ "content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-1.html": [
+ "64d9498d6d8443276f932823b370210fa98362c4",
+ "testharness"
+ ],
+ "content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-1.html.sub.headers": [
+ "acc92f4e80b64d826f1f8cddf6c17580019a2e56",
+ "support"
+ ],
+ "content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-3.html": [
+ "fdcc54534ccb2bbdca592cfc6ee774f61cd920d3",
+ "testharness"
+ ],
+ "content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-3.html.sub.headers": [
+ "ae3e03dae1f81ed14d381b4882e6a70b6e72b994",
+ "support"
+ ],
+ "content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-7.html": [
+ "23a64df179220a39a6e4be3de9582420a389231b",
+ "testharness"
+ ],
+ "content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-7.html.sub.headers": [
+ "9550b0de30ad89cc48896da3dac137ad6d5c9680",
+ "support"
+ ],
+ "content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-9.html": [
+ "a29d197a1ce653c6c4cb3fd74fd3b56b8770cd2b",
+ "testharness"
+ ],
+ "content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-9.html.sub.headers": [
+ "6382ff86a7204a8638ab74966deabaef093c5125",
+ "support"
+ ],
+ "content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8-lone-surrogate.html": [
+ "58730a72cc5d8100ed6ebc570b7f7d6639f15748",
+ "testharness"
+ ],
+ "content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8-lone-surrogate.html.sub.headers": [
+ "2d1c08b9e8aacea63675fb5c94f7e969165784ad",
+ "support"
+ ],
+ "content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8.html": [
+ "b770cba24661f96ace9b0b049c5edd6da761afc1",
+ "testharness"
+ ],
+ "content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8.html.sub.headers": [
+ "2d1c08b9e8aacea63675fb5c94f7e969165784ad",
+ "support"
+ ],
"content-security-policy/script-src/injected-inline-script-allowed.sub.html": [
"5a8cdec8472e923bf8984d5b5c77a6cf939e4d13",
"testharness"
@@ -501681,6 +502805,10 @@
"55a938233675110aa709ea4c7f2004c270a0a564",
"reftest"
],
+ "css/CSS2/positioning/absolute-non-replaced-height-013.html": [
+ "46929f360a0e6254ab7904937075146fed451fbf",
+ "reftest"
+ ],
"css/CSS2/positioning/absolute-non-replaced-max-height-001.xht": [
"085b2b9b3b9c2679fec6be86f55b3c14f3fa40af",
"visual"
@@ -535157,6 +536285,14 @@
"7faca2c944ed28fe1b194c60b08516d13c393b04",
"testharness"
],
+ "css/css-flexbox/dynamic-bsize-change-ref.html": [
+ "b8db7ea2c7de6443075e04009ff5c979dbb7fed3",
+ "support"
+ ],
+ "css/css-flexbox/dynamic-bsize-change.html": [
+ "7148f26e2770b669dfcc69435e3a506882ffd457",
+ "reftest"
+ ],
"css/css-flexbox/flex-001.htm": [
"df3fbe533aa59a87ba1e7670ac8c7446527c98aa",
"reftest"
@@ -546054,7 +547190,7 @@
"reftest"
],
"css/css-grid/abspos/support/grid.css": [
- "602e114880ae6576c0d440cf524ad284f89e708f",
+ "78fdd5e975ad61d3a8c39fe4e05694a278753c37",
"support"
],
"css/css-grid/alignment/grid-alignment-implies-size-change-001.html": [
@@ -547154,7 +548290,7 @@
"reftest"
],
"css/css-grid/grid-definition/support/grid.css": [
- "602e114880ae6576c0d440cf524ad284f89e708f",
+ "78fdd5e975ad61d3a8c39fe4e05694a278753c37",
"support"
],
"css/css-grid/grid-definition/support/testing-utils.js": [
@@ -547385,6 +548521,14 @@
"bf38155e16f26f00e8243f32fc7a2d15fd62b2e7",
"testharness"
],
+ "css/css-grid/grid-items/grid-items-relative-offsets-001.html": [
+ "cb5e8ee23b66589a622c162c065ba8f5dd88a495",
+ "testharness"
+ ],
+ "css/css-grid/grid-items/grid-items-relative-offsets-002.html": [
+ "d92fca3ebb06fc106f42da22dce9e46383fc13a5",
+ "testharness"
+ ],
"css/css-grid/grid-items/grid-items-sizing-alignment-001-ref.html": [
"859483cf5d19dc53c1b1d047a6a3bfac2ed753e3",
"support"
@@ -547638,7 +548782,7 @@
"support"
],
"css/css-grid/grid-items/support/grid.css": [
- "602e114880ae6576c0d440cf524ad284f89e708f",
+ "78fdd5e975ad61d3a8c39fe4e05694a278753c37",
"support"
],
"css/css-grid/grid-items/table-with-infinite-max-intrinsic-width.html": [
@@ -547790,7 +548934,7 @@
"reftest"
],
"css/css-grid/grid-model/support/grid.css": [
- "602e114880ae6576c0d440cf524ad284f89e708f",
+ "78fdd5e975ad61d3a8c39fe4e05694a278753c37",
"support"
],
"css/css-grid/implicit-grids/grid-support-grid-auto-columns-rows-001.html": [
@@ -552438,7 +553582,7 @@
"support"
],
"css/css-properties-values-api/typedom.tentative.html": [
- "98150558dae5020333dbf0bc7b8cecdbe83dfc36",
+ "1d757df168b0db1acfdbd358951b30dbb25d3016",
"testharness"
],
"css/css-properties-values-api/unit-cycles.html": [
@@ -554849,6 +555993,18 @@
"59787f048370401e80542ba7dbb0affcaed06c2f",
"reftest"
],
+ "css/css-scoping/host-context-specificity-001.html": [
+ "694087f56b76cae0a3ccf5015cc25902a1dad8cf",
+ "reftest"
+ ],
+ "css/css-scoping/host-context-specificity-002.html": [
+ "3d4d3e5b245950f15ec126909393ff5e8b3edcb8",
+ "reftest"
+ ],
+ "css/css-scoping/host-context-specificity-003.html": [
+ "7abf8847c95ed04fae77b8601457909ecd72742e",
+ "reftest"
+ ],
"css/css-scoping/host-descendant-001.html": [
"423beaf055b9f482dd299c055721a405df1d5d77",
"reftest"
@@ -554885,6 +556041,10 @@
"3132d3a3455241347d6fe421f3434c361e424493",
"reftest"
],
+ "css/css-scoping/host-specificity-003.html": [
+ "54a22599d8f83f612d7fc9ff91abfe650114c6e2",
+ "reftest"
+ ],
"css/css-scoping/host-specificity.html": [
"3ef61d4135fe7dbf846feb82540ca1a213ce7987",
"reftest"
@@ -555101,6 +556261,10 @@
"c384280f10fc96e2202518cb3333da346967d1a1",
"testharness"
],
+ "css/css-scroll-anchoring/text-anchor-in-vertical-rl.html": [
+ "2a56298e982888fcf1745137b9e8868bae70a76a",
+ "testharness"
+ ],
"css/css-scroll-anchoring/wrapped-text.html": [
"4bd2cdb3251de62aceb13504404a58023f50c044",
"testharness"
@@ -560733,10 +561897,26 @@
"546ba57a9889b553047986f1cb1eee76af733a60",
"support"
],
+ "css/css-text/text-indent/reference/text-indent-percentage-002-ref.html": [
+ "5b3bc918d15f1737cd8e1518a8503425a4ee1d72",
+ "support"
+ ],
"css/css-text/text-indent/text-indent-percentage-001.xht": [
"ae2478579d216761bc4cff5155bfb225e49e87bd",
"reftest"
],
+ "css/css-text/text-indent/text-indent-percentage-002.html": [
+ "65969260c5ee8467016545ba084bf4f7f886d6db",
+ "reftest"
+ ],
+ "css/css-text/text-indent/text-indent-percentage-003.html": [
+ "f81390da873dc27beb17533269b0464bfa5eff69",
+ "reftest"
+ ],
+ "css/css-text/text-indent/text-indent-percentage-004.html": [
+ "73f4c219558bf13fff6fc72ea208d0e52eb502f9",
+ "reftest"
+ ],
"css/css-text/text-justify/reference/text-justify-ref-001.html": [
"2a214057611f9b3aa43b3eb74c775214bb307ffd",
"support"
@@ -561381,6 +562561,262 @@
"58ec3f3cbd94b01dc15531308355cab3c42cc318",
"reftest"
],
+ "css/css-text/white-space/control-chars-000.html": [
+ "b038fe9a90d3b8b9cb3bde7fd46396c7121688c9",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-001.html": [
+ "e43fda55431dee4a1406e5fcf04016e38db0defd",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-002.html": [
+ "a81a30723aab7523542a1ef6cede6f00e27a59ec",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-003.html": [
+ "e0d156a97958ebd80a3fee9cfe97a736fc58881f",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-004.html": [
+ "b33c4475ba9aef992f00f3cf27bba9afbacce2f5",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-005.html": [
+ "d14e86b80b28ffaebac49d35805be7ca43b8d1a9",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-006.html": [
+ "2b05272fec80075eab706f89b84fc299926329ac",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-007.html": [
+ "60587d9abdba433fd8762699b1160ef7ba520353",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-008.html": [
+ "fbe91aae05570156c11fbd8dac8a5114c7f931fc",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-00B.html": [
+ "6cdf0b35cf142cac701d54e7dceb635fdd9be24e",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-00D.html": [
+ "b7d1d44b0cc50f2761697de86f6ec3f2cf8904c1",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-00E.html": [
+ "826b4bb0d6aeeb24bf7852f2096a8280f9a63687",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-00F.html": [
+ "53618a8b79d189eb8e75c872b15643e4c3e8288a",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-010.html": [
+ "52c663876951ecf2d8f612367ea0269bc75928cf",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-011.html": [
+ "8aa8d94b91822e34ee220d83db4d233c23cb564d",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-012.html": [
+ "9300ae3a903aabd8d0b4869bb3954329e37d0db3",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-013.html": [
+ "f0e2b547cee43277ffbc2baaaee39c8243800e3a",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-014.html": [
+ "e8c776a9d7db7d3b2ce4a2d2635dd1e931f0d895",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-015.html": [
+ "718909dd47657575df18bd3f476d96dc00e81463",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-016.html": [
+ "2ba460c03c5a2ba8887b423c1af19386ab45ee21",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-017.html": [
+ "b4c96ca6523b600a8baebddc0e823162b2edbb23",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-018.html": [
+ "3a4c59e18a05f18e614ea6b7fb7bb762d515431c",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-019.html": [
+ "9517e79e4aa7acb7ab50d68b1fefc09c3af30404",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-01A.html": [
+ "4f61bcb7538f5da61932079a3b578917a0c1cd7e",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-01B.html": [
+ "fe9842b9ac0b5a204243b96cad8e9800681999f1",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-01C.html": [
+ "aadc1a9138dc1f8a0ecbe6841b50faf152d37165",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-01D.html": [
+ "266d30084efdf9b2e47b806a1f0c0ece4359b7ba",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-01E.html": [
+ "8cd3ddff5111353fdd5824a048c76099f5872864",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-01F.html": [
+ "61db980951db7aae3178721355c79c74479a2b46",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-07F.html": [
+ "27d5f02c4b2643beb55eb16cc84e5d90e07522bc",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-080.html": [
+ "ceedd013611c352fbabbfef24f686ebc4f79f5ee",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-081.html": [
+ "0e16b010461b9d97bc384ac55b44d04f4a784fe1",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-082.html": [
+ "c8461a7b2eacd409856138f609d5a5fea0c2711e",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-083.html": [
+ "ec723809ff063e0d4efc9f78f4647dcf1ae1fe1b",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-084.html": [
+ "249368173855c78449706549eddd7e45686b7855",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-085.html": [
+ "52dba2a1b61527b1764b989b597753b9baca331a",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-086.html": [
+ "39b132c588583d89131f7bd4859e7fe80072bfaf",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-087.html": [
+ "2320088a7fc741ef44439b0daf5eb0efb21d32fd",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-088.html": [
+ "12acc233258bf37eaae4c896b50c98aec3b08e05",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-089.html": [
+ "367503c88c4d5d932556e525e924af9ac9512bcd",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-08A.html": [
+ "1a21992d9709897e8d481e2d0f64adedd5099e79",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-08B.html": [
+ "1ed441a455446e01ab09545c50d77ab3d5053714",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-08C.html": [
+ "0c63ee54b609b2e65f5c1b81f004318c90a2d812",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-08D.html": [
+ "e908f8e1a898f33f9ad89ecab3119434fd894b90",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-08E.html": [
+ "55e87a556b8e1fef272d9ab285b66e0e06f9e730",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-08F.html": [
+ "2d9bac9730964efd54f5a80e5726d3cdbd5020b7",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-090.html": [
+ "c93258878c5e4705b306906da877a9b25f5fa440",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-091.html": [
+ "a21f8779add0aa36d8ee2d2e783c0640224bffb0",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-092.html": [
+ "5304eac57e69e853f41e651d787d9f6fb6a61605",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-093.html": [
+ "a092e873066d7d3d0b7f670edf73aa8ee0051fd9",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-094.html": [
+ "9005e8d098e84a7a53e476ba57e7551a8533b6e6",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-095.html": [
+ "6befbaa1bb15c7b728584cc6acf0ac39bd9043f8",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-096.html": [
+ "75e69d976b926f7562ca418ea1ecfcb3b2690fb0",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-097.html": [
+ "8a2c4467ae879525c2d947c7b7e0681e8268e900",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-098.html": [
+ "47e097789b6fdceca049f42a2ff5a6f535b9f8f9",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-099.html": [
+ "73a6ea6f225bd218c77fa76defe336a99d7f9b80",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-09A.html": [
+ "b34f9dc146e5a3dd208e62d84be66118a4a2cad0",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-09B.html": [
+ "4c5fcdd45a723490964448c776f5b1255bf1f161",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-09C.html": [
+ "6056a1c3de6f691cf3923c113d6f9bacbaf4a0ed",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-09D.html": [
+ "850d2696c4ea4b6f65c1f2025b349bacd3b73638",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-09E.html": [
+ "9613f9d01e2b005f81f17b627d2df1092c747fd9",
+ "reftest"
+ ],
+ "css/css-text/white-space/control-chars-09F.html": [
+ "44f6f83f2d110ac24d99de9eccaa6321903d931f",
+ "reftest"
+ ],
+ "css/css-text/white-space/line-edge-white-space-collapse-001.html": [
+ "4e144e6c330191435f183936c2ab2437ec4f7609",
+ "reftest"
+ ],
+ "css/css-text/white-space/line-edge-white-space-collapse-002.html": [
+ "f3dbf4609f44e537328a741bd03059c09a38af45",
+ "reftest"
+ ],
"css/css-text/white-space/pre-wrap-001.html": [
"31486f8f77c4c77188d94e9c21e9a8d5003e1bc4",
"reftest"
@@ -561429,6 +562865,18 @@
"f9063c98767e70c3899bc9a59b50b42a61240ae4",
"reftest"
],
+ "css/css-text/white-space/reference/control-chars-000-ref.html": [
+ "9d5fcb27147a8c53e410d08511cb5035b612f80c",
+ "support"
+ ],
+ "css/css-text/white-space/reference/line-edge-white-space-collapse-001-ref.html": [
+ "02fa594255f00396f66e86837409cd579282f7de",
+ "support"
+ ],
+ "css/css-text/white-space/reference/line-edge-white-space-collapse-002-ref.html": [
+ "ea1faa2ed1f7af05f932167762f85fc2e5150884",
+ "support"
+ ],
"css/css-text/white-space/reference/pre-wrap-001-ref.html": [
"8a8b5132db197bb9a76b1b44e461405f4cd9d1bc",
"support"
@@ -583222,7 +584670,7 @@
"support"
],
"css/support/grid.css": [
- "602e114880ae6576c0d440cf524ad284f89e708f",
+ "78fdd5e975ad61d3a8c39fe4e05694a278753c37",
"support"
],
"css/support/import-green.css": [
@@ -593002,7 +594450,7 @@
"support"
],
"docs/_writing-tests/testdriver.md": [
- "eb9b9fb0413862ab41c2064dec88fc10e3f7611a",
+ "91686ce7f54975f97464c9b1eec3858bbda6f379",
"support"
],
"docs/_writing-tests/testharness-api.md": [
@@ -597821,6 +599269,10 @@
"65c1b21e6e8274dc06679a67c79a67dc1ba756c4",
"support"
],
+ "feature-policy/experimental-features/resources/vertical-scroll-scrollable-content.html": [
+ "9f78ea4bc2975abf6d37a24952df48e6dc75400f",
+ "support"
+ ],
"feature-policy/experimental-features/resources/vertical-scroll-scrollintoview.html": [
"7bed27c2600b0a8f117fee3f13bb2e75c9d9c387",
"support"
@@ -597861,6 +599313,10 @@
"db2dcbc1929b9e1264855e9b80f77dfbda5d4f38",
"support"
],
+ "feature-policy/experimental-features/vertical-scroll-disabled-frame-no-scroll-manual.tentative.html": [
+ "6f827c919a43042ff4f1e481f676423239d4c336",
+ "manual"
+ ],
"feature-policy/experimental-features/vertical-scroll-scrollintoview.tentative.html": [
"689685a4977a7ab08c5183fe04e427c25ce6f3cf",
"testharness"
@@ -604558,7 +606014,7 @@
"testharness"
],
"html/dom/elements/the-innertext-idl-attribute/getter-tests.js": [
- "1195656a2a497b73a5da83580dd3a44d54f511ac",
+ "976d6d6bcef690e65636e4afa2f96d88a475bd7d",
"support"
],
"html/dom/elements/the-innertext-idl-attribute/getter.html": [
@@ -619769,6 +621225,22 @@
"0d1b9bade95d7b101c8dbf51547ffbaec2260c27",
"support"
],
+ "infrastructure/metadata/infrastructure/testdriver/actions/elementPosition.html.ini": [
+ "a3a9625fceed767373967ec2d0b1e4b8a2e66b27",
+ "support"
+ ],
+ "infrastructure/metadata/infrastructure/testdriver/actions/elementTiming.html.ini": [
+ "7a6cf82bbd3aad03ac3367e8a9b5e20e5aab1c25",
+ "support"
+ ],
+ "infrastructure/metadata/infrastructure/testdriver/actions/eventOrder.html.ini": [
+ "b809f4ebf61befb4df32e747637a39ad72622f61",
+ "support"
+ ],
+ "infrastructure/metadata/infrastructure/testdriver/actions/multiDevice.html.ini": [
+ "889e1f4b86bafc2065ed3f4208f74740b08968fe",
+ "support"
+ ],
"infrastructure/reftest-wait-ref.html": [
"6772c2c460e79993979688ddf46e2045b14f7d71",
"support"
@@ -619909,6 +621381,22 @@
"ea7973a62e0ee9cdc874879fd844b2309e944e61",
"testharness"
],
+ "infrastructure/testdriver/actions/elementPosition.html": [
+ "145852e7b51bd0cdc9e7b4ef5ebddcbf1c0235c5",
+ "testharness"
+ ],
+ "infrastructure/testdriver/actions/elementTiming.html": [
+ "cdfdff55f33ba591d5068ed0aea644527b12bc4e",
+ "testharness"
+ ],
+ "infrastructure/testdriver/actions/eventOrder.html": [
+ "c85b861c7fd9b199ce7baa5c9eac49525db4754b",
+ "testharness"
+ ],
+ "infrastructure/testdriver/actions/multiDevice.html": [
+ "5cab1206dbec8bc307fbdfed1bf3002cc02c299a",
+ "testharness"
+ ],
"infrastructure/testdriver/bless.html": [
"b8a1c2e7d6000050351453a14a8bfb80d8af0c76",
"testharness"
@@ -632286,7 +633774,7 @@
"testharness"
],
"payment-request/META.yml": [
- "f8460d403ffa42d9dfc1bae6e0c3e500f7742fc9",
+ "0a075e19c6bd89b662c088689c87124c1627d024",
"support"
],
"payment-request/MerchantValidationEvent/complete-method.https.html": [
@@ -642673,6 +644161,10 @@
"d47e325fbef64a425ba91f21a49a6d27e03a7e3b",
"support"
],
+ "resources/testdriver-actions.js": [
+ "46c68858e4574646ad3efaa5a6dba10127b27a29",
+ "support"
+ ],
"resources/testdriver-vendor.js": [
"3e88403636396c439759705c751433b28e05f3ab",
"support"
@@ -642682,7 +644174,7 @@
"support"
],
"resources/testdriver.js": [
- "42ec824d015ab53e1de21aa4e86564b9cd5ed094",
+ "e0741e8d61d4d67c99ccbfc860f65e796c44c78a",
"support"
],
"resources/testdriver.js.headers": [
@@ -653206,7 +654698,7 @@
"support"
],
"tools/serve/test_functional.py": [
- "e423461f4810db07f20464ee13dffccc0851c5f2",
+ "60b950fc8aa8da00a28d6212c46c6c5c75a2ab0a",
"support"
],
"tools/serve/test_serve.py": [
@@ -657278,7 +658770,7 @@
"support"
],
"tools/wptrunner/requirements.txt": [
- "fcb5922d10d53718997d0d5dca2e3f92e0862c8b",
+ "0e71ed50411b6697198d2b19787506ff959d7e11",
"support"
],
"tools/wptrunner/requirements_chrome.txt": [
@@ -657530,7 +659022,7 @@
"support"
],
"tools/wptrunner/wptrunner/executors/base.py": [
- "1dc962cfb0835dc4a5b9a6d7d760409a7df12204",
+ "fa266e3542916c97dad6b018038ec87a3397f262",
"support"
],
"tools/wptrunner/wptrunner/executors/executorchrome.py": [
@@ -657546,7 +659038,7 @@
"support"
],
"tools/wptrunner/wptrunner/executors/executormarionette.py": [
- "4ab7bf3dde9c76fe160597bccc2df772199750a0",
+ "cc1d1e400c7970e6bc0993563efb569288b2d473",
"support"
],
"tools/wptrunner/wptrunner/executors/executoropera.py": [
@@ -657558,7 +659050,7 @@
"support"
],
"tools/wptrunner/wptrunner/executors/executorselenium.py": [
- "c1d66b5706eb7a6803707c51253f8f5874690dbe",
+ "f81c0034c8bfe0c919c17927ff901680998fc41f",
"support"
],
"tools/wptrunner/wptrunner/executors/executorservo.py": [
@@ -657570,7 +659062,7 @@
"support"
],
"tools/wptrunner/wptrunner/executors/executorwebdriver.py": [
- "879bd68d522f949426d5b8d4a6599c2e40efe3e8",
+ "553b79e750a4c3deab4a81e1cba73b94860e32e1",
"support"
],
"tools/wptrunner/wptrunner/executors/executorwebkit.py": [
@@ -657582,7 +659074,7 @@
"support"
],
"tools/wptrunner/wptrunner/executors/protocol.py": [
- "f8292ff5ec118b8f3d80da96bcd07586bedba45a",
+ "74a7cc4b7fc686318b9944272dc4118ae3cb95e4",
"support"
],
"tools/wptrunner/wptrunner/executors/pytestrunner/__init__.py": [
@@ -657658,7 +659150,7 @@
"support"
],
"tools/wptrunner/wptrunner/testdriver-extra.js": [
- "ef962d35f22b915a74363ca53b10b3a05f630952",
+ "d77731a158e7e6069b04be1d9cad690c5e822d2b",
"support"
],
"tools/wptrunner/wptrunner/testdriver-vendor.js": [
@@ -657686,7 +659178,7 @@
"support"
],
"tools/wptrunner/wptrunner/testrunner.py": [
- "931a7822d0b2ba5dad26e28326f3c817be15cc8c",
+ "46e3ff7926de2f2a2c86c8971e9f5a07f1f33a8a",
"support"
],
"tools/wptrunner/wptrunner/tests/__init__.py": [
@@ -657830,7 +659322,7 @@
"support"
],
"tools/wptrunner/wptrunner/wptrunner.py": [
- "92ee971975316637b21a5af404d090aabdc7ec22",
+ "7ac7b709436c3b9b5fb9580a845e24eaeda71a32",
"support"
],
"tools/wptrunner/wptrunner/wpttest.py": [
@@ -657845,10 +659337,6 @@
"8e87d388488bbc21c664209fecd2f3e030411b0e",
"support"
],
- "tools/wptserve/.travis.yml": [
- "00183731ba5eb009c50a2d93285c379a7e7f8f5c",
- "support"
- ],
"tools/wptserve/LICENSE": [
"45896e6be2bd51f4b78e9703caefb9b672e10a55",
"support"
@@ -657918,7 +659406,7 @@
"support"
],
"tools/wptserve/tests/functional/base.py": [
- "e49c8287c5985aa5ebbed04ef3070bc785831733",
+ "f8331f5086d31730a8b86c0b708162d8e505f30d",
"support"
],
"tools/wptserve/tests/functional/docroot/document.txt": [
@@ -658046,11 +659534,11 @@
"support"
],
"tools/wptserve/tests/functional/test_pipes.py": [
- "7aa73353386624e37b6c48fc087f8e9bd0ecb93a",
+ "fdac4537d64fb5d9c1fb8dd3e148cac7c5ec240a",
"support"
],
"tools/wptserve/tests/functional/test_request.py": [
- "096c0535b9ae79a9782be097545a51e526a29106",
+ "d94580140e21d5b8b901d84e35895e6a2a6a5edf",
"support"
],
"tools/wptserve/tests/functional/test_response.py": [
@@ -658094,15 +659582,15 @@
"support"
],
"tools/wptserve/wptserve/pipes.py": [
- "cded8f6ea02d5058c0eda5c695d95a3824e9978f",
+ "cbae6d6fcb93ada3773fb58e73b43c7da8b267e2",
"support"
],
"tools/wptserve/wptserve/ranges.py": [
- "976cb1781a0dfe618038d94ea29169e6b86b3f98",
+ "104dca2ef6f834af8df341e508d8a101e4243957",
"support"
],
"tools/wptserve/wptserve/request.py": [
- "cb575ccdba4514a456c0cbf73904bb63c12fd7ff",
+ "990774cbb9e6a1666dfd3356266ae024ea5f68db",
"support"
],
"tools/wptserve/wptserve/response.py": [
diff --git a/tests/wpt/metadata/css/css-flexbox/dynamic-bsize-change.html.ini b/tests/wpt/metadata/css/css-flexbox/dynamic-bsize-change.html.ini
new file mode 100644
index 00000000000..dc8b13ba93d
--- /dev/null
+++ b/tests/wpt/metadata/css/css-flexbox/dynamic-bsize-change.html.ini
@@ -0,0 +1,2 @@
+[dynamic-bsize-change.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-000.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-000.html.ini
new file mode 100644
index 00000000000..8b5ff5f50c1
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-000.html.ini
@@ -0,0 +1,2 @@
+[control-chars-000.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-001.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-001.html.ini
new file mode 100644
index 00000000000..6eea3f81655
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-001.html.ini
@@ -0,0 +1,2 @@
+[control-chars-001.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-002.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-002.html.ini
new file mode 100644
index 00000000000..d10c36f2964
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-002.html.ini
@@ -0,0 +1,2 @@
+[control-chars-002.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-003.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-003.html.ini
new file mode 100644
index 00000000000..d6f8a027759
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-003.html.ini
@@ -0,0 +1,2 @@
+[control-chars-003.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-004.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-004.html.ini
new file mode 100644
index 00000000000..ff8d343c25b
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-004.html.ini
@@ -0,0 +1,2 @@
+[control-chars-004.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-005.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-005.html.ini
new file mode 100644
index 00000000000..843ad12c7f7
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-005.html.ini
@@ -0,0 +1,2 @@
+[control-chars-005.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-006.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-006.html.ini
new file mode 100644
index 00000000000..99865a198f6
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-006.html.ini
@@ -0,0 +1,2 @@
+[control-chars-006.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-007.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-007.html.ini
new file mode 100644
index 00000000000..508d9957b8e
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-007.html.ini
@@ -0,0 +1,2 @@
+[control-chars-007.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-008.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-008.html.ini
new file mode 100644
index 00000000000..1738df4851f
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-008.html.ini
@@ -0,0 +1,2 @@
+[control-chars-008.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-00B.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-00B.html.ini
new file mode 100644
index 00000000000..31eba84d345
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-00B.html.ini
@@ -0,0 +1,2 @@
+[control-chars-00B.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-00D.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-00D.html.ini
new file mode 100644
index 00000000000..c1b4dc8af5d
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-00D.html.ini
@@ -0,0 +1,2 @@
+[control-chars-00D.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-00E.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-00E.html.ini
new file mode 100644
index 00000000000..3968f5f9e89
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-00E.html.ini
@@ -0,0 +1,2 @@
+[control-chars-00E.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-00F.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-00F.html.ini
new file mode 100644
index 00000000000..0b0d02c263c
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-00F.html.ini
@@ -0,0 +1,2 @@
+[control-chars-00F.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-010.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-010.html.ini
new file mode 100644
index 00000000000..03e308782b5
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-010.html.ini
@@ -0,0 +1,2 @@
+[control-chars-010.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-011.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-011.html.ini
new file mode 100644
index 00000000000..5eaef40e8ca
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-011.html.ini
@@ -0,0 +1,2 @@
+[control-chars-011.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-012.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-012.html.ini
new file mode 100644
index 00000000000..bf2ff8b5017
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-012.html.ini
@@ -0,0 +1,2 @@
+[control-chars-012.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-013.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-013.html.ini
new file mode 100644
index 00000000000..53cd0764b67
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-013.html.ini
@@ -0,0 +1,2 @@
+[control-chars-013.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-014.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-014.html.ini
new file mode 100644
index 00000000000..9b0bbdf58fe
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-014.html.ini
@@ -0,0 +1,2 @@
+[control-chars-014.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-015.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-015.html.ini
new file mode 100644
index 00000000000..416b69f4d7a
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-015.html.ini
@@ -0,0 +1,2 @@
+[control-chars-015.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-016.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-016.html.ini
new file mode 100644
index 00000000000..c69422404e4
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-016.html.ini
@@ -0,0 +1,2 @@
+[control-chars-016.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-017.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-017.html.ini
new file mode 100644
index 00000000000..f520bc38e7d
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-017.html.ini
@@ -0,0 +1,2 @@
+[control-chars-017.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-018.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-018.html.ini
new file mode 100644
index 00000000000..85e95732e3a
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-018.html.ini
@@ -0,0 +1,2 @@
+[control-chars-018.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-019.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-019.html.ini
new file mode 100644
index 00000000000..d992fd534bc
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-019.html.ini
@@ -0,0 +1,2 @@
+[control-chars-019.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-01A.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-01A.html.ini
new file mode 100644
index 00000000000..cfddeae9f22
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-01A.html.ini
@@ -0,0 +1,2 @@
+[control-chars-01A.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-01B.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-01B.html.ini
new file mode 100644
index 00000000000..d1e0e6b9f15
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-01B.html.ini
@@ -0,0 +1,2 @@
+[control-chars-01B.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-01C.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-01C.html.ini
new file mode 100644
index 00000000000..d8bdc44d8ae
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-01C.html.ini
@@ -0,0 +1,2 @@
+[control-chars-01C.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-01D.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-01D.html.ini
new file mode 100644
index 00000000000..c98607086c0
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-01D.html.ini
@@ -0,0 +1,2 @@
+[control-chars-01D.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-01E.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-01E.html.ini
new file mode 100644
index 00000000000..748ef5294d8
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-01E.html.ini
@@ -0,0 +1,2 @@
+[control-chars-01E.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-01F.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-01F.html.ini
new file mode 100644
index 00000000000..82d2124bda1
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-01F.html.ini
@@ -0,0 +1,2 @@
+[control-chars-01F.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-07F.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-07F.html.ini
new file mode 100644
index 00000000000..0e19383f65d
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-07F.html.ini
@@ -0,0 +1,2 @@
+[control-chars-07F.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-080.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-080.html.ini
new file mode 100644
index 00000000000..4124ec4f58a
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-080.html.ini
@@ -0,0 +1,2 @@
+[control-chars-080.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-081.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-081.html.ini
new file mode 100644
index 00000000000..dab2227c23b
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-081.html.ini
@@ -0,0 +1,2 @@
+[control-chars-081.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-082.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-082.html.ini
new file mode 100644
index 00000000000..e9672509dc4
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-082.html.ini
@@ -0,0 +1,2 @@
+[control-chars-082.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-083.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-083.html.ini
new file mode 100644
index 00000000000..cfdfcc9860b
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-083.html.ini
@@ -0,0 +1,2 @@
+[control-chars-083.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-084.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-084.html.ini
new file mode 100644
index 00000000000..e14e920fd29
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-084.html.ini
@@ -0,0 +1,2 @@
+[control-chars-084.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-085.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-085.html.ini
new file mode 100644
index 00000000000..0a9bf159a93
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-085.html.ini
@@ -0,0 +1,2 @@
+[control-chars-085.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-086.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-086.html.ini
new file mode 100644
index 00000000000..81a9f5df256
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-086.html.ini
@@ -0,0 +1,2 @@
+[control-chars-086.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-087.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-087.html.ini
new file mode 100644
index 00000000000..2a7d2bdf6f0
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-087.html.ini
@@ -0,0 +1,2 @@
+[control-chars-087.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-088.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-088.html.ini
new file mode 100644
index 00000000000..941e79c33bb
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-088.html.ini
@@ -0,0 +1,2 @@
+[control-chars-088.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-089.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-089.html.ini
new file mode 100644
index 00000000000..2d380014c51
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-089.html.ini
@@ -0,0 +1,2 @@
+[control-chars-089.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-08A.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-08A.html.ini
new file mode 100644
index 00000000000..7fef30e5750
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-08A.html.ini
@@ -0,0 +1,2 @@
+[control-chars-08A.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-08B.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-08B.html.ini
new file mode 100644
index 00000000000..1747f3806fb
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-08B.html.ini
@@ -0,0 +1,2 @@
+[control-chars-08B.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-08C.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-08C.html.ini
new file mode 100644
index 00000000000..7a63e951454
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-08C.html.ini
@@ -0,0 +1,2 @@
+[control-chars-08C.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-08D.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-08D.html.ini
new file mode 100644
index 00000000000..0a48430eb36
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-08D.html.ini
@@ -0,0 +1,2 @@
+[control-chars-08D.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-08E.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-08E.html.ini
new file mode 100644
index 00000000000..127d41d36e7
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-08E.html.ini
@@ -0,0 +1,2 @@
+[control-chars-08E.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-08F.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-08F.html.ini
new file mode 100644
index 00000000000..88bbd75179f
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-08F.html.ini
@@ -0,0 +1,2 @@
+[control-chars-08F.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-090.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-090.html.ini
new file mode 100644
index 00000000000..a65a36db13f
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-090.html.ini
@@ -0,0 +1,2 @@
+[control-chars-090.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-091.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-091.html.ini
new file mode 100644
index 00000000000..c33a61dc3b5
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-091.html.ini
@@ -0,0 +1,2 @@
+[control-chars-091.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-092.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-092.html.ini
new file mode 100644
index 00000000000..d9147c77c23
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-092.html.ini
@@ -0,0 +1,2 @@
+[control-chars-092.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-093.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-093.html.ini
new file mode 100644
index 00000000000..205ca01117a
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-093.html.ini
@@ -0,0 +1,2 @@
+[control-chars-093.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-094.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-094.html.ini
new file mode 100644
index 00000000000..352ca3815d7
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-094.html.ini
@@ -0,0 +1,2 @@
+[control-chars-094.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-095.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-095.html.ini
new file mode 100644
index 00000000000..7deb6fd90bb
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-095.html.ini
@@ -0,0 +1,2 @@
+[control-chars-095.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-096.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-096.html.ini
new file mode 100644
index 00000000000..a36a8c28570
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-096.html.ini
@@ -0,0 +1,2 @@
+[control-chars-096.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-097.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-097.html.ini
new file mode 100644
index 00000000000..44a89ff1f14
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-097.html.ini
@@ -0,0 +1,2 @@
+[control-chars-097.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-098.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-098.html.ini
new file mode 100644
index 00000000000..a5ae7dd54c4
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-098.html.ini
@@ -0,0 +1,2 @@
+[control-chars-098.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-099.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-099.html.ini
new file mode 100644
index 00000000000..1553b48bf1b
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-099.html.ini
@@ -0,0 +1,2 @@
+[control-chars-099.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-09A.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-09A.html.ini
new file mode 100644
index 00000000000..9907c26a62a
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-09A.html.ini
@@ -0,0 +1,2 @@
+[control-chars-09A.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-09B.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-09B.html.ini
new file mode 100644
index 00000000000..bb5c9961e71
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-09B.html.ini
@@ -0,0 +1,2 @@
+[control-chars-09B.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-09C.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-09C.html.ini
new file mode 100644
index 00000000000..76e02dcc1ce
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-09C.html.ini
@@ -0,0 +1,2 @@
+[control-chars-09C.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-09D.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-09D.html.ini
new file mode 100644
index 00000000000..662b20d92e0
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-09D.html.ini
@@ -0,0 +1,2 @@
+[control-chars-09D.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-09E.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-09E.html.ini
new file mode 100644
index 00000000000..eec9dce8069
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-09E.html.ini
@@ -0,0 +1,2 @@
+[control-chars-09E.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-09F.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-09F.html.ini
new file mode 100644
index 00000000000..f2281628a73
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-09F.html.ini
@@ -0,0 +1,2 @@
+[control-chars-09F.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/line-edge-white-space-collapse-001.html.ini b/tests/wpt/metadata/css/css-text/white-space/line-edge-white-space-collapse-001.html.ini
new file mode 100644
index 00000000000..8c95fc3b691
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/line-edge-white-space-collapse-001.html.ini
@@ -0,0 +1,2 @@
+[line-edge-white-space-collapse-001.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/line-edge-white-space-collapse-002.html.ini b/tests/wpt/metadata/css/css-text/white-space/line-edge-white-space-collapse-002.html.ini
new file mode 100644
index 00000000000..754626ab7bc
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/line-edge-white-space-collapse-002.html.ini
@@ -0,0 +1,2 @@
+[line-edge-white-space-collapse-002.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transitions/transitions-animatable-properties-01.html.ini b/tests/wpt/metadata/css/css-transitions/transitions-animatable-properties-01.html.ini
index 5f219ddc85f..98c044f3c1a 100644
--- a/tests/wpt/metadata/css/css-transitions/transitions-animatable-properties-01.html.ini
+++ b/tests/wpt/metadata/css/css-transitions/transitions-animatable-properties-01.html.ini
@@ -68,6 +68,6 @@
[text-indent intermediate]
expected: FAIL
- [border-top-width end]
+ [bottom intermediate]
expected: FAIL
diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini
deleted file mode 100644
index 385376c7321..00000000000
--- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[traverse_the_history_4.html]
- [Multiple history traversals, last would be aborted]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini
deleted file mode 100644
index dc2e45516de..00000000000
--- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[traverse_the_history_5.html]
- [Multiple history traversals, last would be aborted]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini b/tests/wpt/metadata/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini
index 20865f493ec..9579b42287e 100644
--- a/tests/wpt/metadata/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini
+++ b/tests/wpt/metadata/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini
@@ -30,3 +30,6 @@
[Set HTTP URL frame location.protocol to data]
expected: FAIL
+ [Set HTTP URL frame location.protocol to x]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html.ini
index 0f1a214d0ee..6b57ca778ee 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html.ini
@@ -5,7 +5,7 @@
expected: TIMEOUT
[picture: source (max-width:500px) valid image, img valid image, resize to wide]
- expected: FAIL
+ expected: TIMEOUT
[picture: source (max-width:500px) valid image, img broken image, resize to narrow]
expected: TIMEOUT
@@ -16,18 +16,9 @@
[picture: source (max-width:500px) broken image, img valid image, resize to narrow]
expected: FAIL
- [img (srcset 1 cand) valid image, resize to wide]
- expected: FAIL
-
- [picture: same URL in source (max-width:500px) and img, resize to wide]
- expected: FAIL
-
[img (srcset 1 cand) valid image, resize to narrow]
expected: FAIL
- [picture: source (max-width:500px) valid image, img broken image, resize to wide]
- expected: FAIL
-
[picture: same URL in source (max-width:500px) and img, resize to narrow]
expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini
deleted file mode 100644
index 8cc42056d34..00000000000
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini
+++ /dev/null
@@ -1,10 +0,0 @@
-[non-active-document.html]
- [DOMParser]
- expected: FAIL
-
- [createHTMLDocument]
- expected: FAIL
-
- [<template>]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/quirks/unitless-length/no-quirks.html.ini b/tests/wpt/metadata/quirks/unitless-length/quirks.html.ini
index 818a429ed39..2ed601c6ff4 100644
--- a/tests/wpt/metadata/quirks/unitless-length/no-quirks.html.ini
+++ b/tests/wpt/metadata/quirks/unitless-length/quirks.html.ini
@@ -1,4 +1,4 @@
-[no-quirks.html]
+[quirks.html]
[top: -\\31 .5]
expected: FAIL
diff --git a/tests/wpt/metadata/url/urlencoded-parser.any.js.ini b/tests/wpt/metadata/url/urlencoded-parser.any.js.ini
index 86cf34ce8de..29123761468 100644
--- a/tests/wpt/metadata/url/urlencoded-parser.any.js.ini
+++ b/tests/wpt/metadata/url/urlencoded-parser.any.js.ini
@@ -1,13 +1,7 @@
[urlencoded-parser.any.html]
- [response.formData() with input: a&b&c]
- expected: FAIL
-
[response.formData() with input: _charset_=windows-1252&test=%C2x]
expected: FAIL
- [response.formData() with input: &&&a=b&&&&c=d&]
- expected: FAIL
-
[request.formData() with input: _charset_=windows-1252&test=%C2x]
expected: FAIL
@@ -17,14 +11,20 @@
[response.formData() with input: a=b&c=d]
expected: FAIL
-
-[urlencoded-parser.any.worker.html]
[request.formData() with input: a&b&c]
expected: FAIL
[response.formData() with input: a=b&c=d&]
expected: FAIL
+ [request.formData() with input: a=b&c=d]
+ expected: FAIL
+
+
+[urlencoded-parser.any.worker.html]
+ [request.formData() with input: a&b&c]
+ expected: FAIL
+
[request.formData() with input: a=b&c=d&]
expected: FAIL
@@ -34,3 +34,12 @@
[request.formData() with input: &&&a=b&&&&c=d&]
expected: FAIL
+ [request.formData() with input: _charset_=windows-1252&test=%C2x]
+ expected: FAIL
+
+ [request.formData() with input: a=b&c=d]
+ expected: FAIL
+
+ [response.formData() with input: _charset_=windows-1252&test=%C2x]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini
index a56bad443a2..66bd350083b 100644
--- a/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini
+++ b/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini
@@ -1,5 +1,4 @@
[realtimeanalyser-fft-scaling.html]
- expected: TIMEOUT
[X 2048-point FFT peak position is not equal to 64. Got 0.]
expected: FAIL
diff --git a/tests/wpt/metadata/workers/baseurl/alpha/import-in-moduleworker.html.ini b/tests/wpt/metadata/workers/baseurl/alpha/import-in-moduleworker.html.ini
index bfd4d6dd2d6..bf2a1d61bab 100644
--- a/tests/wpt/metadata/workers/baseurl/alpha/import-in-moduleworker.html.ini
+++ b/tests/wpt/metadata/workers/baseurl/alpha/import-in-moduleworker.html.ini
@@ -1,5 +1,4 @@
[import-in-moduleworker.html]
- expected: ERROR
[Base URL in module dedicated workers: import]
expected: FAIL
diff --git a/tests/wpt/web-platform-tests/.travis.yml b/tests/wpt/web-platform-tests/.travis.yml
index e0abc3cb953..b14cfafbdf7 100644
--- a/tests/wpt/web-platform-tests/.travis.yml
+++ b/tests/wpt/web-platform-tests/.travis.yml
@@ -4,23 +4,19 @@ language: python
branches:
only:
- master
-addons:
- hosts:
- - web-platform.test
- - www.web-platform.test
- - www1.web-platform.test
- - www2.web-platform.test
- - xn--n8j6ds53lwwkrqhv28a.web-platform.test
- - xn--lve-6lad.web-platform.test
before_install:
# This needs be sourced as it sets various env vars
- . ./tools/ci/before_install.sh
install:
- ./tools/ci/install.sh
matrix:
+ # The use of `if` conditionals to exclude jobs from master should align with
+ # jobs unconditionally listed by `./wpt test-jobs`, regardless of affected
+ # paths. (The reverse is not true, as the manifest job could run on PRs too.)
fast_finish: true
include:
- name: "tag master + upload manifest"
+ if: type = push AND branch = master
os: linux
python: "2.7"
env:
@@ -33,18 +29,22 @@ matrix:
file: $WPT_MANIFEST_FILE.gz
skip_cleanup: true
- name: "lint"
+ # lint is run both on master and on PRs
os: linux
python: "2.7"
env: JOB=lint SCRIPT=tools/ci/ci_lint.sh
- name: "update-built-tests.sh"
+ if: type = pull_request
os: linux
python: "2.7"
env: JOB=update_built SCRIPT=tools/ci/ci_built_diff.sh
- name: "build-css-testsuites.sh"
+ if: type = pull_request
os: linux
python: "2.7"
env: JOB=build_css SCRIPT=css/build-css-testsuites.sh
- name: "stability (Firefox Nightly)"
+ if: type = pull_request
os: linux
python: "2.7"
addons:
@@ -54,8 +54,8 @@ matrix:
env:
- JOB=stability SCRIPT=tools/ci/ci_stability.sh PRODUCT=firefox:nightly
- name: "stability (Chrome Dev)"
+ if: type = pull_request
os: linux
- sudo: required
python: "2.7"
addons:
apt:
@@ -65,14 +65,17 @@ matrix:
env:
- JOB=stability SCRIPT=tools/ci/ci_stability.sh PRODUCT=chrome:dev
- name: "tools/ unittests (Python 2)"
+ if: type = pull_request
os: linux
python: "2.7"
env: JOB=tools_unittest TOXENV=py27 HYPOTHESIS_PROFILE=ci SCRIPT=tools/ci/ci_tools_unittest.sh
- name: "tools/ unittests (Python 3)"
+ if: type = pull_request
os: linux
python: "3.6"
env: JOB=tools_unittest TOXENV=py36 HYPOTHESIS_PROFILE=ci SCRIPT=tools/ci/ci_tools_unittest.sh
- name: "tools/wpt/ unittests"
+ if: type = pull_request
os: linux
python: "2.7"
addons:
@@ -81,10 +84,12 @@ matrix:
- libnss3-tools
env: JOB=wpt_integration TOXENV=py27,py27-flake8 SCRIPT=tools/ci/ci_wpt.sh
- name: "resources/ tests"
+ if: type = pull_request
os: linux
python: "2.7"
env: JOB=resources_unittest TOXENV=py27 SCRIPT=tools/ci/ci_resources_unittest.sh
- name: "infrastructure/ tests"
+ if: type = pull_request
os: linux
python: "2.7"
env: JOB=wptrunner_infrastructure SCRIPT=tools/ci/ci_wptrunner_infrastructure.sh
diff --git a/tests/wpt/web-platform-tests/background-fetch/abort.https.window.js b/tests/wpt/web-platform-tests/background-fetch/abort.https.window.js
deleted file mode 100644
index 588fcac012f..00000000000
--- a/tests/wpt/web-platform-tests/background-fetch/abort.https.window.js
+++ /dev/null
@@ -1,50 +0,0 @@
-// META: script=/service-workers/service-worker/resources/test-helpers.sub.js
-// META: script=resources/utils.js
-'use strict';
-
-// Covers basic functionality provided by BackgroundFetchManager.abort().
-// https://wicg.github.io/background-fetch/#background-fetch-registration-abort
-
-backgroundFetchTest(async (test, backgroundFetch) => {
- const registration = await backgroundFetch.fetch(
- uniqueId(),
- ['resources/feature-name.txt', '/serviceworker/resources/slow-response.php']);
-
- assert_true(await registration.abort());
- assert_false(await registration.abort());
-
-}, 'Aborting the same registration twice fails');
-
-backgroundFetchTest(async (test, backgroundFetch) => {
- const registration = await backgroundFetch.fetch(
- uniqueId(),
- ['resources/feature-name.txt', '/serviceworker/resources/slow-response.php']);
- const resultPromise = getMessageFromServiceWorker();
-
- await new Promise(resolve => {
- registration.onprogress = async (e) => {
- // The size of the first file.
- if (e.target.downloaded < 16)
- return;
-
- // At this point the first file is downloaded.
-
- assert_true(await registration.abort());
-
- const {type, eventRegistration, results} = await resultPromise;
-
- assert_equals(eventRegistration.result, 'failure');
- assert_equals(eventRegistration.failureReason, 'aborted');
-
- assert_equals(type, 'backgroundfetchabort');
- assert_equals(results.length, 1);
-
- assert_true(results[0].url.includes('resources/feature-name.txt'));
- assert_equals(results[0].status, 200);
- assert_equals(results[0].text, 'Background Fetch');
-
- resolve();
- };
- });
-
-}, 'Calling BackgroundFetchRegistration.abort sets the correct fields and responses are still available'); \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/background-fetch/service_workers/sw.js b/tests/wpt/web-platform-tests/background-fetch/service_workers/sw.js
index 2e3fbfff1a8..af4655dbad4 100644
--- a/tests/wpt/web-platform-tests/background-fetch/service_workers/sw.js
+++ b/tests/wpt/web-platform-tests/background-fetch/service_workers/sw.js
@@ -27,4 +27,3 @@ function handleBackgroundFetchUpdateEvent(event) {
self.addEventListener('backgroundfetchsuccess', handleBackgroundFetchUpdateEvent);
self.addEventListener('backgroundfetchfail', handleBackgroundFetchUpdateEvent);
-self.addEventListener('backgroundfetchabort', handleBackgroundFetchUpdateEvent);
diff --git a/tests/wpt/web-platform-tests/content-security-policy/generic/directive-name-case-insensitive.sub.html b/tests/wpt/web-platform-tests/content-security-policy/generic/directive-name-case-insensitive.sub.html
new file mode 100644
index 00000000000..c65c59fb23f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/content-security-policy/generic/directive-name-case-insensitive.sub.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+ <meta http-equiv="Content-Security-Policy" content="
+ IMg-sRC 'self' 'unsafe-inline' http://{{domains[www1]}}:{{ports[http][0]}};
+ img-src 'self' 'unsafe-inline' http://{{domains[www2]}}:{{ports[http][0]}};">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+</head>
+
+<body>
+ <script>
+ var t1 = async_test("Test that the www1 image is allowed to load");
+ var t2 = async_test("Test that the www2 image is not allowed to load");
+ var t_spv = async_test("Test that the www2 image throws a violation event");
+ window.addEventListener("securitypolicyviolation", t_spv.step_func_done(function(e) {
+ assert_equals(e.violatedDirective, "img-src");
+ assert_equals(e.blockedURI, "http://{{domains[www2]}}:{{ports[http][0]}}/content-security-policy/support/fail.png");
+ }));
+ </script>
+
+ <img src="http://{{domains[www1]}}:{{ports[http][0]}}/content-security-policy/support/pass.png"
+ onload="t1.done();"
+ onerror="t1.step(function() { assert_unreached('www1 image should have loaded'); t1.done(); });">
+
+ <img src="http://{{domains[www2]}}:{{ports[http][0]}}/content-security-policy/support/fail.png"
+ onerror="t2.done();"
+ onload="t2.step(function() { assert_unreached('www2 image should not have loaded'); t2.done(); });">
+</body>
+
+</html>
diff --git a/tests/wpt/web-platform-tests/content-security-policy/inheritance/blob-url-self-navigate-inherits.sub.html b/tests/wpt/web-platform-tests/content-security-policy/inheritance/blob-url-self-navigate-inherits.sub.html
new file mode 100644
index 00000000000..3b54528d56a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/content-security-policy/inheritance/blob-url-self-navigate-inherits.sub.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+ <script nonce="abc" src="/resources/testharness.js"></script>
+ <script nonce="abc" src="/resources/testharnessreport.js"></script>
+</head>
+
+<!-- This tests that navigating a main window to a local scheme preserves the current CSP.
+ We need to test this in a main window with no parent/opener so we use
+ a link with target=_blank and rel=noopener. -->
+<body>
+ <script>
+ const a = document.createElement("a")
+ a.href = "support/navigate-self-to-blob.html?csp=script-src%20%27nonce-abc%27&report_id={{$id:uuid()}}";
+ a.target = "_blank"
+ a.rel = "noopener"
+ a.click()
+ </script>
+ <script async defer src='../support/checkReport.sub.js?reportField=violated-directive&reportValue=script-src%20%27nonce-abc%27&reportID={{$id}}'></script>
+</body>
+
+</html>
diff --git a/tests/wpt/web-platform-tests/content-security-policy/inheritance/support/navigate-self-to-blob.html b/tests/wpt/web-platform-tests/content-security-policy/inheritance/support/navigate-self-to-blob.html
new file mode 100644
index 00000000000..9ea069969ca
--- /dev/null
+++ b/tests/wpt/web-platform-tests/content-security-policy/inheritance/support/navigate-self-to-blob.html
@@ -0,0 +1,6 @@
+<script nonce="abc">
+ var blob_string = "<script>alert(document.domain)<\/script>";
+ var blob = new Blob([blob_string], {type : 'text/html'});
+ var url = URL.createObjectURL(blob);
+ location.href=url;
+</script>
diff --git a/tests/wpt/web-platform-tests/content-security-policy/inheritance/support/navigate-self-to-blob.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/inheritance/support/navigate-self-to-blob.html.sub.headers
new file mode 100644
index 00000000000..27aa5f4a102
--- /dev/null
+++ b/tests/wpt/web-platform-tests/content-security-policy/inheritance/support/navigate-self-to-blob.html.sub.headers
@@ -0,0 +1,4 @@
+Expires: Mon, 26 Jul 1997 05:00:00 GMT
+Cache-Control: no-store, no-cache, must-revalidate
+Pragma: no-cache
+Content-Security-Policy: {{GET[csp]}}; report-uri http://{{host}}:{{ports[http][0]}}/content-security-policy/support/report.py?op=put&reportID={{GET[report_id]}}
diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-1.html b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-1.html
new file mode 100644
index 00000000000..64d9498d6d8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-1.html
@@ -0,0 +1,20 @@
+<html>
+<head>
+ <meta http-equiv="Content-Security-Policy" content="script-src 'self' 'nonce-abc' 'sha256-c6TzhBw/snA+hlDMGOuKLWXIkb2sawA/S1wbSe6FeEM=';">
+ <script src='/resources/testharness.js'></script>
+ <script src='/resources/testharnessreport.js'></script>
+</head>
+<body>
+ <script nonce="abc">
+ var t1 = async_test("Should convert the script contents to UTF-8 before hashing");
+ window.addEventListener("securitypolicyviolation", t1.unreached_func("Should not have fired a spv"));
+ </script>
+
+ <!-- � (micro sign) has the value of 0xB5 in latin-1 and of 0xC2B5 in utf-8 but the hash value should be the same as the utf-8 computed one -->
+ <script>
+ // � - latin micro sign
+ t1.done();
+ </script>
+</body>
+</html>
+
diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-1.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-1.html.sub.headers
new file mode 100644
index 00000000000..acc92f4e80b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-1.html.sub.headers
@@ -0,0 +1 @@
+Content-Type: text/html; charset=iso-8859-1
diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-3.html b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-3.html
new file mode 100644
index 00000000000..fdcc54534cc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-3.html
@@ -0,0 +1,20 @@
+<html>
+<head>
+ <meta http-equiv="Content-Security-Policy" content="script-src 'self' 'nonce-abc' 'sha256-hbNM6T3uO5pu4o5YfNnUmwtq5VHHMr7V5ospXtx9bqU=';">
+ <script src='/resources/testharness.js'></script>
+ <script src='/resources/testharnessreport.js'></script>
+</head>
+<body>
+ <script nonce="abc">
+ var t3 = async_test("Should convert the script contents to UTF-8 before hashing");
+ window.addEventListener("securitypolicyviolation", t3.unreached_func("Should not have fired a spv"));
+ </script>
+
+ <!-- � (latin capital letter g with breve) has the value of 0xAB in latin-3 and of 0xC49E in utf-8 but the hash value should be the same as the utf-8 computed one -->
+ <script>
+ // � - latin capital letter g with breve
+ t3.done();
+ </script>
+</body>
+</html>
+
diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-3.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-3.html.sub.headers
new file mode 100644
index 00000000000..ae3e03dae1f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-3.html.sub.headers
@@ -0,0 +1 @@
+Content-Type: text/html; charset=iso-8859-3
diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-7.html b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-7.html
new file mode 100644
index 00000000000..23a64df1792
--- /dev/null
+++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-7.html
@@ -0,0 +1,20 @@
+<html>
+<head>
+ <meta http-equiv="Content-Security-Policy" content="script-src 'self' 'nonce-abc' 'sha256-ST0rpskqtEC0Q0hqbIAZFeE1KBMJeGZGyYaTcTkieG8=';">
+ <script src='/resources/testharness.js'></script>
+ <script src='/resources/testharnessreport.js'></script>
+</head>
+<body>
+ <script nonce="abc">
+ var t2 = async_test("Should convert the script contents to UTF-8 before hashing");
+ window.addEventListener("securitypolicyviolation", t2.unreached_func("Should not have fired a spv"));
+ </script>
+
+ <!-- � (greek small letter mu) has the value of 0xEC in latin-7 and of 0xCEBC in utf-8 but the hash value should be the same as the utf-8 computed one -->
+ <script>
+ // � - greek small letter mu
+ t2.done();
+ </script>
+</body>
+</html>
+
diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-7.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-7.html.sub.headers
new file mode 100644
index 00000000000..9550b0de30a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-7.html.sub.headers
@@ -0,0 +1 @@
+Content-Type: text/html; charset=iso-8859-7
diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-9.html b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-9.html
new file mode 100644
index 00000000000..a29d197a1ce
--- /dev/null
+++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-9.html
@@ -0,0 +1,20 @@
+<html>
+<head>
+ <meta http-equiv="Content-Security-Policy" content="script-src 'self' 'nonce-abc' 'sha256-hbNM6T3uO5pu4o5YfNnUmwtq5VHHMr7V5ospXtx9bqU=';">
+ <script src='/resources/testharness.js'></script>
+ <script src='/resources/testharnessreport.js'></script>
+</head>
+<body>
+ <script nonce="abc">
+ var t3 = async_test("Should convert the script contents to UTF-8 before hashing");
+ window.addEventListener("securitypolicyviolation", t3.unreached_func("Should not have fired a spv"));
+ </script>
+
+ <!-- � (latin capital letter g with breve) has the value of 0xD0 in latin-9 and of 0xC49E in utf-8 but the hash value should be the same as the utf-8 computed one -->
+ <script>
+ // � - latin capital letter g with breve
+ t3.done();
+ </script>
+</body>
+</html>
+
diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-9.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-9.html.sub.headers
new file mode 100644
index 00000000000..6382ff86a72
--- /dev/null
+++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-9.html.sub.headers
@@ -0,0 +1 @@
+Content-Type: text/html; charset=iso-8859-9
diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8-lone-surrogate.html b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8-lone-surrogate.html
new file mode 100644
index 00000000000..58730a72cc5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8-lone-surrogate.html
@@ -0,0 +1,31 @@
+<html>
+<head>
+ <meta http-equiv="Content-Security-Policy" content="script-src 'self' 'nonce-abc' 'sha256-YJSaNEZFStZqU2Mp2EttwhcP2aT9lnDvexn+BM2HfKo=';">
+ <script src='/resources/testharness.js'></script>
+ <script src='/resources/testharnessreport.js'></script>
+</head>
+<body>
+ <script nonce="abc">
+ var t = async_test("Should convert the script contents to UTF-8 before hashing");
+ var count = 0;
+ var script_ran = function() {
+ // if both blocks run the tests is succsssful
+ if (++count == 2) t.done();
+ }
+ window.addEventListener("securitypolicyviolation", t.unreached_func("Should not have fired a spv"));
+
+ // Insert a script element that contains the U+FFFD replacement character
+ var scr1 = document.createElement('script');
+ scr1.text ="//\uFFFD\nscript_ran();";
+ document.body.appendChild(scr1);
+
+ // Insert a script element that contains a surrogate character but it otherwise
+ // entirely identical to the previously inserted one, the surrogate should be
+ // be converted to U+FFFD when converting to UTF-8 so it should have the
+ // same hash as the one inserted before
+ var scr2 = document.createElement('script');
+ scr2.text ="//\uD801\nscript_ran();";
+ document.body.appendChild(scr2);
+ </script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8-lone-surrogate.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8-lone-surrogate.html.sub.headers
new file mode 100644
index 00000000000..2d1c08b9e8a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8-lone-surrogate.html.sub.headers
@@ -0,0 +1 @@
+Content-Type: text/html; charset=utf-8
diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8.html b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8.html
new file mode 100644
index 00000000000..b770cba2466
--- /dev/null
+++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8.html
@@ -0,0 +1,36 @@
+<html>
+<head>
+ <meta http-equiv="Content-Security-Policy" content="script-src 'self' 'nonce-abc'
+ 'sha256-c6TzhBw/snA+hlDMGOuKLWXIkb2sawA/S1wbSe6FeEM='
+ 'sha256-ST0rpskqtEC0Q0hqbIAZFeE1KBMJeGZGyYaTcTkieG8='
+ 'sha256-hbNM6T3uO5pu4o5YfNnUmwtq5VHHMr7V5ospXtx9bqU=';">
+ <!-- hashes matching the 3 script blocks below -->
+ <script src='/resources/testharness.js'></script>
+ <script src='/resources/testharnessreport.js'></script>
+</head>
+<body>
+ <script nonce="abc">
+ var t1 = async_test("Should convert the script contents to UTF-8 before hashing - latin micro sign");
+ window.addEventListener("securitypolicyviolation", t1.unreached_func("Should not have fired a spv"));
+ var t2 = async_test("Should convert the script contents to UTF-8 before hashing - greek small letter mu");
+ window.addEventListener("securitypolicyviolation", t2.unreached_func("Should not have fired a spv"));
+ var t3 = async_test("Should convert the script contents to UTF-8 before hashing - latin capital letter g with breve");
+ window.addEventListener("securitypolicyviolation", t3.unreached_func("Should not have fired a spv"));
+ </script>
+
+ <!-- the hash values of these script blocks should match the same values
+ of identical script blocks in documents with other encodings -->
+ <script>
+ // µ - latin micro sign
+ t1.done();
+ </script>
+ <script>
+ // μ - greek small letter mu
+ t2.done();
+ </script>
+ <script>
+ // Ğ - latin capital letter g with breve
+ t3.done();
+ </script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8.html.sub.headers
new file mode 100644
index 00000000000..2d1c08b9e8a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8.html.sub.headers
@@ -0,0 +1 @@
+Content-Type: text/html; charset=utf-8
diff --git a/tests/wpt/web-platform-tests/css/CSS2/positioning/absolute-non-replaced-height-013.html b/tests/wpt/web-platform-tests/css/CSS2/positioning/absolute-non-replaced-height-013.html
new file mode 100644
index 00000000000..46929f360a0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/CSS2/positioning/absolute-non-replaced-height-013.html
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<title>Auto margin-top and margin-bottom, non-auto everything else</title>
+<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org">
+<link rel="help" href="https://www.w3.org/TR/CSS22/visudet.html#abs-non-replaced-height">
+<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div style="position:relative; width:100px; height:100px; background:red;">
+ <div style="position:absolute; top:50%; bottom:50%; width:100px; height:100px; margin:auto; background:green;"></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/dynamic-bsize-change-ref.html b/tests/wpt/web-platform-tests/css/css-flexbox/dynamic-bsize-change-ref.html
new file mode 100644
index 00000000000..b8db7ea2c7d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-flexbox/dynamic-bsize-change-ref.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<title>CSS Test Reference</title>
+<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
+<style>
+ div {
+ border: 1px solid;
+ }
+ #myHeightChanges {
+ width: 100px;
+ height: 200px;
+ background: green;
+ }
+</style>
+<div style="display:flex; flex-direction:column">
+ <div style="height:auto">
+ <div id="myHeightChanges"></div>
+ </div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/dynamic-bsize-change.html b/tests/wpt/web-platform-tests/css/css-flexbox/dynamic-bsize-change.html
new file mode 100644
index 00000000000..7148f26e277
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-flexbox/dynamic-bsize-change.html
@@ -0,0 +1,28 @@
+<!doctype html>
+<title>CSS Test: Dynamic change to the block size inside an auto-sized flex item</title>
+<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
+<link rel="author" title="Mozilla" href="https://mozilla.org">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox">
+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1496833">
+<link rel="match" href="dynamic-bsize-change-ref.html">
+<style>
+ div {
+ border: 1px solid;
+ }
+ #myHeightChanges {
+ width: 100px;
+ height: 100px;
+ background: green;
+ }
+</style>
+<div style="display:flex; flex-direction:column">
+ <div style="height:auto">
+ <div id="myHeightChanges"></div>
+ </div>
+</div>
+<script>
+onload = function() {
+ window.unused = myHeightChanges.offsetTop;
+ myHeightChanges.style.height = "200px";
+}
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/abspos/support/grid.css b/tests/wpt/web-platform-tests/css/css-grid/abspos/support/grid.css
index 602e114880a..78fdd5e975a 100644
--- a/tests/wpt/web-platform-tests/css/css-grid/abspos/support/grid.css
+++ b/tests/wpt/web-platform-tests/css/css-grid/abspos/support/grid.css
@@ -68,6 +68,12 @@
grid-row: 3;
}
+.thirdRowThirdColumn {
+ background-color: salmon;
+ grid-column: 3;
+ grid-row: 3;
+}
+
.firstRowThirdColumn {
background-color: magenta;
grid-column: 3;
diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-definition/support/grid.css b/tests/wpt/web-platform-tests/css/css-grid/grid-definition/support/grid.css
index 602e114880a..78fdd5e975a 100644
--- a/tests/wpt/web-platform-tests/css/css-grid/grid-definition/support/grid.css
+++ b/tests/wpt/web-platform-tests/css/css-grid/grid-definition/support/grid.css
@@ -68,6 +68,12 @@
grid-row: 3;
}
+.thirdRowThirdColumn {
+ background-color: salmon;
+ grid-column: 3;
+ grid-row: 3;
+}
+
.firstRowThirdColumn {
background-color: magenta;
grid-column: 3;
diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-relative-offsets-001.html b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-relative-offsets-001.html
new file mode 100644
index 00000000000..cb5e8ee23b6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-relative-offsets-001.html
@@ -0,0 +1,95 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Grid Layout Test: Grid items with relative offsets</title>
+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-grid/#grid-item-sizing">
+<meta name="assert" content="Checks that relative offests work for grid items.">
+<link rel="stylesheet" href="support/grid.css">
+<style>
+.grid {
+ position: relative;
+ grid: 90px 60px 30px / 200px 150px 100px;
+ inline-size: 600px;
+ block-size: 300px;
+}
+
+.grid > div { position: relative; }
+</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')">
+
+<div id="log"></div>
+
+<h3>Direction LTR</h3>
+
+<div class="grid">
+ <div class="firstRowFirstColumn" style="left: 10px; top: 9px;"
+ data-offset-x="10" data-offest-y="9" data-expected-width="200" data-expected-height="90"></div>
+ <div class="secondRowSecondColumn" style="left: -15px; top: -12px;"
+ data-offset-x="185" data-offest-y="78" data-expected-width="150" data-expected-height="60"></div>
+ <div class="thirdRowThirdColumn" style="right: 30px; bottom: 21px;"
+ data-offset-x="320" data-offest-y="129" data-expected-width="100" data-expected-height="30"></div>
+</div>
+
+<h3>Direction RTL</h3>
+
+<div class="grid directionRTL">
+ <div class="firstRowFirstColumn" style="left: 10px; top: 9px;"
+ data-offset-x="410" data-offest-y="9" data-expected-width="200" data-expected-height="90"></div>
+ <div class="secondRowSecondColumn" style="left: -15px; top: -12px;"
+ data-offset-x="235" data-offest-y="78" data-expected-width="150" data-expected-height="60"></div>
+ <div class="thirdRowThirdColumn" style="right: 30px; bottom: 21px;"
+ data-offset-x="120" data-offest-y="129" data-expected-width="100" data-expected-height="30"></div>
+</div>
+
+<h2>Writing Mode vertical-lr</h2>
+
+<h3>Direction LTR</h3>
+
+<div class="grid verticalLR">
+ <div class="firstRowFirstColumn" style="left: 9px; top: 10px;"
+ data-offset-x="9" data-offest-y="10" data-expected-width="90" data-expected-height="200"></div>
+ <div class="secondRowSecondColumn" style="left: -12px; top: -15px;"
+ data-offset-x="78" data-offest-y="75" data-expected-width="60" data-expected-height="150"></div>
+ <div class="thirdRowThirdColumn" style="right: 21px; bottom: 30px;"
+ data-offset-x="129" data-offest-y="120" data-expected-width="30" data-expected-height="100"></div>
+</div>
+
+<h3>Direction RTL</h3>
+
+<div class="grid verticalLR directionRTL">
+ <div class="firstRowFirstColumn" style="left: 9px; top: 10px;"
+ data-offset-x="9" data-offest-y="10" data-expected-width="90" data-expected-height="200"></div>
+ <div class="secondRowSecondColumn" style="left: -12px; top: -15px;"
+ data-offset-x="78" data-offest-y="75" data-expected-width="60" data-expected-height="150"></div>
+ <div class="thirdRowThirdColumn" style="right: 21px; bottom: 30px;"
+ data-offset-x="129" data-offest-y="120" data-expected-width="30" data-expected-height="100"></div>
+</div>
+
+<h2>Writing Mode vertical-rl</h2>
+
+<h3>Direction LTR</h3>
+
+<div class="grid verticalRL">
+ <div class="firstRowFirstColumn" style="left: 9px; top: 10px;"
+ data-offset-x="219" data-offest-y="10" data-expected-width="90" data-expected-height="200"></div>
+ <div class="secondRowSecondColumn" style="left: -12px; top: -15px;"
+ data-offset-x="138" data-offest-y="75" data-expected-width="60" data-expected-height="150"></div>
+ <div class="thirdRowThirdColumn" style="right: 21px; bottom: 30px;"
+ data-offset-x="99" data-offest-y="120" data-expected-width="30" data-expected-height="100"></div>
+</div>
+
+<h3>Direction RTL</h3>
+
+<div class="grid verticalRL directionRTL">
+ <div class="firstRowFirstColumn" style="left: 9px; top: 10px;"
+ data-offset-x="219" data-offest-y="10" data-expected-width="90" data-expected-height="200"></div>
+ <div class="secondRowSecondColumn" style="left: -12px; top: -15px;"
+ data-offset-x="138" data-offest-y="75" data-expected-width="60" data-expected-height="150"></div>
+ <div class="thirdRowThirdColumn" style="right: 21px; bottom: 30px;"
+ data-offset-x="99" data-offest-y="120" data-expected-width="30" data-expected-height="100"></div>
+</div>
+
diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-relative-offsets-002.html b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-relative-offsets-002.html
new file mode 100644
index 00000000000..d92fca3ebb0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-relative-offsets-002.html
@@ -0,0 +1,94 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Grid Layout Test: Grid items with relative offsets</title>
+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-grid/#grid-item-sizing">
+<meta name="assert" content="Checks that relative percentage offests work for grid items.">
+<link rel="stylesheet" href="support/grid.css">
+<style>
+.grid {
+ position: relative;
+ grid: 90px 60px 30px / 200px 150px 100px;
+ inline-size: 600px;
+ block-size: 300px;
+}
+
+.grid > div { position: relative; }
+</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')">
+
+<div id="log"></div>
+
+<h3>Direction LTR</h3>
+
+<div class="grid">
+ <div class="firstRowFirstColumn" style="left: 5%; top: 10%;"
+ data-offset-x="10" data-offest-y="9" data-expected-width="200" data-expected-height="90"></div>
+ <div class="secondRowSecondColumn" style="left: -10%; top: -20%;"
+ data-offset-x="185" data-offest-y="78" data-expected-width="150" data-expected-height="60"></div>
+ <div class="thirdRowThirdColumn" style="right: 30%; bottom: 70%;"
+ data-offset-x="320" data-offest-y="129" data-expected-width="100" data-expected-height="30"></div>
+</div>
+
+<h3>Direction RTL</h3>
+
+<div class="grid directionRTL">
+ <div class="firstRowFirstColumn" style="left: 5%; top: 10%;"
+ data-offset-x="410" data-offest-y="9" data-expected-width="200" data-expected-height="90"></div>
+ <div class="secondRowSecondColumn" style="left: -10%; top: -20%;"
+ data-offset-x="235" data-offest-y="78" data-expected-width="150" data-expected-height="60"></div>
+ <div class="thirdRowThirdColumn" style="right: 30%; bottom: 70%;"
+ data-offset-x="120" data-offest-y="129" data-expected-width="100" data-expected-height="30"></div>
+</div>
+
+<h2>Writing Mode vertical-lr</h2>
+
+<h3>Direction LTR</h3>
+
+<div class="grid verticalLR">
+ <div class="firstRowFirstColumn" style="left: 10%; top: 5%;"
+ data-offset-x="9" data-offest-y="10" data-expected-width="90" data-expected-height="200"></div>
+ <div class="secondRowSecondColumn" style="left: -20%; top: -10%;"
+ data-offset-x="78" data-offest-y="75" data-expected-width="60" data-expected-height="150"></div>
+ <div class="thirdRowThirdColumn" style="right: 70%; bottom: 30%;"
+ data-offset-x="129" data-offest-y="120" data-expected-width="30" data-expected-height="100"></div>
+</div>
+
+<h3>Direction RTL</h3>
+
+<div class="grid verticalLR directionRTL">
+ <div class="firstRowFirstColumn" style="left: 10%; top: 5%;"
+ data-offset-x="9" data-offest-y="10" data-expected-width="90" data-expected-height="200"></div>
+ <div class="secondRowSecondColumn" style="left: -20%; top: -10%;"
+ data-offset-x="78" data-offest-y="75" data-expected-width="60" data-expected-height="150"></div>
+ <div class="thirdRowThirdColumn" style="right: 70%; bottom: 30%;"
+ data-offset-x="129" data-offest-y="120" data-expected-width="30" data-expected-height="100"></div>
+</div>
+
+<h2>Writing Mode vertical-rl</h2>
+
+<h3>Direction LTR</h3>
+
+<div class="grid verticalRL">
+ <div class="firstRowFirstColumn" style="left: 10%; top: 5%;"
+ data-offset-x="219" data-offest-y="10" data-expected-width="90" data-expected-height="200"></div>
+ <div class="secondRowSecondColumn" style="left: -20%; top: -10%;"
+ data-offset-x="138" data-offest-y="75" data-expected-width="60" data-expected-height="150"></div>
+ <div class="thirdRowThirdColumn" style="right: 70%; bottom: 30%;"
+ data-offset-x="99" data-offest-y="120" data-expected-width="30" data-expected-height="100"></div>
+</div>
+
+<h3>Direction RTL</h3>
+
+<div class="grid verticalRL directionRTL">
+ <div class="firstRowFirstColumn" style="left: 10%; top: 5%;"
+ data-offset-x="219" data-offest-y="10" data-expected-width="90" data-expected-height="200"></div>
+ <div class="secondRowSecondColumn" style="left: -20%; top: -10%;"
+ data-offset-x="138" data-offest-y="75" data-expected-width="60" data-expected-height="150"></div>
+ <div class="thirdRowThirdColumn" style="right: 70%; bottom: 30%;"
+ data-offset-x="99" data-offest-y="120" data-expected-width="30" data-expected-height="100"></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-items/support/grid.css b/tests/wpt/web-platform-tests/css/css-grid/grid-items/support/grid.css
index 602e114880a..78fdd5e975a 100644
--- a/tests/wpt/web-platform-tests/css/css-grid/grid-items/support/grid.css
+++ b/tests/wpt/web-platform-tests/css/css-grid/grid-items/support/grid.css
@@ -68,6 +68,12 @@
grid-row: 3;
}
+.thirdRowThirdColumn {
+ background-color: salmon;
+ grid-column: 3;
+ grid-row: 3;
+}
+
.firstRowThirdColumn {
background-color: magenta;
grid-column: 3;
diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-model/support/grid.css b/tests/wpt/web-platform-tests/css/css-grid/grid-model/support/grid.css
index 602e114880a..78fdd5e975a 100644
--- a/tests/wpt/web-platform-tests/css/css-grid/grid-model/support/grid.css
+++ b/tests/wpt/web-platform-tests/css/css-grid/grid-model/support/grid.css
@@ -68,6 +68,12 @@
grid-row: 3;
}
+.thirdRowThirdColumn {
+ background-color: salmon;
+ grid-column: 3;
+ grid-row: 3;
+}
+
.firstRowThirdColumn {
background-color: magenta;
grid-column: 3;
diff --git a/tests/wpt/web-platform-tests/css/css-properties-values-api/typedom.tentative.html b/tests/wpt/web-platform-tests/css/css-properties-values-api/typedom.tentative.html
index 98150558dae..1d757df168b 100644
--- a/tests/wpt/web-platform-tests/css/css-properties-values-api/typedom.tentative.html
+++ b/tests/wpt/web-platform-tests/css/css-properties-values-api/typedom.tentative.html
@@ -537,4 +537,61 @@ test(function(){
assert_parsed_type(gen_prop('<length># | fail', 'fail'), '10px, 20px', CSSUnitValue);
}, 'CSSStyleValue.parse[All] returns list of CSSUnitValues for <length>#');
+// Direct CSSStyleValue objects:
+
+function gen_all_props() {
+ return [
+ gen_prop('*', 'foo'),
+ gen_prop('foo', 'foo'),
+ gen_prop('<angle>', '0deg'),
+ gen_prop('<color>', 'rgb(1, 2, 3)'),
+ gen_prop('<custom-ident>', 'thing'),
+ gen_prop('<image>', 'url(a)'),
+ gen_prop('<integer>', '0'),
+ gen_prop('<length-percentage>', 'calc(10px + 10%)'),
+ gen_prop('<length>', '0px'),
+ gen_prop('<number>', '0.5'),
+ gen_prop('<percentage>', '0%'),
+ gen_prop('<resolution>', '0dpi'),
+ gen_prop('<time>', '0s'),
+ gen_prop('<transform-function>', 'rotateX(0deg)'),
+ gen_prop('<transform-list>', 'rotateX(0deg)'),
+ gen_prop('<url>', 'url(a)')
+ ];
+}
+
+test(function(){
+ let props0 = gen_all_props();
+ let props1 = gen_all_props();
+
+ for (let i = 0; i < props0.length; i++) {
+ let prop0 = props0[i];
+ let prop1 = props1[i];
+
+ // Abuse computedStyleMap to get the initialValue (just to get some
+ // value that will parse for prop0/1's syntax).
+ let initialValue = target.computedStyleMap().get(prop0);
+
+ // We only care about direct CSSStyleValue instances in this test.
+ // Ultimately, in some future version of CSS TypedOM, we may have no
+ // direct CSSStyleValue instances at all, which is fine.
+ if (initialValue.constructor !== CSSStyleValue) {
+ continue;
+ }
+
+ let value = CSSStyleValue.parse(prop0, initialValue.toString());
+
+ // A value parsed for prop0 must be assignable to prop0.
+ target.attributeStyleMap.clear();
+ target.attributeStyleMap.set(prop0, value); // Don't throw.
+
+ // A value parsed for prop0 must not be assignable to prop1, even if
+ // the properties have compatible syntaxes.
+ assert_throws(new TypeError(), () => {
+ target.attributeStyleMap.clear();
+ target.attributeStyleMap.set(prop1, value);
+ });
+ }
+}, 'Direct CSSStyleValue instances are tied to their associated property');
+
</script>
diff --git a/tests/wpt/web-platform-tests/css/css-scoping/host-context-specificity-001.html b/tests/wpt/web-platform-tests/css/css-scoping/host-context-specificity-001.html
new file mode 100644
index 00000000000..694087f56b7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-scoping/host-context-specificity-001.html
@@ -0,0 +1,21 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Test: the selector inside :host-context() affects specificity</title>
+<link rel="help" href="https://drafts.csswg.org/css-scoping/#host-selector">
+<link rel="match" href="reference/green-box.html">
+<p>Test passes if you see a single 100px by 100px green box below.</p>
+<div id="host"></div>
+<script>
+ host.attachShadow({ mode: 'open' }).innerHTML = `
+ <style>
+ :host-context(#host) {
+ width: 100px;
+ height: 100px;
+ background: green;
+ }
+ :host {
+ background: red;
+ }
+ </style>
+ `;
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-scoping/host-context-specificity-002.html b/tests/wpt/web-platform-tests/css/css-scoping/host-context-specificity-002.html
new file mode 100644
index 00000000000..3d4d3e5b245
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-scoping/host-context-specificity-002.html
@@ -0,0 +1,23 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Test: :host-context() is accounted for during specificity computation</title>
+<link rel="help" href="https://drafts.csswg.org/css-scoping/#host-selector">
+<link rel="match" href="reference/green-box.html">
+<p>Test passes if you see a single 100px by 100px green box below.</p>
+<div id="host"></div>
+<script>
+ host.attachShadow({ mode: 'open' }).innerHTML = `
+ <style>
+ .foo span {
+ display: block;
+ width: 100px;
+ height: 100px;
+ background: red;
+ }
+ :host-context(*) span {
+ background: green;
+ }
+ </style>
+ <div class="foo"><span></span></div>
+ `;
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-scoping/host-context-specificity-003.html b/tests/wpt/web-platform-tests/css/css-scoping/host-context-specificity-003.html
new file mode 100644
index 00000000000..7abf8847c95
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-scoping/host-context-specificity-003.html
@@ -0,0 +1,22 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Test: the :host-context() selector affects specificity</title>
+<link rel="help" href="https://drafts.csswg.org/css-scoping/#host-selector">
+<link rel="match" href="reference/green-box.html">
+<p>Test passes if you see a single 100px by 100px green box below.</p>
+<div id="host"></div>
+<script>
+ host.attachShadow({ mode: 'open' }).innerHTML = `
+ <style>
+ :host-context(*) div {
+ width: 100px;
+ height: 100px;
+ background: green;
+ }
+ div {
+ background: red;
+ }
+ </style>
+ <div></div>
+ `;
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-scoping/host-specificity-003.html b/tests/wpt/web-platform-tests/css/css-scoping/host-specificity-003.html
new file mode 100644
index 00000000000..54a22599d8f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-scoping/host-specificity-003.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Test: the :host() selector affects specificity</title>
+<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
+<link rel="author" title="Mozilla" href="https://mozilla.org">
+<link rel="help" href="https://drafts.csswg.org/css-scoping/#host-selector">
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/1915">
+<link rel="help" href="https://bugzil.la/1454165">
+<link rel="match" href="reference/green-box.html">
+<p>Test passes if you see a single 100px by 100px green box below.</p>
+<div id="host"></div>
+<script>
+ host.attachShadow({ mode: 'open' }).innerHTML = `
+ <style>
+ :host(*) div {
+ width: 100px;
+ height: 100px;
+ background: green;
+ }
+ div {
+ background: red;
+ }
+ </style>
+ <div></div>
+ `;
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-scroll-anchoring/text-anchor-in-vertical-rl.html b/tests/wpt/web-platform-tests/css/css-scroll-anchoring/text-anchor-in-vertical-rl.html
new file mode 100644
index 00000000000..2a56298e982
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-scroll-anchoring/text-anchor-in-vertical-rl.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-scroll-anchoring/">
+
+<p>There should be no red below.</p>
+<div id="container" style="writing-mode:vertical-rl; overflow:auto; width:300px; height:300px;">
+ <div style="width:300px; background:red;"></div>
+ <div style="width:400px; font-size:16px; line-height:25px;">
+ <span id="displayMe" style="color:red; display:none;">
+ FAIL<br>FAIL<br>FAIL<br>FAIL<br>
+ </span>
+ line<br>
+ </div>
+ <div id="displayMeToo" style="display:none; width:300px; background:red;"></div>
+</div>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+ test(()=> {
+ var container = document.getElementById("container");
+ var displayMe = document.getElementById("displayMe");
+ var displayMeToo = document.getElementById("displayMeToo");
+ // Scroll the text container into view.
+ container.scrollLeft = 100;
+ displayMe.style.display = "inline";
+ displayMeToo.style.display = "block";
+ assert_equals(container.scrollLeft, 300);
+ }, "Line at edge of scrollport shouldn't jump visually when content is inserted before");
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-text/text-indent/reference/text-indent-percentage-002-ref.html b/tests/wpt/web-platform-tests/css/css-text/text-indent/reference/text-indent-percentage-002-ref.html
new file mode 100644
index 00000000000..5b3bc918d15
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/text-indent/reference/text-indent-percentage-002-ref.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>CSS Text Test reference</title>
+<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
+<style>
+div { padding-left: 50px; }
+</style>
+
+<p>Test passes if there is a single black X below and no red.
+<div>X</div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-002.html b/tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-002.html
new file mode 100644
index 00000000000..65969260c5e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-002.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>CSS Text Test: text-indent percentage resolution basis</title>
+<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#text-indent-property">
+<meta name="flags" content="">
+<link rel="match" href="reference/text-indent-percentage-002-ref.html">
+<meta name="assert" content="Percentages in text-indent refer to width of the element's content box">
+<style>
+section { position: absolute; }
+section, div {
+ border-right: 10px solid white;
+ margin-right: 10px;
+ padding-right: 10px;
+}
+div {
+ box-sizing: border-box;
+ width: 120px;
+}
+.test div { text-indent: 50%; color: red; }
+.ref div { text-indent: 50px; }
+</style>
+
+<p>Test passes if there is a single black X below and no red.
+<section class=test><div>X</div></section>
+<section class=ref><div>X</div></section>
diff --git a/tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-003.html b/tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-003.html
new file mode 100644
index 00000000000..f81390da873
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-003.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>CSS Text Test: text-indent percentage resolution basis</title>
+<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#text-indent-property">
+<meta name="flags" content="">
+<link rel="match" href="reference/text-indent-percentage-002-ref.html">
+<meta name="assert" content="Percentages in text-indent refer to width of the element's content box">
+<style>
+section { position: absolute; }
+section, div {
+ border-right: 10px solid white;
+ margin-right: 10px;
+ padding-right: 10px;
+}
+div {
+ box-sizing: border-box;
+ width: 120px;
+}
+.test div { text-indent: 50%; color: red; overflow: hidden; } /* overflow:hidden should not make any difference, but it does in some browsers */
+.ref div { text-indent: 50px; }
+</style>
+
+<p>Test passes if there is a single black X below and no red.
+<section class=test><div>X</div></section>
+<section class=ref><div>X</div></section>
diff --git a/tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-004.html b/tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-004.html
new file mode 100644
index 00000000000..73f4c219558
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-004.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset="utf-8">
+<title>CSS Text Test: text-indent percentage resolution basis, in a calc expressiong</title>
+<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#text-indent-property">
+<meta name="flags" content="">
+<link rel="match" href="reference/text-indent-percentage-002-ref.html">
+<meta name="assert" content="Percentages in text-indent refer to width of the element's content box, when used in a calc expression">
+<style>
+section { position: absolute; }
+section, div {
+ border-right: 10px solid white;
+ margin-right: 10px;
+ padding-right: 10px;
+}
+div {
+ box-sizing: border-box;
+ width: 120px;
+}
+.test div { text-indent: calc(25px + 25%); color: red; }
+.ref div { text-indent: 50px; }
+</style>
+
+<p>Test passes if there is a single black X below and no red.
+<section class=test><div>X</div></section>
+<section class=ref><div>X</div></section>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-000.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-000.html
new file mode 100644
index 00000000000..b038fe9a90d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-000.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+0000</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+0000, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\0000" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-001.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-001.html
new file mode 100644
index 00000000000..e43fda55431
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-001.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+0001</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+0001, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\0001" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-002.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-002.html
new file mode 100644
index 00000000000..a81a30723aa
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-002.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+0002</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+0002, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\0002" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-003.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-003.html
new file mode 100644
index 00000000000..e0d156a9795
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-003.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+0003</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+0003, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\0003" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-004.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-004.html
new file mode 100644
index 00000000000..b33c4475ba9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-004.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+0004</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+0004, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\0004" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-005.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-005.html
new file mode 100644
index 00000000000..d14e86b80b2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-005.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+0005</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+0005, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\0005" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-006.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-006.html
new file mode 100644
index 00000000000..2b05272fec8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-006.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+0006</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+0006, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\0006" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-007.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-007.html
new file mode 100644
index 00000000000..60587d9abdb
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-007.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+0007</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+0007, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\0007" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-008.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-008.html
new file mode 100644
index 00000000000..fbe91aae055
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-008.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+0008</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+0008, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\0008" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-00B.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-00B.html
new file mode 100644
index 00000000000..6cdf0b35cf1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-00B.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+000B</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+000B, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\000B" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-00D.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-00D.html
new file mode 100644
index 00000000000..b7d1d44b0cc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-00D.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+000D</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+000D, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\000D" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-00E.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-00E.html
new file mode 100644
index 00000000000..826b4bb0d6a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-00E.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+000E</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+000E, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\000E" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-00F.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-00F.html
new file mode 100644
index 00000000000..53618a8b79d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-00F.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+000F</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+000F, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\000F" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-010.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-010.html
new file mode 100644
index 00000000000..52c66387695
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-010.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+0010</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+0010, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\0010" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-011.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-011.html
new file mode 100644
index 00000000000..8aa8d94b918
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-011.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+0011</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+0011, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\0011" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-012.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-012.html
new file mode 100644
index 00000000000..9300ae3a903
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-012.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+0012</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+0012, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\0012" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-013.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-013.html
new file mode 100644
index 00000000000..f0e2b547cee
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-013.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+0013</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+0013, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\0013" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-014.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-014.html
new file mode 100644
index 00000000000..e8c776a9d7d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-014.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+0014</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+0014, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\0014" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-015.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-015.html
new file mode 100644
index 00000000000..718909dd476
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-015.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+0015</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+0015, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\0015" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-016.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-016.html
new file mode 100644
index 00000000000..2ba460c03c5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-016.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+0016</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+0016, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\0016" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-017.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-017.html
new file mode 100644
index 00000000000..b4c96ca6523
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-017.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+0017</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+0017, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\0017" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-018.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-018.html
new file mode 100644
index 00000000000..3a4c59e18a0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-018.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+0018</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+0018, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\0018" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-019.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-019.html
new file mode 100644
index 00000000000..9517e79e4aa
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-019.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+0019</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+0019, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\0019" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01A.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01A.html
new file mode 100644
index 00000000000..4f61bcb7538
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01A.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+001A</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+001A, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\001A" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01B.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01B.html
new file mode 100644
index 00000000000..fe9842b9ac0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01B.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+001B</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+001B, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\001B" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01C.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01C.html
new file mode 100644
index 00000000000..aadc1a9138d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01C.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+001C</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+001C, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\001C" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01D.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01D.html
new file mode 100644
index 00000000000..266d30084ef
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01D.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+001D</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+001D, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\001D" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01E.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01E.html
new file mode 100644
index 00000000000..8cd3ddff511
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01E.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+001E</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+001E, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\001E" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01F.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01F.html
new file mode 100644
index 00000000000..61db980951d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01F.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+001F</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+001F, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\001F" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-07F.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-07F.html
new file mode 100644
index 00000000000..27d5f02c4b2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-07F.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+007F</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+007F, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\007F" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-080.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-080.html
new file mode 100644
index 00000000000..ceedd013611
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-080.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+0080</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+0080, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\0080" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-081.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-081.html
new file mode 100644
index 00000000000..0e16b010461
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-081.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+0081</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+0081, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\0081" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-082.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-082.html
new file mode 100644
index 00000000000..c8461a7b2ea
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-082.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+0082</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+0082, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\0082" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-083.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-083.html
new file mode 100644
index 00000000000..ec723809ff0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-083.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+0083</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+0083, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\0083" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-084.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-084.html
new file mode 100644
index 00000000000..24936817385
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-084.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+0084</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+0084, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\0084" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-085.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-085.html
new file mode 100644
index 00000000000..52dba2a1b61
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-085.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+0085</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+0085, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\0085" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-086.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-086.html
new file mode 100644
index 00000000000..39b132c5885
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-086.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+0086</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+0086, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\0086" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-087.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-087.html
new file mode 100644
index 00000000000..2320088a7fc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-087.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+0087</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+0087, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\0087" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-088.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-088.html
new file mode 100644
index 00000000000..12acc233258
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-088.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+0088</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+0088, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\0088" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-089.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-089.html
new file mode 100644
index 00000000000..367503c88c4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-089.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+0089</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+0089, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\0089" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08A.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08A.html
new file mode 100644
index 00000000000..1a21992d970
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08A.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+008A</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+008A, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\008A" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08B.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08B.html
new file mode 100644
index 00000000000..1ed441a4554
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08B.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+008B</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+008B, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\008B" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08C.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08C.html
new file mode 100644
index 00000000000..0c63ee54b60
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08C.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+008C</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+008C, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\008C" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08D.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08D.html
new file mode 100644
index 00000000000..e908f8e1a89
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08D.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+008D</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+008D, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\008D" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08E.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08E.html
new file mode 100644
index 00000000000..55e87a556b8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08E.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+008E</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+008E, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\008E" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08F.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08F.html
new file mode 100644
index 00000000000..2d9bac97309
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08F.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+008F</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+008F, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\008F" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-090.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-090.html
new file mode 100644
index 00000000000..c93258878c5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-090.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+0090</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+0090, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\0090" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-091.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-091.html
new file mode 100644
index 00000000000..a21f8779add
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-091.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+0091</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+0091, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\0091" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-092.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-092.html
new file mode 100644
index 00000000000..5304eac57e6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-092.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+0092</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+0092, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\0092" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-093.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-093.html
new file mode 100644
index 00000000000..a092e873066
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-093.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+0093</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+0093, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\0093" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-094.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-094.html
new file mode 100644
index 00000000000..9005e8d098e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-094.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+0094</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+0094, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\0094" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-095.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-095.html
new file mode 100644
index 00000000000..6befbaa1bb1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-095.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+0095</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+0095, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\0095" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-096.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-096.html
new file mode 100644
index 00000000000..75e69d976b9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-096.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+0096</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+0096, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\0096" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-097.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-097.html
new file mode 100644
index 00000000000..8a2c4467ae8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-097.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+0097</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+0097, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\0097" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-098.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-098.html
new file mode 100644
index 00000000000..47e097789b6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-098.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+0098</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+0098, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\0098" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-099.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-099.html
new file mode 100644
index 00000000000..73a6ea6f225
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-099.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+0099</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+0099, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\0099" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09A.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09A.html
new file mode 100644
index 00000000000..b34f9dc146e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09A.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+009A</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+009A, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\009A" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09B.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09B.html
new file mode 100644
index 00000000000..4c5fcdd45a7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09B.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+009B</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+009B, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\009B" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09C.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09C.html
new file mode 100644
index 00000000000..6056a1c3de6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09C.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+009C</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+009C, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\009C" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09D.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09D.html
new file mode 100644
index 00000000000..850d2696c4e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09D.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+009D</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+009D, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\009D" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09E.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09E.html
new file mode 100644
index 00000000000..9613f9d01e2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09E.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+009E</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+009E, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\009E" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09F.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09F.html
new file mode 100644
index 00000000000..44f6f83f2d1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09F.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Control charcters must be visible: U+009F</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing">
+<link rel=mismatch href="reference/control-chars-000-ref.html">
+<meta name=flags content="">
+<meta name=assert content="U+009F, which is in the unicode category CC, must be visible">
+<style>
+div {
+ font-size: 4em;
+}
+div::after { content: "\009F" } /* Injecting via CSS, to avoid any mangling by the html parser */
+</style>
+
+<p>Test passes if there is a visible character below.
+
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/line-edge-white-space-collapse-001.html b/tests/wpt/web-platform-tests/css/css-text/white-space/line-edge-white-space-collapse-001.html
new file mode 100644
index 00000000000..4e144e6c330
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/line-edge-white-space-collapse-001.html
@@ -0,0 +1,40 @@
+<!doctype html>
+<html>
+<meta charset=utf-8>
+<link rel="author" title="Mike Bremford" href="mailto:mike@bfo.com">
+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel="help" href="https://www.w3.org/TR/css-text-3/#white-space-phase-2">
+<link rel="match" href="reference/line-edge-white-space-collapse-001-ref.html">
+<meta name="flags" content="">
+<title>White space collapse at end of line collapses through an inline</title>
+<style>
+div { font: 30px/30px monospace; }
+span span { border-left: 30px solid green }
+aside {
+ font: 30px/30px monospace;
+ width: 30px;
+ background: red;
+ position: absolute;
+ z-index:-1;
+ height: 300px;
+
+ /* to avoid accidental bleeding at the edges by a pixel or a sub pixel*/
+ box-sizing: border-box;
+ border: solid white 5px;
+ margin-left: 1ch;
+}
+</style>
+
+<p>Test passes if there is a single green rectangle next to ABCDEFGHIJ, and no red.
+
+<aside></aside>
+<div><span>A <span> </span> </span></div>
+<div><span>B <span> </span> </span></div>
+<div><span>C <span> </span> </span></div>
+<div><span>D <span> </span></span></div>
+<div><span>E <span> </span> </span></div>
+<div><span>F <span> </span> </span></div>
+<div><span>G <span> </span></span></div>
+<div><span>H<span> </span> </span></div>
+<div><span>I<span> </span></span></div>
+<div><span>J<span></span></span></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/line-edge-white-space-collapse-002.html b/tests/wpt/web-platform-tests/css/css-text/white-space/line-edge-white-space-collapse-002.html
new file mode 100644
index 00000000000..f3dbf4609f4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/line-edge-white-space-collapse-002.html
@@ -0,0 +1,40 @@
+<!doctype html>
+<html>
+<meta charset=utf-8>
+<link rel="author" title="Mike Bremford" href="mailto:mike@bfo.com">
+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel="help" href="https://www.w3.org/TR/css-text-3/#white-space-phase-2">
+<link rel="match" href="reference/line-edge-white-space-collapse-002-ref.html">
+<meta name="flags" content="">
+<title>White space collapse at start of line collapses through an inline</title>
+<style>
+div { font: 30px/30px monospace; }
+span span { border-left: 30px solid green }
+aside {
+ font: 30px/30px monospace;
+ width: 30px;
+ background: red;
+ position: absolute;
+ z-index:-1;
+ height: 300px;
+
+ /* to avoid accidental bleeding at the edges by a pixel or a sub pixel*/
+ box-sizing: border-box;
+ border: solid white 5px;
+}
+</style>
+
+<p>Test passes if there is a single green rectangle, and no red. The letters KLMNOPQRST must be immediately to its right, vertically aligned with each other.
+
+<aside></aside>
+<div><span> <span> </span> K</span></div>
+<div><span> <span> </span> L</span></div>
+<div><span> <span> </span> M</span></div>
+<div><span><span> </span> N</span></div>
+<div><span> <span> </span> O </span></div>
+<div><span> <span> </span> P</span></div>
+<div><span><span> </span> Q</span></div>
+<div><span> <span> </span>R</span></div>
+<div><span><span> </span>S</span></div>
+<div><span><span></span>T</span></div>
+
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/reference/control-chars-000-ref.html b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/control-chars-000-ref.html
new file mode 100644
index 00000000000..9d5fcb27147
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/control-chars-000-ref.html
@@ -0,0 +1,6 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>CSS test mismatch reference</title>
+<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
+
+<p>Test passes if there is a visible character below.
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/reference/line-edge-white-space-collapse-001-ref.html b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/line-edge-white-space-collapse-001-ref.html
new file mode 100644
index 00000000000..02fa594255f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/line-edge-white-space-collapse-001-ref.html
@@ -0,0 +1,23 @@
+<!doctype html>
+<html>
+<meta charset=utf-8>
+<link rel="author" title="Mike Bremford" href="mailto:mike@bfo.com">
+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
+<title>CSS test reference</title>
+<style>
+div { font: 30px/30px monospace; }
+span { border-left: 30px solid green }
+</style>
+
+<p>Test passes if there is a single green rectangle next to ABCDEFGHIJ, and no red.
+
+<div>A<span></span></div>
+<div>B<span></span></div>
+<div>C<span></span></div>
+<div>D<span></span></div>
+<div>E<span></span></div>
+<div>F<span></span></div>
+<div>G<span></span></div>
+<div>H<span></span></div>
+<div>I<span></span></div>
+<div>J<span></span></div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/reference/line-edge-white-space-collapse-002-ref.html b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/line-edge-white-space-collapse-002-ref.html
new file mode 100644
index 00000000000..ea1faa2ed1f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/line-edge-white-space-collapse-002-ref.html
@@ -0,0 +1,24 @@
+<!doctype html>
+<html>
+<meta charset=utf-8>
+<link rel="author" title="Mike Bremford" href="mailto:mike@bfo.com">
+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
+<title>CSS test reference</title>
+<style>
+div { font: 30px/30px monospace; }
+span { border-left: 30px solid green }
+</style>
+
+<p>Test passes if there is a single green rectangle, and no red. The letters KLMNOPQRST must be immediately to its right, vertically aligned with each other.
+
+<div><span>K</span></div>
+<div><span>L</span></div>
+<div><span>M</span></div>
+<div><span>N</span></div>
+<div><span>O</span></div>
+<div><span>P</span></div>
+<div><span>Q</span></div>
+<div><span>R</span></div>
+<div><span>S</span></div>
+<div><span>T</span></div>
+
diff --git a/tests/wpt/web-platform-tests/css/support/grid.css b/tests/wpt/web-platform-tests/css/support/grid.css
index 602e114880a..78fdd5e975a 100644
--- a/tests/wpt/web-platform-tests/css/support/grid.css
+++ b/tests/wpt/web-platform-tests/css/support/grid.css
@@ -68,6 +68,12 @@
grid-row: 3;
}
+.thirdRowThirdColumn {
+ background-color: salmon;
+ grid-column: 3;
+ grid-row: 3;
+}
+
.firstRowThirdColumn {
background-color: magenta;
grid-column: 3;
diff --git a/tests/wpt/web-platform-tests/docs/_writing-tests/testdriver.md b/tests/wpt/web-platform-tests/docs/_writing-tests/testdriver.md
index eb9b9fb0413..91686ce7f54 100644
--- a/tests/wpt/web-platform-tests/docs/_writing-tests/testdriver.md
+++ b/tests/wpt/web-platform-tests/docs/_writing-tests/testdriver.md
@@ -80,5 +80,13 @@ between the function being called and the promise settling.
To send special keys, one must send the respective key's codepoint. Since this uses the WebDriver protocol, you can find a [list for code points to special keys in the spec](https://w3c.github.io/webdriver/webdriver-spec.html#keyboard-actions).
For example, to send the tab key you would send "\uE004".
+### `test_driver.action_sequence(actions)`
+ - `actions` <[Array]<[Object]>> an array of Action objects`
+ - `action` <[Object]> A single action. See [spec](https://www.w3.org/TR/webdriver/#actions) for format
+
+This function causes a sequence of actions to be sent to the browser. It is based of the [WebDriver API](https://www.w3.org/TR/webdriver/#actions).
+The action can be a keyboard action, a pointer action or a pause. It returns a `Promise` that
+resolves after the actions have been sent or rejects if an error was thrown.
+
[activation]: https://html.spec.whatwg.org/multipage/interaction.html#activation
[testharness]: {{ site.baseurl }}{% link _writing-tests/testharness.md %}
diff --git a/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/vertical-scroll-scrollable-content.html b/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/vertical-scroll-scrollable-content.html
new file mode 100644
index 00000000000..9f78ea4bc29
--- /dev/null
+++ b/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/vertical-scroll-scrollable-content.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<style>
+ body, html {
+ height: 100%;
+ width: 100%;
+ }
+ #spacer {
+ width: 1500px;
+ height: 1500px;
+ background-color: red;
+ }
+</style>
+<body>
+ <p>This page is scrollable.</p>
+ <div id="spacer"></div>
+</body>
diff --git a/tests/wpt/web-platform-tests/feature-policy/experimental-features/vertical-scroll-disabled-frame-no-scroll-manual.tentative.html b/tests/wpt/web-platform-tests/feature-policy/experimental-features/vertical-scroll-disabled-frame-no-scroll-manual.tentative.html
new file mode 100644
index 00000000000..6f827c919a4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/feature-policy/experimental-features/vertical-scroll-disabled-frame-no-scroll-manual.tentative.html
@@ -0,0 +1,113 @@
+<!doctype html>
+<meta name="timeout" content="long">
+<title>vertical-scroll test for touch-action</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/feature-policy/experimental-features/resources/common.js"></script>
+<script src="/feature-policy/experimental-features/resources/vertical-scroll.js"></script>
+<style>
+html, body {
+ height: 100%;
+ width: 100%;
+}
+
+iframe {
+ width: 90%;
+ height: 90%;
+ margin: 0;
+ padding: 0;
+}
+
+.spacer {
+ width: 100%;
+ height: 100%;
+ margin: 100%;
+}
+</style>
+<iframe></iframe>
+<br/>
+<p>Spacers below to make page scrollable</p>
+<br/>
+<div class="spacer"></div>
+<div class="spacer"></div>
+<p> EOF </p>
+
+<script>
+ "use strict";
+
+ let url = url_base + "vertical-scroll-scrollable-content.html";
+ let iframeElement = document.querySelector("iframe");
+
+ // Wait for the helper scripts to load.
+ promise_test(async() => {
+ if (window.input_api_ready)
+ return Promise.resolve();
+ await new Promise( (r) => {
+ window.resolve_on_input_api_ready = r;
+ });
+ }, "Make sure input injection API is ready.");
+
+ // Sanity-check: Verify we can scroll using the test-API (empty <iframe>).
+ promise_test(async() => {
+ window.scrollTo(0, 0);
+
+ await inject_input("down");
+ assert_greater_than(window.scrollY, 0, "Page must have scrolled down.");
+
+ await inject_input("right");
+ assert_greater_than(window.scrollX, 0, "Page must have scrolled right.");
+ }, "Verify that the page normally scrolls.");
+
+ // Sanity-check: <iframe> normally scrolls.
+ promise_test(async() => {
+ // Make sure <window> can scroll both towards right and bottom.
+ window.scrollTo(0, 0);
+
+ await loadUrlInIframe(iframeElement, url);
+ iframeElement.contentWindow.scrollTo(0, 0);
+
+ await inject_input("down");
+ assert_greater_than(
+ iframeElement.contentWindow.scrollY,
+ 0,
+ "<iframe> must have scrolled down.");
+
+
+ // Apply the scroll gesture.
+ await inject_input("right");
+ assert_greater_than(
+ iframeElement.contentWindow.scrollX,
+ 0,
+ "<iframe> must have scrolled right.");
+
+ }, "Verify that the <iframe> normally scrolls.");
+
+ // Disable 'vertical-scroll': <iframe> should only scroll horizontally.
+ promise_test(async() => {
+ window.scrollTo(0, 0);
+
+ // Disallow vertical scroll and reload the <iframe>.
+ setFeatureState(iframeElement, "vertical-scroll", "'none'");
+ await loadUrlInIframe(iframeElement, url);
+ iframeElement.contentWindow.scrollTo(0, 0);
+
+ // Apply the scroll gesture. Main frame should and <iframe> should not
+ // scroll vertically.
+ await inject_input("down");
+ assert_equals(iframeElement.contentWindow.scrollY,
+ 0,
+ "<iframe> must not scroll vertically.");
+ assert_greater_than(window.scrollY,
+ 0,
+ "Page must scroll vertically.");
+
+ window.scrollTo(0, 0);
+ iframeElement.contentWindow.scrollTo(0, 0);
+
+ await inject_input("right");
+ assert_greater_than(iframeElement.contentWindow.scrollX,
+ 0,
+ "<iframe> must have scrolled right.");
+ }, "When 'vertical-scroll' is disabled in a document, scrollable contents " +
+ "can only *horizontally* scroll.");
+</script>
diff --git a/tests/wpt/web-platform-tests/html/dom/elements/the-innertext-idl-attribute/getter-tests.js b/tests/wpt/web-platform-tests/html/dom/elements/the-innertext-idl-attribute/getter-tests.js
index 1195656a2a4..976d6d6bcef 100644
--- a/tests/wpt/web-platform-tests/html/dom/elements/the-innertext-idl-attribute/getter-tests.js
+++ b/tests/wpt/web-platform-tests/html/dom/elements/the-innertext-idl-attribute/getter-tests.js
@@ -56,6 +56,8 @@ testText("<div><span>abc </span><span style='white-space:pre'></span> def", "abc
testText("<div>abc <input> def", "abc def", "Whitespace around <input> should not be collapsed");
testText("<div>abc <span style='display:inline-block'></span> def", "abc def", "Whitespace around inline-block should not be collapsed");
testText("<div>abc <span style='display:inline-block'> def </span> ghi", "abc def ghi", "Trailing space at end of inline-block should be collapsed");
+testText("<div><input> <div>abc</div>", "abc", "Whitespace between <input> and block should be collapsed");
+testText("<div><span style='inline-block'></span> <div>abc</div>", "abc", "Whitespace between inline-block and block should be collapsed");
/**** Soft line breaks ****/
diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/elementPosition.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/elementPosition.html.ini
new file mode 100644
index 00000000000..a3a9625fcee
--- /dev/null
+++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/elementPosition.html.ini
@@ -0,0 +1,3 @@
+[elementPosition.html]
+ expected:
+ if product == "chrome": ERROR
diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/elementTiming.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/elementTiming.html.ini
new file mode 100644
index 00000000000..7a6cf82bbd3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/elementTiming.html.ini
@@ -0,0 +1,3 @@
+[elementTiming.html]
+ expected:
+ if product == "chrome": ERROR
diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/eventOrder.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/eventOrder.html.ini
new file mode 100644
index 00000000000..b809f4ebf61
--- /dev/null
+++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/eventOrder.html.ini
@@ -0,0 +1,3 @@
+[eventOrder.html]
+ expected:
+ if product == "chrome": ERROR
diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/multiDevice.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/multiDevice.html.ini
new file mode 100644
index 00000000000..889e1f4b86b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/multiDevice.html.ini
@@ -0,0 +1,3 @@
+[multiDevice.html]
+ expected:
+ if product == "chrome": ERROR
diff --git a/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/elementPosition.html b/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/elementPosition.html
new file mode 100644
index 00000000000..145852e7b51
--- /dev/null
+++ b/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/elementPosition.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>TestDriver actions: element position</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+
+<style>
+div#test {
+ position: fixed;
+ left: -100px;
+ top: -25px;
+ width: 200px;
+ height: 75px;
+ background-color:blue;
+}
+</style>
+
+<div id="test">
+</div>
+
+<script>
+let events = [];
+
+async_test(t => {
+ let test = document.getElementById("test");
+ test.addEventListener("click", e => {
+ events.push(e.clientX);
+ events.push(e.clientY)
+ });
+
+ let div = document.getElementById("test");
+ let actions = new test_driver.Actions()
+ .pointerMove(0, 0, {origin: test})
+ .pointerDown()
+ .pointerUp()
+ .send()
+ .then(t.step_func_done(() => assert_array_equals(events, [50, 25])))
+ .catch(e => t.step_func(() => assert_unreached("Actions sequence failed " + e)));
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/elementTiming.html b/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/elementTiming.html
new file mode 100644
index 00000000000..cdfdff55f33
--- /dev/null
+++ b/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/elementTiming.html
@@ -0,0 +1,56 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>TestDriver actions: element timing</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+
+<style>
+div#test1, div#test2 {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100px;
+ height: 100px;
+ background-color: blue;
+}
+
+div#test2 {
+ display: none;
+ left: -100px;
+ background-color: green;
+}
+</style>
+
+<div id="test1">
+</div>
+
+<div id="test2">
+</div>
+
+<script>
+let events = [];
+
+async_test(t => {
+ let test1 = document.getElementById("test1");
+ let test2 = document.getElementById("test2");
+ document.getElementById("test1").addEventListener("click",
+ () => {test2.style.display = "block"; test2.style.top = "100px"; test2.style.left = "0"});
+ document.getElementById("test2").addEventListener("click",
+ e => {events.push(e.clientX); events.push(e.clientY)});
+
+ let div = document.getElementById("backing");
+ let actions = new test_driver.Actions()
+ .pointerMove(0, 0, {origin: test1})
+ .pointerDown()
+ .pointerUp()
+ .pointerMove(0, 0, {origin: test2})
+ .pointerDown()
+ .pointerUp()
+ .send()
+ .then(t.step_func_done(() => assert_array_equals(events, [50, 150])))
+ .catch(e => t.step_func(() => assert_unreached("Actions sequence failed " + e)));
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/eventOrder.html b/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/eventOrder.html
new file mode 100644
index 00000000000..c85b861c7fd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/eventOrder.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>TestDriver actions: event order</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+
+<button id="a">Button a</button>
+<button id="b">Button b</button>
+
+<script>
+// Pointer 1 is added before Pointer 2 so it comes first in the list of sources
+// Therefore its actions happen first
+let events = [];
+
+async_test(t => {
+ Array.prototype.forEach.call(document.getElementsByTagName("button"),
+ (x) => x.addEventListener("mousedown", () => {events.push(x.id)}));
+
+ let button_a = document.getElementById("a");
+ let button_b = document.getElementById("b");
+ let actions = new test_driver.Actions()
+ .addPointer("pointer1")
+ .addPointer("pointer2")
+ .pointerMove(0, 0, {origin: button_a, sourceName: "pointer1"})
+ .pointerMove(0, 0, {origin: button_b, sourceName: "pointer2"})
+ .pointerDown({sourceName: "pointer2"})
+ .pointerDown({sourceName: "pointer1"})
+ .pointerUp({sourceName: "pointer2"})
+ .pointerUp({sourceName: "pointer1"})
+ .send()
+ .then(t.step_func_done(() => assert_array_equals(events, ["a", "b"])))
+ .catch(e => t.step_func(() => assert_unreached("Actions sequence failed " + e)));
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/multiDevice.html b/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/multiDevice.html
new file mode 100644
index 00000000000..5cab1206dbe
--- /dev/null
+++ b/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/multiDevice.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>TestDriver actions: multiple devices</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+
+<input type="text" id="text"></input>
+
+<script>
+async_test(t => {
+ let text_box = document.getElementById("text");
+ let actions = new test_driver.Actions()
+ .pointerMove(0, 0, {origin: text_box})
+ .pointerDown()
+ .pointerUp()
+ .addTick()
+ .keyDown("p")
+ .keyUp("p")
+ .keyDown("a")
+ .keyUp("a")
+ .keyDown("s")
+ .keyUp("s")
+ .keyDown("s")
+ .keyUp("s");
+
+ actions.send()
+ .then(() => {
+ assert_true(text_box.value == "pass");
+ t.done();
+ })
+ .catch(t.unreached_func("Actions sequence failed"));
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/payment-request/META.yml b/tests/wpt/web-platform-tests/payment-request/META.yml
index f8460d403ff..0a075e19c6b 100644
--- a/tests/wpt/web-platform-tests/payment-request/META.yml
+++ b/tests/wpt/web-platform-tests/payment-request/META.yml
@@ -6,3 +6,4 @@ suggested_reviewers:
- MSFTkihans
- mnoorenberghe
- romandev
+ - edenchuang
diff --git a/tests/wpt/web-platform-tests/resources/testdriver-actions.js b/tests/wpt/web-platform-tests/resources/testdriver-actions.js
new file mode 100644
index 00000000000..46c68858e45
--- /dev/null
+++ b/tests/wpt/web-platform-tests/resources/testdriver-actions.js
@@ -0,0 +1,391 @@
+(function() {
+ let sourceNameIdx = 0;
+
+ /**
+ * Builder for creating a sequence of actions
+ */
+ function Actions() {
+ this.sourceTypes = new Map([["key", KeySource],
+ ["pointer", PointerSource],
+ ["general", GeneralSource]]);
+ this.sources = new Map();
+ this.sourceOrder = [];
+ for (let sourceType of this.sourceTypes.keys()) {
+ this.sources.set(sourceType, new Map());
+ }
+ this.currentSources = new Map();
+ for (let sourceType of this.sourceTypes.keys()) {
+ this.currentSources.set(sourceType, null);
+ }
+ this.createSource("general");
+ this.tickIdx = 0;
+ }
+
+ Actions.prototype = {
+ /**
+ * Generate the action sequence suitable for passing to
+ * test_driver.action_sequence
+ *
+ * @returns {Array} Array of WebDriver-compatible actions sequences
+ */
+ serialize: function() {
+ let actions = [];
+ for (let [sourceType, sourceName] of this.sourceOrder) {
+ let source = this.sources.get(sourceType).get(sourceName);
+ let serialized = source.serialize(this.tickIdx + 1);
+ if (serialized) {
+ serialized.id = sourceName;
+ actions.push(serialized);
+ }
+ }
+ return actions;
+ },
+
+ /**
+ * Generate and send the action sequence
+ *
+ * @returns {Promise} fulfilled after the sequence is executed,
+ * rejected if any actions fail.
+ */
+ send: function() {
+ let actions;
+ try {
+ actions = this.serialize();
+ } catch(e) {
+ return Promise.reject(e);
+ }
+ return test_driver.action_sequence(actions);
+ },
+
+ /**
+ * Get the action source with a particular source type and name.
+ * If no name is passed, a new source with the given type is
+ * created.
+ *
+ * @param {String} type - Source type ('general', 'key', or 'pointer')
+ * @param {String?} name - Name of the source
+ * @returns {Source} Source object for that source.
+ */
+ getSource: function(type, name) {
+ if (!this.sources.has(type)) {
+ throw new Error(`${type} is not a valid action type`);
+ }
+ if (name === null || name === undefined) {
+ name = this.currentSources.get(type);
+ }
+ if (name === null || name === undefined) {
+ return this.createSource(type, null);
+ }
+ return this.sources.get(type).get(name);
+ },
+
+ setSource: function(type, name) {
+ if (!this.sources.has(type)) {
+ throw new Error(`${type} is not a valid action type`);
+ }
+ if (!this.sources.get(type).has(name)) {
+ throw new Error(`${name} is not a valid source for ${type}`);
+ }
+ this.currentSources.set(type, name);
+ return this;
+ },
+
+ /**
+ * Add a new key input source with the given name
+ *
+ * @param {String} name - Name of the key source
+ * @param {Bool} set - Set source as the default key source
+ * @returns {Actions}
+ */
+ addKeyboard: function(name, set=true) {
+ this.createSource("key", name, true);
+ if (set) {
+ this.setKeyboard(name);
+ }
+ return this;
+ },
+
+ /**
+ * Set the current default key source
+ *
+ * @param {String} name - Name of the key source
+ * @returns {Actions}
+ */
+ setKeyboard: function(name) {
+ this.setSource("key", name);
+ return this;
+ },
+
+ /**
+ * Add a new pointer input source with the given name
+ *
+ * @param {String} type - Name of the key source
+ * @param {String} pointerType - Type of pointing device
+ * @param {Bool} set - Set source as the default key source
+ * @returns {Actions}
+ */
+ addPointer: function(name, pointerType="mouse", set=true) {
+ this.createSource("pointer", name, true, {pointerType: pointerType});
+ if (set) {
+ this.setPointer(name);
+ }
+ return this;
+ },
+
+ /**
+ * Set the current default pointer source
+ *
+ * @param {String} name - Name of the pointer source
+ * @returns {Actions}
+ */
+ setPointer: function(name) {
+ this.setSource("pointer", name);
+ return this;
+ },
+
+ createSource: function(type, name, parameters={}) {
+ if (!this.sources.has(type)) {
+ throw new Error(`${type} is not a valid action type`);
+ }
+ let sourceNames = new Set();
+ for (let [_, name] of this.sourceOrder) {
+ sourceNames.add(name);
+ }
+ if (!name) {
+ do {
+ name = "" + sourceNameIdx++;
+ } while (sourceNames.has(name))
+ } else {
+ if (sourceNames.has(name)) {
+ throw new Error(`Alreay have a source of type ${type} named ${name}.`);
+ }
+ }
+ this.sources.get(type).set(name, new (this.sourceTypes.get(type))(parameters));
+ this.currentSources.set(type, name);
+ this.sourceOrder.push([type, name]);
+ return this.sources.get(type).get(name);
+ },
+
+ /**
+ * Insert a new actions tick
+ *
+ * @param {Number?} duration - Minimum length of the tick in ms.
+ * @returns {Actions}
+ */
+ addTick: function(duration) {
+ this.tickIdx += 1;
+ if (duration) {
+ this.pause(duration);
+ }
+ return this;
+ },
+
+ /**
+ * Add a pause to the current tick
+ *
+ * @param {Number?} duration - Minimum length of the tick in ms.
+ * @returns {Actions}
+ */
+ pause: function(duration) {
+ this.getSource("general").addPause(this, duration);
+ return this;
+ },
+
+ /**
+ * Create a keyDown event for the current default key source
+ *
+ * @param {String} key - Key to press
+ * @param {String?} sourceName - Named key source to use or null for the default key source
+ * @returns {Actions}
+ */
+ keyDown: function(key, {sourceName=null}={}) {
+ let source = this.getSource("key", sourceName);
+ source.keyDown(this, key);
+ return this;
+ },
+
+ /**
+ * Create a keyDown event for the current default key source
+ *
+ * @param {String} key - Key to release
+ * @param {String?} sourceName - Named key source to use or null for the default key source
+ * @returns {Actions}
+ */
+ keyUp: function(key, {sourceName=null}={}) {
+ let source = this.getSource("key", sourceName);
+ source.keyUp(this, key);
+ return this;
+ },
+
+ /**
+ * Create a pointerDown event for the current default pointer source
+ *
+ * @param {String} button - Button to press
+ * @param {String?} sourceName - Named pointer source to use or null for the default
+ * pointer source
+ * @returns {Actions}
+ */
+ pointerDown: function({button=0, sourceName=null}={}) {
+ let source = this.getSource("pointer", sourceName);
+ source.pointerDown(this, button);
+ return this;
+ },
+
+ /**
+ * Create a pointerUp event for the current default pointer source
+ *
+ * @param {String} button - Button to release
+ * @param {String?} sourceName - Named pointer source to use or null for the default pointer
+ * source
+ * @returns {Actions}
+ */
+ pointerUp: function({button=0, sourceName=null}={}) {
+ let source = this.getSource("pointer", sourceName);
+ source.pointerUp(this, button);
+ return this;
+ },
+
+ /**
+ * Create a move event for the current default pointer source
+ *
+ * @param {Number} x - Destination x coordinate
+ * @param {Number} y - Destination y coordinate
+ * @param {String|Element} origin - Origin of the coordinate system.
+ * Either "pointer", "viewport" or an Element
+ * @param {Number?} duration - Time in ms for the move
+ * @param {String?} sourceName - Named pointer source to use or null for the default pointer
+ * source
+ * @returns {Actions}
+ */
+ pointerMove: function(x, y,
+ {origin="viewport", duration, sourceName=null}={}) {
+ let source = this.getSource("pointer", sourceName);
+ source.pointerMove(this, x, y, duration, origin);
+ return this;
+ },
+ };
+
+ function GeneralSource() {
+ this.actions = new Map();
+ }
+
+ GeneralSource.prototype = {
+ serialize: function(tickCount) {
+ if (!this.actions.size) {
+ return undefined;
+ }
+ let actions = [];
+ let data = {"type": "none", "actions": actions};
+ for (let i=0; i<tickCount; i++) {
+ if (this.actions.has(i)) {
+ actions.push(this.actions.get(i));
+ } else {
+ actions.push({"type": "pause"});
+ }
+ }
+ return data;
+ },
+
+ addPause: function(actions, duration) {
+ let tick = actions.tickIdx;
+ if (this.actions.has(tick)) {
+ throw new Error(`Already have a pause action for the current tick`);
+ }
+ this.actions.set(tick, {type: "pause", duration: duration});
+ },
+ };
+
+ function KeySource() {
+ this.actions = new Map();
+ }
+
+ KeySource.prototype = {
+ serialize: function(tickCount) {
+ if (!this.actions.size) {
+ return undefined;
+ }
+ let actions = [];
+ let data = {"type": "key", "actions": actions};
+ for (let i=0; i<tickCount; i++) {
+ if (this.actions.has(i)) {
+ actions.push(this.actions.get(i));
+ } else {
+ actions.push({"type": "pause"});
+ }
+ }
+ return data;
+ },
+
+ keyDown: function(actions, key) {
+ let tick = actions.tickIdx;
+ if (this.actions.has(tick)) {
+ tick = actions.addTick().tickIdx;
+ }
+ this.actions.set(tick, {type: "keyDown", value: key});
+ },
+
+ keyUp: function(actions, key) {
+ let tick = actions.tickIdx;
+ if (this.actions.has(tick)) {
+ tick = actions.addTick().tickIdx;
+ }
+ this.actions.set(tick, {type: "keyUp", value: key});
+ },
+ };
+
+ function PointerSource(parameters={pointerType: "mouse"}) {
+ let pointerType = parameters.pointerType || "mouse";
+ if (!["mouse", "pen", "touch"].includes(pointerType)) {
+ throw new Error(`Invalid pointerType ${pointerType}`);
+ }
+ this.type = pointerType;
+ this.actions = new Map();
+ }
+
+ PointerSource.prototype = {
+ serialize: function(tickCount) {
+ if (!this.actions.size) {
+ return undefined;
+ }
+ let actions = [];
+ let data = {"type": "pointer", "actions": actions, "parameters": {"pointerType": this.type}};
+ for (let i=0; i<tickCount; i++) {
+ if (this.actions.has(i)) {
+ actions.push(this.actions.get(i));
+ } else {
+ actions.push({"type": "pause"});
+ }
+ }
+ return data;
+ },
+
+ pointerDown: function(actions, button) {
+ let tick = actions.tickIdx;
+ if (this.actions.has(tick)) {
+ tick = actions.addTick().tickIdx;
+ }
+ this.actions.set(tick, {type: "pointerDown", button});
+ },
+
+ pointerUp: function(actions, button) {
+ let tick = actions.tickIdx;
+ if (this.actions.has(tick)) {
+ tick = actions.addTick().tickIdx;
+ }
+ this.actions.set(tick, {type: "pointerUp", button});
+ },
+
+ pointerMove: function(actions, x, y, duration, origin) {
+ let tick = actions.tickIdx;
+ if (this.actions.has(tick)) {
+ tick = actions.addTick().tickIdx;
+ }
+ this.actions.set(tick, {type: "pointerMove", x, y, origin});
+ if (duration) {
+ this.actions.get(tick).duration = duration;
+ }
+ },
+ };
+
+ test_driver.Actions = Actions;
+})();
diff --git a/tests/wpt/web-platform-tests/resources/testdriver.js b/tests/wpt/web-platform-tests/resources/testdriver.js
index 42ec824d015..e0741e8d61d 100644
--- a/tests/wpt/web-platform-tests/resources/testdriver.js
+++ b/tests/wpt/web-platform-tests/resources/testdriver.js
@@ -171,6 +171,29 @@
*/
freeze: function() {
return window.test_driver_internal.freeze();
+ },
+
+ /**
+ * Send a sequence of actions
+ *
+ * This function sends a sequence of actions to the top level window
+ * to perform. It is modeled after the behaviour of {@link
+ * https://w3c.github.io/webdriver/#actions|WebDriver Actions Command}
+ *
+ * @param {Array} actions - an array of actions. The format is the same as the actions
+ property of the WebDriver command {@link
+ https://w3c.github.io/webdriver/#perform-actions|Perform
+ Actions} command. Each element is an object representing an
+ input source and each input source itself has an actions
+ property detailing the behaviour of that source at each timestep
+ (or tick). Authors are not expected to construct the actions
+ sequence by hand, but to use the builder api provided in
+ testdriver-actions.js
+ * @returns {Promise} fufiled after the actions are performed, or rejected in
+ * the cases the WebDriver command errors
+ */
+ action_sequence(actions) {
+ return window.test_driver_internal.action_sequence(actions);
}
};
@@ -205,6 +228,16 @@
*/
freeze: function() {
return Promise.reject(new Error("unimplemented"));
+ },
+
+ /**
+ * Send a sequence of pointer actions
+ *
+ * @returns {Promise} fufilled after actions are sent, rejected if any actions
+ * fail
+ */
+ action_sequence: function(actions) {
+ return Promise.reject(new Error("unimplemented"));
}
};
})();
diff --git a/tests/wpt/web-platform-tests/tools/serve/test_functional.py b/tests/wpt/web-platform-tests/tools/serve/test_functional.py
index e423461f481..60b950fc8aa 100644
--- a/tests/wpt/web-platform-tests/tools/serve/test_functional.py
+++ b/tests/wpt/web-platform-tests/tools/serve/test_functional.py
@@ -55,7 +55,7 @@ def test_subprocess_exit(server_subprocesses, tempfile_name):
# which are relevant to this functionality. Disable the check so that
# the constructor is only used to create relevant processes.
with open(tempfile_name, 'w') as handle:
- json.dump({"check_subdomains": False}, handle)
+ json.dump({"check_subdomains": False, "bind_address": False}, handle)
# The `logger` module from the wptserver package uses a singleton
# pattern which resists testing. In order to avoid conflicting with
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt
index fcb5922d10d..0e71ed50411 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt
@@ -2,4 +2,4 @@ html5lib == 1.0.1
mozinfo == 0.10
mozlog==3.8
mozdebug == 0.1
-urllib3[secure] == 1.22
+urllib3[secure]==1.23
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/base.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/base.py
index 1dc962cfb08..fa266e35429 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/base.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/base.py
@@ -508,7 +508,8 @@ class CallbackHandler(object):
self.actions = {
"click": ClickAction(self.logger, self.protocol),
- "send_keys": SendKeysAction(self.logger, self.protocol)
+ "send_keys": SendKeysAction(self.logger, self.protocol),
+ "action_sequence": ActionSequenceAction(self.logger, self.protocol)
}
def __call__(self, result):
@@ -539,7 +540,8 @@ class CallbackHandler(object):
except Exception:
self.logger.warning("Action %s failed" % action)
self.logger.warning(traceback.format_exc())
- self._send_message("complete", "failure")
+ self._send_message("complete", "error")
+ raise
else:
self.logger.debug("Action %s completed" % action)
self._send_message("complete", "success")
@@ -559,13 +561,9 @@ class ClickAction(object):
def __call__(self, payload):
selector = payload["selector"]
- elements = self.protocol.select.elements_by_selector(selector)
- if len(elements) == 0:
- raise ValueError("Selector matches no elements")
- elif len(elements) > 1:
- raise ValueError("Selector matches multiple elements")
+ element = self.protocol.select.element_by_selector(selector)
self.logger.debug("Clicking element: %s" % selector)
- self.protocol.click.element(elements[0])
+ self.protocol.click.element(element)
class SendKeysAction(object):
@@ -576,10 +574,27 @@ class SendKeysAction(object):
def __call__(self, payload):
selector = payload["selector"]
keys = payload["keys"]
- elements = self.protocol.select.elements_by_selector(selector)
- if len(elements) == 0:
- raise ValueError("Selector matches no elements")
- elif len(elements) > 1:
- raise ValueError("Selector matches multiple elements")
+ element = self.protocol.select.element_by_selector(selector)
self.logger.debug("Sending keys to element: %s" % selector)
- self.protocol.send_keys.send_keys(elements[0], keys)
+ self.protocol.send_keys.send_keys(element, keys)
+
+
+class ActionSequenceAction(object):
+ def __init__(self, logger, protocol):
+ self.logger = logger
+ self.protocol = protocol
+
+ def __call__(self, payload):
+ # TODO: some sort of shallow error checking
+ actions = payload["actions"]
+ for actionSequence in actions:
+ if actionSequence["type"] == "pointer":
+ for action in actionSequence["actions"]:
+ if (action["type"] == "pointerMove" and
+ isinstance(action["origin"], dict)):
+ action["origin"] = self.get_element(action["origin"]["selector"])
+ self.protocol.action_sequence.send_actions({"actions": actions})
+
+ def get_element(self, selector):
+ element = self.protocol.select.element_by_selector(selector)
+ return element
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executormarionette.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executormarionette.py
index 4ab7bf3dde9..cc1d1e400c7 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executormarionette.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executormarionette.py
@@ -19,7 +19,8 @@ from .base import (CallbackHandler,
WebDriverProtocol,
extra_timeout,
strip_server)
-from .protocol import (AssertsProtocolPart,
+from .protocol import (ActionSequenceProtocolPart,
+ AssertsProtocolPart,
BaseProtocolPart,
TestharnessProtocolPart,
PrefsProtocolPart,
@@ -359,6 +360,16 @@ class MarionetteSendKeysProtocolPart(SendKeysProtocolPart):
return element.send_keys(keys)
+class MarionetteActionSequenceProtocolPart(ActionSequenceProtocolPart):
+ def setup(self):
+ self.marionette = self.parent.marionette
+
+ def send_actions(self, actions):
+ actions = self.marionette._to_json(actions)
+ self.logger.info(actions)
+ self.marionette._send_message("WebDriver:PerformActions", actions)
+
+
class MarionetteTestDriverProtocolPart(TestDriverProtocolPart):
def setup(self):
self.marionette = self.parent.marionette
@@ -433,6 +444,7 @@ class MarionetteProtocol(Protocol):
MarionetteSelectorProtocolPart,
MarionetteClickProtocolPart,
MarionetteSendKeysProtocolPart,
+ MarionetteActionSequenceProtocolPart,
MarionetteTestDriverProtocolPart,
MarionetteAssertsProtocolPart,
MarionetteCoverageProtocolPart]
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorselenium.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorselenium.py
index c1d66b5706e..f81c0034c8b 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorselenium.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorselenium.py
@@ -18,6 +18,7 @@ from .protocol import (BaseProtocolPart,
SelectorProtocolPart,
ClickProtocolPart,
SendKeysProtocolPart,
+ ActionSequenceProtocolPart,
TestDriverProtocolPart)
from ..testrunner import Stop
@@ -26,15 +27,18 @@ here = os.path.join(os.path.split(__file__)[0])
webdriver = None
exceptions = None
RemoteConnection = None
+Command = None
def do_delayed_imports():
global webdriver
global exceptions
global RemoteConnection
+ global Command
from selenium import webdriver
from selenium.common import exceptions
from selenium.webdriver.remote.remote_connection import RemoteConnection
+ from selenium.webdriver.remote.command import Command
class SeleniumBaseProtocolPart(BaseProtocolPart):
@@ -135,6 +139,7 @@ class SeleniumClickProtocolPart(ClickProtocolPart):
def element(self, element):
return element.click()
+
class SeleniumSendKeysProtocolPart(SendKeysProtocolPart):
def setup(self):
self.webdriver = self.parent.webdriver
@@ -143,6 +148,14 @@ class SeleniumSendKeysProtocolPart(SendKeysProtocolPart):
return element.send_keys(keys)
+class SeleniumActionSequenceProtocolPart(ActionSequenceProtocolPart):
+ def setup(self):
+ self.webdriver = self.parent.webdriver
+
+ def send_actions(self, actions):
+ self.webdriver.execute(Command.W3C_ACTIONS, {"actions": actions})
+
+
class SeleniumTestDriverProtocolPart(TestDriverProtocolPart):
def setup(self):
self.webdriver = self.parent.webdriver
@@ -163,7 +176,8 @@ class SeleniumProtocol(Protocol):
SeleniumSelectorProtocolPart,
SeleniumClickProtocolPart,
SeleniumSendKeysProtocolPart,
- SeleniumTestDriverProtocolPart]
+ SeleniumTestDriverProtocolPart,
+ SeleniumActionSequenceProtocolPart]
def __init__(self, executor, browser, capabilities, **kwargs):
do_delayed_imports()
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py
index 879bd68d522..553b79e750a 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py
@@ -18,6 +18,7 @@ from .protocol import (BaseProtocolPart,
SelectorProtocolPart,
ClickProtocolPart,
SendKeysProtocolPart,
+ ActionSequenceProtocolPart,
TestDriverProtocolPart)
from ..testrunner import Stop
@@ -25,6 +26,7 @@ import webdriver as client
here = os.path.join(os.path.split(__file__)[0])
+
class WebDriverBaseProtocolPart(BaseProtocolPart):
def setup(self):
self.webdriver = self.parent.webdriver
@@ -146,6 +148,14 @@ class WebDriverSendKeysProtocolPart(SendKeysProtocolPart):
return element.send_element_command("POST", "value", {"value": list(keys)})
+class WebDriverActionSequenceProtocolPart(ActionSequenceProtocolPart):
+ def setup(self):
+ self.webdriver = self.parent.webdriver
+
+ def send_actions(self, actions):
+ self.webdriver.actions.perform(actions)
+
+
class WebDriverTestDriverProtocolPart(TestDriverProtocolPart):
def setup(self):
self.webdriver = self.parent.webdriver
@@ -166,6 +176,7 @@ class WebDriverProtocol(Protocol):
WebDriverSelectorProtocolPart,
WebDriverClickProtocolPart,
WebDriverSendKeysProtocolPart,
+ WebDriverActionSequenceProtocolPart,
WebDriverTestDriverProtocolPart]
def __init__(self, executor, browser, capabilities, **kwargs):
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/protocol.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/protocol.py
index f8292ff5ec1..74a7cc4b7fc 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/protocol.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/protocol.py
@@ -242,6 +242,14 @@ class SelectorProtocolPart(ProtocolPart):
name = "select"
+ def element_by_selector(self, selector):
+ elements = self.elements_by_selector(selector)
+ if len(elements) == 0:
+ raise ValueError("Selector '%s' matches no elements" % selector)
+ elif len(elements) > 1:
+ raise ValueError("Selector '%s' matches multiple elements" % selector)
+ return elements[0]
+
@abstractmethod
def elements_by_selector(self, selector):
"""Select elements matching a CSS selector
@@ -279,6 +287,20 @@ class SendKeysProtocolPart(ProtocolPart):
pass
+class ActionSequenceProtocolPart(ProtocolPart):
+ """Protocol part for performing trusted clicks"""
+ __metaclass__ = ABCMeta
+
+ name = "action_sequence"
+
+ @abstractmethod
+ def send_actions(self, actions):
+ """Send a sequence of actions to the window.
+
+ :param actions: A protocol-specific handle to an array of actions."""
+ pass
+
+
class TestDriverProtocolPart(ProtocolPart):
"""Protocol part that implements the basic functionality required for
all testdriver-based tests."""
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testdriver-extra.js b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testdriver-extra.js
index ef962d35f22..d77731a158e 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testdriver-extra.js
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testdriver-extra.js
@@ -70,4 +70,22 @@
window.opener.postMessage({"type": "action", "action": "send_keys", "selector": selector, "keys": keys}, "*");
return pending_promise;
};
+
+ window.test_driver_internal.action_sequence = function(actions) {
+ const pending_promise = new Promise(function(resolve, reject) {
+ pending_resolve = resolve;
+ pending_reject = reject;
+ });
+ for (let actionSequence of actions) {
+ if (actionSequence.type == "pointer") {
+ for (let action of actionSequence.actions) {
+ if (action.type == "pointerMove" && action.origin instanceof Element) {
+ action.origin = {selector: get_selector(action.origin)};
+ }
+ }
+ }
+ }
+ window.opener.postMessage({"type": "action", "action": "action_sequence", "actions": actions}, "*");
+ return pending_promise;
+ };
})();
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py
index 931a7822d0b..46e3ff7926d 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py
@@ -52,7 +52,7 @@ class TestRunner(object):
:param command_queue: subprocess.Queue used to send commands to the
process
:param result_queue: subprocess.Queue used to send results to the
- parent TestManager process
+ parent TestRunnerManager process
:param executor: TestExecutor object that will actually run a test.
"""
self.command_queue = command_queue
@@ -304,7 +304,7 @@ class TestRunnerManager(threading.Thread):
self.test_runner_proc = None
- threading.Thread.__init__(self, name="Thread-TestrunnerManager-%i" % self.manager_number)
+ threading.Thread.__init__(self, name="TestRunnerManager-%i" % self.manager_number)
# This is started in the actual new thread
self.logger = None
@@ -321,9 +321,9 @@ class TestRunnerManager(threading.Thread):
self.capture_stdio = capture_stdio
def run(self):
- """Main loop for the TestManager.
+ """Main loop for the TestRunnerManager.
- TestManagers generally receive commands from their
+ TestRunnerManagers generally receive commands from their
TestRunner updating them on the status of a test. They
may also have a stop flag set by the main thread indicating
that the manager should shut down the next time the event loop
@@ -490,7 +490,7 @@ class TestRunnerManager(threading.Thread):
self.child_stop_flag)
self.test_runner_proc = Process(target=start_runner,
args=args,
- name="Thread-TestRunner-%i" % self.manager_number)
+ name="TestRunner-%i" % self.manager_number)
self.test_runner_proc.start()
self.logger.debug("Test runner started")
# Now we wait for either an init_succeeded event or an init_failed event
@@ -623,10 +623,10 @@ class TestRunnerManager(threading.Thread):
def wait_finished(self):
assert isinstance(self.state, RunnerManagerState.running)
- # The browser should be stopped already, but this ensures we do any post-stop
- # processing
self.logger.debug("Wait finished")
+ # The browser should be stopped already, but this ensures we do any
+ # post-stop processing
return self.after_test_end(self.state.test, True)
def after_test_end(self, test, restart):
@@ -674,7 +674,7 @@ class TestRunnerManager(threading.Thread):
self.cleanup()
def teardown(self):
- self.logger.debug("teardown in testrunnermanager")
+ self.logger.debug("TestRunnerManager teardown")
self.test_runner_proc = None
self.command_queue.close()
self.remote_queue.close()
@@ -695,7 +695,7 @@ class TestRunnerManager(threading.Thread):
self.test_runner_proc.terminate()
self.test_runner_proc.join(10)
else:
- self.logger.debug("Testrunner exited with code %i" % self.test_runner_proc.exitcode)
+ self.logger.debug("Runner process exited with code %i" % self.test_runner_proc.exitcode)
def runner_teardown(self):
self.ensure_runner_stopped()
@@ -705,7 +705,7 @@ class TestRunnerManager(threading.Thread):
self.remote_queue.put((command, args))
def cleanup(self):
- self.logger.debug("TestManager cleanup")
+ self.logger.debug("TestRunnerManager cleanup")
if self.browser:
self.browser.cleanup()
while True:
@@ -716,12 +716,17 @@ class TestRunnerManager(threading.Thread):
else:
if cmd == "log":
self.log(*data)
+ elif cmd == "runner_teardown":
+ # It's OK for the "runner_teardown" message to be left in
+ # the queue during cleanup, as we will already have tried
+ # to stop the TestRunner in `stop_runner`.
+ pass
else:
- self.logger.warning("%r: %r" % (cmd, data))
+ self.logger.warning("Command left in command_queue during cleanup: %r, %r" % (cmd, data))
while True:
try:
cmd, data = self.remote_queue.get_nowait()
- self.logger.warning("%r: %r" % (cmd, data))
+ self.logger.warning("Command left in remote_queue during cleanup: %r, %r" % (cmd, data))
except Empty:
break
@@ -747,7 +752,7 @@ class ManagerGroup(object):
restart_on_unexpected=True,
debug_info=None,
capture_stdio=True):
- """Main thread object that owns all the TestManager threads."""
+ """Main thread object that owns all the TestRunnerManager threads."""
self.suite_name = suite_name
self.size = size
self.test_source_cls = test_source_cls
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py
index 92ee9719753..7ac7b709436 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py
@@ -39,6 +39,7 @@ metadata files are used to store the expected test results.
def setup_logging(*args, **kwargs):
global logger
logger = wptlogging.setup(*args, **kwargs)
+ return logger
def get_loader(test_paths, product, debug=None, run_info_extras=None, **kwargs):
diff --git a/tests/wpt/web-platform-tests/tools/wptserve/.travis.yml b/tests/wpt/web-platform-tests/tools/wptserve/.travis.yml
deleted file mode 100644
index 00183731ba5..00000000000
--- a/tests/wpt/web-platform-tests/tools/wptserve/.travis.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-language: python
-
-sudo: false
-
-cache:
- directories:
- - $HOME/.cache/pip
-
-matrix:
- include:
- - python: 2.7
- env: TOXENV=py27
- - python: pypy
- env: TOXENV=pypy
-
-install:
- - pip install -U tox codecov
-
-script:
- - tox
-
-after_success:
- - coverage combine
- - codecov
diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/base.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/base.py
index e49c8287c59..f8331f5086d 100644
--- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/base.py
+++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/base.py
@@ -75,7 +75,7 @@ class TestUsingServer(unittest.TestCase):
req.add_data(body)
if auth is not None:
- req.add_header("Authorization", "Basic %s" % base64.b64encode('%s:%s' % auth))
+ req.add_header("Authorization", b"Basic %s" % base64.b64encode((b"%s:%s" % auth)))
return urlopen(req)
diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_pipes.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_pipes.py
index 7aa73353386..fdac4537d64 100644
--- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_pipes.py
+++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_pipes.py
@@ -57,40 +57,35 @@ class TestSlice(TestUsingServer):
self.assertEqual(resp.read(), expected[:10])
class TestSub(TestUsingServer):
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_sub_config(self):
resp = self.request("/sub.txt", query="pipe=sub")
- expected = "localhost localhost %i" % self.server.port
+ expected = b"localhost localhost %i" % self.server.port
self.assertEqual(resp.read().rstrip(), expected)
@pytest.mark.xfail(sys.platform == "win32",
reason="https://github.com/web-platform-tests/wpt/issues/12949")
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_sub_file_hash(self):
resp = self.request("/sub_file_hash.sub.txt")
- expected = """
+ expected = b"""
md5: JmI1W8fMHfSfCarYOSxJcw==
sha1: nqpWqEw4IW8NjD6R375gtrQvtTo=
sha224: RqQ6fMmta6n9TuA/vgTZK2EqmidqnrwBAmQLRQ==
sha256: G6Ljg1uPejQxqFmvFOcV/loqnjPTW5GSOePOfM/u0jw=
sha384: lkXHChh1BXHN5nT5BYhi1x67E1CyYbPKRKoF2LTm5GivuEFpVVYtvEBHtPr74N9E
-sha512: r8eLGRTc7ZznZkFjeVLyo6/FyQdra9qmlYCwKKxm3kfQAswRS9+3HsYk3thLUhcFmmWhK4dXaICz
-JwGFonfXwg=="""
+sha512: r8eLGRTc7ZznZkFjeVLyo6/FyQdra9qmlYCwKKxm3kfQAswRS9+3HsYk3thLUhcFmmWhK4dXaICzJwGFonfXwg=="""
self.assertEqual(resp.read().rstrip(), expected.strip())
def test_sub_file_hash_unrecognized(self):
with self.assertRaises(urllib.error.HTTPError):
self.request("/sub_file_hash_unrecognized.sub.txt")
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_sub_headers(self):
resp = self.request("/sub_headers.txt", query="pipe=sub", headers={"X-Test": "PASS"})
- expected = "PASS"
+ expected = b"PASS"
self.assertEqual(resp.read().rstrip(), expected)
@pytest.mark.xfail(sys.platform == "win32",
reason="https://github.com/web-platform-tests/wpt/issues/12949")
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_sub_location(self):
resp = self.request("/sub_location.sub.txt?query_string")
expected = """
@@ -101,30 +96,26 @@ pathname: /sub_location.sub.txt
port: {0}
query: ?query_string
scheme: http
-server: http://localhost:{0}""".format(self.server.port)
+server: http://localhost:{0}""".format(self.server.port).encode("ascii")
self.assertEqual(resp.read().rstrip(), expected.strip())
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_sub_params(self):
resp = self.request("/sub_params.txt", query="test=PASS&pipe=sub")
- expected = "PASS"
+ expected = b"PASS"
self.assertEqual(resp.read().rstrip(), expected)
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_sub_url_base(self):
resp = self.request("/sub_url_base.sub.txt")
- self.assertEqual(resp.read().rstrip(), "Before / After")
+ self.assertEqual(resp.read().rstrip(), b"Before / After")
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_sub_uuid(self):
resp = self.request("/sub_uuid.sub.txt")
- self.assertRegexpMatches(resp.read().rstrip(), r"Before [a-f0-9-]+ After")
+ self.assertRegexpMatches(resp.read().rstrip(), b"Before [a-f0-9-]+ After")
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_sub_var(self):
resp = self.request("/sub_var.sub.txt")
port = self.server.port
- expected = "localhost %s A %s B localhost C" % (port, port)
+ expected = b"localhost %d A %d B localhost C" % (port, port)
self.assertEqual(resp.read().rstrip(), expected)
class TestTrickle(TestUsingServer):
diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_request.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_request.py
index 096c0535b9a..d94580140e2 100644
--- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_request.py
+++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_request.py
@@ -1,5 +1,4 @@
-import sys
-
+# -*- coding: utf-8 -*-
import pytest
wptserve = pytest.importorskip("wptserve")
@@ -115,16 +114,40 @@ class TestRequest(TestUsingServer):
resp = self.request("/test/some_route")
self.assertEqual(b"some route", resp.read())
+ def test_non_ascii_in_headers(self):
+ @wptserve.handlers.handler
+ def handler(request, response):
+ return request.headers["foo"]
+
+ route = ("GET", "/test/test_unicode_in_headers", handler)
+ self.server.router.register(*route)
+
+ # Try some non-ASCII characters and the server shouldn't crash.
+ encoded_text = u"你好".encode("utf-8")
+ resp = self.request(route[1], headers={"foo": encoded_text})
+ self.assertEqual(encoded_text, resp.read())
+
+ # Try a different encoding from utf-8 to make sure the binary value is
+ # returned in verbatim.
+ encoded_text = u"どうも".encode("shift-jis")
+ resp = self.request(route[1], headers={"foo": encoded_text})
+ self.assertEqual(encoded_text, resp.read())
+
class TestAuth(TestUsingServer):
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_auth(self):
@wptserve.handlers.handler
def handler(request, response):
- return " ".join((request.auth.username, request.auth.password))
+ return b" ".join((request.auth.username, request.auth.password))
route = ("GET", "/test/test_auth", handler)
self.server.router.register(*route)
- resp = self.request(route[1], auth=("test", "PASS"))
+
+ resp = self.request(route[1], auth=(b"test", b"PASS"))
+ self.assertEqual(200, resp.getcode())
+ self.assertEqual([b"test", b"PASS"], resp.read().split(b" "))
+
+ encoded_text = u"どうも".encode("shift-jis")
+ resp = self.request(route[1], auth=(encoded_text, encoded_text))
self.assertEqual(200, resp.getcode())
- self.assertEqual(["test", "PASS"], resp.read().split(" "))
+ self.assertEqual([encoded_text, encoded_text], resp.read().split(b" "))
diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/pipes.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/pipes.py
index cded8f6ea02..cbae6d6fcb9 100644
--- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/pipes.py
+++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/pipes.py
@@ -1,5 +1,6 @@
from cgi import escape
from collections import deque
+import base64
import gzip as gzip_module
import hashlib
import os
@@ -393,7 +394,7 @@ class SubFunctions(object):
@staticmethod
def file_hash(request, algorithm, path):
- algorithm = algorithm.decode("ascii")
+ assert isinstance(algorithm, text_type)
if algorithm not in SubFunctions.supported_algorithms:
raise ValueError("Unsupported encryption algorithm: '%s'" % algorithm)
@@ -401,7 +402,7 @@ class SubFunctions(object):
absolute_path = os.path.join(request.doc_root, path)
try:
- with open(absolute_path) as f:
+ with open(absolute_path, "rb") as f:
hash_obj.update(f.read())
except IOError:
# In this context, an unhandled IOError will be interpreted by the
@@ -411,7 +412,7 @@ class SubFunctions(object):
# the path to the file to be hashed is invalid.
raise Exception('Cannot open file for hash computation: "%s"' % absolute_path)
- return hash_obj.digest().encode('base64').strip()
+ return base64.b64encode(hash_obj.digest()).strip()
def template(request, content, escape_type="html"):
#TODO: There basically isn't any error handling here
@@ -490,9 +491,14 @@ def template(request, content, escape_type="html"):
escape_func = {"html": lambda x:escape(x, quote=True),
"none": lambda x:x}[escape_type]
- #Should possibly support escaping for other contexts e.g. script
- #TODO: read the encoding of the response
- return escape_func(text_type(value)).encode("utf-8")
+ # Should possibly support escaping for other contexts e.g. script
+ # TODO: read the encoding of the response
+ # cgi.escape() only takes text strings in Python 3.
+ if isinstance(value, binary_type):
+ value = value.decode("utf-8")
+ elif isinstance(value, int):
+ value = text_type(value)
+ return escape_func(value).encode("utf-8")
template_regexp = re.compile(br"{{([^}]*)}}")
new_content = template_regexp.sub(config_replacement, content)
diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/ranges.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/ranges.py
index 976cb1781a0..104dca2ef6f 100644
--- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/ranges.py
+++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/ranges.py
@@ -3,6 +3,10 @@ from .utils import HTTPException
class RangeParser(object):
def __call__(self, header, file_size):
+ try:
+ header = header.decode("ascii")
+ except UnicodeDecodeError:
+ raise HTTPException(400, "Non-ASCII range header value")
prefix = "bytes="
if not header.startswith(prefix):
raise HTTPException(416, message="Unrecognised range type %s" % (header,))
diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/request.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/request.py
index cb575ccdba4..990774cbb9e 100644
--- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/request.py
+++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/request.py
@@ -1,7 +1,7 @@
import base64
import cgi
from six.moves.http_cookies import BaseCookie
-from six import BytesIO
+from six import BytesIO, binary_type, text_type
import tempfile
from six.moves.urllib.parse import parse_qsl, urlsplit
@@ -308,7 +308,7 @@ class Request(object):
self.raw_input.seek(0)
fs = cgi.FieldStorage(fp=self.raw_input,
environ={"REQUEST_METHOD": self.method},
- headers=self.headers,
+ headers=self.raw_headers,
keep_blank_values=True)
self._POST = MultiDict.from_field_storage(fs)
self.raw_input.seek(pos)
@@ -318,7 +318,7 @@ class Request(object):
def cookies(self):
if self._cookies is None:
parser = BaseCookie()
- cookie_headers = self.headers.get("cookie", "")
+ cookie_headers = self.headers.get("cookie", b"")
parser.load(cookie_headers)
cookies = Cookies()
for key, value in parser.iteritems():
@@ -355,11 +355,34 @@ class H2Request(Request):
super(H2Request, self).__init__(request_handler)
+def _maybe_encode(s):
+ """Encodes a text-type string into binary data using iso-8859-1.
+
+ Returns `str` in Python 2 and `bytes` in Python 3. The function is a no-op
+ if the argument already has a binary type.
+ """
+ if isinstance(s, binary_type):
+ return s
+
+ # Python 3 assumes iso-8859-1 when parsing headers, which will garble text
+ # with non ASCII characters. We try to encode the text back to binary.
+ # https://github.com/python/cpython/blob/273fc220b25933e443c82af6888eb1871d032fb8/Lib/http/client.py#L213
+ if isinstance(s, text_type):
+ return s.encode("iso-8859-1")
+
+ raise TypeError("Unexpected value in RequestHeaders: %r" % s)
+
+
class RequestHeaders(dict):
- """Dictionary-like API for accessing request headers."""
+ """Read-only dictionary-like API for accessing request headers.
+
+ Unlike BaseHTTPRequestHandler.headers, this class always returns all
+ headers with the same name (separated by commas). And it ensures all keys
+ (i.e. names of headers) and values have binary type.
+ """
def __init__(self, items):
for header in items.keys():
- key = header.lower()
+ key = _maybe_encode(header).lower()
# get all headers with the same name
values = items.getallmatchingheaders(header)
if len(values) > 1:
@@ -369,15 +392,17 @@ class RequestHeaders(dict):
for value in values:
# getallmatchingheaders returns raw header lines, so
# split to get name, value
- multiples.append(value.split(':', 1)[1].strip())
- dict.__setitem__(self, key, multiples)
+ multiples.append(_maybe_encode(value).split(b':', 1)[1].strip())
+ headers = multiples
else:
- dict.__setitem__(self, key, [items[header]])
+ headers = [_maybe_encode(items[header])]
+ dict.__setitem__(self, key, headers)
def __getitem__(self, key):
"""Get all headers of a certain (case-insensitive) name. If there is
more than one, the values are returned comma separated"""
+ key = _maybe_encode(key)
values = dict.__getitem__(self, key.lower())
if len(values) == 1:
return values[0]
@@ -403,6 +428,7 @@ class RequestHeaders(dict):
def get_list(self, key, default=missing):
"""Get all the header values for a particular field name as
a list"""
+ key = _maybe_encode(key)
try:
return dict.__getitem__(self, key.lower())
except KeyError:
@@ -412,6 +438,7 @@ class RequestHeaders(dict):
raise
def __contains__(self, key):
+ key = _maybe_encode(key)
return dict.__contains__(self, key.lower())
def iteritems(self):
@@ -590,21 +617,28 @@ class Authentication(object):
The password supplied in the HTTP Authorization
header, or None
+
+ Both attributes are binary strings (`str` in Py2, `bytes` in Py3), since
+ RFC7617 Section 2.1 does not specify the encoding for username & passsword
+ (as long it's compatible with ASCII). UTF-8 should be a relatively safe
+ choice if callers need to decode them as most browsers use it.
"""
def __init__(self, headers):
self.username = None
self.password = None
- auth_schemes = {"Basic": self.decode_basic}
+ auth_schemes = {b"Basic": self.decode_basic}
if "authorization" in headers:
header = headers.get("authorization")
- auth_type, data = header.split(" ", 1)
+ assert isinstance(header, binary_type)
+ auth_type, data = header.split(b" ", 1)
if auth_type in auth_schemes:
self.username, self.password = auth_schemes[auth_type](data)
else:
raise HTTPException(400, "Unsupported authentication scheme %s" % auth_type)
def decode_basic(self, data):
- decoded_data = base64.decodestring(data)
- return decoded_data.split(":", 1)
+ assert isinstance(data, binary_type)
+ decoded_data = base64.b64decode(data)
+ return decoded_data.split(b":", 1)