Backed out 53 changesets (bug 1505878, bug 1507080, bug 1505638, bug 1507345, bug 1507122, bug 1507341, bug 1506769, bug 1497436, bug 1507796, bug 1506775, bug 1506697, bug 1507089, bug 1507908, bug 1504801, bug 1507063, bug 1507917, bug 1506089, bug 1506919, bug 1507805, bug 1507374, bug 1507421, bug 1507426, bug 1506886, bug 1488424, bug 1507558, bug 1507600, bug 1507977, bug 1507549, bug 1507526, bug 1507064, bug 1507586, bug 1508031, bug 1507472, bug 1507239, bug 1507250, bug 1507532, bug 1507519, bug 1508354, bug 1507660, bug 1506716, bug 1508014, bug 1506994) for wpt failures on grid-container-scrollbar-vertical-lr-001.html. CLOSED TREE
authorBrindusan Cristian <cbrindusan@mozilla.com>
Tue, 20 Nov 2018 20:37:05 +0200
changeset 503769 46ad93280b0678c2bf9db3c3f8dcd3613b0ec9ab
parent 503768 31a42178a876106cc4cce885b94afef0275d89c7
child 503770 25d79223c2dedd0b06abd48dbfc815c750b6473c
push id10290
push userffxbld-merge
push dateMon, 03 Dec 2018 16:23:23 +0000
treeherdermozilla-beta@700bed2445e6 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
bugs1505878, 1507080, 1505638, 1507345, 1507122, 1507341, 1506769, 1497436, 1507796, 1506775, 1506697, 1507089, 1507908, 1504801, 1507063, 1507917, 1506089, 1506919, 1507805, 1507374, 1507421, 1507426, 1506886, 1488424, 1507558, 1507600, 1507977, 1507549, 1507526, 1507064, 1507586, 1508031, 1507472, 1507239, 1507250, 1507532, 1507519, 1508354, 1507660, 1506716, 1508014, 1506994
milestone65.0a1
backs out584f730e1865b8dd3512ae68ac7350a9abdf07e2
3bdcf979b1a2ca6277c8e12143130da8454715d0
f36221255331b7638e53ef0364b4fb646bdfecb3
d8ba2f11effc197b364abd0cd3e374c2c9619d68
c4430fdd1d225c1d3c35e24ba2eb775259b7d19a
b4d49ed8873e9a4458c50da96e76fe62f067d4da
f380f6a8f5c0f0dff12df5aa4214040aed998067
d94695f279159a02b853a95ab4ea2f10a9e65d81
2b4e8d16551955833b71358bcf2f0ba617fcc3df
a96795d1de3f259153af0a66f2c00b1ac684f905
6e08180c8ba3db7fa707e76b97069d7fc4d2f4ba
e758e29e8a1a9cfc2aea0d2fd6eace425676ec0d
380cb8a671e9c651b8519acd2256d1f9eeda3905
77f172246b2de93491409e0ab3534fd1d5f5bf4d
61abe5c39ab561fecaeeca496796f9fc855ba89f
c750807ac5c434f973d4b638bca382b15581612f
b49e6067e4bc5b0fd23c1efe8c66a4e2cb55b0d5
bb03633ea79a37977e3c79530ffdb687afbf482b
f73f874848390bfe55e387771beda2ccec982460
ab97e60ed77733bc1c112b86ab29916173f7ae02
d4129dccff17ea22573a8b3dc486cffcf43b89bf
bcb5a5eebc6cfd4489490c7d3a9af18a668b749f
d76dc6e3bbaae980868c087c608c185265142618
30d8f48aab9914f1eabb852a165d6c87fa4fd327
e6d88d9f73affa755a6c09ed70af2a9c76362e30
ee38ad38e9a1f86ac344708152c5cf98f72dd29d
0b2f801856141bb6a7673db5cb370eaf5e813ba9
0143d49ed65b65beab2f2f6d9c74ca58f590e2f6
2c739b93be1e45dc9695653334e34a921e60d3f5
0a4f3d45b0c5cc8c3f1a863dd5f30fdf2f5d3768
81e2dcf84fb1b4d44135c0ed12c124d9c4d9a01a
22f64d38d9c8b1122716ab5cba35e87a504cad2f
0475d6073c309df4fb00aa1f2adad320d6f0a276
956ed95b791ee5dbb48bb027943e5257144fb2d7
ac81704153383bad49d9009a5992d97517381424
d7e0ada6193474f4e446485988d6f10b992499b2
6a730fb5a7e4ee98c0bae520320985ee607cc5de
1e351d1c2022041dfaa89127de5c94a574a8955b
031385cb555895046e3fb6493d1a928c5ed5dd6b
2fa696969cc277a02977ae7ba5bfd6e25506df25
9d55c7b68552eeff7139987defa1bb09398d4eed
7385eaebb8e92a3414ba9291159960d47bfe92c3
d2ac36f03ef52966404bbde32cb9a2e800d22c97
b6ebdb6e8bf9fa6f2a4ba36e7c6a3dd67feda3e9
29ca75ba24333014ae098ce523efbaf49e70b141
b5aa3737ca29c896a78dd511f3e5a21f6b10cb05
f3cb0265f0c1de2b76f36205c6735e5203dd7a67
f3f2d714b4eb95eb31c00b1aee8d2be24b28aa1e
aa35cce4fb76dab2f2898bd5fc2b1348663c04ba
43cfc59879d28041f6c211dbae7130a0cd6404dd
8e13752959d689e01d7ba51c3a1460d90f9bcbc5
dfbc81d5e5187d2e804f8fad2f8dedd9f51734ef
378d0c633eaee8cac785d3f0aa0e24f397efa6e2
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Backed out 53 changesets (bug 1505878, bug 1507080, bug 1505638, bug 1507345, bug 1507122, bug 1507341, bug 1506769, bug 1497436, bug 1507796, bug 1506775, bug 1506697, bug 1507089, bug 1507908, bug 1504801, bug 1507063, bug 1507917, bug 1506089, bug 1506919, bug 1507805, bug 1507374, bug 1507421, bug 1507426, bug 1506886, bug 1488424, bug 1507558, bug 1507600, bug 1507977, bug 1507549, bug 1507526, bug 1507064, bug 1507586, bug 1508031, bug 1507472, bug 1507239, bug 1507250, bug 1507532, bug 1507519, bug 1508354, bug 1507660, bug 1506716, bug 1508014, bug 1506994) for wpt failures on grid-container-scrollbar-vertical-lr-001.html. CLOSED TREE Backed out changeset 584f730e1865 (bug 1508354) Backed out changeset 3bdcf979b1a2 (bug 1507532) Backed out changeset f36221255331 (bug 1506769) Backed out changeset d8ba2f11effc (bug 1506769) Backed out changeset c4430fdd1d22 (bug 1508031) Backed out changeset b4d49ed8873e (bug 1507796) Backed out changeset f380f6a8f5c0 (bug 1508014) Backed out changeset d94695f27915 (bug 1507421) Backed out changeset 2b4e8d165519 (bug 1505638) Backed out changeset a96795d1de3f (bug 1505638) Backed out changeset 6e08180c8ba3 (bug 1507977) Backed out changeset e758e29e8a1a (bug 1507908) Backed out changeset 380cb8a671e9 (bug 1507917) Backed out changeset 77f172246b2d (bug 1507519) Backed out changeset 61abe5c39ab5 (bug 1504801) Backed out changeset c750807ac5c4 (bug 1504801) Backed out changeset b49e6067e4bc (bug 1507472) Backed out changeset bb03633ea79a (bug 1507472) Backed out changeset f73f87484839 (bug 1507805) Backed out changeset ab97e60ed777 (bug 1507586) Backed out changeset d4129dccff17 (bug 1506089) Backed out changeset bcb5a5eebc6c (bug 1488424) Backed out changeset d76dc6e3bbaa (bug 1507064) Backed out changeset 30d8f48aab99 (bug 1507080) Backed out changeset e6d88d9f73af (bug 1507080) Backed out changeset ee38ad38e9a1 (bug 1507549) Backed out changeset 0b2f80185614 (bug 1506919) Backed out changeset 0143d49ed65b (bug 1507660) Backed out changeset 2c739b93be1e (bug 1506716) Backed out changeset 0a4f3d45b0c5 (bug 1506716) Backed out changeset 81e2dcf84fb1 (bug 1506886) Backed out changeset 22f64d38d9c8 (bug 1505878) Backed out changeset 0475d6073c30 (bug 1505878) Backed out changeset 956ed95b791e (bug 1507374) Backed out changeset ac8170415338 (bug 1507600) Backed out changeset d7e0ada61934 (bug 1507345) Backed out changeset 6a730fb5a7e4 (bug 1507250) Backed out changeset 1e351d1c2022 (bug 1507250) Backed out changeset 031385cb5558 (bug 1507239) Backed out changeset 2fa696969cc2 (bug 1507239) Backed out changeset 9d55c7b68552 (bug 1507558) Backed out changeset 7385eaebb8e9 (bug 1507526) Backed out changeset d2ac36f03ef5 (bug 1506775) Backed out changeset b6ebdb6e8bf9 (bug 1507426) Backed out changeset 29ca75ba2433 (bug 1507341) Backed out changeset b5aa3737ca29 (bug 1497436) Backed out changeset f3cb0265f0c1 (bug 1497436) Backed out changeset f3f2d714b4eb (bug 1506994) Backed out changeset aa35cce4fb76 (bug 1507089) Backed out changeset 43cfc59879d2 (bug 1507089) Backed out changeset 8e13752959d6 (bug 1507122) Backed out changeset dfbc81d5e518 (bug 1507063) Backed out changeset 378d0c633eae (bug 1506697)
testing/web-platform/meta/content-security-policy/inside-worker/dedicated-inheritance.html.ini
testing/web-platform/meta/content-security-policy/inside-worker/dedicated-script.html.ini
testing/web-platform/meta/css/css-break/line-after-unbreakable-float-after-padding.html.ini
testing/web-platform/meta/css/css-logical/logical-values-float-clear-reftest.html.ini
testing/web-platform/meta/css/css-logical/logical-values-float-clear.html.ini
testing/web-platform/meta/css/css-logical/logical-values-resize.html.ini
testing/web-platform/meta/css/css-properties-values-api/var-reference-registered-properties.html.ini
testing/web-platform/meta/css/css-text/writing-system/writing-system-font-001.html.ini
testing/web-platform/meta/css/css-text/writing-system/writing-system-line-break-002.html.ini
testing/web-platform/meta/css/css-text/writing-system/writing-system-segment-break-001.html.ini
testing/web-platform/meta/css/css-text/writing-system/writing-system-text-transform-001.html.ini
testing/web-platform/meta/css/filter-effects/backdrop-filter-clip-rect.html.ini
testing/web-platform/meta/css/geometry/interfaces.html.ini
testing/web-platform/meta/css/geometry/interfaces.worker.js.ini
testing/web-platform/meta/css/selectors/invalidation/is.html.ini
testing/web-platform/meta/css/selectors/invalidation/matches.html.ini
testing/web-platform/meta/css/selectors/is-nested.html.ini
testing/web-platform/meta/css/selectors/is-specificity.html.ini
testing/web-platform/meta/css/selectors/matches-nested.html.ini
testing/web-platform/meta/css/selectors/matches-specificity.html.ini
testing/web-platform/meta/encoding/streams/backpressure.any.js.ini
testing/web-platform/meta/feature-policy/experimental-features/document-write.tentative.html.ini
testing/web-platform/meta/feature-policy/experimental-features/layout-animations-disabled-violation-report-js-tentative.html.ini
testing/web-platform/meta/feature-policy/experimental-features/layout-animations-disabled-violation-report-keyframes-tentative.html.ini
testing/web-platform/meta/feature-policy/experimental-features/lazyload/lazyload-disabled-image-tentative.sub.html.ini
testing/web-platform/meta/feature-policy/experimental-features/lazyload/lazyload-disabled-tentative.sub.html.ini
testing/web-platform/meta/feature-policy/experimental-features/lazyload/lazyload-enabled-image-tentative.sub.html.ini
testing/web-platform/meta/feature-policy/experimental-features/lazyload/lazyload-enabled-tentative.sub.html.ini
testing/web-platform/meta/feature-policy/experimental-features/lazyload/lazyload-image-attribute-on-sanity-check-tentative.sub.html.ini
testing/web-platform/meta/feature-policy/experimental-features/vertical-scroll-scrollintoview.tentative.html.ini
testing/web-platform/meta/feature-policy/reporting/camera-report-only.https.html.ini
testing/web-platform/meta/feature-policy/reporting/document-write-report-only.html.ini
testing/web-platform/meta/feature-policy/reporting/encrypted-media-report-only.https.html.ini
testing/web-platform/meta/feature-policy/reporting/fullscreen-report-only.html.ini
testing/web-platform/meta/feature-policy/reporting/generic-sensor-report-only.https.html.ini
testing/web-platform/meta/feature-policy/reporting/geolocation-report-only.https.html.ini
testing/web-platform/meta/feature-policy/reporting/geolocation-reporting.https.html.ini
testing/web-platform/meta/feature-policy/reporting/microphone-report-only.https.html.ini
testing/web-platform/meta/feature-policy/reporting/midi-report-only.html.ini
testing/web-platform/meta/feature-policy/reporting/payment-report-only.https.html.ini
testing/web-platform/meta/feature-policy/reporting/picture-in-picture-report-only.html.ini
testing/web-platform/meta/feature-policy/reporting/sync-xhr-report-only.html.ini
testing/web-platform/meta/feature-policy/reporting/usb-report-only.https.html.ini
testing/web-platform/meta/feature-policy/reporting/vr-report-only.https.html.ini
testing/web-platform/meta/feature-policy/reporting/xr-report-only.https.html.ini
testing/web-platform/meta/fetch/api/headers/headers-no-cors.window.js.ini
testing/web-platform/meta/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/no_window_open_when_term_nesting_level_nonzero.window.js.ini
testing/web-platform/meta/infrastructure/testdriver/actions/elementPosition.html.ini
testing/web-platform/meta/infrastructure/testdriver/actions/eventOrder.html.ini
testing/web-platform/meta/mozilla-sync
testing/web-platform/meta/service-workers/service-worker/navigation-redirect.https.html.ini
testing/web-platform/meta/service-workers/service-worker/registration-scope.https.html.ini
testing/web-platform/meta/service-workers/service-worker/registration-security-error.https.html.ini
testing/web-platform/meta/streams/transform-streams/brand-checks.sharedworker.html.ini
testing/web-platform/meta/streams/transform-streams/properties.sharedworker.html.ini
testing/web-platform/meta/streams/writable-streams/brand-checks.sharedworker.html.ini
testing/web-platform/meta/streams/writable-streams/properties.sharedworker.html.ini
testing/web-platform/meta/svg/painting/scripted/paint-order-computed-value-01.svg.ini
testing/web-platform/meta/user-timing/mark-measure-return-null.html.ini
testing/web-platform/meta/webrtc-quic/RTCQuicStream.https.html.ini
testing/web-platform/meta/webrtc-quic/RTCQuicTransport.https.html.ini
testing/web-platform/meta/webrtc/RTCQuicStream.https.html.ini
testing/web-platform/meta/webrtc/RTCQuicTransport.https.html.ini
testing/web-platform/tests/.taskcluster.yml
testing/web-platform/tests/.travis.yml
testing/web-platform/tests/IndexedDB/idbcursor_advance_index2.htm
testing/web-platform/tests/IndexedDB/idbcursor_advance_index3.htm
testing/web-platform/tests/IndexedDB/idbcursor_advance_index5.htm
testing/web-platform/tests/IndexedDB/idbcursor_continue_index5.htm
testing/web-platform/tests/IndexedDB/idbcursor_continue_index6.htm
testing/web-platform/tests/IndexedDB/idbcursor_continue_invalid.htm
testing/web-platform/tests/IndexedDB/idbcursor_iterating.htm
testing/web-platform/tests/IndexedDB/idbcursor_iterating_index.htm
testing/web-platform/tests/IndexedDB/idbcursor_iterating_index2.htm
testing/web-platform/tests/IndexedDB/idbcursor_iterating_objectstore.htm
testing/web-platform/tests/IndexedDB/idbcursor_iterating_objectstore2.htm
testing/web-platform/tests/IndexedDB/idbcursor_update_objectstore4.htm
testing/web-platform/tests/IndexedDB/idbdatabase_createObjectStore10-1000ends.htm
testing/web-platform/tests/IndexedDB/idbdatabase_createObjectStore7.htm
testing/web-platform/tests/IndexedDB/idbdatabase_deleteObjectStore4-not_reused.htm
testing/web-platform/tests/IndexedDB/idbdatabase_transaction4.htm
testing/web-platform/tests/IndexedDB/idbfactory_deleteDatabase3.htm
testing/web-platform/tests/IndexedDB/idbfactory_open10.htm
testing/web-platform/tests/IndexedDB/idbfactory_open11.htm
testing/web-platform/tests/IndexedDB/idbfactory_open12.htm
testing/web-platform/tests/IndexedDB/idbindex-multientry-arraykeypath.htm
testing/web-platform/tests/IndexedDB/idbindex-multientry-big.htm
testing/web-platform/tests/IndexedDB/idbindex-multientry.htm
testing/web-platform/tests/IndexedDB/idbindex_indexNames.htm
testing/web-platform/tests/IndexedDB/idbobjectstore_createIndex3-usable-right-away.htm
testing/web-platform/tests/IndexedDB/idbobjectstore_createIndex4-deleteIndex-event_order.htm
testing/web-platform/tests/IndexedDB/idbobjectstore_createIndex5-emptykeypath.htm
testing/web-platform/tests/IndexedDB/idbobjectstore_createIndex6-event_order.htm
testing/web-platform/tests/IndexedDB/idbobjectstore_createIndex7-event_order.htm
testing/web-platform/tests/IndexedDB/idbobjectstore_createIndex8-valid_keys.htm
testing/web-platform/tests/IndexedDB/idbobjectstore_deleted.htm
testing/web-platform/tests/IndexedDB/idbtransaction-oncomplete.htm
testing/web-platform/tests/IndexedDB/idbtransaction_abort.htm
testing/web-platform/tests/IndexedDB/idbversionchangeevent.htm
testing/web-platform/tests/IndexedDB/keygenerator-constrainterror.htm
testing/web-platform/tests/IndexedDB/keygenerator-overflow.htm
testing/web-platform/tests/IndexedDB/keyorder.htm
testing/web-platform/tests/IndexedDB/keypath_maxsize.htm
testing/web-platform/tests/IndexedDB/request_bubble-and-capture.htm
testing/web-platform/tests/IndexedDB/transaction-lifetime-blocked.htm
testing/web-platform/tests/IndexedDB/transaction-lifetime.htm
testing/web-platform/tests/IndexedDB/transaction-requestqueue.htm
testing/web-platform/tests/IndexedDB/transaction_bubble-and-capture.htm
testing/web-platform/tests/IndexedDB/writer-starvation.htm
testing/web-platform/tests/css/css-backgrounds/box-shadow-body.html
testing/web-platform/tests/css/css-backgrounds/reference/box-shadow-body-ref.html
testing/web-platform/tests/css/css-break/line-after-unbreakable-float-after-padding-ref.html
testing/web-platform/tests/css/css-break/line-after-unbreakable-float-after-padding.html
testing/web-platform/tests/css/css-flexbox/align-content-wrap-001.html
testing/web-platform/tests/css/css-flexbox/align-content-wrap-002.html
testing/web-platform/tests/css/css-flexbox/align-content-wrap-003.html
testing/web-platform/tests/css/css-flexbox/align-content-wrap-004.html
testing/web-platform/tests/css/css-grid/grid-model/grid-container-scrollbar-001-ref.html
testing/web-platform/tests/css/css-grid/grid-model/grid-container-scrollbar-001.html
testing/web-platform/tests/css/css-grid/grid-model/grid-container-scrollbar-vertical-lr-001-ref.html
testing/web-platform/tests/css/css-grid/grid-model/grid-container-scrollbar-vertical-lr-001.html
testing/web-platform/tests/css/css-grid/grid-model/grid-container-scrollbar-vertical-rl-001-ref.html
testing/web-platform/tests/css/css-grid/grid-model/grid-container-scrollbar-vertical-rl-001.html
testing/web-platform/tests/css/css-logical/animation-004.html
testing/web-platform/tests/css/css-logical/logical-values-float-clear-reftest.html
testing/web-platform/tests/css/css-logical/reference/logical-values-float-clear-reftest-ref.html
testing/web-platform/tests/css/css-logical/resources/test-logical-values.js
testing/web-platform/tests/css/css-properties-values-api/var-reference-registered-properties.html
testing/web-platform/tests/css/css-text/writing-system/reference/writing-system-font-001-ref.html
testing/web-platform/tests/css/css-text/writing-system/reference/writing-system-line-break-001-ref.html
testing/web-platform/tests/css/css-text/writing-system/reference/writing-system-line-break-002-ref.html
testing/web-platform/tests/css/css-text/writing-system/reference/writing-system-segment-break-001-ref.html
testing/web-platform/tests/css/css-text/writing-system/reference/writing-system-text-transform-001-ref.html
testing/web-platform/tests/css/css-text/writing-system/writing-system-font-001.html
testing/web-platform/tests/css/css-text/writing-system/writing-system-line-break-001.html
testing/web-platform/tests/css/css-text/writing-system/writing-system-line-break-002.html
testing/web-platform/tests/css/css-text/writing-system/writing-system-segment-break-001.html
testing/web-platform/tests/css/css-text/writing-system/writing-system-text-transform-001.html
testing/web-platform/tests/css/css-transforms/animation/resources/interpolation-testcommon.js
testing/web-platform/tests/css/filter-effects/backdrop-filter-basic-background-color.html
testing/web-platform/tests/css/filter-effects/backdrop-filter-basic-opacity.html
testing/web-platform/tests/css/filter-effects/backdrop-filter-basic.html
testing/web-platform/tests/css/filter-effects/backdrop-filter-border-radius.html
testing/web-platform/tests/css/filter-effects/backdrop-filter-clip-rect-ref.html
testing/web-platform/tests/css/filter-effects/backdrop-filter-clip-rect.html
testing/web-platform/tests/css/filter-effects/backdrop-filter-edge-pixels-ref.html
testing/web-platform/tests/css/filter-effects/backdrop-filter-edge-pixels.html
testing/web-platform/tests/css/filter-effects/backdrop-filter-isolation-isolate.html
testing/web-platform/tests/css/filter-effects/backdrop-filter-isolation.html
testing/web-platform/tests/css/filter-effects/backdrop-filter-paint-order-ref.html
testing/web-platform/tests/css/filter-effects/backdrop-filter-paint-order.html
testing/web-platform/tests/css/selectors/invalidation/is.html
testing/web-platform/tests/css/selectors/invalidation/matches.html
testing/web-platform/tests/css/selectors/invalidation/where.html
testing/web-platform/tests/css/selectors/is-nested.html
testing/web-platform/tests/css/selectors/is-specificity.html
testing/web-platform/tests/css/selectors/matches-nested.html
testing/web-platform/tests/css/selectors/matches-specificity.html
testing/web-platform/tests/css/support/computed-testcommon.js
testing/web-platform/tests/encoding/unsupported-encodings.any.js
testing/web-platform/tests/feature-policy/experimental-features/layout-animations-disabled-violation-report-js-tentative.html
testing/web-platform/tests/feature-policy/experimental-features/layout-animations-disabled-violation-report-js-tentative.html.headers
testing/web-platform/tests/feature-policy/experimental-features/layout-animations-disabled-violation-report-keyframes-tentative.html
testing/web-platform/tests/feature-policy/experimental-features/layout-animations-disabled-violation-report-keyframes-tentative.html.headers
testing/web-platform/tests/feature-policy/experimental-features/resources/animation-property-height.js
testing/web-platform/tests/feature-policy/experimental-features/resources/common.js
testing/web-platform/tests/feature-policy/reporting/camera-report-only.https.html
testing/web-platform/tests/feature-policy/reporting/camera-report-only.https.html.headers
testing/web-platform/tests/feature-policy/reporting/camera-reporting.https.html
testing/web-platform/tests/feature-policy/reporting/document-write-report-only.html
testing/web-platform/tests/feature-policy/reporting/document-write-report-only.html.headers
testing/web-platform/tests/feature-policy/reporting/document-write-reporting.html
testing/web-platform/tests/feature-policy/reporting/encrypted-media-report-only.https.html
testing/web-platform/tests/feature-policy/reporting/encrypted-media-report-only.https.html.headers
testing/web-platform/tests/feature-policy/reporting/encrypted-media-reporting.https.html
testing/web-platform/tests/feature-policy/reporting/fullscreen-report-only.html
testing/web-platform/tests/feature-policy/reporting/fullscreen-report-only.html.headers
testing/web-platform/tests/feature-policy/reporting/fullscreen-reporting.html
testing/web-platform/tests/feature-policy/reporting/generic-sensor-report-only.https.html
testing/web-platform/tests/feature-policy/reporting/generic-sensor-report-only.https.html.headers
testing/web-platform/tests/feature-policy/reporting/generic-sensor-reporting.https.html
testing/web-platform/tests/feature-policy/reporting/geolocation-report-only.https.html
testing/web-platform/tests/feature-policy/reporting/geolocation-report-only.https.html.headers
testing/web-platform/tests/feature-policy/reporting/geolocation-reporting.https.html
testing/web-platform/tests/feature-policy/reporting/microphone-report-only.https.html
testing/web-platform/tests/feature-policy/reporting/microphone-report-only.https.html.headers
testing/web-platform/tests/feature-policy/reporting/microphone-reporting.https.html
testing/web-platform/tests/feature-policy/reporting/midi-report-only.html
testing/web-platform/tests/feature-policy/reporting/midi-report-only.html.headers
testing/web-platform/tests/feature-policy/reporting/midi-reporting.html
testing/web-platform/tests/feature-policy/reporting/payment-report-only.https.html
testing/web-platform/tests/feature-policy/reporting/payment-report-only.https.html.headers
testing/web-platform/tests/feature-policy/reporting/payment-reporting.https.html
testing/web-platform/tests/feature-policy/reporting/picture-in-picture-report-only.html
testing/web-platform/tests/feature-policy/reporting/picture-in-picture-report-only.html.headers
testing/web-platform/tests/feature-policy/reporting/picture-in-picture-reporting.html
testing/web-platform/tests/feature-policy/reporting/sync-xhr-report-only.html
testing/web-platform/tests/feature-policy/reporting/sync-xhr-report-only.html.headers
testing/web-platform/tests/feature-policy/reporting/sync-xhr-reporting.html
testing/web-platform/tests/feature-policy/reporting/usb-report-only.https.html
testing/web-platform/tests/feature-policy/reporting/usb-report-only.https.html.headers
testing/web-platform/tests/feature-policy/reporting/usb-reporting.https.html
testing/web-platform/tests/feature-policy/reporting/vr-report-only.https.html
testing/web-platform/tests/feature-policy/reporting/vr-report-only.https.html.headers
testing/web-platform/tests/feature-policy/reporting/vr-reporting.https.html
testing/web-platform/tests/feature-policy/reporting/xr-report-only.https.html
testing/web-platform/tests/feature-policy/reporting/xr-report-only.https.html.headers
testing/web-platform/tests/feature-policy/reporting/xr-reporting.https.html
testing/web-platform/tests/fetch/api/headers/headers-no-cors.window.js
testing/web-platform/tests/fullscreen/rendering/fullscreen-css-transition.html
testing/web-platform/tests/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events-onerror.html
testing/web-platform/tests/infrastructure/metadata/infrastructure/testdriver/actions/elementPosition.html.ini
testing/web-platform/tests/infrastructure/metadata/infrastructure/testdriver/actions/eventOrder.html.ini
testing/web-platform/tests/infrastructure/testdriver/actions/elementPosition.html
testing/web-platform/tests/infrastructure/testdriver/actions/eventOrder.html
testing/web-platform/tests/interfaces/geometry.idl
testing/web-platform/tests/lint.whitelist
testing/web-platform/tests/longtask-timing/longtask-attributes.html
testing/web-platform/tests/longtask-timing/longtask-in-childiframe-crossorigin.html
testing/web-platform/tests/longtask-timing/longtask-in-childiframe.html
testing/web-platform/tests/longtask-timing/longtask-in-externalscript.html
testing/web-platform/tests/longtask-timing/longtask-in-parentiframe.html
testing/web-platform/tests/longtask-timing/longtask-in-raf.html
testing/web-platform/tests/longtask-timing/longtask-in-sibling-iframe-crossorigin.html
testing/web-platform/tests/longtask-timing/longtask-in-sibling-iframe.html
testing/web-platform/tests/pointerevents/pointerevent_pointermove-manual.html
testing/web-platform/tests/pointerevents/pointerevent_pointermove.html
testing/web-platform/tests/resources/test/tests/functional/worker-dedicated-uncaught-allow.html
testing/web-platform/tests/resources/test/tests/functional/worker-uncaught-allow.js
testing/web-platform/tests/resources/testdriver-actions.js
testing/web-platform/tests/resources/testdriver.js
testing/web-platform/tests/resources/testharness.js
testing/web-platform/tests/service-workers/service-worker/import-module-scripts.https.html
testing/web-platform/tests/service-workers/service-worker/navigation-redirect.https.html
testing/web-platform/tests/service-workers/service-worker/resources/redirect-worker.js
testing/web-platform/tests/service-workers/service-worker/resources/registration-tests-scope.js
testing/web-platform/tests/service-workers/service-worker/resources/registration-tests-security-error.js
testing/web-platform/tests/svg/geometry/parsing/cx-computed.svg
testing/web-platform/tests/svg/geometry/parsing/cy-computed.svg
testing/web-platform/tests/svg/geometry/parsing/r-computed.svg
testing/web-platform/tests/svg/geometry/parsing/rx-computed.svg
testing/web-platform/tests/svg/geometry/parsing/ry-computed.svg
testing/web-platform/tests/svg/geometry/parsing/x-computed.svg
testing/web-platform/tests/svg/geometry/parsing/y-computed.svg
testing/web-platform/tests/svg/interact/script-common.html
testing/web-platform/tests/svg/interact/script-content.svg
testing/web-platform/tests/svg/painting/parsing/stroke-width-invalid.svg
testing/web-platform/tests/svg/painting/parsing/stroke-width-valid.svg
testing/web-platform/tests/svg/painting/scripted/paint-order-computed-value-01.svg
testing/web-platform/tests/tools/wptrunner/wptrunner/browsers/fennec.py
testing/web-platform/tests/tools/wptserve/tests/test_stash.py
testing/web-platform/tests/tools/wptserve/wptserve/server.py
testing/web-platform/tests/tools/wptserve/wptserve/stash.py
testing/web-platform/tests/user-timing/mark-measure-return-null.html
testing/web-platform/tests/webrtc-quic/META.yml
testing/web-platform/tests/webrtc-quic/RTCQuicStream-helper.js
testing/web-platform/tests/webrtc-quic/RTCQuicStream.https.html
testing/web-platform/tests/webrtc-quic/RTCQuicTransport-helper.js
testing/web-platform/tests/webrtc-quic/RTCQuicTransport.https.html
testing/web-platform/tests/webrtc/RTCConfiguration-rtcpMuxPolicy.html
testing/web-platform/tests/webrtc/RTCPeerConnection-iceGatheringState.html
testing/web-platform/tests/webrtc/RTCPeerConnection-onnegotiationneeded.html
testing/web-platform/tests/webrtc/RTCPeerConnection-setLocalDescription-rollback.html
testing/web-platform/tests/webrtc/RTCPeerConnection-setRemoteDescription-offer.html
testing/web-platform/tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html
testing/web-platform/tests/webrtc/RTCQuicStream-helper.js
testing/web-platform/tests/webrtc/RTCQuicStream.https.html
testing/web-platform/tests/webrtc/RTCQuicTransport-helper.js
testing/web-platform/tests/webrtc/RTCQuicTransport.https.html
testing/web-platform/tests/worklets/resources/service-worker-interception-tests.js
--- a/testing/web-platform/meta/content-security-policy/inside-worker/dedicated-inheritance.html.ini
+++ b/testing/web-platform/meta/content-security-policy/inside-worker/dedicated-inheritance.html.ini
@@ -1,8 +1,8 @@
 [dedicated-inheritance.html]
-  expected: TIMEOUT
+  expected: ERROR
   [Same-origin 'fetch()' in http:?pipe=sub|header(Content-Security-Policy,connect-src%20%27none%27)]
     expected: FAIL
 
   [Same-origin XHR in http:?pipe=sub|header(Content-Security-Policy,connect-src%20%27none%27)]
     expected: FAIL
 
--- a/testing/web-platform/meta/content-security-policy/inside-worker/dedicated-script.html.ini
+++ b/testing/web-platform/meta/content-security-policy/inside-worker/dedicated-script.html.ini
@@ -1,10 +1,11 @@
 [dedicated-script.html]
-  expected: TIMEOUT
+  expected: ERROR
+
   [Cross-origin `importScripts()` blocked in http:]
     expected: FAIL
 
   [Cross-origin `importScripts()` blocked in http:?pipe=sub|header(Content-Security-Policy,script-src%20*)]
     expected: FAIL
 
   [Cross-origin `importScripts()` blocked in http:?pipe=sub|header(Content-Security-Policy,default-src%20*)]
     expected: FAIL
deleted file mode 100644
--- a/testing/web-platform/meta/css/css-break/line-after-unbreakable-float-after-padding.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[line-after-unbreakable-float-after-padding.html]
-  expected: FAIL
deleted file mode 100644
--- a/testing/web-platform/meta/css/css-logical/logical-values-float-clear-reftest.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[logical-values-float-clear-reftest.html]
-  expected: FAIL
deleted file mode 100644
--- a/testing/web-platform/meta/css/css-logical/logical-values-float-clear.html.ini
+++ /dev/null
@@ -1,13 +0,0 @@
-[logical-values-float-clear.html]
-  [Test that 'clear: inline-start' is supported.]
-    expected: FAIL
-
-  [Test that 'clear: inline-end' is supported.]
-    expected: FAIL
-
-  [Test that 'float: inline-start' is supported.]
-    expected: FAIL
-
-  [Test that 'float: inline-end' is supported.]
-    expected: FAIL
-
deleted file mode 100644
--- a/testing/web-platform/meta/css/css-logical/logical-values-resize.html.ini
+++ /dev/null
@@ -1,7 +0,0 @@
-[logical-values-resize.html]
-  [Test that 'resize: inline' is supported.]
-    expected: FAIL
-
-  [Test that 'resize: block' is supported.]
-    expected: FAIL
-
--- a/testing/web-platform/meta/css/css-properties-values-api/var-reference-registered-properties.html.ini
+++ b/testing/web-platform/meta/css/css-properties-values-api/var-reference-registered-properties.html.ini
@@ -18,26 +18,8 @@
     expected: FAIL
 
   [Font-relative units are absolutized when substituting]
     expected: FAIL
 
   [Lists with relative units are absolutized when substituting]
     expected: FAIL
 
-  [Valid fallback does not invalidate var()-reference [<length> | <color>, red\]]
-    expected: FAIL
-
-  [Valid fallback does not invalidate var()-reference [<length>, 10px\]]
-    expected: FAIL
-
-  [Invalid fallback invalidates var()-reference [<length>, red\]]
-    expected: FAIL
-
-  [Valid fallback does not invalidate var()-reference [<length> | none, none\]]
-    expected: FAIL
-
-  [Invalid fallback invalidates var()-reference [<length>, var(--novar)\]]
-    expected: FAIL
-
-  [Invalid fallback invalidates var()-reference [<length> | none, nolength\]]
-    expected: FAIL
-
deleted file mode 100644
--- a/testing/web-platform/meta/css/css-text/writing-system/writing-system-font-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[writing-system-font-001.html]
-  expected: FAIL
deleted file mode 100644
--- a/testing/web-platform/meta/css/css-text/writing-system/writing-system-line-break-002.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[writing-system-line-break-002.html]
-  expected: FAIL
deleted file mode 100644
--- a/testing/web-platform/meta/css/css-text/writing-system/writing-system-segment-break-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[writing-system-segment-break-001.html]
-  expected: FAIL
deleted file mode 100644
--- a/testing/web-platform/meta/css/css-text/writing-system/writing-system-text-transform-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[writing-system-text-transform-001.html]
-  expected: FAIL
deleted file mode 100644
--- a/testing/web-platform/meta/css/filter-effects/backdrop-filter-clip-rect.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[backdrop-filter-clip-rect.html]
-  expected: FAIL
--- a/testing/web-platform/meta/css/geometry/interfaces.html.ini
+++ b/testing/web-platform/meta/css/geometry/interfaces.html.ini
@@ -1107,11 +1107,8 @@
     expected: FAIL
 
   [DOMMatrixReadOnly interface: DOMMatrix.fromMatrix({is2D: false}) must inherit property "toFloat32Array()" with the proper type]
     expected: FAIL
 
   [DOMMatrixReadOnly interface: DOMMatrix.fromMatrix({is2D: false}) must inherit property "toFloat64Array()" with the proper type]
     expected: FAIL
 
-  [DOMMatrixReadOnly interface: operation scaleNonUniform(unrestricted double, unrestricted double)]
-    expected: FAIL
-
--- a/testing/web-platform/meta/css/geometry/interfaces.worker.js.ini
+++ b/testing/web-platform/meta/css/geometry/interfaces.worker.js.ini
@@ -2710,17 +2710,8 @@
     expected: FAIL
 
   [DOMQuad interface: new DOMQuad() must inherit property "toJSON()" with the proper type]
     expected: FAIL
 
   [Test default toJSON operation of toJSON object]
     expected: FAIL
 
-  [DOMMatrixReadOnly interface: calling scaleNonUniform(unrestricted double, unrestricted double) on new DOMMatrixReadOnly() with too few arguments must throw TypeError]
-    expected: FAIL
-
-  [DOMMatrixReadOnly interface: new DOMMatrixReadOnly() must inherit property "scaleNonUniform(unrestricted double, unrestricted double)" with the proper type]
-    expected: FAIL
-
-  [DOMMatrixReadOnly interface: operation scaleNonUniform(unrestricted double, unrestricted double)]
-    expected: FAIL
-
deleted file mode 100644
--- a/testing/web-platform/meta/css/selectors/invalidation/is.html.ini
+++ /dev/null
@@ -1,16 +0,0 @@
-[is.html]
-  [Invalidate :is() for compound selector arguments.]
-    expected: FAIL
-
-  [Test specificity of :is().]
-    expected: FAIL
-
-  [Invalidate :is() for complex selector arguments.]
-    expected: FAIL
-
-  [Invalidate :is() for simple selector arguments.]
-    expected: FAIL
-
-  [Invalidate nested :is().]
-    expected: FAIL
-
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/matches.html.ini
@@ -0,0 +1,16 @@
+[matches.html]
+  [Invalidate :matches() for simple selector arguments.]
+    expected: FAIL
+
+  [Invalidate :matches() for compound selector arguments.]
+    expected: FAIL
+
+  [Invalidate :matches() for complex selector arguments.]
+    expected: FAIL
+
+  [Invalidate nested :matches().]
+    expected: FAIL
+
+  [Test specificity of :matches().]
+    expected: FAIL
+
deleted file mode 100644
--- a/testing/web-platform/meta/css/selectors/is-nested.html.ini
+++ /dev/null
@@ -1,7 +0,0 @@
-[is-nested.html]
-  [Test nested :is() chooses highest specificity for class outside :is().]
-    expected: FAIL
-
-  [Test nested :is() specificity for class within arguments.]
-    expected: FAIL
-
deleted file mode 100644
--- a/testing/web-platform/meta/css/selectors/is-specificity.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[is-specificity.html]
-  [Test :is() uses highest possible specificity]
-    expected: FAIL
-
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/matches-nested.html.ini
@@ -0,0 +1,7 @@
+[matches-nested.html]
+  [Test nested :matches() chooses highest specificity for class outside :matches().]
+    expected: FAIL
+
+  [Test nested :matches() specificity for class within arguments.]
+    expected: FAIL
+
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/matches-specificity.html.ini
@@ -0,0 +1,4 @@
+[matches-specificity.html]
+  [Test :matches() uses highest possible specificity]
+    expected: FAIL
+
--- a/testing/web-platform/meta/encoding/streams/backpressure.any.js.ini
+++ b/testing/web-platform/meta/encoding/streams/backpressure.any.js.ini
@@ -7,12 +7,12 @@
   expected: TIMEOUT
 
 [backpressure.any.worker.html]
   [backpressure]
     expected: FAIL
 
 
 [backpressure.any.sharedworker.html]
-  expected: TIMEOUT
+  expected: ERROR
 
 [backpressure.any.serviceworker.html]
   expected: TIMEOUT
--- a/testing/web-platform/meta/feature-policy/experimental-features/document-write.tentative.html.ini
+++ b/testing/web-platform/meta/feature-policy/experimental-features/document-write.tentative.html.ini
@@ -6,11 +6,8 @@
     expected: FAIL
 
   [Verify 'document.write' is blocked when the feature is disabled.]
     expected: FAIL
 
   [Verify 'document.writeln' is blocked when the feature is disabled.]
     expected: FAIL
 
-  ['document-write' tests]
-    expected: FAIL
-
deleted file mode 100644
--- a/testing/web-platform/meta/feature-policy/experimental-features/layout-animations-disabled-violation-report-js-tentative.html.ini
+++ /dev/null
@@ -1,11 +0,0 @@
-[layout-animations-disabled-violation-report-js-tentative.html]
-  expected: TIMEOUT
-  [layout-animations-disabled-violation-report-js-tentative]
-    expected: FAIL
-
-  [Verify that when 'layout-animations' is disabled, an 'element.animate' API including a keyframe that uses a blocked property generates violation report (linked scripts).]
-    expected: TIMEOUT
-
-  [Verify that when 'layout-animations' is disabled, an 'element.animate' API including a keyframe that uses a blocked property generates violation report (inline scripts).]
-    expected: NOTRUN
-
deleted file mode 100644
--- a/testing/web-platform/meta/feature-policy/experimental-features/layout-animations-disabled-violation-report-keyframes-tentative.html.ini
+++ /dev/null
@@ -1,8 +0,0 @@
-[layout-animations-disabled-violation-report-keyframes-tentative.html]
-  expected: TIMEOUT
-  [layout-animations-disabled-violation-report-keyframes-tentative]
-    expected: FAIL
-
-  [Verify that when 'layout-animations' is disabled, a keyframes which includes a blocked property generates violation report.]
-    expected: TIMEOUT
-
deleted file mode 100644
--- a/testing/web-platform/meta/feature-policy/experimental-features/lazyload/lazyload-disabled-image-tentative.sub.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[lazyload-disabled-image-tentative.sub.html]
-  [Verify behavior of 'lazyload' attribute state 'OFF' when the feature policy 'lazyload' is\n       disabled.\n]
-    expected: FAIL
-
--- a/testing/web-platform/meta/feature-policy/experimental-features/lazyload/lazyload-disabled-tentative.sub.html.ini
+++ b/testing/web-platform/meta/feature-policy/experimental-features/lazyload/lazyload-disabled-tentative.sub.html.ini
@@ -5,11 +5,8 @@
   [When 'lazyload' feature is disabled, a frame cannot avoid lazyloading by setting 'lazyload' attribute to 'off']
     expected:
       if not debug and not webrender and e10s and (os == "linux") and (version == "Ubuntu 16.04") and (processor == "x86") and (bits == 32): PASS
       if debug and not webrender and e10s and (os == "linux") and (version == "Ubuntu 16.04") and (processor == "x86") and (bits == 32): PASS
       if debug and not webrender and not e10s and (os == "linux") and (version == "Ubuntu 16.04") and (processor == "x86") and (bits == 32): PASS
       if debug and not webrender and e10s and (os == "linux") and (version == "Ubuntu 16.04") and (processor == "x86_64") and (bits == 64): PASS
       if not debug and not webrender and e10s and (os == "linux") and (version == "Ubuntu 16.04") and (processor == "x86_64") and (bits == 64): PASS
 
-  [lazyload-disabled-tentative]
-    expected: FAIL
-
deleted file mode 100644
--- a/testing/web-platform/meta/feature-policy/experimental-features/lazyload/lazyload-enabled-image-tentative.sub.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[lazyload-enabled-image-tentative.sub.html]
-  [Verify behavior of 'lazyload' attribute state 'OFF' when the feature policy 'lazyload' is\n       enabled.\n]
-    expected: FAIL
-
--- a/testing/web-platform/meta/feature-policy/experimental-features/lazyload/lazyload-enabled-tentative.sub.html.ini
+++ b/testing/web-platform/meta/feature-policy/experimental-features/lazyload/lazyload-enabled-tentative.sub.html.ini
@@ -1,7 +1,4 @@
 [lazyload-enabled-tentative.sub.html]
   [Sanity-check: Contents do not load immediately (no eager-loading) when the lazyload attribute is 'on' and frame is in viewport.]
     expected: FAIL
 
-  [lazyload-enabled-tentative]
-    expected: FAIL
-
--- a/testing/web-platform/meta/feature-policy/experimental-features/lazyload/lazyload-image-attribute-on-sanity-check-tentative.sub.html.ini
+++ b/testing/web-platform/meta/feature-policy/experimental-features/lazyload/lazyload-image-attribute-on-sanity-check-tentative.sub.html.ini
@@ -1,7 +1,4 @@
 [lazyload-image-attribute-on-sanity-check-tentative.sub.html]
   [Verify 'lazyload' attribute state 'on' works as expected: image loads only when in viewport.]
     expected: FAIL
 
-  [Verify behavior of 'lazyload' attribute state 'ON' (sanity-check for lazyload policy tests).\n]
-    expected: FAIL
-
--- a/testing/web-platform/meta/feature-policy/experimental-features/vertical-scroll-scrollintoview.tentative.html.ini
+++ b/testing/web-platform/meta/feature-policy/experimental-features/vertical-scroll-scrollintoview.tentative.html.ini
@@ -1,7 +1,4 @@
 [vertical-scroll-scrollintoview.tentative.html]
   [Calling 'scrollIntoView()' inside a <iframe> with 'vertical-scroll none;'will not propagate upwards.]
     expected: FAIL
 
-  [vertical-scroll-scrollintoview]
-    expected: FAIL
-
deleted file mode 100644
--- a/testing/web-platform/meta/feature-policy/reporting/camera-report-only.https.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[camera-report-only.https.html]
-  expected: TIMEOUT
-  [Camera report only mode]
-    expected: TIMEOUT
-
deleted file mode 100644
--- a/testing/web-platform/meta/feature-policy/reporting/document-write-report-only.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[document-write-report-only.html]
-  expected: TIMEOUT
-  [Document-write report only mode]
-    expected: TIMEOUT
-
deleted file mode 100644
--- a/testing/web-platform/meta/feature-policy/reporting/encrypted-media-report-only.https.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[encrypted-media-report-only.https.html]
-  expected: TIMEOUT
-  [Encrypted Media report only mode]
-    expected: TIMEOUT
-
deleted file mode 100644
--- a/testing/web-platform/meta/feature-policy/reporting/fullscreen-report-only.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[fullscreen-report-only.html]
-  [Fullscreen report only mode]
-    expected: FAIL
-
deleted file mode 100644
--- a/testing/web-platform/meta/feature-policy/reporting/generic-sensor-report-only.https.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[generic-sensor-report-only.https.html]
-  [Generic Sensor report only mode]
-    expected: FAIL
-
deleted file mode 100644
--- a/testing/web-platform/meta/feature-policy/reporting/geolocation-report-only.https.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[geolocation-report-only.https.html]
-  expected: TIMEOUT
-  [Geolocation report only mode]
-    expected: TIMEOUT
-
deleted file mode 100644
--- a/testing/web-platform/meta/feature-policy/reporting/geolocation-reporting.https.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[geolocation-reporting.https.html]
-  [Geolocation Report Format]
-    expected: FAIL
-
deleted file mode 100644
--- a/testing/web-platform/meta/feature-policy/reporting/microphone-report-only.https.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[microphone-report-only.https.html]
-  expected: TIMEOUT
-  [Microphone report only mode]
-    expected: TIMEOUT
-
deleted file mode 100644
--- a/testing/web-platform/meta/feature-policy/reporting/midi-report-only.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[midi-report-only.html]
-  expected: TIMEOUT
-  [MIDI report only mode]
-    expected: TIMEOUT
-
deleted file mode 100644
--- a/testing/web-platform/meta/feature-policy/reporting/payment-report-only.https.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[payment-report-only.https.html]
-  expected: TIMEOUT
-  [PaymentRequest report only mode]
-    expected: TIMEOUT
-
deleted file mode 100644
--- a/testing/web-platform/meta/feature-policy/reporting/picture-in-picture-report-only.html.ini
+++ /dev/null
@@ -1,7 +0,0 @@
-[picture-in-picture-report-only.html]
-  [Picture-in-Picture Report Format]
-    expected: FAIL
-
-  [Picture-in-Picture report only mode]
-    expected: FAIL
-
deleted file mode 100644
--- a/testing/web-platform/meta/feature-policy/reporting/sync-xhr-report-only.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[sync-xhr-report-only.html]
-  expected: TIMEOUT
-  [Sync-xhr report only mode]
-    expected: TIMEOUT
-
deleted file mode 100644
--- a/testing/web-platform/meta/feature-policy/reporting/usb-report-only.https.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[usb-report-only.https.html]
-  [USB report only mode]
-    expected: FAIL
-
deleted file mode 100644
--- a/testing/web-platform/meta/feature-policy/reporting/vr-report-only.https.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[vr-report-only.https.html]
-  expected: TIMEOUT
-  [VR report only mode]
-    expected: TIMEOUT
-
deleted file mode 100644
--- a/testing/web-platform/meta/feature-policy/reporting/xr-report-only.https.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[xr-report-only.https.html]
-  [XR report only mode]
-    expected: FAIL
-
deleted file mode 100644
--- a/testing/web-platform/meta/fetch/api/headers/headers-no-cors.window.js.ini
+++ /dev/null
@@ -1,13 +0,0 @@
-[headers-no-cors.window.html]
-  ["no-cors" Headers object cannot have content-type set to text/plain;ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss, text/plain]
-    expected: FAIL
-
-  ["no-cors" Headers object cannot have accept set to sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss, , sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss]
-    expected: FAIL
-
-  ["no-cors" Headers object cannot have accept-language set to sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss, , sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss]
-    expected: FAIL
-
-  ["no-cors" Headers object cannot have content-language set to sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss, , sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss]
-    expected: FAIL
-
--- a/testing/web-platform/meta/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/no_window_open_when_term_nesting_level_nonzero.window.js.ini
+++ b/testing/web-platform/meta/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/no_window_open_when_term_nesting_level_nonzero.window.js.ini
@@ -1,12 +1,10 @@
 [no_window_open_when_term_nesting_level_nonzero.window.html]
-  expected:
-    if not debug and webrender and e10s and (os == "linux") and (version == "Ubuntu 16.04") and (processor == "x86_64") and (bits == 64): TIMEOUT
-    ERROR
+  expected: ERROR
   [no popups from synchronously reachable window]
     expected: FAIL
 
   [no popups with frame navigation]
     expected: FAIL
 
   [no popups from another synchronously reachable window]
     expected:
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/infrastructure/testdriver/actions/elementPosition.html.ini
@@ -0,0 +1,4 @@
+[elementPosition.html]
+  [TestDriver actions: element position]
+    expected: FAIL
+
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/infrastructure/testdriver/actions/eventOrder.html.ini
@@ -0,0 +1,4 @@
+[eventOrder.html]
+  [TestDriver actions: event order]
+    expected: FAIL
+
--- a/testing/web-platform/meta/mozilla-sync
+++ b/testing/web-platform/meta/mozilla-sync
@@ -1,2 +1,2 @@
-local: 914b3450164f0ecd5e9cd15076c347464515fd9f
-upstream: be998ebbfc08085f18c1f9ed8d22c52b03134167
+local: d0e41ff8b7f9992909a01a87a86e1b7110c434cd
+upstream: f082fd63300fec7b6201cf5e0eaf0944ee7ccb6e
--- a/testing/web-platform/meta/service-workers/service-worker/navigation-redirect.https.html.ini
+++ b/testing/web-platform/meta/service-workers/service-worker/navigation-redirect.https.html.ini
@@ -1,27 +1,114 @@
 [navigation-redirect.https.html]
   [Service Worker: Navigation redirection]
     expected: FAIL
 
 
 [navigation-redirect.https.html?client]
+  [Redirect to other-origin in-scope with opaque redirect response which is passed through Cache.]
+    expected: FAIL
+
+  [SW-fetched redirect to other-origin in-scope.]
+    expected: FAIL
+
+  [SW-generated redirect to same-origin other-scope.]
+    expected: FAIL
+
+  [SW-fallbacked redirect to other-origin and back to same-origin.]
+    expected: FAIL
+
+  [Redirect to other-origin out-scope with opaque redirect response.]
+    expected: FAIL
+
+  [No location redirect response via Cache.]
+    expected: FAIL
+
+  [Normal redirect to same-origin scope.]
+    expected: FAIL
+
+  [SW-generated redirect to other-origin in-scope.]
+    expected: FAIL
+
+  [Normal redirect to same-origin scope with different hash fragments.]
+    expected: FAIL
+
+  [Redirect to same-origin same-scope with opaque redirect response.]
+    expected: FAIL
+
+  [SW-fallbacked redirect to same-origin same-scope with different hash fragments.]
+    expected: FAIL
+
   [Redirect to same-origin out-scope with opaque redirect response.]
     expected: FAIL
 
+  [SW-fallbacked redirect to same-origin other-scope.]
+    expected: FAIL
+
+  [SW-fallbacked redirect to same-origin same-scope with a hash fragment.]
+    expected: FAIL
+
+  [SW-generated redirect to other-origin out-scope.]
+    expected: FAIL
+
   [SW-generated redirect to same-origin out-scope with different hash fragments.]
     expected: FAIL
 
   [Redirect to same-origin out-scope with opaque redirect response which is passed through Cache.]
     expected: FAIL
 
   [SW-generated redirect to same-origin out-scope.]
     expected: FAIL
 
+  [Redirect to other-origin out-scope with opaque redirect response which is passed through Cache.]
+    expected: FAIL
+
+  [No location redirect response.]
+    expected: FAIL
+
   [SW-fallbacked redirect to same-origin out-scope.]
     expected: FAIL
 
+  [Normal redirect to same-origin scope with a hash fragment.]
+    expected: FAIL
+
+  [Normal redirect to other-origin scope.]
+    expected: FAIL
+
+  [Redirect to same-origin same-scope with opaque redirect response which is passed through Cache.]
+    expected: FAIL
+
+  [Redirect to same-origin other-scope with opaque redirect response.]
+    expected: FAIL
+
+  [SW-fallbacked redirect to same-origin same-scope.]
+    expected: FAIL
+
+  [SW-fallbacked redirect to other-origin out-scope.]
+    expected: FAIL
+
+  [SW-fallbacked redirect to other-origin in-scope.]
+    expected: FAIL
+
+  [SW-fetched redirect to same-origin same-scope.]
+    expected: FAIL
+
+  [Redirect to other-origin in-scope with opaque redirect response.]
+    expected: FAIL
+
+  [SW-generated redirect to same-origin same-scope.]
+    expected: FAIL
+
+  [SW-fetched redirect to same-origin other-scope.]
+    expected: FAIL
+
   [SW-fetched redirect to same-origin out-scope.]
     expected: FAIL
 
   [SW-generated redirect to same-origin out-scope with a hash fragment.]
     expected: FAIL
 
+  [SW-fetched redirect to other-origin out-scope.]
+    expected: FAIL
+
+  [Redirect to same-origin other-scope with opaque redirect response which is passed through Cache.]
+    expected: FAIL
+
deleted file mode 100644
--- a/testing/web-platform/meta/service-workers/service-worker/registration-scope.https.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[registration-scope.https.html]
-  [Scope URL is same-origin filesystem: URL]
-    expected: FAIL
-
deleted file mode 100644
--- a/testing/web-platform/meta/service-workers/service-worker/registration-security-error.https.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[registration-security-error.https.html]
-  [Script URL is same-origin filesystem: URL]
-    expected: FAIL
-
--- a/testing/web-platform/meta/streams/transform-streams/brand-checks.sharedworker.html.ini
+++ b/testing/web-platform/meta/streams/transform-streams/brand-checks.sharedworker.html.ini
@@ -1,2 +1,2 @@
 [brand-checks.sharedworker.html]
-  expected: TIMEOUT
+  expected: ERROR
--- a/testing/web-platform/meta/streams/transform-streams/properties.sharedworker.html.ini
+++ b/testing/web-platform/meta/streams/transform-streams/properties.sharedworker.html.ini
@@ -1,2 +1,2 @@
 [properties.sharedworker.html]
-  expected: TIMEOUT
+  expected: ERROR
--- a/testing/web-platform/meta/streams/writable-streams/brand-checks.sharedworker.html.ini
+++ b/testing/web-platform/meta/streams/writable-streams/brand-checks.sharedworker.html.ini
@@ -1,2 +1,2 @@
 [brand-checks.sharedworker.html]
-  expected: TIMEOUT
+  expected: ERROR
--- a/testing/web-platform/meta/streams/writable-streams/properties.sharedworker.html.ini
+++ b/testing/web-platform/meta/streams/writable-streams/properties.sharedworker.html.ini
@@ -1,2 +1,2 @@
 [properties.sharedworker.html]
-  expected: TIMEOUT
+  expected: ERROR
deleted file mode 100644
--- a/testing/web-platform/meta/svg/painting/scripted/paint-order-computed-value-01.svg.ini
+++ /dev/null
@@ -1,19 +0,0 @@
-[paint-order-computed-value-01.svg]
-  ['paint-order' computed style serialization, "stroke fill" => "stroke" (presentation attribute)]
-    expected: FAIL
-
-  ['paint-order' computed style serialization, "markers fill" => "markers" (presentation attribute)]
-    expected: FAIL
-
-  ['paint-order' computed style serialization, "fill stroke" => "fill" (presentation attribute)]
-    expected: FAIL
-
-  ['paint-order' computed style serialization, "markers fill" => "markers" (property)]
-    expected: FAIL
-
-  ['paint-order' computed style serialization, "fill stroke" => "fill" (property)]
-    expected: FAIL
-
-  ['paint-order' computed style serialization, "stroke fill" => "stroke" (property)]
-    expected: FAIL
-
deleted file mode 100644
--- a/testing/web-platform/meta/user-timing/mark-measure-return-null.html.ini
+++ /dev/null
@@ -1,16 +0,0 @@
-[mark-measure-return-null.html]
-  [L2: performance.measure(name) should return null.]
-    expected: FAIL
-
-  [L2: performance.mark(name) should return null.]
-    expected: FAIL
-
-  [L2: performance.measure(name, param1, param2) should return null.]
-    expected: FAIL
-
-  [L2: performance.measure(name, param1) should return null.]
-    expected: FAIL
-
-  [L2: performance.mark(name, param) should return null.]
-    expected: FAIL
-
deleted file mode 100644
--- a/testing/web-platform/meta/webrtc-quic/RTCQuicStream.https.html.ini
+++ /dev/null
@@ -1,115 +0,0 @@
-[RTCQuicStream.https.html]
-  [Stream closed by local RTCQuicTransport stop(): waitForWriteBufferedBelow() rejects with InvalidStateError.]
-    expected: FAIL
-
-  [RTCQuicTransport.stop() closes all remote streams.]
-    expected: FAIL
-
-  [Stream closed by remote RTCQuicTransport stop(): readInto() throws InvalidStateError.]
-    expected: FAIL
-
-  [Stream closed by local reset(): write() throws InvalidStateError.]
-    expected: FAIL
-
-  [createStream() returns an RTCQuicStream with initial properties set.]
-    expected: FAIL
-
-  [finish() changes state to 'closing'.]
-    expected: FAIL
-
-  [Stream closed by local reset(): waitForWriteBufferedBelow() rejects with InvalidStateError.]
-    expected: FAIL
-
-  [Stream closed by local reset(): readInto() throws InvalidStateError.]
-    expected: FAIL
-
-  [write() throws if data longer than maxWriteBufferedAmount.]
-    expected: FAIL
-
-  [readInto() on new local stream returns amount 0.]
-    expected: FAIL
-
-  [Stream closed by remote reset(): readInto() throws InvalidStateError.]
-    expected: FAIL
-
-  [createStream() throws if the transport is closed.]
-    expected: FAIL
-
-  [Pending waitForWriteBufferedAmountBelow() promises rejected after reset().]
-    expected: FAIL
-
-  [RTCQuicTransport.stop() closes all local streams.]
-    expected: FAIL
-
-  [Stream closed by remote RTCQuicTransport stop(): waitForWriteBufferedBelow() rejects with InvalidStateError.]
-    expected: FAIL
-
-  [Stream closed by remote reset(): waitForWriteBufferedBelow() rejects with InvalidStateError.]
-    expected: FAIL
-
-  [write() throws if total write buffered amount would be greater than maxWriteBufferedAmount.]
-    expected: FAIL
-
-  [reset() following finish() changes state to 'closed'.]
-    expected: FAIL
-
-  [writeBufferedAmount set to 0 after local RTCQuicTransport stop().]
-    expected: FAIL
-
-  [write() can write exactly maxWriteBufferedAmount.]
-    expected: FAIL
-
-  [waitForWriteBufferedAmountBelow(maxWriteBufferedAmount) resolves immediately.]
-    expected: FAIL
-
-  [write() adds to writeBufferedAmount each call.]
-    expected: FAIL
-
-  [Stream closed by remote reset(): write() throws InvalidStateError.]
-    expected: FAIL
-
-  [createStream() throws if the transport is not connected.]
-    expected: FAIL
-
-  [finish() causes quicstream event to fire on the remote transport.]
-    expected: FAIL
-
-  [writeBufferedAmount maintained after finish() has been called.]
-    expected: FAIL
-
-  [waitForWriteBufferedAmountBelow(0) resolves immediately.]
-    expected: FAIL
-
-  [Stream closed by local RTCQuicTransport stop(): readInto() throws InvalidStateError.]
-    expected: FAIL
-
-  [write() with an empty array does nothing.]
-    expected: FAIL
-
-  [finish() twice does not change state.]
-    expected: FAIL
-
-  [Stream closed by local RTCQuicTransport stop(): write() throws InvalidStateError.]
-    expected: FAIL
-
-  [write() throws InvalidStateError if finish() has been called.]
-    expected: FAIL
-
-  [Pending waitForWriteBufferedAmountBelow() promises rejected after finish().]
-    expected: FAIL
-
-  [write() causes quicstream event to fire on the remote transport.]
-    expected: FAIL
-
-  [reset() changes state to 'closed'.]
-    expected: FAIL
-
-  [Stream closed by remote RTCQuicTransport stop(): write() throws InvalidStateError.]
-    expected: FAIL
-
-  [createStream() followed by reset() fires a quicstream event followed by a statechange event to 'closed' on the remote side.]
-    expected: FAIL
-
-  [writeBufferedAmount set to 0 after local reset().]
-    expected: FAIL
-
deleted file mode 100644
--- a/testing/web-platform/meta/webrtc-quic/RTCQuicTransport.https.html.ini
+++ /dev/null
@@ -1,49 +0,0 @@
-[RTCQuicTransport.https.html]
-  [start() with a non-started RTCIceTransport does not change state.]
-    expected: FAIL
-
-  [RTCIceTransport.stop() changes RTCQuicTransport.state to 'closed'.]
-    expected: FAIL
-
-  [getCertificates() returns the certificates passed in the constructor.]
-    expected: FAIL
-
-  [start() throws if called after the RTCIceTransport has stopped.]
-    expected: FAIL
-
-  [RTCQuicTransport initial properties are set.]
-    expected: FAIL
-
-  [RTCQuicTransport constructor throws if passed a closed RTCIceTransport.]
-    expected: FAIL
-
-  [RTCQuicTransport constructor throws if passed an expired certificate.]
-    expected: FAIL
-
-  [Two RTCQuicTransports connect to each other.]
-    expected: FAIL
-
-  [getLocalParameters() has fingerprints for all certificates passed in the constructor.]
-    expected: FAIL
-
-  [start() throws if called after stop().]
-    expected: FAIL
-
-  [stop() fires a statechange event to 'closed' on the remote transport]
-    expected: FAIL
-
-  [start() throws if called twice.]
-    expected: FAIL
-
-  [RTCQuicTransport constructor throws if passed an RTCIceTransport that already has an active RTCQuicTransport.]
-    expected: FAIL
-
-  [start() with a started RTCIceTransport changes state to 'connecting'.]
-    expected: FAIL
-
-  [stop() changes state to 'closed'.]
-    expected: FAIL
-
-  [start() with a non-started RTCIceTransport later changes state to 'connecting' once the RTCIceTransport.start() is called.]
-    expected: FAIL
-
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/webrtc/RTCQuicStream.https.html.ini
@@ -0,0 +1,109 @@
+[RTCQuicStream.https.html]
+  [RTCQuicTransport.stop() closes all streams.]
+    expected: FAIL
+
+  [createStream() returns an RTCQuicStream with initial properties set.]
+    expected: FAIL
+
+  [createStream() throws if the transport is closed.]
+    expected: FAIL
+
+  [RTCQuicTransport.stop() closes all local streams.]
+    expected: FAIL
+
+  [createStream() followed by finish() fires a quicstream event followed by a statechange event to 'closing' on the remote side.]
+    expected: FAIL
+
+  [reset() following finish() changes state to 'closed'.]
+    expected: FAIL
+
+  [finish() changes state to 'closing'.]
+    expected: FAIL
+
+  [reset() changes state to 'closed'.]
+    expected: FAIL
+
+  [finish() twice does not change state.]
+    expected: FAIL
+
+  [RTCQuicTransport.stop() closes all remote streams.]
+    expected: FAIL
+
+  [createStream() throws if the transport is not connected.]
+    expected: FAIL
+
+  [finish() on a remote stream that has already finished fires a statechange event to 'closed' on the remote side.]
+    expected: FAIL
+
+  [createStream() followed by reset() fires a quicstream event followed by a statechange event to 'closed' on the remote side.]
+    expected: FAIL
+
+  [finish() then reset() fires two statechange events on the remote side.]
+    expected: FAIL
+
+  [write() throws if data longer than maxWriteBufferedAmount.]
+    expected: FAIL
+
+  [write() throws if total write buffered amount would be greater than maxWriteBufferedAmount.]
+    expected: FAIL
+
+  [write() can write exactly maxWriteBufferedAmount.]
+    expected: FAIL
+
+  [write() adds to writeBufferedAmount each call.]
+    expected: FAIL
+
+  [write() throws if the stream was reset locally.]
+    expected: FAIL
+
+  [RTCQuicTransport.stop() sets stream writeBufferedAmount to 0.]
+    expected: FAIL
+
+  [reset() sets writeBufferedAmount to 0.]
+    expected: FAIL
+
+  [write() with an empty array does nothing.]
+    expected: FAIL
+
+  [write() throws if finish() has been called.]
+    expected: FAIL
+
+  [write() throws IllegalStateError if finish() has been called.]
+    expected: FAIL
+
+  [Stream closed by local reset(): write() throws InvalidStateError.]
+    expected: FAIL
+
+  [Stream closed by remote RTCQuicTransport stop(): writeBufferedAmount is 0.]
+    expected: FAIL
+
+  [Stream closed by remote reset(): write() throws InvalidStateError.]
+    expected: FAIL
+
+  [Stream closed by local reset(): writeBufferedAmount is 0.]
+    expected: FAIL
+
+  [Stream closed by local RTCQuicTransport stop(): write() throws InvalidStateError.]
+    expected: FAIL
+
+  [Stream closed by remote reset(): writeBufferedAmount is 0.]
+    expected: FAIL
+
+  [Stream closed by local RTCQuicTransport stop(): writeBufferedAmount is 0.]
+    expected: FAIL
+
+  [Stream closed by remote RTCQuicTransport stop(): write() throws InvalidStateError.]
+    expected: FAIL
+
+  [writeBufferedAmount maintained after finish() has been called.]
+    expected: FAIL
+
+  [writeBufferedAmount set to 0 after local reset().]
+    expected: FAIL
+
+  [write() throws InvalidStateError if finish() has been called.]
+    expected: FAIL
+
+  [writeBufferedAmount set to 0 after local RTCQuicTransport stop().]
+    expected: FAIL
+
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/webrtc/RTCQuicTransport.https.html.ini
@@ -0,0 +1,49 @@
+[RTCQuicTransport.https.html]
+  [getCertificates() returns the certificates passed in the constructor.]
+    expected: FAIL
+
+  [RTCQuicTransport initial properties are set.]
+    expected: FAIL
+
+  [RTCQuicTransport constructor throws if passed a closed RTCIceTransport.]
+    expected: FAIL
+
+  [RTCQuicTransport constructor throws if passed an expired certificate.]
+    expected: FAIL
+
+  [getLocalParameters() has fingerprints for all certificates passed in the constructor.]
+    expected: FAIL
+
+  [stop() changes state to 'closed'.]
+    expected: FAIL
+
+  [start() with a non-started RTCIceTransport does not change state.]
+    expected: FAIL
+
+  [RTCIceTransport.stop() changes RTCQuicTransport.state to 'closed'.]
+    expected: FAIL
+
+  [start() throws if called after the RTCIceTransport has stopped.]
+    expected: FAIL
+
+  [Two RTCQuicTransports connect to each other.]
+    expected: FAIL
+
+  [start() throws if called after stop().]
+    expected: FAIL
+
+  [start() throws if called twice.]
+    expected: FAIL
+
+  [RTCQuicTransport constructor throws if passed an RTCIceTransport that already has an active RTCQuicTransport.]
+    expected: FAIL
+
+  [start() with a started RTCIceTransport changes state to 'connecting'.]
+    expected: FAIL
+
+  [start() with a non-started RTCIceTransport later changes state to 'connecting' once the RTCIceTransport.start() is called.]
+    expected: FAIL
+
+  [stop() fires a statechange event to 'closed' on the remote transport]
+    expected: FAIL
+
--- a/testing/web-platform/tests/.taskcluster.yml
+++ b/testing/web-platform/tests/.taskcluster.yml
@@ -144,14 +144,17 @@ tasks:
                   - set -ex;
                     ~/start.sh
                       ${event.repository.clone_url}
                       refs/pull/${event.number}/merge
                       FETCH_HEAD
                       ${browser.name}
                       ${browser.channel};
                     cd ~/web-platform-tests;
+                    result=0;
                     ./tools/ci/taskcluster-run.py
                       --commit-range HEAD^
                       ${browser.name}
                       --
                       --channel=${browser.channel}
-                      ${operation.extra_args};
+                      ${operation.extra_args} || result=$?;
+                    echo $result > ../artifacts/run-return-code.txt;
+                    echo "Command exited with code $result (failures are allowed while this task is being vetted)."
--- a/testing/web-platform/tests/.travis.yml
+++ b/testing/web-platform/tests/.travis.yml
@@ -46,27 +46,29 @@ matrix:
     - name: "stability (Firefox Nightly)"
       if: type = pull_request
       os: linux
       python: "2.7"
       addons:
         apt:
           packages:
             - libnss3-tools
-      env: JOB=stability SCRIPT=tools/ci/ci_stability.sh PRODUCT=firefox:nightly
+      env:
+        - JOB=stability SCRIPT=tools/ci/ci_stability.sh PRODUCT=firefox:nightly
     - name: "stability (Chrome Dev)"
       if: type = pull_request
       os: linux
       python: "2.7"
       addons:
         apt:
           packages:
             - libappindicator1
             - fonts-liberation
-      env: JOB=stability SCRIPT=tools/ci/ci_stability.sh PRODUCT=chrome:dev
+      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
@@ -96,18 +98,16 @@ matrix:
           packages:
             - libnss3-tools
             - libappindicator1
             - fonts-liberation
   exclude:
     - env:  # exclude empty env from the top-level above
   allow_failures:
     - env: JOB=build_css SCRIPT=css/build-css-testsuites.sh
-    - env: JOB=stability SCRIPT=tools/ci/ci_stability.sh PRODUCT=firefox:nightly
-    - env: JOB=stability SCRIPT=tools/ci/ci_stability.sh PRODUCT=chrome:dev
 script:
   - ./tools/ci/run.sh
 cache:
   directories:
     - $HOME/.cache/pip
     - $HOME/meta
 notifications:
   email:
--- a/testing/web-platform/tests/IndexedDB/idbcursor_advance_index2.htm
+++ b/testing/web-platform/tests/IndexedDB/idbcursor_advance_index2.htm
@@ -5,17 +5,17 @@
 <link rel=assert title="The value passed into the count parameter was zero or a negative number.">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="support.js"></script>
 
 <script>
 
     var db,
-      t = async_test(document.title),
+      t = async_test(document.title, {timeout: 10000}),
       records = [ { pKey: "primaryKey_0", iKey: "indexKey_0" },
                   { pKey: "primaryKey_1", iKey: "indexKey_1" } ];
 
     var open_rq = createdb(t);
     open_rq.onupgradeneeded = function(e) {
         db = e.target.result;
         var objStore = db.createObjectStore("test", {keyPath:"pKey"});
 
--- a/testing/web-platform/tests/IndexedDB/idbcursor_advance_index3.htm
+++ b/testing/web-platform/tests/IndexedDB/idbcursor_advance_index3.htm
@@ -5,17 +5,17 @@
 <link rel=assert title="The value passed into the count parameter was zero or a negative number.">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="support.js"></script>
 
 <script type="text/javascript">
 
     var db,
-      t = async_test(document.title),
+      t = async_test(document.title, {timeout: 10000}),
       records = [ { pKey: "primaryKey_0", iKey: "indexKey_0" },
                   { pKey: "primaryKey_1", iKey: "indexKey_1" } ];
 
     var open_rq = createdb(t);
     open_rq.onupgradeneeded = function(e) {
         db = e.target.result;
         var objStore = db.createObjectStore("test", { keyPath:"pKey" });
 
--- a/testing/web-platform/tests/IndexedDB/idbcursor_advance_index5.htm
+++ b/testing/web-platform/tests/IndexedDB/idbcursor_advance_index5.htm
@@ -6,17 +6,17 @@
 <link rel=assert title="The number of advances forward the cursor should make.">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="support.js"></script>
 
 <script>
     var db,
       count = 0,
-      t = async_test(document.title),
+      t = async_test(document.title, {timeout: 10000}),
       records = [ { pKey: "primaryKey_0",   iKey: "indexKey_0" },
                   { pKey: "primaryKey_1",   iKey: "indexKey_1" },
                   { pKey: "primaryKey_1-2", iKey: "indexKey_1" } ],
       expected = [ { pKey: "primaryKey_0",   iKey: "indexKey_0" },
                    { pKey: "primaryKey_1-2", iKey: "indexKey_1" } ];
 
     var open_rq = createdb(t);
     open_rq.onupgradeneeded = function(e) {
--- a/testing/web-platform/tests/IndexedDB/idbcursor_continue_index5.htm
+++ b/testing/web-platform/tests/IndexedDB/idbcursor_continue_index5.htm
@@ -6,17 +6,17 @@
 <link rel=assert title="If position is defined, the record's key is less than position.">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="support.js"></script>
 
 <script>
 
     var db,
-      t = async_test(document.title),
+      t = async_test(document.title, {timeout: 10000}),
       records = [ { pKey: "primaryKey_0",   iKey: "indexKey_0" },
                   { pKey: "primaryKey_1",   iKey: "indexKey_1" },
                   { pKey: "primaryKey_1-2", iKey: "indexKey_1" },
                   { pKey: "primaryKey_2",   iKey: "indexKey_2" } ],
 
       expected = [ { pKey: "primaryKey_2",   iKey: "indexKey_2" },
                  { pKey: "primaryKey_1",   iKey: "indexKey_1" },
                  { pKey: "primaryKey_0",   iKey: "indexKey_0" } ];
--- a/testing/web-platform/tests/IndexedDB/idbcursor_continue_index6.htm
+++ b/testing/web-platform/tests/IndexedDB/idbcursor_continue_index6.htm
@@ -6,17 +6,17 @@
 <link rel=assert title="If position is defined, the record's key is greater than position.">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="support.js"></script>
 
 <script>
 
     var db,
-      t = async_test(document.title),
+      t = async_test(document.title, {timeout: 10000}),
       records = [ { pKey: "primaryKey_0",   iKey: "indexKey_0" },
                   { pKey: "primaryKey_1",   iKey: "indexKey_1" },
                   { pKey: "primaryKey_1-2", iKey: "indexKey_1" },
                   { pKey: "primaryKey_2",   iKey: "indexKey_2" } ],
 
       expected = [ { pKey: "primaryKey_0",   iKey: "indexKey_0" },
                  { pKey: "primaryKey_1",   iKey: "indexKey_1" },
                  { pKey: "primaryKey_2",   iKey: "indexKey_2" } ];
--- a/testing/web-platform/tests/IndexedDB/idbcursor_continue_invalid.htm
+++ b/testing/web-platform/tests/IndexedDB/idbcursor_continue_invalid.htm
@@ -3,17 +3,17 @@
 <link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="support.js"></script>
 
 <script>
 
     var db,
-      t = async_test(document.title);
+      t = async_test(document.title, {timeout: 10000});
 
     var open_rq = createdb(t);
     open_rq.onupgradeneeded = function(e) {
         db = e.target.result;
         var objStore = db.createObjectStore("test");
 
         objStore.createIndex("index", "");
 
--- a/testing/web-platform/tests/IndexedDB/idbcursor_iterating.htm
+++ b/testing/web-platform/tests/IndexedDB/idbcursor_iterating.htm
@@ -3,17 +3,17 @@
 <link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="support.js"></script>
 
 <script>
     var db,
       count = 0,
-      t = async_test(document.title);
+      t = async_test(document.title, {timeout: 10000});
 
     var open_rq = createdb(t);
     open_rq.onupgradeneeded = function(e) {
         db = e.target.result;
         t.add_cleanup(function() { db.close(); indexedDB.deleteDatabase(db.name); });
         var objStore = db.createObjectStore("test", { keyPath: "key" });
 
         for (var i = 0; i < 500; i++)
--- a/testing/web-platform/tests/IndexedDB/idbcursor_iterating_index.htm
+++ b/testing/web-platform/tests/IndexedDB/idbcursor_iterating_index.htm
@@ -3,17 +3,17 @@
 <link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="support.js"></script>
 
 <script>
     var db,
       count = 0,
-      t = async_test(document.title),
+      t = async_test(document.title, {timeout: 10000}),
       records = [ { pKey: "primaryKey_0", obj: { iKey: "iKey_0" }},
                   { pKey: "primaryKey_1", obj: { iKey: "iKey_1" }},
                   { pKey: "primaryKey_2", obj: { iKey: "iKey_2" }} ],
 
       expected = [ [ "primaryKey_2", "iKey_2" ],
                    [ "primaryKey_0", "iKey_0" ] ];
 
     var open_rq = createdb(t);
--- a/testing/web-platform/tests/IndexedDB/idbcursor_iterating_index2.htm
+++ b/testing/web-platform/tests/IndexedDB/idbcursor_iterating_index2.htm
@@ -3,17 +3,17 @@
 <link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="support.js"></script>
 
 <script>
     var db,
       count = 0,
-      t = async_test(document.title),
+      t = async_test(document.title, {timeout: 10000}),
       records = [ { pKey: "primaryKey_0", obj: { iKey: "iKey_0" }},
                   { pKey: "primaryKey_2", obj: { iKey: "iKey_2" }} ],
 
       expected = [ [ "primaryKey_2", "iKey_2" ],
                    [ "primaryKey_1", "iKey_1" ],
                    [ "primaryKey_0", "iKey_0" ] ];
 
     var open_rq = createdb(t);
--- a/testing/web-platform/tests/IndexedDB/idbcursor_iterating_objectstore.htm
+++ b/testing/web-platform/tests/IndexedDB/idbcursor_iterating_objectstore.htm
@@ -3,17 +3,17 @@
 <link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="support.js"></script>
 
 <script>
     var db,
       count = 0,
-      t = async_test(document.title),
+      t = async_test(document.title, {timeout: 10000}),
       records = [ { pKey: "primaryKey_0" },
                   { pKey: "primaryKey_1" },
                   { pKey: "primaryKey_2" } ],
       expected_records = [ { pKey: "primaryKey_0" },
                            { pKey: "primaryKey_2" }];
 
     var open_rq = createdb(t);
     open_rq.onupgradeneeded = function(e) {
--- a/testing/web-platform/tests/IndexedDB/idbcursor_iterating_objectstore2.htm
+++ b/testing/web-platform/tests/IndexedDB/idbcursor_iterating_objectstore2.htm
@@ -3,17 +3,17 @@
 <link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="support.js"></script>
 
 <script>
     var db,
       count = 0,
-      t = async_test(document.title),
+      t = async_test(document.title, {timeout: 10000}),
       records = [ { pKey: "primaryKey_0" },
                   { pKey: "primaryKey_2" } ],
       expected_records = [ { pKey: "primaryKey_0" },
                            { pKey: "primaryKey_1" },
                            { pKey: "primaryKey_2" } ];
 
     var open_rq = createdb(t);
     open_rq.onupgradeneeded = function(e) {
--- a/testing/web-platform/tests/IndexedDB/idbcursor_update_objectstore4.htm
+++ b/testing/web-platform/tests/IndexedDB/idbcursor_update_objectstore4.htm
@@ -3,17 +3,17 @@
 <link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="support.js"></script>
 
 <script>
 
     var db,
-      t = async_test(document.title)
+      t = async_test(document.title, {timeout: 10000})
 
     var open_rq = createdb(t);
     open_rq.onupgradeneeded = function(e) {
         db = e.target.result;
         var objStore = db.createObjectStore("test");
 
         objStore.add("data", "key");
     };
--- a/testing/web-platform/tests/IndexedDB/idbdatabase_createObjectStore10-1000ends.htm
+++ b/testing/web-platform/tests/IndexedDB/idbdatabase_createObjectStore10-1000ends.htm
@@ -2,17 +2,17 @@
 <title>IDBDatabase.createObjectStore() - create 1000 object stores, add one item and delete</title>
 <meta name=timeout content=long>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="support.js"></script>
 
 <script>
 var db,
-    t = async_test(document.title),
+    t = async_test(document.title, {timeout: 600000}),
     open_rq = createdb(t)
 
 open_rq.onupgradeneeded = function(e) {
     db = e.target.result
     var st, i;
     for (i = 0; i < 1000; i++)
     {
         st = db.createObjectStore("object_store_" + i)
--- a/testing/web-platform/tests/IndexedDB/idbdatabase_createObjectStore7.htm
+++ b/testing/web-platform/tests/IndexedDB/idbdatabase_createObjectStore7.htm
@@ -2,17 +2,17 @@
 <title>IDBDatabase.createObjectStore() - create an object store with an unknown optional parameter </title>
 <link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="support.js"></script>
 
 <script>
 
-var t = async_test(document.title),
+var t = async_test(document.title, {timeout: 10000}),
     open_rq = createdb(t)
 
 open_rq.onupgradeneeded = function(e) {
     var db = e.target.result
     db.createObjectStore("with unknown param", { parameter: 0 });
 
     t.done()
 }
--- a/testing/web-platform/tests/IndexedDB/idbdatabase_deleteObjectStore4-not_reused.htm
+++ b/testing/web-platform/tests/IndexedDB/idbdatabase_deleteObjectStore4-not_reused.htm
@@ -3,17 +3,17 @@
 <title>IDBDatabase.deleteObjectStore() - the object store is not reused</title>
 <link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
 <script src=/resources/testharness.js></script>
 <script src=/resources/testharnessreport.js></script>
 <script src=support.js></script>
 
 <script>
 
-var t = async_test(document.title),
+var t = async_test(document.title, {timeout: 10000}),
     keys = [],
     open_rq = createdb(t)
 
 open_rq.onupgradeneeded = function(e) {
     var db = e.target.result
 
     var objStore = db.createObjectStore("resurrected", { autoIncrement: true, keyPath: "k" });
     objStore.add({k:5}).onsuccess = function(e) { keys.push(e.target.result); }
--- a/testing/web-platform/tests/IndexedDB/idbdatabase_transaction4.htm
+++ b/testing/web-platform/tests/IndexedDB/idbdatabase_transaction4.htm
@@ -2,17 +2,17 @@
 <title>IDBDatabase.transaction() - attempt to open a transaction with invalid mode </title>
 <link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="support.js"></script>
 
 <script>
     var db,
-      t = async_test(document.title),
+      t = async_test(document.title, {timeout: 10000}),
       open_rq = createdb(t);
 
     open_rq.onupgradeneeded = function(e) {
         db = e.target.result;
         db.createObjectStore('test');
     };
 
     open_rq.onsuccess = function(e) {
--- a/testing/web-platform/tests/IndexedDB/idbfactory_deleteDatabase3.htm
+++ b/testing/web-platform/tests/IndexedDB/idbfactory_deleteDatabase3.htm
@@ -4,17 +4,17 @@
 <link rel=help href="http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#widl-IDBFactory-deleteDatabase-IDBOpenDBRequest-DOMString-name">
 <meta name=assert title="If the steps above are successful, the implementation must set the result of the request to undefined and fire a success event at the request. The event must implement the IDBVersionChangeEvent interface and have oldVersion set to database version and have the newVersion property set to null.">
 <script src=/resources/testharness.js></script>
 <script src=/resources/testharnessreport.js></script>
 <script src=support.js></script>
 
 <script>
     var db
-    var open_rq = createdb(async_test(document.title), undefined, 9)
+    var open_rq = createdb(async_test(document.title, {timeout: 10000}), undefined, 9)
 
     open_rq.onupgradeneeded = function(e) {
         db = e.target.result
         db.createObjectStore('os')
     }
     open_rq.onsuccess = function(e) {
         db.close()
 
--- a/testing/web-platform/tests/IndexedDB/idbfactory_open10.htm
+++ b/testing/web-platform/tests/IndexedDB/idbfactory_open10.htm
@@ -2,17 +2,17 @@
 <title>IDBFactory.open() - error in upgradeneeded resets db</title>
 <link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
 <script src=/resources/testharness.js></script>
 <script src=/resources/testharnessreport.js></script>
 <script src=support.js></script>
 
 <script>
     var db, db2;
-    var open_rq = createdb(async_test(document.title), undefined, 9);
+    var open_rq = createdb(async_test(document.title, {timeout: 10000}), undefined, 9);
 
     open_rq.onupgradeneeded = function(e) {
         db = e.target.result;
 
         var st = db.createObjectStore("store");
         st.createIndex("index", "i");
 
         assert_equals(db.version, 9, "first db.version");
--- a/testing/web-platform/tests/IndexedDB/idbfactory_open11.htm
+++ b/testing/web-platform/tests/IndexedDB/idbfactory_open11.htm
@@ -3,17 +3,17 @@
 <link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
 <script src=/resources/testharness.js></script>
 <script src=/resources/testharnessreport.js></script>
 <script src=support.js></script>
 
 <script>
     var db;
     var count_done = 0;
-    var open_rq = createdb(async_test(document.title));
+    var open_rq = createdb(async_test(document.title, {timeout: 10000}));
 
     open_rq.onupgradeneeded = function(e) {
         db = e.target.result;
 
         db.createObjectStore("store");
         assert_true(db.objectStoreNames.contains("store"), "objectStoreNames contains store");
 
         var store = e.target.transaction.objectStore("store");
--- a/testing/web-platform/tests/IndexedDB/idbfactory_open12.htm
+++ b/testing/web-platform/tests/IndexedDB/idbfactory_open12.htm
@@ -2,17 +2,17 @@
 <title>IDBFactory.open() - upgradeneeded gets VersionChangeEvent</title>
 <link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
 <script src=/resources/testharness.js></script>
 <script src=/resources/testharnessreport.js></script>
 <script src=support.js></script>
 
 <script>
     var db;
-    var open_rq = createdb(async_test(document.title), undefined, 9);
+    var open_rq = createdb(async_test(document.title, {timeout: 10000}), undefined, 9);
     var open2_t = async_test(document.title + " - second upgrade");
 
     open_rq.onupgradeneeded = function(e) {
         db = e.target.result;
 
         assert_true(e instanceof IDBVersionChangeEvent, "e instanceof IDBVersionChangeEvent");
         assert_equals(e.oldVersion, 0, "oldVersion");
         assert_equals(e.newVersion, 9, "newVersion");
--- a/testing/web-platform/tests/IndexedDB/idbindex-multientry-arraykeypath.htm
+++ b/testing/web-platform/tests/IndexedDB/idbindex-multientry-arraykeypath.htm
@@ -4,17 +4,17 @@
 <link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
 <link rel=help href="http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#key-construct">
 <link rel=assert title="XXX">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="support.js"></script>
 
 <script>
-    createdb(async_test(document.title)).onupgradeneeded = function(e) {
+    createdb(async_test(document.title, {timeout: 10000})).onupgradeneeded = function(e) {
         var store = e.target.result.createObjectStore("store");
 
         assert_throws('InvalidAccessError', function() {
             store.createIndex('actors', ['name'], { multiEntry: true })
         });
 
         this.done();
     };
--- a/testing/web-platform/tests/IndexedDB/idbindex-multientry-big.htm
+++ b/testing/web-platform/tests/IndexedDB/idbindex-multientry-big.htm
@@ -5,18 +5,18 @@
 <link rel=help href="http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#key-construct">
 <link rel=assert title="XXX">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="support.js"></script>
 
 <script>
     var db,
-        t_add = async_test("Adding one item with 1000 multiEntry keys"),
-        t_get = async_test("Getting the one item by 1000 indeced keys ");
+        t_add = async_test("Adding one item with 1000 multiEntry keys", { timeout: 10000 }),
+        t_get = async_test("Getting the one item by 1000 indeced keys ", { timeout: 10000 });
 
     var open_rq = createdb(t_add);
     var obj = { test: 'yo', idxkeys: [] };
 
     for (var i = 0; i < 1000; i++)
         obj.idxkeys.push('index_no_' + i);
 
 
--- a/testing/web-platform/tests/IndexedDB/idbindex-multientry.htm
+++ b/testing/web-platform/tests/IndexedDB/idbindex-multientry.htm
@@ -7,17 +7,17 @@
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="support.js"></script>
 
 <script>
     var db,
         expected_keys = [1, 2, 2, 3, 3];
 
-    var open_rq = createdb(async_test(document.title))
+    var open_rq = createdb(async_test(document.title, {timeout: 10000}))
 
     open_rq.onupgradeneeded = function(e) {
         db = e.target.result;
 
         var store = db.createObjectStore("store")
 
         store.createIndex('actors', 'name', { multiEntry: true })
 
--- a/testing/web-platform/tests/IndexedDB/idbindex_indexNames.htm
+++ b/testing/web-platform/tests/IndexedDB/idbindex_indexNames.htm
@@ -3,17 +3,17 @@
 <title>IDBIndex.getKey() - returns the record's primary key</title>
 <link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="support.js"></script>
 
 <script>
     var db,
-      t = async_test(document.title);
+      t = async_test(document.title, {timeout: 10000});
 
     var open_rq = createdb(t);
     open_rq.onupgradeneeded = function(e) {
         db = e.target.result;
         var objStore = db.createObjectStore("test", { keyPath: "key" });
         objStore.createIndex("index", "data");
 
         assert_equals(objStore.indexNames[0], "index", "indexNames");
--- a/testing/web-platform/tests/IndexedDB/idbobjectstore_createIndex3-usable-right-away.htm
+++ b/testing/web-platform/tests/IndexedDB/idbobjectstore_createIndex3-usable-right-away.htm
@@ -4,17 +4,17 @@
 <link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
 <meta name=timeout content=long>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="support.js"></script>
 
 <script>
     var db, aborted,
-      t = async_test(document.title)
+      t = async_test(document.title, {timeout:19000})
 
     var open_rq = createdb(t);
     open_rq.onupgradeneeded = function(e) {
         db = e.target.result;
         var txn = e.target.transaction,
           objStore = db.createObjectStore("store", { keyPath: 'key' });
 
         for (var i = 0; i < 100; i++)
--- a/testing/web-platform/tests/IndexedDB/idbobjectstore_createIndex4-deleteIndex-event_order.htm
+++ b/testing/web-platform/tests/IndexedDB/idbobjectstore_createIndex4-deleteIndex-event_order.htm
@@ -4,17 +4,17 @@
 <link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="support.js"></script>
 
 <script>
     var db,
       events = [],
-      t = async_test(document.title)
+      t = async_test(document.title, {timeout: 10000})
 
     var open_rq = createdb(t);
     open_rq.onupgradeneeded = function(e) {
         db = e.target.result;
         e.target.transaction.oncomplete = log("transaction.complete");
 
         var txn = e.target.transaction,
           objStore = db.createObjectStore("store");
--- a/testing/web-platform/tests/IndexedDB/idbobjectstore_createIndex5-emptykeypath.htm
+++ b/testing/web-platform/tests/IndexedDB/idbobjectstore_createIndex5-emptykeypath.htm
@@ -3,17 +3,17 @@
 <title>IDBObjectStore.createIndex() - empty keyPath</title>
 <link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="support.js"></script>
 
 <script>
     var db, aborted,
-      t = async_test(document.title)
+      t = async_test(document.title, {timeout: 10000})
 
     var open_rq = createdb(t);
     open_rq.onupgradeneeded = function(e) {
         db = e.target.result;
         var txn = e.target.transaction,
           objStore = db.createObjectStore("store");
 
         for (var i = 0; i < 5; i++)
--- a/testing/web-platform/tests/IndexedDB/idbobjectstore_createIndex6-event_order.htm
+++ b/testing/web-platform/tests/IndexedDB/idbobjectstore_createIndex6-event_order.htm
@@ -11,17 +11,17 @@
 <script src=support.js></script>
 
 <script>
     // Transaction may fire window.onerror in some implementations.
     setup({allow_uncaught_exception:true});
 
     var db,
       events = [],
-      t = async_test(document.title)
+      t = async_test(document.title, {timeout: 10000})
 
     var open_rq = createdb(t);
     open_rq.onupgradeneeded = function(e) {
         db = e.target.result;
         db.onerror = log("db.error");
         db.onabort = log("db.abort");
         e.target.transaction.onabort = log("transaction.abort")
         e.target.transaction.onerror = log("transaction.error")
--- a/testing/web-platform/tests/IndexedDB/idbobjectstore_createIndex7-event_order.htm
+++ b/testing/web-platform/tests/IndexedDB/idbobjectstore_createIndex7-event_order.htm
@@ -13,17 +13,17 @@
 <script src="support.js"></script>
 
 <script>
     // Transaction may fire window.onerror in some implementations.
     setup({allow_uncaught_exception:true});
 
     var db,
       events = [],
-      t = async_test(document.title)
+      t = async_test(document.title, {timeout: 10000})
 
     var open_rq = createdb(t);
     open_rq.onupgradeneeded = function(e) {
         db = e.target.result;
         var txn = e.target.transaction;
         db.onerror = log("db.error");
         db.onabort = log("db.abort");
         txn.onabort = log("transaction.abort")
--- a/testing/web-platform/tests/IndexedDB/idbobjectstore_createIndex8-valid_keys.htm
+++ b/testing/web-platform/tests/IndexedDB/idbobjectstore_createIndex8-valid_keys.htm
@@ -4,17 +4,17 @@
 <link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
 <meta name=timeout content=long>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="support.js"></script>
 
 <script>
     var db,
-      t = async_test(document.title),
+      t = async_test(document.title, {timeout:19000}),
       now = new Date(),
       mar18 = new Date(1111111111111),
       ar = ["Yay", 2, -Infinity],
       num = 1337
 
     var open_rq = createdb(t);
     open_rq.onupgradeneeded = function(e) {
         db = e.target.result;
--- a/testing/web-platform/tests/IndexedDB/idbobjectstore_deleted.htm
+++ b/testing/web-platform/tests/IndexedDB/idbobjectstore_deleted.htm
@@ -6,17 +6,17 @@
 <link rel=author href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
 <script src=/resources/testharness.js></script>
 <script src=/resources/testharnessreport.js></script>
 <script src=support.js></script>
 
 <script>
     var db,
       add_success = false,
-      t = async_test(document.title)
+      t = async_test(document.title, {timeout: 10000})
 
     var open_rq = createdb(t);
     open_rq.onupgradeneeded = function(e) {
         db = e.target.result;
 
         var objStore = db.createObjectStore("store", { autoIncrement: true });
         assert_equals(db.objectStoreNames[0], "store", "objectStoreNames");
 
--- a/testing/web-platform/tests/IndexedDB/idbtransaction-oncomplete.htm
+++ b/testing/web-platform/tests/IndexedDB/idbtransaction-oncomplete.htm
@@ -2,17 +2,17 @@
 <title>IDBTransaction - complete event</title>
 <link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="support.js"></script>
 
 <script>
     var db, store,
-      t = async_test(document.title),
+      t = async_test(document.title, {timeout: 10000}),
       open_rq = createdb(t),
       stages = [];
 
     open_rq.onupgradeneeded = function(e) {
         stages.push("upgradeneeded");
 
         db = e.target.result;
         store = db.createObjectStore('store');
--- a/testing/web-platform/tests/IndexedDB/idbtransaction_abort.htm
+++ b/testing/web-platform/tests/IndexedDB/idbtransaction_abort.htm
@@ -3,17 +3,17 @@
 <title>IDBTransaction - abort</title>
 <link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
 <script src=/resources/testharness.js></script>
 <script src=/resources/testharnessreport.js></script>
 <script src=support.js></script>
 
 <script>
     var db, aborted,
-      t = async_test(document.title),
+      t = async_test(document.title, {timeout: 10000}),
       record = { indexedProperty: "bar" };
 
     var open_rq = createdb(t);
     open_rq.onupgradeneeded = function(e) {
         db = e.target.result;
         var txn = e.target.transaction,
           objStore = db.createObjectStore("store");
 
--- a/testing/web-platform/tests/IndexedDB/idbversionchangeevent.htm
+++ b/testing/web-platform/tests/IndexedDB/idbversionchangeevent.htm
@@ -8,17 +8,17 @@
 <script src="/resources/testharnessreport.js"></script>
 <script src="support.js"></script>
 
 <div id="log"></div>
 
 <script>
 
     var db,
-        t = async_test(document.title);
+        t = async_test(document.title, {timeout: 10000});
 
     t.step(function() {
         var openrq = indexedDB.open('db', 3);
 
         openrq.onupgradeneeded = t.step_func(function(e) {
             assert_equals(e.oldVersion, 0, "old version (upgradeneeded)");
             assert_equals(e.newVersion, 3, "new version (upgradeneeded)");
             assert_true(e instanceof IDBVersionChangeEvent, "upgradeneeded instanceof IDBVersionChangeEvent");
--- a/testing/web-platform/tests/IndexedDB/keygenerator-constrainterror.htm
+++ b/testing/web-platform/tests/IndexedDB/keygenerator-constrainterror.htm
@@ -4,17 +4,17 @@
 <link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="support.js"></script>
 
 <script>
 
     var db,
-      t = async_test(document.title),
+      t = async_test(document.title, {timeout: 10000}),
       objects = [1, null, {id: 2}, null, 2.00001, 5, null, {id: 6} ],
       expected = [1, 2, 2.00001, 3, 5, 6],
       errors = 0;
 
     var open_rq = createdb(t);
     open_rq.onupgradeneeded = function(e) {
         db = e.target.result;
         var objStore = db.createObjectStore("store", { keyPath: "id", autoIncrement: true });
--- a/testing/web-platform/tests/IndexedDB/keygenerator-overflow.htm
+++ b/testing/web-platform/tests/IndexedDB/keygenerator-overflow.htm
@@ -6,17 +6,17 @@
 <link rel=assert title="When the current number of a key generator reaches above the value 2^53 (9007199254740992) any attempts to use the key generator to generate a new key will result in an error. It's still possible to insert records into the object store by specifying an explicit key, however the only way to use a key generator again for the object store is to delete the object store and create a new one.">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="support.js"></script>
 
 <script>
 
     var db,
-      t = async_test(document.title),
+      t = async_test(document.title, {timeout: 10000}),
       overflow_error_fired = false,
       objects =  [9007199254740991, null, "error", 2, "error" ],
       expected_keys = [2, 9007199254740991, 9007199254740992];
 
     var open_rq = createdb(t);
     open_rq.onupgradeneeded = function(e) {
         db = e.target.result;
         var objStore = db.createObjectStore("store", { keyPath: "id", autoIncrement: true });
--- a/testing/web-platform/tests/IndexedDB/keyorder.htm
+++ b/testing/web-platform/tests/IndexedDB/keyorder.htm
@@ -17,17 +17,17 @@ 8. If A's length is less than B's length
 <script src="/resources/testharnessreport.js"></script>
 <script src="support.js"></script>
 
 <script>
     var global_db = createdb_for_multiple_tests();
 
     function keysort(desc, unsorted, expected) {
         var db,
-            t = async_test("Database readback sort - " + desc),
+            t = async_test("Database readback sort - " + desc, { timeout: 10000 }),
             store_name = 'store-' + Date.now() + Math.random();
 
         // The database test
         var open_rq = global_db.setTest(t);
         open_rq.onupgradeneeded = function(e) {
             db = e.target.result;
             var objStore = db.createObjectStore(store_name);
 
--- a/testing/web-platform/tests/IndexedDB/keypath_maxsize.htm
+++ b/testing/web-platform/tests/IndexedDB/keypath_maxsize.htm
@@ -6,17 +6,17 @@
 <meta name=timeout content=long>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="support.js"></script>
 
 <script>
     function keypath(keypath, objects, expected_keys, desc) {
         var db,
-            t = async_test(document.title + " - " + (desc ? desc : keypath)),
+            t = async_test(document.title + " - " + (desc ? desc : keypath), { timeout: 10000 }),
             open_rq = createdb(t);
 
         open_rq.onupgradeneeded = function(e) {
             db = e.target.result;
             var objStore = db.createObjectStore("store", { keyPath: keypath });
 
             for (var i = 0; i < objects.length; i++)
                 objStore.add(objects[i]);
--- a/testing/web-platform/tests/IndexedDB/request_bubble-and-capture.htm
+++ b/testing/web-platform/tests/IndexedDB/request_bubble-and-capture.htm
@@ -4,17 +4,17 @@
 <link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
 <script src=/resources/testharness.js></script>
 <script src=/resources/testharnessreport.js></script>
 <script src=support.js></script>
 
 <script>
     var events = [];
 
-    var open_rq = createdb(async_test(document.title));
+    var open_rq = createdb(async_test(document.title, {timeout: 10000}));
     open_rq.onupgradeneeded = function(e) {
         var db = e.target.result;
         var txn = e.target.transaction;
         var store = db.createObjectStore("s");
         var rq1 = store.add("", 1);
         var rq2 = store.add("", 1);
         db.onerror = function(){};
 
--- a/testing/web-platform/tests/IndexedDB/transaction-lifetime-blocked.htm
+++ b/testing/web-platform/tests/IndexedDB/transaction-lifetime-blocked.htm
@@ -6,17 +6,17 @@
 <script src="support.js"></script>
 
 <div id="log"></div>
 
 <script>
 
     var db, db_got_versionchange, db2,
         events = [],
-        t = async_test(document.title);
+        t = async_test(document.title, {timeout: 10000});
 
     t.step(function() {
         var openrq = indexedDB.open('db', 3);
 
         // 1
         openrq.onupgradeneeded = t.step_func(function(e) {
             events.push("open." + e.type);
             e.target.result.createObjectStore('store');
--- a/testing/web-platform/tests/IndexedDB/transaction-lifetime.htm
+++ b/testing/web-platform/tests/IndexedDB/transaction-lifetime.htm
@@ -6,17 +6,17 @@
 <script src="support.js"></script>
 
 <div id="log"></div>
 
 <script>
 
     var db, db_got_versionchange, db2,
         events = [],
-        t = async_test(document.title);
+        t = async_test(document.title, {timeout: 10000});
 
     t.step(function() {
         var openrq = indexedDB.open('db', 3);
 
         // 1
         openrq.onupgradeneeded = t.step_func(function(e) {
             events.push("open." + e.type);
             e.target.result.createObjectStore('store');
--- a/testing/web-platform/tests/IndexedDB/transaction-requestqueue.htm
+++ b/testing/web-platform/tests/IndexedDB/transaction-requestqueue.htm
@@ -3,17 +3,17 @@
 <title>Transactions have a request queue</title>
 <link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
 <script src=/resources/testharness.js></script>
 <script src=/resources/testharnessreport.js></script>
 <script src=support.js></script>
 
 <script>
 
-var db, t = async_test(document.title),
+var db, t = async_test(document.title, {timeout: 10000}),
     keys = { txn: [], txn2: [] },
     open_rq = createdb(t)
 
 open_rq.onupgradeneeded = function(e) {
     var i, os;
     db = e.target.result;
 
     for (i = 1; i < 6; i++)
--- a/testing/web-platform/tests/IndexedDB/transaction_bubble-and-capture.htm
+++ b/testing/web-platform/tests/IndexedDB/transaction_bubble-and-capture.htm
@@ -4,17 +4,17 @@
 <link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
 <script src=/resources/testharness.js></script>
 <script src=/resources/testharnessreport.js></script>
 <script src=support.js></script>
 
 <script>
     var events = [];
 
-    var open_rq = createdb(async_test(document.title));
+    var open_rq = createdb(async_test(document.title, {timeout: 10000}));
     open_rq.onupgradeneeded = function(e) {
         var db = e.target.result;
         var txn = e.target.transaction;
         var store = db.createObjectStore("store");
         var rq1 = store.add("", 1);
         var rq2 = store.add("", 1);
 
         db.onerror = undefined; // We will run db.error, but don't let that fail the test
--- a/testing/web-platform/tests/IndexedDB/writer-starvation.htm
+++ b/testing/web-platform/tests/IndexedDB/writer-starvation.htm
@@ -7,17 +7,17 @@
 <script src=/resources/testharnessreport.js></script>
 <script src=support.js></script>
 
 <script>
     var db, read_request_count = 0, read_success_count = 0;
     var write_request_count = 0, write_success_count = 0;
     var RQ_COUNT = 25;
 
-    var open_rq = createdb(async_test(undefined));
+    var open_rq = createdb(async_test(undefined, {timeout: 20000}));
     open_rq.onupgradeneeded = function(e) {
         db = e.target.result;
         db.createObjectStore("s")
           .add("1", 1);
     }
 
     open_rq.onsuccess = function(e) {
         var i = 0, continue_reading = true;
deleted file mode 100644
--- a/testing/web-platform/tests/css/css-backgrounds/box-shadow-body.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-    <title>CSS box-shadow Test: &lt;body&gt; shadow should look the same regardless of background color</title>
-    <link rel="author" title="fmalita" href="mailto:fmalita@chromium.org">
-    <link rel="help" href="https://www.w3.org/TR/css-backgrounds-3/#the-box-shadow">
-    <link rel="match" href="reference/box-shadow-body-ref.html">
-    <style type="text/css">
-    body {
-        position: relative;
-        box-shadow: 0 0 0 4px red;
-        height: 300px;
-        width: 600px;
-        margin: 20px auto;
-        background-color: white;
-    }
-    </style>
-</head>
-<body></body>
-</html>
deleted file mode 100644
--- a/testing/web-platform/tests/css/css-backgrounds/reference/box-shadow-body-ref.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-    <title>CSS box-shadow Test Reference</title>
-    <link rel="author" title="fmalita" href="mailto:fmalita@chromium.org">
-    <style type="text/css">
-    html {
-        background-color: white;
-    }
-    body {
-        position: relative;
-        box-shadow: 0 0 0 4px red;
-        height: 300px;
-        width: 600px;
-        margin: 20px auto;
-    }
-    </style>
-</head>
-<body></body>
-</html>
deleted file mode 100644
--- a/testing/web-platform/tests/css/css-break/line-after-unbreakable-float-after-padding-ref.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<!DOCTYPE html>
-<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org">
-<p>The word "PASS" should be seen below.</p>
-<div style="margin-left:2ch; font-family:monospace; line-height:50px;">
-  <div style="float:left;">PA</div>
-  <div style="float:left;">SS</div>
-</div>
deleted file mode 100644
--- a/testing/web-platform/tests/css/css-break/line-after-unbreakable-float-after-padding.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<!DOCTYPE html>
-<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org">
-<link rel="help" href="https://www.w3.org/TR/css-break-3/#unforced-breaks">
-<link rel="match" href="line-after-unbreakable-float-after-padding-ref.html">
-<p>The word "PASS" should be seen below.</p>
-<div style="columns:3; column-gap:0; column-fill:auto; font-family:monospace; line-height:50px; width:6ch; height:101px; orphans:1; widows:1;">
-  <div style="padding-top:100px;">
-    <div style="float:left; break-inside:avoid; width:100%; height:75px;">PA</div>
-    SS
-  </div>
-</div>
deleted file mode 100644
--- a/testing/web-platform/tests/css/css-flexbox/align-content-wrap-001.html
+++ /dev/null
@@ -1,77 +0,0 @@
-<!DOCTYPE html>
-<link rel="help" href="https://drafts.csswg.org/css-flexbox/#propdef-align-content" />
-<title>css-flexbox: Tests align-content with single-line flex-wrap: wrap</title>
-<style>
-.default {
-    display: flex;
-    flex-wrap: wrap;
-    position: relative;
-    height: 70px;
-    border: 1px solid red;
-    margin: 5px;
-}
-
-.default > div {
-  height: 20px;
-}
-
-.verticalWriting {
-    display: flex;
-    flex-wrap: wrap;
-    position: relative;
-    width: 70px;
-    border: 1px solid red;
-    margin: 5px;
-    writing-mode: vertical-lr;
-}
-
-.verticalWriting > div {
-  width: 20px;
-}
-</style>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/resources/check-layout-th.js"></script>
-</head>
-<body onload="checkLayout('.default, .verticalWriting'); ">
-<div id=log></div>
-<p>Test that we honor align-content even in single-line flex containers</p>
-<div class="default" style="align-content: flex-start">
-<div data-offset-y="0">This text should be at the top of its container</div>
-</div>
-<div class="default" style="align-content: flex-end">
-<div data-offset-y="50">This text should be at the bottom of its container</div>
-</div>
-<div class="default" style="align-content: center">
-<div data-offset-y="25">This text should be centered in its container</div>
-</div>
-<div class="default" style="align-content: space-between">
-<div data-offset-y="0">This text should be at the top of its container</div>
-</div>
-<div class="default" style="align-content: space-around">
-<div data-offset-y="25">This text should be centered in its container</div>
-</div>
-<div class="default" style="align-content: space-evenly">
-<div data-offset-y="25">This text should be centered in its container</div>
-</div>
-<div class="default" style="align-content: stretch">
-<div data-offset-y="0">This text should be at the top of its container</div>
-</div>
-<div class="verticalWriting" style="align-content: flex-start">
-<div data-offset-x="0">This text should be at the left of its container</div>
-</div>
-<div class="verticalWriting" style="align-content: flex-end">
-<div data-offset-x="50">This text should be at the right of its container</div>
-</div>
-<div class="verticalWriting" style="align-content: center">
-<div data-offset-x="25">This text should be centered in its container</div>
-</div>
-<div class="verticalWriting" style="align-content: space-between">
-<div data-offset-x="0">This text should be at the left of its container</div>
-</div>
-<div class="verticalWriting" style="align-content: space-around">
-<div data-offset-x="25">This text should be centered in its container</div>
-</div>
-<div class="verticalWriting" style="align-content: stretch">
-<div data-offset-x="0">This text should be at the left of its container</div>
-</div>
deleted file mode 100644
--- a/testing/web-platform/tests/css/css-flexbox/align-content-wrap-002.html
+++ /dev/null
@@ -1,108 +0,0 @@
-<!DOCTYPE html>
-<link rel="help" href="https://drafts.csswg.org/css-flexbox/#propdef-align-content" />
-<title>css-flexbox: Tests align-content with flex-wrap: wrap</title>
-<style>
-.flex-horizontal {
-    width:600px;
-    display:flex;
-    height:100px;
-    background:gray;
-    margin-bottom:100px;
-}
-.flex-vertical {
-    width:100px;
-    display:flex;
-    flex-direction: column;
-    height:600px;
-    background:gray;
-    margin-top:200px;
-    margin-bottom:100px;
-}
-.item-horizontal {
-    width:150px;
-    background:yellow;
-    margin:10px;
-    flex:none;
-}
-.item-vertical {
-    height:150px;
-    background:yellow;
-    margin:10px;
-    flex:none;
-}
-.content1-horizontal {
-    width:100px;
-    height:150px;
-    background:red;
-}
-.content2-horizontal {
-    width:100px;
-    height:100px;
-    background:red;
-}
-.content3-horizontal {
-    width:100px;
-    height:50px;
-    background:red;
-}
-.content1-vertical {
-    width:150px;
-    height:100px;
-    background:red;
-}
-.content2-vertical {
-    width:100px;
-    height:100px;
-    background:red;
-}
-.content3-vertical {
-    width:50px;
-    height:100px;
-    background:red;
-}
-</style>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/resources/check-layout-th.js"></script>
-<body onload="checkLayout('.flex-horizontal, .flex-vertical');">
-<div id=log></div>
-<p>Test for crbug.com/362848: Flex box word-wrap is not adhering to spec</p>
-<div class="flex-horizontal">
-    <div class="item-horizontal" data-expected-height="80"><div class="content1-horizontal"></div></div>
-    <div class="item-horizontal" data-expected-height="80"><div class="content2-horizontal"></div></div>
-    <div class="item-horizontal" data-expected-height="80"><div class="content3-horizontal"></div></div>
-</div>
-
-<div class="flex-horizontal" style="flex-wrap:wrap;">
-    <div class="item-horizontal" data-expected-height="150"><div class="content1-horizontal"></div></div>
-    <div class="item-horizontal" data-expected-height="150"><div class="content2-horizontal"></div></div>
-    <div class="item-horizontal" data-expected-height="150"><div class="content3-horizontal"></div></div>
-</div>
-
-<div class="flex-horizontal" style="flex-wrap:wrap;">
-    <div class="item-horizontal" data-expected-height="150"><div class="content1-horizontal"></div></div>
-    <div class="item-horizontal" data-expected-height="150"><div class="content2-horizontal"></div></div>
-    <div class="item-horizontal" data-expected-height="150"><div class="content3-horizontal"></div></div>
-    <div class="item-horizontal" data-expected-height="150"><div class="content1-horizontal"></div></div>
-    <div class="item-horizontal" data-expected-height="150"><div class="content2-horizontal"></div></div>
-</div>
-
-<div class="flex-vertical">
-    <div class="item-vertical" data-expected-width="80"><div class="content1-vertical"></div></div>
-    <div class="item-vertical" data-expected-width="80"><div class="content2-vertical"></div></div>
-    <div class="item-vertical" data-expected-width="80"><div class="content3-vertical"></div></div>
-</div>
-
-<div class="flex-vertical" style="flex-wrap:wrap;">
-    <div class="item-vertical" data-expected-width="150"><div class="content1-vertical"></div></div>
-    <div class="item-vertical" data-expected-width="150"><div class="content2-vertical"></div></div>
-    <div class="item-vertical" data-expected-width="150"><div class="content3-vertical"></div></div>
-</div>
-
-<div class="flex-vertical" style="flex-wrap:wrap;">
-    <div class="item-vertical" data-expected-width="150"><div class="content1-vertical"></div></div>
-    <div class="item-vertical" data-expected-width="150"><div class="content2-vertical"></div></div>
-    <div class="item-vertical" data-expected-width="150"><div class="content3-vertical"></div></div>
-    <div class="item-vertical" data-expected-width="150"><div class="content1-vertical"></div></div>
-    <div class="item-vertical" data-expected-width="150"><div class="content2-vertical"></div></div>
-</div>
deleted file mode 100644
--- a/testing/web-platform/tests/css/css-flexbox/align-content-wrap-003.html
+++ /dev/null
@@ -1,330 +0,0 @@
-<!DOCTYPE html>
-<link rel="help" href="https://drafts.csswg.org/css-flexbox/#propdef-align-content" />
-<title>css-flexbox: Tests align-content with flex-wrap: wrap</title>
-<style>
-.flexbox {
-    display: flex;
-    background-color: #aaa;
-    position: relative;
-    flex-wrap: wrap;
-}
-
-.horizontal {
-    width: 200px;
-    height: 120px;
-}
-.horizontal > div {
-    min-height: 20px;
-}
-.horizontal > :nth-child(1) {
-    width: 100px;
-    min-height: 10px;
-}
-.horizontal > :nth-child(2) {
-    width: 100px;
-}
-.horizontal > :nth-child(3) {
-    width: 200px;
-}
-.horizontal > :nth-child(4) {
-    width: 50px;
-}
-
-.vertical-rl {
-    writing-mode: vertical-rl;
-    width: 120px;
-    height: 20px;
-}
-.vertical-rl > div {
-    min-width: 20px;
-}
-.vertical-rl > :nth-child(1) {
-    height: 10px;
-    min-width: 10px;
-}
-.vertical-rl > :nth-child(2) {
-    height: 10px;
-}
-.vertical-rl > :nth-child(3) {
-    height: 20px;
-}
-.vertical-rl > :nth-child(4) {
-    height: 5px;
-}
-
-.flexbox :nth-child(1) {
-    background-color: lightblue;
-}
-.flexbox :nth-child(2) {
-    background-color: lightgreen;
-}
-.flexbox :nth-child(3) {
-    background-color: pink;
-}
-.flexbox :nth-child(4) {
-    background-color: yellow;
-}
-</style>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/resources/check-layout-th.js"></script>
-<body onload="checkLayout('.flexbox')">
-<div id=log></div>
-<p>Test to make sure that align-content works properly.</p>
-
-<div data-expected-height="120" class="flexbox horizontal">
-  <div data-offset-x="0" data-offset-y="0" data-expected-height="40"></div>
-  <div data-offset-x="100" data-offset-y="0" data-expected-height="40"></div>
-  <div data-offset-x="0" data-offset-y="40" data-expected-height="40"></div>
-  <div data-offset-x="0" data-offset-y="80" data-expected-height="40"></div>
-</div>
-
-<div data-expected-height="120" class="flexbox horizontal" style="align-content: flex-start">
-  <div data-offset-x="0" data-offset-y="0" data-expected-height="20"></div>
-  <div data-offset-x="100" data-offset-y="0" data-expected-height="20"></div>
-  <div data-offset-x="0" data-offset-y="20" data-expected-height="20"></div>
-  <div data-offset-x="0" data-offset-y="40" data-expected-height="20"></div>
-</div>
-
-<div data-expected-height="120" class="flexbox horizontal" style="align-content: flex-end">
-  <div data-offset-x="0" data-offset-y="60" data-expected-height="20"></div>
-  <div data-offset-x="100" data-offset-y="60" data-expected-height="20"></div>
-  <div data-offset-x="0" data-offset-y="80" data-expected-height="20"></div>
-  <div data-offset-x="0" data-offset-y="100" data-expected-height="20"></div>
-</div>
-
-<div data-expected-height="120" class="flexbox horizontal" style="align-content: center">
-  <div data-offset-x="0" data-offset-y="30" data-expected-height="20"></div>
-  <div data-offset-x="100" data-offset-y="30" data-expected-height="20"></div>
-  <div data-offset-x="0" data-offset-y="50" data-expected-height="20"></div>
-  <div data-offset-x="0" data-offset-y="70" data-expected-height="20"></div>
-</div>
-
-<div data-expected-height="120" class="flexbox horizontal" style="align-content: space-between">
-  <div data-offset-x="0" data-offset-y="0" data-expected-height="20"></div>
-  <div data-offset-x="100" data-offset-y="0" data-expected-height="20"></div>
-  <div data-offset-x="0" data-offset-y="50" data-expected-height="20"></div>
-  <div data-offset-x="0" data-offset-y="100" data-expected-height="20"></div>
-</div>
-
-<div data-expected-height="120" class="flexbox horizontal" style="align-content: space-evenly">
-  <div data-offset-x="0" data-offset-y="15" data-expected-height="20"></div>
-  <div data-offset-x="100" data-offset-y="15" data-expected-height="20"></div>
-  <div data-offset-x="0" data-offset-y="50" data-expected-height="20"></div>
-  <div data-offset-x="0" data-offset-y="85" data-expected-height="20"></div>
-</div>
-
-<div data-expected-height="120" class="flexbox horizontal" style="align-content: space-around">
-  <div data-offset-x="0" data-offset-y="10" data-expected-height="20"></div>
-  <div data-offset-x="100" data-offset-y="10" data-expected-height="20"></div>
-  <div data-offset-x="0" data-offset-y="50" data-expected-height="20"></div>
-  <div data-offset-x="0" data-offset-y="90" data-expected-height="20"></div>
-</div>
-
-<div data-expected-height="120" class="flexbox horizontal" style="align-content: stretch">
-  <div data-offset-x="0" data-offset-y="0" data-expected-height="40"></div>
-  <div data-offset-x="100" data-offset-y="0" data-expected-height="40"></div>
-  <div data-offset-x="0" data-offset-y="40" data-expected-height="40"></div>
-  <div data-offset-x="0" data-offset-y="80" data-expected-height="40"></div>
-</div>
-
-<!-- Negative overflow goes out the top. -->
-<div data-expected-height="30" class="flexbox horizontal" style="align-content: flex-end; height: 30px">
-  <div data-offset-x="0" data-offset-y="-30" data-expected-height="20"></div>
-  <div data-offset-x="100" data-offset-y="-30" data-expected-height="20"></div>
-  <div data-offset-x="0" data-offset-y="-10" data-expected-height="20"></div>
-  <div data-offset-x="0" data-offset-y="10" data-expected-height="20"></div>
-</div>
-
-<!-- If we overflow, we should true center. -->
-<div data-expected-height="30" class="flexbox horizontal" style="align-content: center; height: 30px">
-  <div data-offset-x="0" data-offset-y="-15" data-expected-height="20"></div>
-  <div data-offset-x="100" data-offset-y="-15" data-expected-height="20"></div>
-  <div data-offset-x="0" data-offset-y="5" data-expected-height="20"></div>
-  <div data-offset-x="0" data-offset-y="25" data-expected-height="20"></div>
-</div>
-
-<!-- If we overflow, we should be the same as flex-start. -->
-<div data-expected-height="30" class="flexbox horizontal" style="align-content: space-between; height: 30px">
-  <div data-offset-x="0" data-offset-y="0" data-expected-height="20"></div>
-  <div data-offset-x="100" data-offset-y="0" data-expected-height="20"></div>
-  <div data-offset-x="0" data-offset-y="20" data-expected-height="20"></div>
-  <div data-offset-x="0" data-offset-y="40" data-expected-height="20"></div>
-</div>
-
-<!-- If we overflow, we should true center. -->
-<div data-expected-height="30" class="flexbox horizontal" style="align-content: space-around; height: 30px">
-  <div data-offset-x="0" data-offset-y="-15" data-expected-height="20"></div>
-  <div data-offset-x="100" data-offset-y="-15" data-expected-height="20"></div>
-  <div data-offset-x="0" data-offset-y="5" data-expected-height="20"></div>
-  <div data-offset-x="0" data-offset-y="25" data-expected-height="20"></div>
-</div>
-
-<!-- If we overflow, we should true center. -->
-<div data-expected-height="30" class="flexbox horizontal" style="align-content: space-evenly; height: 30px">
-  <div data-offset-x="0" data-offset-y="-15" data-expected-height="20"></div>
-  <div data-offset-x="100" data-offset-y="-15" data-expected-height="20"></div>
-  <div data-offset-x="0" data-offset-y="5" data-expected-height="20"></div>
-  <div data-offset-x="0" data-offset-y="25" data-expected-height="20"></div>
-</div>
-
-<!-- Stretch should only grow, not shrink. -->
-<div data-expected-height="30" class="flexbox horizontal" style="align-content: stretch; height: 30px">
-  <div data-offset-x="0" data-offset-y="0" data-expected-height="20"></div>
-  <div data-offset-x="100" data-offset-y="0" data-expected-height="20"></div>
-  <div data-offset-x="0" data-offset-y="20" data-expected-height="20"></div>
-  <div data-offset-x="0" data-offset-y="40" data-expected-height="20"></div>
-</div>
-
-<!-- 0 lines should not crash. -->
-<div data-expected-height="30" class="flexbox horizontal" style="align-content: space-between; height: 30px">
-</div>
-<div data-expected-height="30" class="flexbox horizontal" style="align-content: space-around; height: 30px">
-</div>
-<div data-expected-height="30" class="flexbox horizontal" style="align-content: space-evenly; height: 30px">
-</div>
-<div data-expected-height="30" class="flexbox horizontal" style="align-content: stretch; height: 30px">
-</div>
-
-<!-- 1 line should not crash. -->
-<div data-expected-height="30" class="flexbox horizontal" style="align-content: space-between; height: 30px">
-  <div data-offset-x="0" data-offset-y="0" data-expected-height="10"></div>
-</div>
-<div data-expected-height="30" class="flexbox horizontal" style="align-content: space-around; height: 30px">
-  <div data-offset-x="0" data-offset-y="10" data-expected-height="10"></div>
-</div>
-<div data-expected-height="30" class="flexbox horizontal" style="align-content: space-evenly; height: 30px">
-  <div data-offset-x="0" data-offset-y="10" data-expected-height="10"></div>
-</div>
-<div data-expected-height="30" class="flexbox horizontal" style="align-content: stretch; height: 30px">
-  <div data-offset-x="0" data-offset-y="0" data-expected-height="30"></div>
-</div>
-
-
-<div data-expected-width="120" class="flexbox vertical-rl">
-  <div data-offset-x="80" data-offset-y="0" data-expected-width="40"></div>
-  <div data-offset-x="80" data-offset-y="10" data-expected-width="40"></div>
-  <div data-offset-x="40" data-offset-y="0" data-expected-width="40"></div>
-  <div data-offset-x="0" data-offset-y="0" data-expected-width="40"></div>
-</div>
-
-<div data-expected-width="120" class="flexbox vertical-rl" style="align-content: flex-start">
-  <div data-offset-x="100" data-offset-y="0" data-expected-width="20"></div>
-  <div data-offset-x="100" data-offset-y="10" data-expected-width="20"></div>
-  <div data-offset-x="80" data-offset-y="0" data-expected-width="20"></div>
-  <div data-offset-x="60" data-offset-y="0" data-expected-width="20"></div>
-</div>
-
-<div data-expected-width="120" class="flexbox vertical-rl" style="align-content: flex-end">
-  <div data-offset-x="40" data-offset-y="0" data-expected-width="20"></div>
-  <div data-offset-x="40" data-offset-y="10" data-expected-width="20"></div>
-  <div data-offset-x="20" data-offset-y="0" data-expected-width="20"></div>
-  <div data-offset-x="0" data-offset-y="0" data-expected-width="20"></div>
-</div>
-
-<div data-expected-width="120" class="flexbox vertical-rl" style="align-content: center">
-  <div data-offset-x="70" data-offset-y="0" data-expected-width="20"></div>
-  <div data-offset-x="70" data-offset-y="10" data-expected-width="20"></div>
-  <div data-offset-x="50" data-offset-y="0" data-expected-width="20"></div>
-  <div data-offset-x="30" data-offset-y="0" data-expected-width="20"></div>
-</div>
-
-<div data-expected-width="120" class="flexbox vertical-rl" style="align-content: space-between">
-  <div data-offset-x="100" data-offset-y="0" data-expected-width="20"></div>
-  <div data-offset-x="100" data-offset-y="10" data-expected-width="20"></div>
-  <div data-offset-x="50" data-offset-y="0" data-expected-width="20"></div>
-  <div data-offset-x="0" data-offset-y="0" data-expected-width="20"></div>
-</div>
-
-<div data-expected-width="120" class="flexbox vertical-rl" style="align-content: space-around">
-  <div data-offset-x="90" data-offset-y="0" data-expected-width="20"></div>
-  <div data-offset-x="90" data-offset-y="10" data-expected-width="20"></div>
-  <div data-offset-x="50" data-offset-y="0" data-expected-width="20"></div>
-  <div data-offset-x="10" data-offset-y="0" data-expected-width="20"></div>
-</div>
-
-<div data-expected-width="120" class="flexbox vertical-rl" style="align-content: space-evenly">
-  <div data-offset-x="85" data-offset-y="0" data-expected-width="20"></div>
-  <div data-offset-x="85" data-offset-y="10" data-expected-width="20"></div>
-  <div data-offset-x="50" data-offset-y="0" data-expected-width="20"></div>
-  <div data-offset-x="15" data-offset-y="0" data-expected-width="20"></div>
-</div>
-
-<div data-expected-width="120" class="flexbox vertical-rl" style="align-content: stretch">
-  <div data-offset-x="80" data-offset-y="0" data-expected-width="40"></div>
-  <div data-offset-x="80" data-offset-y="10" data-expected-width="40"></div>
-  <div data-offset-x="40" data-offset-y="0" data-expected-width="40"></div>
-  <div data-offset-x="0" data-offset-y="0" data-expected-width="40"></div>
-</div>
-
-<!-- Negative overflow goes out the right. -->
-<div data-expected-width="30" class="flexbox vertical-rl" style="align-content: flex-end; width: 30px;">
-  <div data-offset-x="40" data-offset-y="0" data-expected-width="20"></div>
-  <div data-offset-x="40" data-offset-y="10" data-expected-width="20"></div>
-  <div data-offset-x="20" data-offset-y="0" data-expected-width="20"></div>
-  <div data-offset-x="0" data-offset-y="0" data-expected-width="20"></div>
-</div>
-
-<!-- If we overflow, we should true center. -->
-<div data-expected-width="30" class="flexbox vertical-rl" style="align-content: center; width: 30px;">
-  <div data-offset-x="25" data-offset-y="0" data-expected-width="20"></div>
-  <div data-offset-x="25" data-offset-y="10" data-expected-width="20"></div>
-  <div data-offset-x="5" data-offset-y="0" data-expected-width="20"></div>
-  <div data-offset-x="-15" data-offset-y="0" data-expected-width="20"></div>
-</div>
-
-<!-- If we overflow, we should be the same as flex-start. -->
-<div data-expected-width="30" class="flexbox vertical-rl" style="align-content: space-between; width: 30px;">
-  <div data-offset-x="10" data-offset-y="0" data-expected-width="20"></div>
-  <div data-offset-x="10" data-offset-y="10" data-expected-width="20"></div>
-  <div data-offset-x="-10" data-offset-y="0" data-expected-width="20"></div>
-  <div data-offset-x="-30" data-offset-y="0" data-expected-width="20"></div>
-</div>
-
-<!-- If we overflow, we should true center. -->
-<div data-expected-width="30" class="flexbox vertical-rl" style="align-content: space-around; width: 30px;">
-  <div data-offset-x="25" data-offset-y="0" data-expected-width="20"></div>
-  <div data-offset-x="25" data-offset-y="10" data-expected-width="20"></div>
-  <div data-offset-x="5" data-offset-y="0" data-expected-width="20"></div>
-  <div data-offset-x="-15" data-offset-y="0" data-expected-width="20"></div>
-</div>
-
-<!-- If we overflow, we should true center. -->
-<div data-expected-width="30" class="flexbox vertical-rl" style="align-content: space-evenly; width: 30px;">
-  <div data-offset-x="25" data-offset-y="0" data-expected-width="20"></div>
-  <div data-offset-x="25" data-offset-y="10" data-expected-width="20"></div>
-  <div data-offset-x="5" data-offset-y="0" data-expected-width="20"></div>
-  <div data-offset-x="-15" data-offset-y="0" data-expected-width="20"></div>
-</div>
-
-<!-- Stretch should only grow, not shrink. -->
-<div data-expected-width="30" class="flexbox vertical-rl" style="align-content: stretch; width: 30px;">
-  <div data-offset-x="10" data-offset-y="0" data-expected-width="20"></div>
-  <div data-offset-x="10" data-offset-y="10" data-expected-width="20"></div>
-  <div data-offset-x="-10" data-offset-y="0" data-expected-width="20"></div>
-  <div data-offset-x="-30" data-offset-y="0" data-expected-width="20"></div>
-</div>
-
-<!-- 0 lines should not crash. -->
-<div data-expected-width="30" class="flexbox vertical-rl" style="align-content: space-between; width: 30px">
-</div>
-<div data-expected-width="30" class="flexbox vertical-rl" style="align-content: space-around; width: 30px">
-</div>
-<div data-expected-width="30" class="flexbox vertical-rl" style="align-content: space-evenly; width: 30px">
-</div>
-<div data-expected-width="30" class="flexbox vertical-rl" style="align-content: stretch; width: 30px">
-</div>
-
-<!-- 1 line should not crash. -->
-<div data-expected-width="30" class="flexbox vertical-rl" style="align-content: space-between; width: 30px">
-  <div data-offset-x="20" data-offset-y="0" data-expected-width="10"></div>
-</div>
-<div data-expected-width="30" class="flexbox vertical-rl" style="align-content: space-around; width: 30px">
-  <div data-offset-x="10" data-offset-y="0" data-expected-width="10"></div>
-</div>
-<div data-expected-width="30" class="flexbox vertical-rl" style="align-content: space-evenly; width: 30px">
-  <div data-offset-x="10" data-offset-y="0" data-expected-width="10"></div>
-</div>
-<div data-expected-width="30" class="flexbox vertical-rl" style="align-content: stretch; width: 30px">
-  <div data-offset-x="0" data-offset-y="0" data-expected-width="30"></div>
-</div>
deleted file mode 100644
--- a/testing/web-platform/tests/css/css-flexbox/align-content-wrap-004.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<!DOCTYPE html>
-<link rel="author" title="Google LLC" href="http://www.google.com" />
-<link rel="help" href="https://drafts.csswg.org/css-flexbox/#cross-sizing" />
-<title>css-flexbox: Tests that we size items in a wrapping column flexbox as fit-content</title>
-<link rel="match" href="../reference/ref-filled-green-100px-square.xht" />
-
-<style>
-.flex {
-  display: flex;
-  flex-wrap: wrap;
-  align-content: center;
-  flex-direction: column;
-  align-items: flex-start;
-  width: 100px;
-  line-height: 1;
-}
-.flex > div {
-  min-height: 0;
-  background: green;
-}
-.flex * {
-  vertical-align: top;
-}
-</style>
-
-<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
-
-<div class="flex">
-  <div style="align-self: stretch;">
-    <div style="display: inline-block; width: 20px; height: 40px;"></div>
-  </div>
-  <div style="height: 60px;">
-    <div style="display: inline-block; height: 15px; width: 20px;"></div>
-    <div style="display: inline-block; height: 15px; width: 100px;"></div>
-    <div style="display: inline-block; height: 15px; width: 100px;"></div>
-    <div style="display: inline-block; height: 15px; width: 100px;"></div>
-  </div>
-</div>
deleted file mode 100644
--- a/testing/web-platform/tests/css/css-grid/grid-model/grid-container-scrollbar-001-ref.html
+++ /dev/null
@@ -1,96 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS container Layout Test Reference</title>
-<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
-<style>
-  .container {
-    font: 10px/1 Ahem;
-    margin: 10px;
-    background: grey;
-  }
-
-  .scrollX {
-    overflow-x: scroll;
-  }
-
-  .scrollY {
-    overflow-y: scroll;
-  }
-
-  .fixedSize {
-    width: 200px;
-    height: 50px;
-  }
-
-  .container > div {
-    background: cyan;
-    width: 100%;
-    height: 100%;
-  }
-
-  .directionRTL {
-    direction: rtl;
-  }
-</style>
-
-<p>The test passes if it has the same output as the reference.</p>
-
-<div style="float: left; width: 350px;">
-
-  <h2>direction: ltr;</h2>
-
-  <div class="container scrollX">
-    <div>item</div>
-  </div>
-
-  <div class="container scrollY">
-    <div>item</div>
-  </div>
-
-  <div class="container scrollX scrollY">
-    <div>item</div>
-  </div>
-
-  <div class="container fixedSize scrollX">
-    <div>item</div>
-  </div>
-
-  <div class="container fixedSize scrollY">
-    <div>item</div>
-  </div>
-
-  <div class="container fixedSize scrollX scrollY">
-    <div>item</div>
-  </div>
-
-</div>
-
-<div style="float: left; width: 350px;">
-
-  <h2>direction: rtl;</h2>
-
-  <div class="directionRTL container scrollX">
-    <div>item</div>
-  </div>
-
-  <div class="directionRTL container scrollY">
-    <div>item</div>
-  </div>
-
-  <div class="directionRTL container scrollX scrollY">
-    <div>item</div>
-  </div>
-
-  <div class="directionRTL container fixedSize scrollX">
-    <div>item</div>
-  </div>
-
-  <div class="directionRTL container fixedSize scrollY">
-    <div>item</div>
-  </div>
-
-  <div class="directionRTL container fixedSize scrollX scrollY">
-    <div>item</div>
-  </div>
-
-</div>
deleted file mode 100644
--- a/testing/web-platform/tests/css/css-grid/grid-model/grid-container-scrollbar-001.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Grid Layout Test: Grid container with scrollbars</title>
-<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
-<link rel="help" href="https://drafts.csswg.org/css-grid/#grid-model">
-<link rel="match" href="grid-container-scrollbar-001-ref.html">
-<meta name="assert" content="This test verifies that scrollbars are properly painted on grid containers, and are shown in the expected position depending on the direction.">
-<link href="support/grid.css" rel="stylesheet">
-<style>
-  .grid {
-    font: 10px/1 Ahem;
-    margin: 10px;
-  }
-
-  .scrollX {
-    overflow-x: scroll;
-  }
-
-  .scrollY {
-    overflow-y: scroll;
-  }
-
-  .fixedSize {
-    width: 200px;
-    height: 50px;
-  }
-
-  .grid > div {
-    background: cyan;
-  }
-</style>
-
-<p>The test passes if it has the same output as the reference.</p>
-
-<div style="float: left; width: 350px;">
-
-  <h2>direction: ltr;</h2>
-
-  <div class="grid scrollX">
-    <div>item</div>
-  </div>
-
-  <div class="grid scrollY">
-    <div>item</div>
-  </div>
-
-  <div class="grid scrollX scrollY">
-    <div>item</div>
-  </div>
-
-  <div class="grid fixedSize scrollX">
-    <div>item</div>
-  </div>
-
-  <div class="grid fixedSize scrollY">
-    <div>item</div>
-  </div>
-
-  <div class="grid fixedSize scrollX scrollY">
-    <div>item</div>
-  </div>
-
-</div>
-
-<div style="float: left; width: 350px;">
-
-  <h2>direction: rtl;</h2>
-
-  <div class="directionRTL grid scrollX">
-    <div>item</div>
-  </div>
-
-  <div class="directionRTL grid scrollY">
-    <div>item</div>
-  </div>
-
-  <div class="directionRTL grid scrollX scrollY">
-    <div>item</div>
-  </div>
-
-  <div class="directionRTL grid fixedSize scrollX">
-    <div>item</div>
-  </div>
-
-  <div class="directionRTL grid fixedSize scrollY">
-    <div>item</div>
-  </div>
-
-  <div class="directionRTL grid fixedSize scrollX scrollY">
-    <div>item</div>
-  </div>
-
-</div>
deleted file mode 100644
--- a/testing/web-platform/tests/css/css-grid/grid-model/grid-container-scrollbar-vertical-lr-001-ref.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS container Layout Test Reference</title>
-<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
-<style>
-  .container {
-    font: 10px/1 Ahem;
-    margin: 10px;
-    background: grey;
-    writing-mode: vertical-lr;
-  }
-
-  .scrollX {
-    overflow-x: scroll;
-  }
-
-  .scrollY {
-    overflow-y: scroll;
-  }
-
-  .fixedSize {
-    width: 200px;
-    height: 50px;
-  }
-
-  .container > div {
-    background: cyan;
-    width: 100%;
-    height: 100%;
-  }
-
-  .directionRTL {
-    direction: rtl;
-  }
-</style>
-
-<p>The test passes if it has the same output as the reference.</p>
-
-<div style="float: left; width: 350px;">
-
-  <h2>direction: ltr;</h2>
-
-  <div class="container scrollX">
-    <div>item</div>
-  </div>
-
-  <div class="container scrollY">
-    <div>item</div>
-  </div>
-
-  <div class="container scrollX scrollY">
-    <div>item</div>
-  </div>
-
-  <div class="container fixedSize scrollX">
-    <div>item</div>
-  </div>
-
-  <div class="container fixedSize scrollY">
-    <div>item</div>
-  </div>
-
-  <div class="container fixedSize scrollX scrollY">
-    <div>item</div>
-  </div>
-
-</div>
-
-<div style="float: left; width: 350px;">
-
-  <h2>direction: rtl;</h2>
-
-  <div class="directionRTL container scrollX">
-    <div>item</div>
-  </div>
-
-  <div class="directionRTL container scrollY">
-    <div>item</div>
-  </div>
-
-  <div class="directionRTL container scrollX scrollY">
-    <div>item</div>
-  </div>
-
-  <div class="directionRTL container fixedSize scrollX">
-    <div>item</div>
-  </div>
-
-  <div class="directionRTL container fixedSize scrollY">
-    <div>item</div>
-  </div>
-
-  <div class="directionRTL container fixedSize scrollX scrollY">
-    <div>item</div>
-  </div>
-
-</div>
deleted file mode 100644
--- a/testing/web-platform/tests/css/css-grid/grid-model/grid-container-scrollbar-vertical-lr-001.html
+++ /dev/null
@@ -1,94 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Grid Layout Test: Grid container with scrollbars</title>
-<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
-<link rel="help" href="https://drafts.csswg.org/css-grid/#grid-model">
-<link rel="match" href="grid-container-scrollbar-vertical-lr-001-ref.html">
-<meta name="assert" content="This test verifies that scrollbars are properly painted on grid containers, and are shown in the expected position depending on the direction.">
-<link href="support/grid.css" rel="stylesheet">
-<style>
-  .grid {
-    font: 10px/1 Ahem;
-    margin: 10px;
-    writing-mode: vertical-lr;
-  }
-
-  .scrollX {
-    overflow-x: scroll;
-  }
-
-  .scrollY {
-    overflow-y: scroll;
-  }
-
-  .fixedSize {
-    width: 200px;
-    height: 50px;
-  }
-
-  .grid > div {
-    background: cyan;
-  }
-</style>
-
-<p>The test passes if it has the same output as the reference.</p>
-
-<div style="float: left; width: 350px;">
-
-  <h2>direction: ltr;</h2>
-
-  <div class="grid scrollX">
-    <div>item</div>
-  </div>
-
-  <div class="grid scrollY">
-    <div>item</div>
-  </div>
-
-  <div class="grid scrollX scrollY">
-    <div>item</div>
-  </div>
-
-  <div class="grid fixedSize scrollX">
-    <div>item</div>
-  </div>
-
-  <div class="grid fixedSize scrollY">
-    <div>item</div>
-  </div>
-
-  <div class="grid fixedSize scrollX scrollY">
-    <div>item</div>
-  </div>
-
-</div>
-
-<div style="float: left; width: 350px;">
-
-  <h2>direction: rtl;</h2>
-
-  <div class="directionRTL grid scrollX">
-    <div>item</div>
-  </div>
-
-  <div class="directionRTL grid scrollY">
-    <div>item</div>
-  </div>
-
-  <div class="directionRTL grid scrollX scrollY">
-    <div>item</div>
-  </div>
-
-  <div class="directionRTL grid fixedSize scrollX">
-    <div>item</div>
-  </div>
-
-  <div class="directionRTL grid fixedSize scrollY">
-    <div>item</div>
-  </div>
-
-  <div class="directionRTL grid fixedSize scrollX scrollY">
-    <div>item</div>
-  </div>
-
-</div>
deleted file mode 100644
--- a/testing/web-platform/tests/css/css-grid/grid-model/grid-container-scrollbar-vertical-rl-001-ref.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS container Layout Test Reference</title>
-<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
-<style>
-  .container {
-    font: 10px/1 Ahem;
-    margin: 10px;
-    background: grey;
-    writing-mode: vertical-rl;
-  }
-
-  .scrollX {
-    overflow-x: scroll;
-  }
-
-  .scrollY {
-    overflow-y: scroll;
-  }
-
-  .fixedSize {
-    width: 200px;
-    height: 50px;
-  }
-
-  .container > div {
-    background: cyan;
-    width: 100%;
-    height: 100%;
-  }
-
-  .directionRTL {
-    direction: rtl;
-  }
-</style>
-
-<p>The test passes if it has the same output as the reference.</p>
-
-<div style="float: left; width: 350px;">
-
-  <h2>direction: ltr;</h2>
-
-  <div class="container scrollX">
-    <div>item</div>
-  </div>
-
-  <div class="container scrollY">
-    <div>item</div>
-  </div>
-
-  <div class="container scrollX scrollY">
-    <div>item</div>
-  </div>
-
-  <div class="container fixedSize scrollX">
-    <div>item</div>
-  </div>
-
-  <div class="container fixedSize scrollY">
-    <div>item</div>
-  </div>
-
-  <div class="container fixedSize scrollX scrollY">
-    <div>item</div>
-  </div>
-
-</div>
-
-<div style="float: left; width: 350px;">
-
-  <h2>direction: rtl;</h2>
-
-  <div class="directionRTL container scrollX">
-    <div>item</div>
-  </div>
-
-  <div class="directionRTL container scrollY">
-    <div>item</div>
-  </div>
-
-  <div class="directionRTL container scrollX scrollY">
-    <div>item</div>
-  </div>
-
-  <div class="directionRTL container fixedSize scrollX">
-    <div>item</div>
-  </div>
-
-  <div class="directionRTL container fixedSize scrollY">
-    <div>item</div>
-  </div>
-
-  <div class="directionRTL container fixedSize scrollX scrollY">
-    <div>item</div>
-  </div>
-
-</div>
deleted file mode 100644
--- a/testing/web-platform/tests/css/css-grid/grid-model/grid-container-scrollbar-vertical-rl-001.html
+++ /dev/null
@@ -1,94 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Grid Layout Test: Grid container with scrollbars</title>
-<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
-<link rel="help" href="https://drafts.csswg.org/css-grid/#grid-model">
-<link rel="match" href="grid-container-scrollbar-vertical-rl-001-ref.html">
-<meta name="assert" content="This test verifies that scrollbars are properly painted on grid containers, and are shown in the expected position depending on the direction.">
-<link href="support/grid.css" rel="stylesheet">
-<style>
-  .grid {
-    font: 10px/1 Ahem;
-    margin: 10px;
-    writing-mode: vertical-rl;
-  }
-
-  .scrollX {
-    overflow-x: scroll;
-  }
-
-  .scrollY {
-    overflow-y: scroll;
-  }
-
-  .fixedSize {
-    width: 200px;
-    height: 50px;
-  }
-
-  .grid > div {
-    background: cyan;
-  }
-</style>
-
-<p>The test passes if it has the same output as the reference.</p>
-
-<div style="float: left; width: 350px;">
-
-  <h2>direction: ltr;</h2>
-
-  <div class="grid scrollX">
-    <div>item</div>
-  </div>
-
-  <div class="grid scrollY">
-    <div>item</div>
-  </div>
-
-  <div class="grid scrollX scrollY">
-    <div>item</div>
-  </div>
-
-  <div class="grid fixedSize scrollX">
-    <div>item</div>
-  </div>
-
-  <div class="grid fixedSize scrollY">
-    <div>item</div>
-  </div>
-
-  <div class="grid fixedSize scrollX scrollY">
-    <div>item</div>
-  </div>
-
-</div>
-
-<div style="float: left; width: 350px;">
-
-  <h2>direction: rtl;</h2>
-
-  <div class="directionRTL grid scrollX">
-    <div>item</div>
-  </div>
-
-  <div class="directionRTL grid scrollY">
-    <div>item</div>
-  </div>
-
-  <div class="directionRTL grid scrollX scrollY">
-    <div>item</div>
-  </div>
-
-  <div class="directionRTL grid fixedSize scrollX">
-    <div>item</div>
-  </div>
-
-  <div class="directionRTL grid fixedSize scrollY">
-    <div>item</div>
-  </div>
-
-  <div class="directionRTL grid fixedSize scrollX scrollY">
-    <div>item</div>
-  </div>
-
-</div>
--- a/testing/web-platform/tests/css/css-logical/animation-004.html
+++ b/testing/web-platform/tests/css/css-logical/animation-004.html
@@ -23,41 +23,35 @@ function makeDeclaration(object = {}) {
  * specified in finalStyles, be linear, last 10 seconds and start halfway, but this can be
  * overridden in baseStyles.
  *
  * @param t  The testharness.js Test object.
  * @param baseStyles  A dictionary object with property names and values to set on the
  *                    element before starting the transition.
  * @param finalStyles  A dictionary object with property names and values towards which
  *                     the element will transition.
- * @param [transitionStyles]  An optional dictionary object to costumize the transition.
  */
-function transition(t, baseStyles, finalStyles, transitionStyles = {}) {
+function transition(t, baseStyles, finalStyles) {
   // Clear styles from previous test.
   testEl.style.cssText = "";
   testEl.className = "";
   getComputedStyle(testEl).height;
 
-  // Set base and final styles
-  addStyle(t, {
-    "#test": makeDeclaration(baseStyles),
-    "#test.transition": makeDeclaration(finalStyles),
-  });
-  getComputedStyle(testEl).height;
-
-  // Set transition styles
+  // Set base styles
   const defaultTransition = {
     "transition-property": Object.keys(finalStyles).join(", "),
     "transition-timing-function": "linear",
     "transition-duration": "10s",
     "transition-delay": "-5s",
   };
   addStyle(t, {
-    "#test": makeDeclaration(Object.assign(defaultTransition, transitionStyles)),
+    "#test": makeDeclaration(Object.assign(defaultTransition, baseStyles)),
+    "#test.transition": makeDeclaration(finalStyles),
   });
+  getComputedStyle(testEl).height;
 
   // Start the transition
   testEl.className = "transition";
 }
 
 test(t => {
   transition(t, {
     "block-size": "0px",
@@ -96,32 +90,32 @@ test(t => {
   }, {
     "block-size": "100px",
     "height": "300px",
   });
   assert_equals(getComputedStyle(testEl).height, '250px');
 }, 'Declaration order is respected within declaration blocks');
 
 test(t => {
-  transition(t, {}, {
+  transition(t, {
+    "transition-timing-function": "step-start",
+  }, {
     "margin-top": "200px",
     "margin-block-start": "100px"
-  }, {
-    "transition-timing-function": "step-start",
   });
   assert_equals(getComputedStyle(testEl).marginTop, '100px');
 }, 'Logical properties are able to override physical properties in declaration blocks');
 
 test(t => {
-  transition(t, {}, {
+  transition(t, {
+    "transition-timing-function": "step-start",
+  }, {
     "margin-inline": "200px",
     "margin-inline-start": "0px",
     "margin-inline-start": "100px",
-  }, {
-    "transition-timing-function": "step-start",
   });
   assert_equals(getComputedStyle(testEl).marginLeft, '100px');
 }, 'Declaration order is respected amongst logical properties within declaration blocks');
 
 test(t => {
   transition(t, {
     "block-size": "200px",
   }, {
@@ -154,23 +148,22 @@ test(t => {
 
   testEl.style.writingMode = 'vertical-rl';
   assert_equals(getComputedStyle(testEl).width, '50px');
   assert_equals(getComputedStyle(testEl).height, '0px');
 }, 'Transitions update when the writing-mode is changed');
 
 promise_test(async t => {
   transition(t, {
+    "transition-delay": "-9.9s",
     "width": "0px",
     "height": "0px",
     "block-size": "0px",
   }, {
     "block-size": "100px",
-  }, {
-    "transition-delay": "-9.9s",
   });
   const watcher = new EventWatcher(t, testEl, [ 'transitionend' ]);
   await watcher.wait_for('transitionend');
 
   assert_equals(getComputedStyle(testEl).width, '0px');
   assert_equals(getComputedStyle(testEl).height, '100px');
 
   testEl.style.transition = 'none';
@@ -249,36 +242,9 @@ test(t => {
   assert_equals(getComputedStyle(testEl).marginLeft, '50px');
   assert_equals(getComputedStyle(testEl).marginRight, '0px');
 
   testEl.style.direction = 'rtl';
   assert_equals(getComputedStyle(testEl).marginLeft, '0px');
   assert_equals(getComputedStyle(testEl).marginRight, '50px');
 }, 'Transitions update when the direction is changed');
 
-test(t => {
-  transition(t, {
-    "margin-inline-start": "100px",
-  }, {
-    "margin-left": "200px",
-  });
-  assert_equals(getComputedStyle(testEl).marginLeft, '150px');
-  assert_equals(getComputedStyle(testEl).marginRight, '0px');
-
-  testEl.style.direction = 'rtl';
-  assert_equals(getComputedStyle(testEl).marginLeft, '150px');
-  assert_equals(getComputedStyle(testEl).marginRight, '100px');
-}, 'Transitions from logical to physical update when the direction is changed');
-
-test(t => {
-  transition(t, {
-    "margin-left": "200px",
-  }, {
-    "margin-inline-start": "100px",
-  });
-  assert_equals(getComputedStyle(testEl).marginLeft, '150px');
-  assert_equals(getComputedStyle(testEl).marginRight, '0px');
-
-  testEl.style.direction = 'rtl';
-  assert_equals(getComputedStyle(testEl).marginLeft, '200px');
-  assert_equals(getComputedStyle(testEl).marginRight, '50px');
-}, 'Transitions from physical to logical update when the direction is changed');
 </script>
deleted file mode 100644
--- a/testing/web-platform/tests/css/css-logical/logical-values-float-clear-reftest.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8" />
-<title>CSS Logical Values: Flow-Relative Values for the 'float' property</title>
-<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com" />
-<link rel="help" href="https://drafts.csswg.org/css-logical/#float-clear">
-<meta name="assert" content="This test checks that the 'inline-start' and 'inline-end' values of the 'float' and 'clear' properties map to the correct physical value." />
-<link rel="match" href="reference/logical-values-float-clear-reftest-ref.html">
-<style>
-.test {
-  display: block;
-  overflow: hidden;
-  width: 300px;
-}
-.inline {
-  display: inline;
-}
-.float, .clear {
-  display: block;
-  overflow: hidden;
-  height: 3px;
-  width: 100px;
-  background: #f0f;
-}
-.clear {
-  background: #0ff;
-}
-</style>
-<body>
-<script>
-const sides = ["inline-start", "inline-end"];
-const directions = ["ltr", "rtl"];
-for (const floatSide of sides) {
-  for (const clearSide of sides) {
-    for (const containerDirection of directions) {
-      for (const inlineParentDirection of [null, ...directions]) {
-        for (const floatDirection of directions) {
-          for (const clearDirection of directions) {
-            const containerEl = document.createElement("div");
-            containerEl.className = "test";
-            containerEl.style.direction = containerDirection;
-            const floatEl = document.createElement("div");
-            floatEl.className = "float";
-            floatEl.style.direction = floatDirection;
-            floatEl.style.float = floatSide;
-            const clearEl = document.createElement("div");
-            clearEl.className = "clear";
-            clearEl.style.direction = floatDirection;
-            clearEl.style.clear = clearSide;
-            if (inlineParentDirection) {
-              const inlineParent = document.createElement("div");
-              inlineParent.className = "inline";
-              inlineParent.style.direction = inlineParentDirection;
-              inlineParent.appendChild(floatEl);
-              inlineParent.appendChild(clearEl);
-              containerEl.appendChild(inlineParent);
-            } else {
-              containerEl.appendChild(floatEl);
-              containerEl.appendChild(clearEl);
-            }
-            document.body.appendChild(containerEl);
-          }
-        }
-      }
-    }
-  }
-}
-</script>
-</body>
deleted file mode 100644
--- a/testing/web-platform/tests/css/css-logical/reference/logical-values-float-clear-reftest-ref.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8" />
-<title>CSS Reftest Reference</title>
-<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com" />
-<style>
-.test {
-  display: block;
-  overflow: hidden;
-  width: 300px;
-}
-.inline {
-  display: inline;
-}
-.float, .clear {
-  display: block;
-  overflow: hidden;
-  height: 3px;
-  width: 100px;
-  background: #f0f;
-}
-.clear {
-  background: #0ff;
-}
-</style>
-<body>
-<script>
-function physicalValue(value, containerDirection) {
-  return ((value === "inline-start") === (containerDirection === "ltr")) ? "left" : "right";
-}
-const sides = ["inline-start", "inline-end"];
-const directions = ["ltr", "rtl"];
-for (const floatSide of sides) {
-  for (const clearSide of sides) {
-    for (const containerDirection of directions) {
-      for (const inlineParentDirection of [null, ...directions]) {
-        for (const floatDirection of directions) {
-          for (const clearDirection of directions) {
-            const containerEl = document.createElement("div");
-            containerEl.className = "test";
-            containerEl.style.direction = containerDirection;
-            const floatEl = document.createElement("div");
-            floatEl.className = "float";
-            floatEl.style.direction = floatDirection;
-            floatEl.style.float = physicalValue(floatSide, containerDirection);
-            const clearEl = document.createElement("div");
-            clearEl.className = "clear";
-            clearEl.style.direction = floatDirection;
-            clearEl.style.clear = physicalValue(clearSide, containerDirection);
-            if (inlineParentDirection) {
-              const inlineParent = document.createElement("div");
-              inlineParent.className = "inline";
-              inlineParent.style.direction = inlineParentDirection;
-              inlineParent.appendChild(floatEl);
-              inlineParent.appendChild(clearEl);
-              containerEl.appendChild(inlineParent);
-            } else {
-              containerEl.appendChild(floatEl);
-              containerEl.appendChild(clearEl);
-            }
-            document.body.appendChild(containerEl);
-          }
-        }
-      }
-    }
-  }
-}
-</script>
-</body>
--- a/testing/web-platform/tests/css/css-logical/resources/test-logical-values.js
+++ b/testing/web-platform/tests/css/css-logical/resources/test-logical-values.js
@@ -16,12 +16,32 @@ import {
  */
 export function runTests(property, values) {
   for (const value of values) {
     test(function() {
       const {style} = testElement;
       style.cssText = "";
       style.setProperty(property, value);
       testCSSValues("logical values in inline style", style, [[property, value]]);
-      testComputedValues("logical values in computed style", style, [[property, value]]);
     }, `Test that '${property}: ${value}' is supported.`);
+
+    const camelCase = value.replace(/-(.)/g, (match, $1) => $1.toUpperCase());
+    for (const writingMode of writingModes) {
+      for (const style of writingMode.styles) {
+        const writingModeDecl = makeDeclaration(style);
+        test(function() {
+          const physicalSide = writingMode[camelCase];
+          let expected;
+          if (physicalSide === writingMode.lineLeft) {
+            expected = "left";
+          } else if (physicalSide === writingMode.lineRight) {
+            expected = "right";
+          } else {
+            expected = physicalSide;
+          }
+          testComputedValues(`computed value`,
+                             `.test { ${writingModeDecl} }`,
+                             [[property, expected]]);
+        }, `Test '${property}: ${value}' with '${writingModeDecl}'.`);
+      }
+    }
   }
 }
--- a/testing/web-platform/tests/css/css-properties-values-api/var-reference-registered-properties.html
+++ b/testing/web-platform/tests/css/css-properties-values-api/var-reference-registered-properties.html
@@ -1,13 +1,12 @@
 <!DOCTYPE HTML>
 <link rel="help" href="https://drafts.css-houdini.org/css-properties-values-api/#dom-css-registerproperty" />
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
-<script src="./resources/utils.js"></script>
 <style>
 div {
     --registered-length-1: 10px;
     --registered-length-2: var(--registered-length-1);
     --registered-length-3: var(--length-1);
     --registered-length-4: calc(var(--length-1) + 40px);
     --registered-length-5: var(--invalid, 70px);
     --registered-length-6: calc(var(--registered-length-3)*4);
@@ -131,43 +130,9 @@ test(function(){
         inherits: false
     });
     element.style = 'font-size: 11px; --length-calc-list: 10em, calc(10em + 10px); --unregistered:var(--length-calc-list);';
     let computedStyle = getComputedStyle(element);
     assert_equals(computedStyle.getPropertyValue('--unregistered'), '110px, 120px');
     element.style = '';
 }, 'Lists with relative units are absolutized when substituting');
 
-function test_valid_fallback(syntax, value, fallback) {
-    test(function(){
-        let name = generate_property(syntax);
-        try {
-            element.style = `${name}: ${value}; --x:var(${name},${fallback})`;
-            let computedStyle = getComputedStyle(element);
-            assert_equals(computedStyle.getPropertyValue('--x'), value);
-        } finally {
-            element.style = '';
-        }
-    }, `Valid fallback does not invalidate var()-reference [${syntax}, ${fallback}]`);
-}
-
-function test_invalid_fallback(syntax, value, fallback) {
-    test(function(){
-        let name = generate_property(syntax);
-        try {
-            element.style = `${name}: ${value}; --x:var(${name},${fallback})`;
-            let computedStyle = getComputedStyle(element);
-            assert_equals(computedStyle.getPropertyValue('--x'), '');
-        } finally {
-            element.style = '';
-        }
-    }, `Invalid fallback invalidates var()-reference [${syntax}, ${fallback}]`);
-}
-
-test_valid_fallback('<length>', '40px', '10px');
-test_valid_fallback('<length> | <color>', '40px', 'red');
-test_valid_fallback('<length> | none', '40px', 'none');
-
-test_invalid_fallback('<length>', '40px', 'red');
-test_invalid_fallback('<length> | none', '40px', 'nolength');
-test_invalid_fallback('<length>', '40px', 'var(--novar)');
-
 </script>
deleted file mode 100644
--- a/testing/web-platform/tests/css/css-text/writing-system/reference/writing-system-font-001-ref.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!doctype html>
-<html lang=en>
-<meta charset=utf-8>
-<title>CSS test reference</title>
-<link rel=author title="Ambrose Li" href="http://port.ambroseli.ca/">
-<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
-
-<p>The test passes if the word pairs below are all displayed in the same font.
-
-<table>
-  <tr>
-    <td>ping4 on1
-    <td>salaam
-    <td>shalom
-  <tr>
-    <td>ping4 on1
-    <td>salaam
-    <td>shalom
-</table>
-
deleted file mode 100644
--- a/testing/web-platform/tests/css/css-text/writing-system/reference/writing-system-line-break-001-ref.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!doctype html>
-<html lang=en>
-<meta charset=utf-8>
-<title>CSS test reference</title>
-<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
-<style>
-div {
-  font-family: monospace;
-}
-</style>
-
-<p>The test passes if the first line below ends with a hyphen.
-
-<div lang=ja-Latn>Fushimi&#x2010;<br>ku</div>
deleted file mode 100644
--- a/testing/web-platform/tests/css/css-text/writing-system/reference/writing-system-line-break-002-ref.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<!doctype html>
-<html lang=en>
-<meta charset=utf-8>
-<title>CSS test reference</title>
-<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
-<style>
-</style>
-
-<p>The test passes if the question mark in the phrase below is alone on the second line.
-
-<div lang=en-Hrkt>ハロー、ハウアーユー<br>?</div>
deleted file mode 100644
--- a/testing/web-platform/tests/css/css-text/writing-system/reference/writing-system-segment-break-001-ref.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<!doctype html>
-<html lang=en>
-<meta charset=utf-8>
-<title>CSS test reference</title>
-<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
-
-<p>The test passes if the both lines are identical, including the spacing of the characters.
-
-<div lang=ain-Kana>“アイヌイタㇰ”</div>
-<div lang=ain-Kana>“アイヌイタㇰ”</div>
deleted file mode 100644
--- a/testing/web-platform/tests/css/css-text/writing-system/reference/writing-system-text-transform-001-ref.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!doctype html>
-<html lang=en>
-<meta charset=utf-8>
-<title>CSS test reference</title>
-<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
-<style>
-div {
-  font-size: 3em;
-}
-</style>
-<p>Test passes if the two words below are identical: there must be a dot on the “i” letter at the beginning of the word.
-<div lang=tr-Cyrl>iстанбул</div>
-<div lang=tr-Cyrl>iстанбул</div>
deleted file mode 100644
--- a/testing/web-platform/tests/css/css-text/writing-system/writing-system-font-001.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<!doctype html>
-<html lang=en>
-<meta charset=utf-8>
-<title>CSS test: font selection and writing sytem</title>
-<link rel=author title="Ambrose Li" href="http://port.ambroseli.ca/">
-<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
-<link rel=help href="https://drafts.csswg.org/css-text-3/#languages">
-<link rel=help href="https://drafts.csswg.org/css-text-3/#script-tagging">
-<link rel=help href="https://drafts.csswg.org/css-fonts-4/#language-specific-support">
-<link rel=match href="reference/writing-system-font-001-ref.html">
-<meta name=assert content="An explicit writing system takes precedence over the content language for font selection">
-
-<p>The test passes if the word pairs below are all displayed in the same font.
-
-<table>
-  <tr>
-    <td>ping4 on1
-    <td>salaam
-    <td>shalom
-  <tr>
-    <td><span lang=zh-yue-latn>ping4 on1</span>
-    <td><span lang=ar-latn>salaam</span>
-    <td><span lang=he-latn>shalom</span>
-</table>
-
deleted file mode 100644
--- a/testing/web-platform/tests/css/css-text/writing-system/writing-system-line-break-001.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!doctype html>
-<html lang=en>
-<meta charset=utf-8>
-<title>CSS test: writing system and line breaking</title>
-<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
-<link rel=help href="https://drafts.csswg.org/css-text-3/#languages">
-<link rel=help href="https://drafts.csswg.org/css-text-3/#script-tagging">
-<link rel=help href="https://drafts.csswg.org/css-text-3/#propdef-line-break">
-<link rel=match href="reference/writing-system-line-break-001-ref.html">
-<meta name=assert content="breaks before hyphens when line-break is loose are allowed if the content language is Japanese,
-but not when the writing system is Latin.">
-<style>
-div {
-  font-family: monospace;
-  width: 7ch;
-  line-break: loose;
-}
-</style>
-
-<p>The test passes if the first line below ends with a hyphen.
-
-<div lang=ja-Latn>Fushimi&#x2010;ku</div>
deleted file mode 100644
--- a/testing/web-platform/tests/css/css-text/writing-system/writing-system-line-break-002.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!doctype html>
-<html lang=en>
-<meta charset=utf-8>
-<title>CSS test: writing system and line breaking</title>
-<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
-<link rel=help href="https://drafts.csswg.org/css-text-3/#languages">
-<link rel=help href="https://drafts.csswg.org/css-text-3/#script-tagging">
-<link rel=help href="https://drafts.csswg.org/css-text-3/#propdef-line-break">
-<link rel=match href="reference/writing-system-line-break-002-ref.html">
-<meta name=assert content="breaks before U+FF1F when line-break is loose are allowed
-if the writing system is Japanese (which includes Hrkt),
-but even when the language not Japanese.">
-<style>
-div {
-  width: 10em;
-  line-break: loose;
-}
-</style>
-
-<p>The test passes if the question mark in the phrase below is alone on the second line.
-
-<div lang=en-Hrkt>ハロー、ハウアーユー?</div>
deleted file mode 100644
--- a/testing/web-platform/tests/css/css-text/writing-system/writing-system-segment-break-001.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<!doctype html>
-<html lang=en>
-<meta charset=utf-8>
-<title>CSS test: writing system and segment break transformation</title>
-<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
-<link rel=help href="https://drafts.csswg.org/css-text-3/#languages">
-<link rel=help href="https://drafts.csswg.org/css-text-3/#script-tagging">
-<link rel=help href="https://drafts.csswg.org/css-text-3/#line-break-transform">
-<link rel=match href="reference/writing-system-segment-break-001-ref.html">
-<meta name=assert content="If the writing system of the segment break is Chinese, Japanese, or Yi,
-and the character before or after the segment break is punctuation or a symbol (Unicode general category P* or S*)
-and has an East Asian Width property of A or is Emoji,
-and the character on the other side of the segment break is F, W, or H, and not Hangul or Emoji,
-then the segment break is removed.">
-<!--
-In this case, checking with “ and ” which are punctuation with East Asian Width of A,
-next to Katakana letters (which are W),
-while the writing system is Katakana, which is classified as Japanese,
-despite a non Japanese content language (Ainu).
--->
-
-<p>The test passes if the both lines are identical, including the spacing of the characters.
-
-<div lang=ain-Kana>“
-アイヌイタㇰ
-”</div>
-<div lang=ain-Kana>“アイヌイタㇰ”</div>
deleted file mode 100644
--- a/testing/web-platform/tests/css/css-text/writing-system/writing-system-text-transform-001.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!doctype html>
-<html lang=en>
-<meta charset=utf-8>
-<title>CSS test: text-transform and writing systems</title>
-<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net">
-<link rel=help href="https://drafts.csswg.org/css-text-3/#languages">
-<link rel=help href="https://drafts.csswg.org/css-text-3/#script-tagging">
-<link rel=help href="https://drafts.csswg.org/css-text-3/#propdef-text-transform">
-<link rel=match href="reference/writing-system-text-transform-001-ref.html">
-<meta name=assert content="text transform rules that depend on the language are overriden by a contradicting explicit script tag.">
-<style>
-div {
-  text-transform: lowercase;
-  font-size: 3em;
-}
-</style>
-<p>Test passes if the two words below are identical: there must be a dot on the “i” letter at the beginning of the word.
-<div lang=tr-Cyrl>IСТАНБУЛ</div>
-<div lang=tr-Cyrl>iстанбул</div>
--- a/testing/web-platform/tests/css/css-transforms/animation/resources/interpolation-testcommon.js
+++ b/testing/web-platform/tests/css/css-transforms/animation/resources/interpolation-testcommon.js
@@ -6,38 +6,16 @@ function test_interpolation(settings, ex
     if (progress === 0)
       return 'steps(1, end)';
     if (progress === 1)
       return 'steps(1, start)';
     var y = (8 * progress - 1) / 6;
     return 'cubic-bezier(0, ' + y + ', 1, ' + y + ')';
   }
 
-  function RoundMatrix(style) {
-    var matrixMatch = style.match(/^(matrix(3d)?)\(.+\)$/);
-    if (!!matrixMatch) {
-      var matrixType = matrixMatch[1];
-      var matrixArgs = style.substr(matrixType.length);
-      var extractmatrix = function(matrixStr) {
-        var list = [];
-        var regex = /[+\-]?[0-9]+[.]?[0-9]*(e[+/-][0-9]+)?/g;
-        var match = undefined;
-        do {
-          match = regex.exec(matrixStr);
-          if (match) {
-            list.push(parseFloat(parseFloat(match[0]).toFixed(6)));
-          }
-        } while (match);
-        return list;
-      }
-      return matrixType + '(' + extractmatrix(matrixArgs).join(', ') + ')';
-    }
-    return style;
-  }
-
   test(function(){
     assert_true(CSS.supports(settings.property, settings.from), 'Value "' + settings.from + '" is supported by ' + settings.property);
     assert_true(CSS.supports(settings.property, settings.to), 'Value "' + settings.to + '" is supported by ' + settings.property);
   }, message_prefix + '"' + settings.from + '" and "' + settings.to + '" are valid ' + settings.property + ' values');
 
   for (var i = 0; i < expectations.length; ++i) {
     var progress = expectations[i].at;
     var expectation = expectations[i].expect;
@@ -66,14 +44,12 @@ function test_interpolation(settings, ex
       target.id = targetId;
       document.body.appendChild(target);
 
       var reference = document.createElement('div');
       reference.id = referenceId;
       document.body.appendChild(reference);
       reference.style = '';
 
-      var observed = RoundMatrix(getComputedStyle(target)[settings.property]);
-      var expected = RoundMatrix(getComputedStyle(reference)[settings.property]);
-      assert_equals(observed, expected);
+      assert_equals(getComputedStyle(target)[settings.property], getComputedStyle(reference)[settings.property]);
     }, message_prefix + 'Animation between "' + settings.from + '" and "' + settings.to + '" at progress ' + progress);
   }
 }
--- a/testing/web-platform/tests/css/filter-effects/backdrop-filter-basic-background-color.html
+++ b/testing/web-platform/tests/css/filter-effects/backdrop-filter-basic-background-color.html
@@ -23,13 +23,14 @@
     top: 100px;
 }
 .filterbox {
     position: absolute;
     width: 100px;
     height: 100px;
     left: 50px;
     top: 50px;
+    -webkit-backdrop-filter: invert(1);
     backdrop-filter: invert(1);
     opacity: 0.5;
     background: blue;
 }
 </style>
--- a/testing/web-platform/tests/css/filter-effects/backdrop-filter-basic-opacity.html
+++ b/testing/web-platform/tests/css/filter-effects/backdrop-filter-basic-opacity.html
@@ -23,13 +23,14 @@
     top: 100px;
 }
 .filterbox {
     position: absolute;
     width: 100px;
     height: 100px;
     left: 50px;
     top: 50px;
+    -webkit-backdrop-filter: invert(1);
     backdrop-filter: invert(1);
     opacity: 0.5;
 }
 </style>
 
--- a/testing/web-platform/tests/css/filter-effects/backdrop-filter-basic.html
+++ b/testing/web-platform/tests/css/filter-effects/backdrop-filter-basic.html
@@ -23,13 +23,14 @@
     top: 100px;
 }
 .filterbox {
     position: absolute;
     width: 100px;
     height: 100px;
     left: 50px;
     top: 50px;
+    -webkit-backdrop-filter: invert(1);
     backdrop-filter: invert(1);
     opacity: 1.0;
 }
 </style>
 
--- a/testing/web-platform/tests/css/filter-effects/backdrop-filter-border-radius.html
+++ b/testing/web-platform/tests/css/filter-effects/backdrop-filter-border-radius.html
@@ -24,11 +24,12 @@ div {
   top: 30px;
   left: 30px;
   border-radius: 50px;
   background: yellow;
   will-change: transform;
 }
 .filter {
   opacity: 0.7;
+  -webkit-backdrop-filter: invert(1);
   backdrop-filter: invert(1);
 }
 </style>
deleted file mode 100644
--- a/testing/web-platform/tests/css/filter-effects/backdrop-filter-clip-rect-ref.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>backdrop-filter: Clip the filter at border box of element</title>
-<link rel="author" title="Mason Freed" href="mailto:masonfreed@chromium.org">
-
-
-
-<div>
-  <p>Expected: A green box, blurred inside the short, wide white box with a<br>
-  blue border, and not blurred anywhere else. In particular, there should be<br>
-  no blurring inside the tall, narrow white box, or anywhere outside that.</p>
-</div>
-<div class="box"></div>
-<div class="navbar"></div>
-<div class="menu"></div>
-
-<style>
-div {
-  position: absolute;
-}
-.box {
-  width: 200px;
-  height: 200px;
-  top: 100px;
-  left: 100px;
-  background: green;
-}
-.navbar {
-  width: 300px;
-  height: 50px;
-  top: 150px;
-  left: 50px;
-  border: 1px solid blue;
-  backdrop-filter: blur(20px);
-}
-.menu {
-  width: 100px;
-  height: 150px;
-  top: 201px;
-  left: 146px;
-  border: 1px solid blue;
-}
-</style>
deleted file mode 100644
--- a/testing/web-platform/tests/css/filter-effects/backdrop-filter-clip-rect.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>backdrop-filter: Clip the filter at border box of element</title>
-<link rel="author" title="Mason Freed" href="mailto:masonfreed@chromium.org">
-<link rel="help" href="https://drafts.fxtf.org/filter-effects-2/#BackdropFilterProperty">
-<link rel="match"  href="backdrop-filter-paint-order-ref.html">
-
-<div>
-  <p>Expected: A green box, blurred inside the short, wide white box with a<br>
-  blue border, and not blurred anywhere else. In particular, there should be<br>
-  no blurring inside the tall, narrow white box, or anywhere outside that.</p>
-</div>
-<div class="box"></div>
-<div class="navbar">
-  <div class="menu"></div>
-</div>
-<style>
-div {
-  position: absolute;
-}
-.box {
-  width: 200px;
-  height: 200px;
-  top: 100px;
-  left: 100px;
-  background: green;
-}
-.navbar {
-  width: 300px;
-  height: 50px;
-  top: 150px;
-  left: 50px;
-  border: 1px solid blue;
-  backdrop-filter: blur(20px);
-}
-.menu {
-  width: 100px;
-  height: 150px;
-  top: 50px;
-  left: 95px;
-  border: 1px solid blue;
-}
-</style>
deleted file mode 100644
--- a/testing/web-platform/tests/css/filter-effects/backdrop-filter-edge-pixels-ref.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>backdrop-filter: Edge pixels shouldn't get filtered</title>
-<link rel="author" title="Mason Freed" href="mailto:masonfreed@chromium.org">
-
-
-
-<div class="box"></div>
-<div style="position:absolute;top:100px;">
-  <p>Expected above: A pure white box with a blue border.<br>
-  No dark/black should be observed within the white box.</p>
-</div>
-
-<style>
-.box {
-  position: absolute;
-  width: 100px;
-  height: 100px;
-  top: 0px;
-  left: 0px;
-  border: 1px solid blue;
-
-
-}
-</style>
deleted file mode 100644
--- a/testing/web-platform/tests/css/filter-effects/backdrop-filter-edge-pixels.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>backdrop-filter: Edge pixels shouldn't get filtered</title>
-<link rel="author" title="Mason Freed" href="mailto:masonfreed@chromium.org">
-<link rel="help" href="https://drafts.fxtf.org/filter-effects-2/#BackdropFilterProperty">
-<link rel="match"  href="backdrop-filter-edge-pixels-ref.html">
-
-<div class="box"></div>
-<div style="position:absolute;top:100px;">
-  <p>Expected above: A pure white box with a blue border.<br>
-  No dark/black should be observed within the white box.</p>
-</div>
-
-<style>
-.box {
-  position: absolute;
-  width: 100px;
-  height: 100px;
-  top: 0px;
-  left: 0px;
-  border: 1px solid blue;
-  backdrop-filter: blur(30px);
-}
-</style>
--- a/testing/web-platform/tests/css/filter-effects/backdrop-filter-isolation-isolate.html
+++ b/testing/web-platform/tests/css/filter-effects/backdrop-filter-isolation-isolate.html
@@ -30,13 +30,14 @@ div {
   left: 120px;
 }
 .filter {
   width: 160px;
   height: 160px;
   top: 30px;
   left: -90px;
   opacity: 0.3;
+  -webkit-backdrop-filter: invert(1);
   backdrop-filter: invert(1);
   background: yellow;
 }
 </style>
 
--- a/testing/web-platform/tests/css/filter-effects/backdrop-filter-isolation.html
+++ b/testing/web-platform/tests/css/filter-effects/backdrop-filter-isolation.html
@@ -30,13 +30,14 @@ div {
   left: 120px;
 }
 .filter {
   width: 160px;
   height: 160px;
   top: 30px;
   left: -90px;
   opacity: 0.3;
+  -webkit-backdrop-filter: invert(1);
   backdrop-filter: invert(1);
   background: yellow;
 }
 </style>
 
deleted file mode 100644
--- a/testing/web-platform/tests/css/filter-effects/backdrop-filter-paint-order-ref.html
+++ /dev/null
@@ -1,50 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>backdrop-filter: Only filter objects painted before</title>
-<link rel="author" title="Mason Freed" href="mailto:masonfreed@chromium.org">
-
-
-
-<div>
-  <p>Expected: A pure white box with a blue border, surrounded by green.<br>
-  No green should be observed within the white box.<br>
-  No dark/black should be observed within the white box either.</p>
-</div>
-
-<div class="filterbox"></div>
-<div class="greenbox top"></div>
-<div class="greenbox right"></div>
-<div class="greenbox bottom"></div>
-<style>
-.filterbox {
-  position: absolute;
-  width: 100px;
-  height: 100px;
-  top: 150px;
-  left: 0px;
-  border: 1px solid blue;
-
-
-}
-.greenbox {
-  position:absolute;
-  width: 150px;
-  height: 50px;
-  background: green;
-}
-.top {
-  top:100px;
-  left: 10px;
-}
-.right {
-  top:130px;
-  left: 102px;
-  width: 58px;
-  height: 150px;
-}
-.bottom {
-  top:252px;
-  left: 10px;
-}
-</style>
-
deleted file mode 100644
--- a/testing/web-platform/tests/css/filter-effects/backdrop-filter-paint-order.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>backdrop-filter: Only filter objects painted before</title>
-<link rel="author" title="Mason Freed" href="mailto:masonfreed@chromium.org">
-<link rel="help" href="https://drafts.fxtf.org/filter-effects-2/#BackdropFilterProperty">
-<link rel="match"  href="backdrop-filter-paint-order-ref.html">
-
-<div>
-  <p>Expected: A pure white box with a blue border, surrounded by green.<br>
-  No green should be observed within the white box.<br>
-  No dark/black should be observed within the white box either.</p>
-</div>
-
-<div class="filterbox"></div>
-<div class="greenbox top"></div>
-<div class="greenbox right"></div>
-<div class="greenbox bottom"></div>
-<style>
-.filterbox {
-  position: absolute;
-  width: 100px;
-  height: 100px;
-  top: 150px;
-  left: 0px;
-  border: 1px solid blue;
-  backdrop-filter: blur(20px);
-}
-.greenbox {
-  position:absolute;
-  width: 150px;
-  height: 50px;
-  background: green;
-}
-.top {
-  top:100px;
-  left: 10px;
-}
-.right {
-  top:130px;
-  left: 102px;
-  width: 58px;
-  height: 150px;
-}
-.bottom {
-  top:252px;
-  left: 10px;
-}
-</style>
-
deleted file mode 100644
--- a/testing/web-platform/tests/css/selectors/invalidation/is.html
+++ /dev/null
@@ -1,139 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <title>CSS Selectors Invalidation: :is()</title>
-    <link rel="author" title="Victoria Su" href="mailto:victoriaytsu@google.com">
-    <link rel="help" href="https://drafts.csswg.org/selectors-4/#matches">
-    <meta name="assert" content="This tests that the :is() selector is effective">
-    <script src="/resources/testharness.js"></script>
-    <script src="/resources/testharnessreport.js"></script>
-    <style>
-      .b {
-        color: yellow;
-      }
-      /*Simple selector arguments */
-      .a :is(.b, .c) {
-        color: red;
-      }
-      /*Compound selector arguments */
-      .a :is(.c#d, .e) {
-        color: green;
-      }
-      /* Complex selector arguments */
-      .a .g>.b {
-        color: black;
-      }
-      .a :is(.e+.f, .g>.b, .h) {
-        color: blue;
-      }
-      .g>.b {
-        color: black;
-      }
-      .a .h {
-        color: black;
-      }
-      /* Nested */
-      .a+.c>.e {
-        color: black;
-      }
-      .c>.a+.e {
-        color: black;
-      }
-      .a+:is(.b+.f, :is(.c>.e, .g)) {
-        color: red;
-      }
-      .c>.e {
-        color: black;
-      }
-    </style>
-  </head>
-  <body>
-    <div id="a1">
-      <div class="b" id="b1">
-        Red
-      </div>
-      <div class="c" id="c1">
-        Red
-      </div>
-      <div class="c" id="d">
-        Green
-      </div>
-      <div class="e" id="e1">
-        Green
-      </div>
-      <div class="f" id="f1">
-        Blue
-      </div>
-      <div class="g">
-        <div class="b" id="b2">
-          Blue
-          <div class="b" id="b3">
-            Red
-          </div>
-        </div>
-      </div>
-      <div class="h" id="h1">
-        Black
-      </div>
-    </div>
-    <div class="c" id="c2">
-      <div id="a2"></div>
-      <div class="e" id="e2">
-        Red
-      </div>
-    </div>
-    <script>
-      document.body.offsetTop;
-
-      var black = "rgb(0, 0, 0)";
-      var blue = "rgb(0, 0, 255)";
-      var green = "rgb(0, 128, 0)";
-      var red = "rgb(255, 0, 0)";
-      var yellow = "rgb(255, 255, 0)";
-
-      test(() => {
-        assert_equals(getComputedStyle(b1).color, yellow);
-        assert_equals(getComputedStyle(b2).color, black);
-        assert_equals(getComputedStyle(b3).color, yellow);
-        assert_equals(getComputedStyle(c1).color, black);
-        assert_equals(getComputedStyle(d).color, black);
-        assert_equals(getComputedStyle(e1).color, black);
-        assert_equals(getComputedStyle(e2).color, black);
-        assert_equals(getComputedStyle(f1).color, black);
-        assert_equals(getComputedStyle(h1).color, black);
-      }, "Preconditions.");
-
-      test(() => {
-        a1.className = "a";
-        assert_equals(getComputedStyle(b1).color, red);
-        assert_equals(getComputedStyle(b3).color, red);
-        assert_equals(getComputedStyle(c1).color, red);
-      }, "Invalidate :is() for simple selector arguments.");
-
-      test(() => {
-        a1.className = "a";
-        assert_equals(getComputedStyle(d).color, green);
-      }, "Invalidate :is() for compound selector arguments.");
-
-      test(() => {
-        a1.className = "a";
-        assert_equals(getComputedStyle(b2).color, blue);
-        assert_equals(getComputedStyle(b3).color, red);
-        assert_equals(getComputedStyle(f1).color, blue);
-      }, "Invalidate :is() for complex selector arguments.");
-
-      test(() => {
-        a1.className = "a";
-        assert_equals(getComputedStyle(e2).color, black);
-        a2.className = "a";
-        assert_equals(getComputedStyle(e2).color, red);
-      }, "Invalidate nested :is().");
-
-      test(() => {
-        a1.className = "a";
-        assert_equals(getComputedStyle(b2).color, blue);
-        assert_equals(getComputedStyle(h1).color, black);
-      }, "Test specificity of :is().");
-    </script>
-  </body>
-</html>
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/css/selectors/invalidation/matches.html
@@ -0,0 +1,139 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>CSS Selectors Invalidation: :matches()</title>
+    <link rel="author" title="Victoria Su" href="mailto:victoriaytsu@google.com">
+    <link rel="help" href="https://drafts.csswg.org/selectors-4/#matches">
+    <meta name="assert" content="This tests that the :matches() selector is effective">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <style>
+      .b {
+        color: yellow;
+      }
+      /*Simple selector arguments */
+      .a :matches(.b, .c) {
+        color: red;
+      }
+      /*Compound selector arguments */
+      .a :matches(.c#d, .e) {
+        color: green;
+      }
+      /* Complex selector arguments */
+      .a .g>.b {
+        color: black;
+      }
+      .a :matches(.e+.f, .g>.b, .h) {
+        color: blue;
+      }
+      .g>.b {
+        color: black;
+      }
+      .a .h {
+        color: black;
+      }
+      /* Nested */
+      .a+.c>.e {
+        color: black;
+      }
+      .c>.a+.e {
+        color: black;
+      }
+      .a+:matches(.b+.f, :matches(.c>.e, .g)) {
+        color: red;
+      }
+      .c>.e {
+        color: black;
+      }
+    </style>
+  </head>
+  <body>
+    <div id="a1">
+      <div class="b" id="b1">
+        Red
+      </div>
+      <div class="c" id="c1">
+        Red
+      </div>
+      <div class="c" id="d">
+        Green
+      </div>
+      <div class="e" id="e1">
+        Green
+      </div>
+      <div class="f" id="f1">
+        Blue
+      </div>
+      <div class="g">
+        <div class="b" id="b2">
+          Blue
+          <div class="b" id="b3">
+            Red
+          </div>
+        </div>
+      </div>
+      <div class="h" id="h1">
+        Black
+      </div>
+    </div>
+    <div class="c" id="c2">
+      <div id="a2"></div>
+      <div class="e" id="e2">
+        Red
+      </div>
+    </div>
+    <script>
+      document.body.offsetTop;
+
+      var black = "rgb(0, 0, 0)";
+      var blue = "rgb(0, 0, 255)";
+      var green = "rgb(0, 128, 0)";
+      var red = "rgb(255, 0, 0)";
+      var yellow = "rgb(255, 255, 0)";
+
+      test(() => {
+        assert_equals(getComputedStyle(b1).color, yellow);
+        assert_equals(getComputedStyle(b2).color, black);
+        assert_equals(getComputedStyle(b3).color, yellow);
+        assert_equals(getComputedStyle(c1).color, black);
+        assert_equals(getComputedStyle(d).color, black);
+        assert_equals(getComputedStyle(e1).color, black);
+        assert_equals(getComputedStyle(e2).color, black);
+        assert_equals(getComputedStyle(f1).color, black);
+        assert_equals(getComputedStyle(h1).color, black);
+      }, "Preconditions.");
+
+      test(() => {
+        a1.className = "a";
+        assert_equals(getComputedStyle(b1).color, red);
+        assert_equals(getComputedStyle(b3).color, red);
+        assert_equals(getComputedStyle(c1).color, red);
+      }, "Invalidate :matches() for simple selector arguments.");
+
+      test(() => {
+        a1.className = "a";
+        assert_equals(getComputedStyle(d).color, green);
+      }, "Invalidate :matches() for compound selector arguments.");
+
+      test(() => {
+        a1.className = "a";
+        assert_equals(getComputedStyle(b2).color, blue);
+        assert_equals(getComputedStyle(b3).color, red);
+        assert_equals(getComputedStyle(f1).color, blue);
+      }, "Invalidate :matches() for complex selector arguments.");
+
+      test(() => {
+        a1.className = "a";
+        assert_equals(getComputedStyle(e2).color, black);
+        a2.className = "a";
+        assert_equals(getComputedStyle(e2).color, red);
+      }, "Invalidate nested :matches().");
+
+      test(() => {
+        a1.className = "a";
+        assert_equals(getComputedStyle(b2).color, blue);
+        assert_equals(getComputedStyle(h1).color, black);
+      }, "Test specificity of :matches().");
+    </script>
+  </body>
+</html>
\ No newline at end of file
--- a/testing/web-platform/tests/css/selectors/invalidation/where.html
+++ b/testing/web-platform/tests/css/selectors/invalidation/where.html
@@ -28,17 +28,17 @@
       }
       :where(.a~.h, .a~.h+.f) {
         color: yellow;
       }
       /* Nested */
       :where(.a>:where(.g+.h, .b)~.i) {
         color: blue;
       }
-      :where(:is(.a~.h)) {
+      :where(:matches(.a~.h)) {
         color: yellow;
       }
     </style>
   </head>
   <body>
     <div id="a1">
       <div class="g">
       </div>
deleted file mode 100644
--- a/testing/web-platform/tests/css/selectors/is-nested.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <title>CSS Selectors: :is()</title>
-    <link rel="author" title="Victoria Su" href="mailto:victoriaytsu@google.com">
-    <link rel="help" href="https://drafts.csswg.org/selectors-4/#matches">
-    <meta name="assert" content="This tests that the :is() selector is effective when nested">
-    <script src="/resources/testharness.js"></script>
-    <script src="/resources/testharnessreport.js"></script>
-    <style>
-      /* Testing that highest specificity is chosen for class outside of :is() */
-      .a+.b+.c>.e+.d {
-        color: black;
-        font-size: 10px;
-        width: 10px;
-      }
-      .a+:is(.b+.f, .b+:is(*, .c>.e, .g, *))+.d {
-        color: red;
-        font-size: 20px;
-      }
-      .a+.b+.c>.e+.d {
-        color: yellow;
-      }
-      /* Testing specificty of a class within :is() */
-      .a+.c>.e {
-        color: black;
-      }
-      .a+:is(.b+.f, :is(.c>.e, .g)) {
-        color: red;
-      }
-      .c>.e {
-        color: black;
-      }
-    </style>
-  </head>
-  <body>
-    <div class="a">
-    </div>
-    <div class="b" id="b2">
-    </div>
-    <div class="c" id="c2">
-      <div class="e">
-      </div>
-      <div class="d" id="d1">
-        Yellow
-      </div>
-    </div>
-    <div class="a">
-    </div>
-    <div class="c" id="c2">
-      <div class="e" id="e1">
-        Red
-      </div>
-    </div>
-    <script>
-
-      var red = "rgb(255, 0, 0)";
-      var yellow = "rgb(255, 255, 0)";
-
-      test(() => {
-        assert_equals(getComputedStyle(d1).color, yellow);
-        assert_equals(getComputedStyle(d1).fontSize, "20px");
-        assert_equals(getComputedStyle(d1).width, "10px");
-      }, "Test nested :is() chooses highest specificity for class outside :is().");
-
-      test(() => {
-        assert_equals(getComputedStyle(e1).color, red);
-      }, "Test nested :is() specificity for class within arguments.");
-
-    </script>
-  </body>
-</html>
\ No newline at end of file
deleted file mode 100644
--- a/testing/web-platform/tests/css/selectors/is-specificity.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <title>CSS Selectors: :is()</title>
-    <link rel="author" title="Victoria Su" href="mailto:victoriaytsu@google.com">
-    <link rel="help" href="https://drafts.csswg.org/selectors-4/#matches">
-    <meta name="assert" content="This tests that the :is() selector chooses the correct specificity">
-    <script src="/resources/testharness.js"></script>
-    <script src="/resources/testharnessreport.js"></script>
-    <style>
-      .b.c + .d + .q.r + .s + #target {
-        font-size: 10px;
-        height: 10px;
-        width: 10px;
-      }
-      :is(.a, .b.c + .d, .e) + :is(* + .p, .q.r + .s, * + .t) + #target {
-        height: 20px;
-        width: 20px;
-      }
-      .b.c + .d + .q.r + .s + #target {
-        width: 30px;
-      }
-    </style>
-  </head>
-  <body>
-    <div class="b c"></div>
-    <div class="a d e"></div>
-    <div class="q r"></div>
-    <div class="p s t"></div>
-    <div id="target"></div>
-    <script>
-
-      test(() => {
-        assert_equals(getComputedStyle(target).width, "30px");
-        assert_equals(getComputedStyle(target).height, "20px");
-        assert_equals(getComputedStyle(target).fontSize, "10px");
-      }, "Test :is() uses highest possible specificity");
-
-    </script>
-  </body>
-</html>
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/css/selectors/matches-nested.html
@@ -0,0 +1,72 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>CSS Selectors: :matches()</title>
+    <link rel="author" title="Victoria Su" href="mailto:victoriaytsu@google.com">
+    <link rel="help" href="https://drafts.csswg.org/selectors-4/#matches">
+    <meta name="assert" content="This tests that the :matches() selector is effective when nested">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <style>
+      /* Testing that highest specificity is chosen for class outside of :matches() */
+      .a+.b+.c>.e+.d {
+        color: black;
+        font-size: 10px;
+        width: 10px;
+      }
+      .a+:matches(.b+.f, .b+:matches(*, .c>.e, .g, *))+.d {
+        color: red;
+        font-size: 20px;
+      }
+      .a+.b+.c>.e+.d {
+        color: yellow;
+      }
+      /* Testing specificty of a class within :matches() */
+      .a+.c>.e {
+        color: black;
+      }
+      .a+:matches(.b+.f, :matches(.c>.e, .g)) {
+        color: red;
+      }
+      .c>.e {
+        color: black;
+      }
+    </style>
+  </head>
+  <body>
+    <div class="a">
+    </div>
+    <div class="b" id="b2">
+    </div>
+    <div class="c" id="c2">
+      <div class="e">
+      </div>
+      <div class="d" id="d1">
+        Yellow
+      </div>
+    </div>
+    <div class="a">
+    </div>
+    <div class="c" id="c2">
+      <div class="e" id="e1">
+        Red
+      </div>
+    </div>
+    <script>
+
+      var red = "rgb(255, 0, 0)";
+      var yellow = "rgb(255, 255, 0)";
+
+      test(() => {
+        assert_equals(getComputedStyle(d1).color, yellow);
+        assert_equals(getComputedStyle(d1).fontSize, "20px");
+        assert_equals(getComputedStyle(d1).width, "10px");
+      }, "Test nested :matches() chooses highest specificity for class outside :matches().");
+
+      test(() => {
+        assert_equals(getComputedStyle(e1).color, red);
+      }, "Test nested :matches() specificity for class within arguments.");
+
+    </script>
+  </body>
+</html>
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/css/selectors/matches-specificity.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>CSS Selectors: :matches()</title>
+    <link rel="author" title="Victoria Su" href="mailto:victoriaytsu@google.com">
+    <link rel="help" href="https://drafts.csswg.org/selectors-4/#matches">
+    <meta name="assert" content="This tests that the :matches() selector chooses the correct specificity">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <style>
+      .b.c + .d + .q.r + .s + #target {
+        font-size: 10px;
+        height: 10px;
+        width: 10px;
+      }
+      :matches(.a, .b.c + .d, .e) + :matches(* + .p, .q.r + .s, * + .t) + #target {
+        height: 20px;
+        width: 20px;
+      }
+      .b.c + .d + .q.r + .s + #target {
+        width: 30px;
+      }
+    </style>
+  </head>
+  <body>
+    <div class="b c"></div>
+    <div class="a d e"></div>
+    <div class="q r"></div>
+    <div class="p s t"></div>
+    <div id="target"></div>
+    <script>
+
+      test(() => {
+        assert_equals(getComputedStyle(target).width, "30px");
+        assert_equals(getComputedStyle(target).height, "20px");
+        assert_equals(getComputedStyle(target).fontSize, "10px");
+      }, "Test :matches() uses highest possible specificity");
+
+    </script>
+  </body>
+</html>
\ No newline at end of file
--- a/testing/web-platform/tests/css/support/computed-testcommon.js
+++ b/testing/web-platform/tests/css/support/computed-testcommon.js
@@ -8,21 +8,15 @@
  * @param {string} specified A specified value for the property.
  * @param {string} computed  The expected computed value. If omitted,
                              defaults to specified.
  */
 function test_computed_value(property, specified, computed) {
   if (!computed)
     computed = specified;
   test(() => {
-    const target = document.getElementById('target');
     if (!getComputedStyle(target)[property])
       return;
     target.style[property] = '';
     target.style[property] = specified;
     assert_equals(getComputedStyle(target)[property], computed);
-    if (computed !== specified) {
-      target.style[property] = '';
-      target.style[property] = computed;
-      assert_equals(getComputedStyle(target)[property], computed, 'computed value should round-trip');
-    }
   }, "Property " + property + " value '" + specified + "' computes to '" + computed + "'");
 }
--- a/testing/web-platform/tests/encoding/unsupported-encodings.any.js
+++ b/testing/web-platform/tests/encoding/unsupported-encodings.any.js
@@ -10,23 +10,23 @@
 // UTF-32 will be detected as UTF-16LE if leading BOM, or windows-1252 otherwise.
 ['UTF-32', 'utf-32', 'UTF-32LE', 'utf-32le'].forEach(label => {
   decode_test(label,
               '%FF%FE%00%00%41%00%00%00%42%00%00%00',
               'U+0000/U+0041/U+0000/U+0042/U+0000',
               `${label} with BOM should decode as UTF-16LE`);
 
   decode_test(label,
-              '%41%00%00%00%42%00%00%C2%80',
-              'U+0041/U+0000/U+0000/U+0000/U+0042/U+0000/U+0000/U+0080',
-              `${label} with no BOM should decode as UTF-8`);;
+              '%41%00%00%00%42%00%00%00',
+              'U+0041/U+0000/U+0000/U+0000/U+0042/U+0000/U+0000/U+0000',
+              `${label} with no BOM should decode as windows-1252`);;
 });
 ['UTF-32be', 'utf-32be'].forEach(label => {
   decode_test(label,
-            '%00%00%00%41%00%00%00%42%C2%80',
-            'U+0000/U+0000/U+0000/U+0041/U+0000/U+0000/U+0000/U+0042/U+0080',
-            `${label} with no BOM should decode as UTF-8`);
+            '%00%00%00%41%00%00%00%42',
+            'U+0000/U+0000/U+0000/U+0041/U+0000/U+0000/U+0000/U+0042',
+            `${label} with no BOM should decode as windows-1252`);
 
   decode_test(label,
-              '%00%00%FE%FF%00%00%00%41%00%C2%80%42',
-              'U+0000/U+0000/U+FFFD/U+FFFD/U+0000/U+0000/U+0000/U+0041/U+0000/U+0080/U+0042',
-              `${label} with BOM should decode as UTF-8`);
+              '%00%00%FE%FF%00%00%00%41%00%00%00%42',
+              'U+0000/U+0000/U+00FE/U+00FF/U+0000/U+0000/U+0000/U+0041/U+0000/U+0000/U+0000/U+0042',
+              `${label} with BOM should decode as windows-1252`);
 });
deleted file mode 100644
--- a/testing/web-platform/tests/feature-policy/experimental-features/layout-animations-disabled-violation-report-js-tentative.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<!DOCTYPE html>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/feature-policy/experimental-features/resources/common.js"></script>
-<title> 'layout-animations' Policy : violation reports from javascript
-</title>
-<body>
-<script>
-  test(() => {
-    document.policy.allowedFeatures().forEach((enabled_feature) => {
-      assert_not_equals(enabled_feature, "layout-animations");
-    });
-  },
-  "Verify 'layout-animations' is not in document's feature list.");
-
-  promise_test(async () => {
-    let promise = wait_for_violation_in_file(
-      "layout-animations",
-      "animation-property-height.js");
-    let script = document.createElement("script");
-    script.src = "/feature-policy/experimental-features/resources/" +
-                 "animation-property-height.js";
-    document.body.appendChild(script);
-    await promise;
-  },
-  "Verify that when 'layout-animations' is disabled, an 'element.animate' " +
-  "API including a keyframe that uses a blocked property generates violation " +
-  "report (linked scripts).");
-
-  promise_test(async () => {
-    let promise = wait_for_violation_in_file(
-      "layout-animations",
-      "layout-animations-disabled-violation-report-js-tentative.html");
-    let div = document.createElement("div");
-    document.body.appendChild(div);
-    div.animate([{width: "100px"}, {width: "200px"}]);
-    await promise;
-  },
-  "Verify that when 'layout-animations' is disabled, an 'element.animate' " +
-  "API including a keyframe that uses a blocked property generates violation " +
-  "report (inline scripts).");
-</script>
-</body>
deleted file mode 100644
--- a/testing/web-platform/tests/feature-policy/experimental-features/layout-animations-disabled-violation-report-js-tentative.html.headers
+++ /dev/null
@@ -1,1 +0,0 @@
-Feature-Policy: layout-animations 'none'
deleted file mode 100644
--- a/testing/web-platform/tests/feature-policy/experimental-features/layout-animations-disabled-violation-report-keyframes-tentative.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/feature-policy/experimental-features/resources/common.js"></script>
-<title> 'layout-animations' Policy : violation reports from CSS keyframes
-</title>
-<body>
-<script>
-  test(() => {
-    document.policy.allowedFeatures().forEach((enabled_feature) => {
-      assert_not_equals(enabled_feature, "layout-animations");
-    });
-  },
-  "Sanity-check: 'layout-animations' is not in document's feature list.");
-
-  promise_test(async () => {
-    let promise = wait_for_violation_in_file(
-      "layout-animations", null /* source not specified */);
-    let style = document.createElement("style");
-    style.innerHTML = `@keyframes animation_property_top {
-                          from { top: 0px }
-                          to { top: 100px }
-                      }`;
-    document.body.appendChild(style);
-    await promise;
-  },
-  "Verify that when 'layout-animations' is disabled, a keyframes which " +
-  "includes a blocked property generates violation report.");
-</script>
-</body>
deleted file mode 100644
--- a/testing/web-platform/tests/feature-policy/experimental-features/layout-animations-disabled-violation-report-keyframes-tentative.html.headers
+++ /dev/null
@@ -1,1 +0,0 @@
-Feature-Policy: layout-animations 'none'
deleted file mode 100644
--- a/testing/web-platform/tests/feature-policy/experimental-features/resources/animation-property-height.js
+++ /dev/null
@@ -1,3 +0,0 @@
-let div = document.createElement("div");
-document.body.appendChild(div);
-div.animate([{"height": "0px"}, {"height": "100px"}]);
--- a/testing/web-platform/tests/feature-policy/experimental-features/resources/common.js
+++ b/testing/web-platform/tests/feature-policy/experimental-features/resources/common.js
@@ -59,34 +59,9 @@ function createIframe(container, attribu
   return new_iframe;
 }
 
 // Returns a promise which is resolved when |load| event is dispatched for |e|.
 function wait_for_load(e) {
   return new Promise((resolve) => {
     e.addEventListener("load", resolve);
   });
-}
-
-window.reporting_observer_instance = new ReportingObserver((reports, observer) => {
-  if (window.reporting_observer_callback) {
-    reports.forEach(window.reporting_observer_callback);
-  }
-}, {types: ["feature-policy"]});
-window.reporting_observer_instance.observe();
-window.reporting_observer_callback = null;
-
-// Waits for a violation in |feature| and source file containing |file_name|.
-function wait_for_violation_in_file(feature, file_name) {
-  return new Promise( (resolve) => {
-    assert_equals(null, window.reporting_observer_callback);
-    window.reporting_observer_callback = (report) => {
-        var feature_match = (feature === report.body.feature);
-        var file_name_match =
-            !file_name ||
-            (report.body.sourceFile.indexOf(file_name) !== -1);
-        if (feature_match && file_name_match) {
-          window.reporting_observer_callback = null;
-          resolve(report);
-        }
-    };
-  });
-}
+}
\ No newline at end of file
deleted file mode 100644
--- a/testing/web-platform/tests/feature-policy/reporting/camera-report-only.https.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <script src='/resources/testharness.js'></script>
-    <script src='/resources/testharnessreport.js'></script>
-    <script src='/resources/testdriver.js'></script>
-    <script src="/resources/testdriver-vendor.js"></script>
-  </head>
-  <body>
-    <script>
-var check_report_format = ([reports, observer]) => {
-  let report = reports[0];
-  assert_equals(report.type, "feature-policy");
-  assert_equals(report.body.feature, "camera");
-  assert_equals(report.body.disposition, "report");
-};
-
-promise_test(async t => {
-  const report = new Promise(resolve => {
-    new ReportingObserver((reports, observer) => resolve([reports, observer]),
-                          {types: ['feature-policy']}).observe();
-  });
-  await test_driver.bless('Activate document for user media');
-  await navigator.mediaDevices.getUserMedia({video: true});
-  check_report_format(await report);
-}, "Camera report only mode");
-    </script>
-  </body>
-</html>
deleted file mode 100644
--- a/testing/web-platform/tests/feature-policy/reporting/camera-report-only.https.html.headers
+++ /dev/null
@@ -1,1 +0,0 @@
-Feature-Policy: camera-report-only 'none'
--- a/testing/web-platform/tests/feature-policy/reporting/camera-reporting.https.html
+++ b/testing/web-platform/tests/feature-policy/reporting/camera-reporting.https.html
@@ -8,17 +8,16 @@
     <script>
 var t = async_test("Camera Report Format");
 
 var check_report_format = (reports, observer) => {
   let report = reports[0];
   assert_equals(report.type, "feature-policy-violation");
   assert_equals(report.url, document.location.href);
   assert_equals(report.body.featureId, "camera");
-  assert_equals(report.body.disposition, "enforce");
   assert_equals(report.body.sourceFile, document.location.href);
   assert_equals(typeof report.body.lineNumber, "number");
   assert_equals(typeof report.body.columnNumber, "number");
   assert_equals(report.body.disposition, "enforce");
 };
 
 new ReportingObserver(t.step_func_done(check_report_format),
                       {types: ['feature-policy-violation']}).observe();
deleted file mode 100644
--- a/testing/web-platform/tests/feature-policy/reporting/document-write-report-only.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <script src='/resources/testharness.js'></script>
-    <script src='/resources/testharnessreport.js'></script>
-  </head>
-  <body>
-    <script>
-var check_report_format = ([reports, observer]) => {
-  let report = reports[0];
-  assert_equals(report.type, "feature-policy");
-  assert_equals(report.body.feature, "document-write");
-  assert_equals(report.body.disposition, "report");
-};
-
-promise_test(async t => {
-  const report = new Promise(resolve => {
-    new ReportingObserver((reports, observer) => resolve([reports, observer]),
-                          {types: ['feature-policy']}).observe();
-  });
-  document.write("This should be written into the document");
-  check_report_format(await report);
-}, "Document-write report only mode");
-    </script>
-  </body>
-</html>
deleted file mode 100644
--- a/testing/web-platform/tests/feature-policy/reporting/document-write-report-only.html.headers
+++ /dev/null
@@ -1,1 +0,0 @@
-Feature-Policy: document-write-report-only 'none'
--- a/testing/web-platform/tests/feature-policy/reporting/document-write-reporting.html
+++ b/testing/web-platform/tests/feature-policy/reporting/document-write-reporting.html
@@ -8,17 +8,16 @@
     <script>
 var t = async_test("Document-write Report Format");
 
 var check_report_format = (reports, observer) => {
   let report = reports[0];
   assert_equals(report.type, "feature-policy-violation");
   assert_equals(report.url, document.location.href);
   assert_equals(report.body.featureId, "document-write");
-  assert_equals(report.body.disposition, "enforce");
   assert_equals(report.body.sourceFile, document.location.href);
   assert_equals(typeof report.body.lineNumber, "number");
   assert_equals(typeof report.body.columnNumber, "number");
   assert_equals(report.body.disposition, "enforce");
 };
 
 new ReportingObserver(t.step_func_done(check_report_format),
                       {types: ['feature-policy-violation']}).observe();
deleted file mode 100644
--- a/testing/web-platform/tests/feature-policy/reporting/encrypted-media-report-only.https.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <script src='/resources/testharness.js'></script>
-    <script src='/resources/testharnessreport.js'></script>
-  </head>
-  <body>
-    <script>
-var check_report_format = ([reports, observer]) => {
-  let report = reports[0];
-  assert_equals(report.type, "feature-policy");
-  assert_equals(report.body.feature, "encrypted-media");
-  assert_equals(report.body.disposition, "report");
-};
-
-promise_test(async t => {
-  const report = new Promise(resolve => {
-    new ReportingObserver((reports, observer) => resolve([reports, observer]),
-                          {types: ['feature-policy']}).observe();
-  });
-  await navigator.requestMediaKeySystemAccess("org.w3.clearkey",
-      [{
-        initDataTypes: ["webm"],
-        videoCapabilities: [{contentType: 'video/webm;codecs="vp8"'}],
-      }]);
-  check_report_format(await report);
-}, "Encrypted Media report only mode");
-    </script>
-  </body>
-</html>
deleted file mode 100644
--- a/testing/web-platform/tests/feature-policy/reporting/encrypted-media-report-only.https.html.headers
+++ /dev/null
@@ -1,1 +0,0 @@
-Feature-Policy: encrypted-media-report-only 'none'
--- a/testing/web-platform/tests/feature-policy/reporting/encrypted-media-reporting.https.html
+++ b/testing/web-platform/tests/feature-policy/reporting/encrypted-media-reporting.https.html
@@ -6,17 +6,16 @@
   </head>
   <body>
     <script>
 var check_report_format = (reports, observer) => {
   let report = reports[0];
   assert_equals(report.type, "feature-policy");
   assert_equals(report.url, document.location.href);
   assert_equals(report.body.feature, "encrypted-media");
-  assert_equals(report.body.disposition, "enforce");
   assert_equals(report.body.sourceFile, document.location.href);
   assert_equals(typeof report.body.message, "string");
   assert_equals(typeof report.body.lineNumber, "number");
   assert_equals(typeof report.body.columnNumber, "number");
 };
 
 promise_test(async t => {
   const report = new Promise(resolve => {
deleted file mode 100644
--- a/testing/web-platform/tests/feature-policy/reporting/fullscreen-report-only.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <script src='/resources/testharness.js'></script>
-    <script src='/resources/testharnessreport.js'></script>
-    <script src='/resources/testdriver.js'></script>
-    <script src="/resources/testdriver-vendor.js"></script>
-  </head>
-  <body>
-    <div id='fs'></div>
-    <script>
-var check_report_format = ([reports, observer]) => {
-  let report = reports[0];
-  assert_equals(report.type, "feature-policy");
-  assert_equals(report.body.feature, "fullscreen");
-  assert_equals(report.body.disposition, "report");
-};
-
-promise_test(async t => {
-  const report = new Promise(resolve => {
-    new ReportingObserver((reports, observer) => resolve([reports, observer]),
-                          {types: ['feature-policy']}).observe();
-  });
-  await test_driver.bless('Activate document for fullscreen');
-  await document.getElementById('fs').requestFullscreen();
-  check_report_format(await report);
-  document.exitFullscreen();
-}, "Fullscreen report only mode");
-    </script>
-  </body>
-</html>
deleted file mode 100644
--- a/testing/web-platform/tests/feature-policy/reporting/fullscreen-report-only.html.headers
+++ /dev/null
@@ -1,1 +0,0 @@
-Feature-Policy: fullscreen-report-only 'none'
--- a/testing/web-platform/tests/feature-policy/reporting/fullscreen-reporting.html
+++ b/testing/web-platform/tests/feature-policy/reporting/fullscreen-reporting.html
@@ -7,17 +7,16 @@
   <body>
     <div id='fs'></div>
     <script>
 var check_report_format = (reports, observer) => {
   let report = reports[0];
   assert_equals(report.type, "feature-policy-violation");
   assert_equals(report.url, document.location.href);
   assert_equals(report.body.featureId, "fullscreen");
-  assert_equals(report.body.disposition, "enforce");
   assert_equals(report.body.sourceFile, document.location.href);
   assert_equals(typeof report.body.lineNumber, "number");
   assert_equals(typeof report.body.columnNumber, "number");
   assert_equals(report.body.disposition, "enforce");
 };
 
 async_test(t => {
   new ReportingObserver(t.step_func_done(check_report_format),
deleted file mode 100644
--- a/testing/web-platform/tests/feature-policy/reporting/generic-sensor-report-only.https.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <script src='/resources/testharness.js'></script>
-    <script src='/resources/testharnessreport.js'></script>
-  </head>
-  <body>
-    <script>
-var sensor_features_verified = {
-  "accelerometer": false,
-  "ambient-light-sensor": false,
-  "magnetometer": false,
-  "gyroscope": false
-};
-
-var check_report_format = function(reports, observer) {
-  // Check each report in this batch. This observer callback may be called
-  // multiple times before all reports have been processed.
-  for (const report of reports) {
-
-    // Validate that the reported feature is one of the sensor features, and that
-    // we have not seen a report for this feature before.
-    assert_true(sensor_features_verified.hasOwnProperty(report.body.feature));
-    assert_false(sensor_features_verified[report.body.feature]);
-
-    // Validate the remainder of the report
-    assert_equals(report.type, "feature-policy");
-    assert_equals(report.url, document.location.href);
-    assert_equals(report.body.disposition, "report");
-    assert_equals(report.body.sourceFile, document.location.href);
-    assert_equals(typeof report.body.message, "string");
-    assert_equals(typeof report.body.lineNumber, "number");
-    assert_equals(typeof report.body.columnNumber, "number");
-
-    sensor_features_verified[report.body.feature] = true;
-  }
-
-  // Test is only done when reports for all features have been seen
-  for (let result of Object.values(sensor_features_verified)) {
-    if (!result)
-      return;
-  }
-  this.done();
-};
-
-async_test(t => {
-  new ReportingObserver(t.step_func(check_report_format),
-                        {types: ['feature-policy']}).observe();
-  new Accelerometer();
-  new AmbientLightSensor();
-  new Gyroscope();
-  new Magnetometer();
-}, "Generic Sensor report only mode");
-    </script>
-  </body>
-</html>
deleted file mode 100644
--- a/testing/web-platform/tests/feature-policy/reporting/generic-sensor-report-only.https.html.headers
+++ /dev/null
@@ -1,1 +0,0 @@
-Feature-Policy: ambient-light-sensor-report-only 'none'; accelerometer-report-only 'none'; gyroscope-report-only 'none'; magnetometer-report-only 'none'
--- a/testing/web-platform/tests/feature-policy/reporting/generic-sensor-reporting.https.html
+++ b/testing/web-platform/tests/feature-policy/reporting/generic-sensor-reporting.https.html
@@ -21,17 +21,16 @@ var check_report_format = function(repor
     // Validate that the reported feature is one of the sensor features, and that
     // we have not seen a report for this feature before.
     assert_true(sensor_features_verified.hasOwnProperty(report.body.feature));
     assert_false(sensor_features_verified[report.body.feature]);
 
     // Validate the remainder of the report
     assert_equals(report.type, "feature-policy");
     assert_equals(report.url, document.location.href);
-    assert_equals(report.body.disposition, "enforce");
     assert_equals(report.body.sourceFile, document.location.href);
     assert_equals(typeof report.body.message, "string");
     assert_equals(typeof report.body.lineNumber, "number");
     assert_equals(typeof report.body.columnNumber, "number");
 
     sensor_features_verified[report.body.feature] = true;
   }
 
deleted file mode 100644
--- a/testing/web-platform/tests/feature-policy/reporting/geolocation-report-only.https.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <script src='/resources/testharness.js'></script>
-    <script src='/resources/testharnessreport.js'></script>
-  </head>
-  <body>
-    <script>
-var check_report_format = ([reports, observer]) => {
-  let report = reports[0];
-  assert_equals(report.type, "feature-policy");
-  assert_equals(report.body.feature, "geolocation");
-  assert_equals(report.body.disposition, "report");
-};
-
-promise_test(async t => {
-  const report = new Promise(resolve => {
-    new ReportingObserver((reports, observer) => resolve([reports, observer]),
-                          {types: ['feature-policy']}).observe();
-  });
-  try {
-    await new Promise((resolve, reject) => {
-      navigator.geolocation.getCurrentPosition(resolve, reject);
-    });
-    check_report_format(await report);
-  } catch (err) {
-    // In case the getCurrentPosition call was rejected due to user permissions,
-    // the report should be generated anyway. Wait for it and check the format
-    // before failing this test.
-    check_report_format(await report);
-    throw err;
-  }
-}, "Geolocation report only mode");
-    </script>
-  </body>
-</html>
deleted file mode 100644
--- a/testing/web-platform/tests/feature-policy/reporting/geolocation-report-only.https.html.headers
+++ /dev/null
@@ -1,1 +0,0 @@
-Feature-Policy: geolocation-report-only 'none'
--- a/testing/web-platform/tests/feature-policy/reporting/geolocation-reporting.https.html
+++ b/testing/web-platform/tests/feature-policy/reporting/geolocation-reporting.https.html
@@ -8,19 +8,16 @@
     <script>
 var t = async_test("Geolocation Report Format");
 
 var check_report_format = (reports, observer) => {
   let report = reports[0];
   assert_equals(report.type, "feature-policy-violation");
   assert_equals(report.url, document.location.href);
   assert_equals(report.body.featureId, "geolocation");
-  assert_equals(report.body.disposition, "enforce");
-  assert_equals(report.body.sourceFile, document.location.href);
-  assert_equals(typeof report.body.message, "string");
   assert_equals(typeof report.body.lineNumber, "number");
   assert_equals(typeof report.body.columnNumber, "number");
   assert_equals(report.body.disposition, "enforce");
 };
 
 new ReportingObserver(t.step_func_done(check_report_format),
                       {types: ['feature-policy-violation']}).observe();
 
deleted file mode 100644
--- a/testing/web-platform/tests/feature-policy/reporting/microphone-report-only.https.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <script src='/resources/testharness.js'></script>
-    <script src='/resources/testharnessreport.js'></script>
-    <script src='/resources/testdriver.js'></script>
-    <script src="/resources/testdriver-vendor.js"></script>
-  </head>
-  <body>
-    <script>
-var check_report_format = ([reports, observer]) => {
-  let report = reports[0];
-  assert_equals(report.type, "feature-policy");
-  assert_equals(report.body.feature, "microphone");
-  assert_equals(report.body.disposition, "report");
-};
-
-promise_test(async t => {
-  const report = new Promise(resolve => {
-    new ReportingObserver((reports, observer) => resolve([reports, observer]),
-                          {types: ['feature-policy']}).observe();
-  });
-  await test_driver.bless('Activate document for user media');
-  await navigator.mediaDevices.getUserMedia({audio: true});
-  check_report_format(await report);
-}, "Microphone report only mode");
-    </script>
-  </body>
-</html>
deleted file mode 100644
--- a/testing/web-platform/tests/feature-policy/reporting/microphone-report-only.https.html.headers
+++ /dev/null
@@ -1,1 +0,0 @@
-Feature-Policy: microphone-report-only 'none'
--- a/testing/web-platform/tests/feature-policy/reporting/microphone-reporting.https.html
+++ b/testing/web-platform/tests/feature-policy/reporting/microphone-reporting.https.html
@@ -8,17 +8,16 @@
     <script>
 var t = async_test("Microphone Report Format");
 
 var check_report_format = (reports, observer) => {
   let report = reports[0];
   assert_equals(report.type, "feature-policy-violation");
   assert_equals(report.url, document.location.href);
   assert_equals(report.body.featureId, "microphone");
-  assert_equals(report.body.disposition, "enforce");
   assert_equals(report.body.sourceFile, document.location.href);
   assert_equals(typeof report.body.lineNumber, "number");
   assert_equals(typeof report.body.columnNumber, "number");
   assert_equals(report.body.disposition, "enforce");
 };
 
 new ReportingObserver(t.step_func_done(check_report_format),
                       {types: ['feature-policy-violation']}).observe();
deleted file mode 100644
--- a/testing/web-platform/tests/feature-policy/reporting/midi-report-only.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <script src='/resources/testharness.js'></script>
-    <script src='/resources/testharnessreport.js'></script>
-  </head>
-  <body>
-    <script>
-var check_report_format = ([reports, observer]) => {
-  let report = reports[0];
-  assert_equals(report.type, "feature-policy");
-  assert_equals(report.body.feature, "midi");
-  assert_equals(report.body.disposition, "report");
-};
-
-promise_test(async t => {
-  const report = new Promise(resolve => {
-    new ReportingObserver((reports, observer) => resolve([reports, observer]),
-                          {types: ['feature-policy']}).observe();
-  });
-  try {
-    await navigator.requestMIDIAccess();
-    check_report_format(await report);
-  } catch (err) {
-    // In case the requestMIDIAccess call was rejected due to user permissions,
-    // the report should be generated anyway. Wait for it and check the format
-    // before failing this test.
-    check_report_format(await report);
-    throw err;
-  }
-}, "MIDI report only mode");
-    </script>
-  </body>
-</html>
deleted file mode 100644
--- a/testing/web-platform/tests/feature-policy/reporting/midi-report-only.html.headers
+++ /dev/null
@@ -1,1 +0,0 @@
-Feature-Policy: midi-report-only 'none'
--- a/testing/web-platform/tests/feature-policy/reporting/midi-reporting.html
+++ b/testing/web-platform/tests/feature-policy/reporting/midi-reporting.html
@@ -6,17 +6,16 @@
   </head>
   <body>
     <script>
 var check_report_format = (reports, observer) => {
   let report = reports[0];
   assert_equals(report.type, "feature-policy-violation");
   assert_equals(report.url, document.location.href);
   assert_equals(report.body.featureId, "midi");
-  assert_equals(report.body.disposition, "enforce");
   assert_equals(report.body.sourceFile, document.location.href);
   assert_equals(typeof report.body.lineNumber, "number");
   assert_equals(typeof report.body.columnNumber, "number");
   assert_equals(report.body.disposition, "enforce");
 };
 
 promise_test(async (t) => {
   const report = new Promise(resolve => {
deleted file mode 100644
--- a/testing/web-platform/tests/feature-policy/reporting/payment-report-only.https.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <script src='/resources/testharness.js'></script>
-    <script src='/resources/testharnessreport.js'></script>
-  </head>
-  <body>
-    <script>
-var check_report_format = ([reports, observer]) => {
-  let report = reports[0];
-  assert_equals(report.type, "feature-policy");
-  assert_equals(report.body.feature, "payment");
-  assert_equals(report.body.disposition, "report");
-};
-
-promise_test(async t => {
-  const report = new Promise(resolve => {
-    new ReportingObserver((reports, observer) => resolve([reports, observer]),
-                          {types: ['feature-policy']}).observe();
-  });
-  try {
-    const request = new PaymentRequest(
-      [{ supportedMethods: 'basic-card' }],
-      { total: { label: 'Total', amount: { currency: 'USD', value: 0 }}},
-      {});
-    await request.show()
-    check_report_format(await report);
-  } catch (err) {
-    // In case the show call was rejected, the report should be generated
-    // anyway. Wait for it and check the format before failing this test.
-    check_report_format(await report);
-    throw err;
-  }
-}, "PaymentRequest report only mode");
-    </script>
-  </body>
-</html>
deleted file mode 100644
--- a/testing/web-platform/tests/feature-policy/reporting/payment-report-only.https.html.headers
+++ /dev/null
@@ -1,1 +0,0 @@
-Feature-Policy: payment-report-only 'none'
--- a/testing/web-platform/tests/feature-policy/reporting/payment-reporting.https.html
+++ b/testing/web-platform/tests/feature-policy/reporting/payment-reporting.https.html
@@ -8,17 +8,16 @@
     <script>
 var t = async_test("PaymentRequest Report Format");
 
 var check_report_format = (reports, observer) => {
   let report = reports[0];
   assert_equals(report.type, "feature-policy-violation");
   assert_equals(report.url, document.location.href);
   assert_equals(report.body.featureId, "payment");
-  assert_equals(report.body.disposition, "enforce");
   assert_equals(report.body.sourceFile, document.location.href);
   assert_equals(typeof report.body.lineNumber, "number");
   assert_equals(typeof report.body.columnNumber, "number");
   assert_equals(report.body.disposition, "enforce");
 };
 
 new ReportingObserver(t.step_func_done(check_report_format),
                       {types: ['feature-policy-violation']}).observe();
deleted file mode 100644
--- a/testing/web-platform/tests/feature-policy/reporting/picture-in-picture-report-only.html
+++ /dev/null
@@ -1,40 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <script src='/common/media.js'></script>
-    <script src='/resources/testharness.js'></script>
-    <script src='/resources/testharnessreport.js'></script>
-    <script src="/resources/testdriver.js"></script>
-    <script src="/resources/testdriver-vendor.js"></script>
-    <script src='../resources/picture-in-picture.js'></script>
-  </head>
-  <body>
-    <script>
-const check_report_format = ([reports, observer]) => {
-  const report = reports[0];
-  assert_equals(report.type, "feature-policy");
-  assert_equals(report.body.feature, "picture-in-picture");
-  assert_equals(report.body.disposition, "report");
-};
-
-const loadVideo = () => new Promise(resolve => {
-    const video = document.createElement('video');
-    video.src = getVideoURI('/media/movie_5');
-    video.addEventListener('loadedmetadata', () => {
-      resolve(video);
-    }, { once: true });
-});
-
-promise_pip_test(async (t) => {
-  const report = new Promise(resolve => {
-    new ReportingObserver((reports, observer) => resolve([reports, observer]),
-                          {types: ['feature-policy']}).observe();
-  });
-  const videoElement = await loadVideo();
-  await test_driver.bless('picture-in-picture');
-  await videoElement.requestPictureInPicture();
-  check_report_format(await report);
-}, "Picture-in-Picture report only mode");
-    </script>
-  </body>
-</html>
deleted file mode 100644
--- a/testing/web-platform/tests/feature-policy/reporting/picture-in-picture-report-only.html.headers
+++ /dev/null
@@ -1,1 +0,0 @@
-Feature-Policy: picture-in-picture-report-only 'none'
--- a/testing/web-platform/tests/feature-policy/reporting/picture-in-picture-reporting.html
+++ b/testing/web-platform/tests/feature-policy/reporting/picture-in-picture-reporting.html
@@ -10,17 +10,16 @@
   </head>
   <body>
     <script>
 const check_report_format = (reports, observer) => {
   const report = reports[0];
   assert_equals(report.type, "feature-policy");
   assert_equals(report.url, document.location.href);
   assert_equals(report.body.feature, "picture-in-picture");
-  assert_equals(report.body.disposition, "enforce");
   assert_equals(report.body.sourceFile, document.location.href);
   assert_equals(typeof report.body.message, "string");
   assert_equals(typeof report.body.lineNumber, "number");
   assert_equals(typeof report.body.columnNumber, "number");
 };
 
 const loadVideo = () => new Promise(resolve => {
     const video = document.createElement('video');
deleted file mode 100644
--- a/testing/web-platform/tests/feature-policy/reporting/sync-xhr-report-only.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <script src='/resources/testharness.js'></script>
-    <script src='/resources/testharnessreport.js'></script>
-  </head>
-  <body>
-    <script>
-const check_report_format = ([reports, observer]) => {
-  const report = reports[0];
-  assert_equals(report.type, "feature-policy");
-  assert_equals(report.body.feature, "sync-xhr");
-  assert_equals(report.body.disposition, "report");
-};
-
-promise_test(async t => {
-  const report = new Promise(resolve => {
-    new ReportingObserver((reports, observer) => resolve([reports, observer]),
-                          {types: ['feature-policy']}).observe();
-  });
-  const xhr = new XMLHttpRequest();
-  xhr.open("GET", document.location.href, false);
-  xhr.send();
-  check_report_format(await report);
-}, "Sync-xhr report only mode");
-    </script>
-  </body>
-</html>
deleted file mode 100644
--- a/testing/web-platform/tests/feature-policy/reporting/sync-xhr-report-only.html.headers
+++ /dev/null
@@ -1,1 +0,0 @@
-Feature-Policy: sync-xhr-report-only 'none'
--- a/testing/web-platform/tests/feature-policy/reporting/sync-xhr-reporting.html
+++ b/testing/web-platform/tests/feature-policy/reporting/sync-xhr-reporting.html
@@ -8,17 +8,16 @@
     <script>
 var t = async_test("Sync-xhr Report Format");
 
 var check_report_format = (reports, observer) => {
   let report = reports[0];
   assert_equals(report.type, "feature-policy-violation");
   assert_equals(report.url, document.location.href);
   assert_equals(report.body.featureId, "sync-xhr");
-  assert_equals(report.body.disposition, "enforce");
   assert_equals(report.body.sourceFile, document.location.href);
   assert_equals(typeof report.body.lineNumber, "number");
   assert_equals(typeof report.body.columnNumber, "number");
   assert_equals(report.body.disposition, "enforce");
 };
 
 new ReportingObserver(t.step_func_done(check_report_format),
                       {types: ['feature-policy-violation']}).observe();
deleted file mode 100644
--- a/testing/web-platform/tests/feature-policy/reporting/usb-report-only.https.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <script src='/resources/testharness.js'></script>
-    <script src='/resources/testharnessreport.js'></script>
-    <script src='/resources/testdriver.js'></script>
-    <script src="/resources/testdriver-vendor.js"></script>
-  </head>
-  <body>
-    <div id='fs'></div>
-    <script>
-var check_report_format = ([reports, observer]) => {
-  let report = reports[0];
-  assert_equals(report.type, "feature-policy");
-  assert_equals(report.body.feature, "usb");
-  assert_equals(report.body.disposition, "report");
-};
-
-promise_test(async t => {
-  const report = new Promise(resolve => {
-    new ReportingObserver((reports, observer) => resolve([reports, observer]),
-                          {types: ['feature-policy']}).observe();
-  });
-  await test_driver.bless('Activate document for USB');
-  await navigator.usb.getDevices();
-  check_report_format(await report);
-}, "USB report only mode");
-    </script>
-  </body>
-</html>
deleted file mode 100644
--- a/testing/web-platform/tests/feature-policy/reporting/usb-report-only.https.html.headers
+++ /dev/null
@@ -1,1 +0,0 @@
-Feature-Policy: usb-report-only 'none'
--- a/testing/web-platform/tests/feature-policy/reporting/usb-reporting.https.html
+++ b/testing/web-platform/tests/feature-policy/reporting/usb-reporting.https.html
@@ -8,17 +8,16 @@
     <script>
 var t = async_test("USB Report Format");
 
 var check_report_format = (reports, observer) => {
   let report = reports[0];
   assert_equals(report.type, "feature-policy-violation");
   assert_equals(report.url, document.location.href);
   assert_equals(report.body.featureId, "usb");
-  assert_equals(report.body.disposition, "enforce");
   assert_equals(report.body.sourceFile, document.location.href);
   assert_equals(typeof report.body.lineNumber, "number");
   assert_equals(typeof report.body.columnNumber, "number");
   assert_equals(report.body.disposition, "enforce");
 };
 
 new ReportingObserver(t.step_func_done(check_report_format),
                       {types: ['feature-policy-violation']}).observe();
deleted file mode 100644
--- a/testing/web-platform/tests/feature-policy/reporting/vr-report-only.https.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <script src='/resources/testharness.js'></script>
-    <script src='/resources/testharnessreport.js'></script>
-  </head>
-  <body>
-    <script>
-const check_report_format = ([reports, observer]) => {
-  const report = reports[0];
-  assert_equals(report.type, "feature-policy");
-  assert_equals(report.url, document.location.href);
-  assert_equals(report.body.feature, "vr");
-  assert_equals(report.body.disposition, "report");
-  assert_equals(report.body.sourceFile, document.location.href);
-  assert_equals(typeof report.body.message, "string");
-  assert_equals(typeof report.body.lineNumber, "number");
-  assert_equals(typeof report.body.columnNumber, "number");
-};
-
-promise_test(async t => {
-  const report = new Promise(resolve => {
-    new ReportingObserver((reports, observer) => resolve([reports, observer]),
-                          {types: ['feature-policy']}).observe();
-  });
-  await navigator.getVRDisplays();
-  check_report_format(await report);
-}, "VR report only mode");
-    </script>
-  </body>
-</html>
deleted file mode 100644
--- a/testing/web-platform/tests/feature-policy/reporting/vr-report-only.https.html.headers
+++ /dev/null
@@ -1,1 +0,0 @@
-Feature-Policy: vr-report-only 'none'
--- a/testing/web-platform/tests/feature-policy/reporting/vr-reporting.https.html
+++ b/testing/web-platform/tests/feature-policy/reporting/vr-reporting.https.html
@@ -6,17 +6,16 @@
   </head>
   <body>
     <script>
 var check_report_format = (reports, observer) => {
   let report = reports[0];
   assert_equals(report.type, "feature-policy-violation");
   assert_equals(report.url, document.location.href);
   assert_equals(report.body.featureId, "vr");
-  assert_equals(report.body.disposition, "enforce");
   assert_equals(report.body.sourceFile, document.location.href);
   assert_equals(typeof report.body.lineNumber, "number");
   assert_equals(typeof report.body.columnNumber, "number");
   assert_equals(report.body.disposition, "enforce");
 };
 
 promise_test(async (t) => {
   const report = new Promise(resolve => {
deleted file mode 100644
--- a/testing/web-platform/tests/feature-policy/reporting/xr-report-only.https.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <script src='/resources/testharness.js'></script>
-    <script src='/resources/testharnessreport.js'></script>
-  </head>
-  <body>
-    <script>
-const check_report_format = ([reports, observer]) => {
-  const report = reports[0];
-  assert_equals(report.type, "feature-policy");
-  assert_equals(report.url, document.location.href);
-  assert_equals(report.body.feature, "vr");
-  assert_equals(report.body.disposition, "report");
-  assert_equals(report.body.sourceFile, document.location.href);
-  assert_equals(typeof report.body.message, "string");
-  assert_equals(typeof report.body.lineNumber, "number");
-  assert_equals(typeof report.body.columnNumber, "number");
-};
-
-promise_test(async t => {
-  const report = new Promise(resolve => {
-    new ReportingObserver((reports, observer) => resolve([reports, observer]),
-                          {types: ['feature-policy']}).observe();
-  });
-  try {
-    await navigator.xr.requestDevice();
-  } catch (err) {
-    // If no XR devices are available, requestDevice() will throw NotFoundError,
-    // but the report should be generated anyway.
-    assert_equals(err.name, 'NotFoundError');
-  }
-  check_report_format(await report);
-}, "XR report only mode");
-    </script>
-  </body>
-</html>
deleted file mode 100644
--- a/testing/web-platform/tests/feature-policy/reporting/xr-report-only.https.html.headers
+++ /dev/null
@@ -1,1 +0,0 @@
-Feature-Policy: vr-report-only 'none'
--- a/testing/web-platform/tests/feature-policy/reporting/xr-reporting.https.html
+++ b/testing/web-platform/tests/feature-policy/reporting/xr-reporting.https.html
@@ -6,17 +6,16 @@
   </head>
   <body>
     <script>
 var check_report_format = (reports, observer) => {
   let report = reports[0];
   assert_equals(report.type, "feature-policy-violation");
   assert_equals(report.url, document.location.href);
   assert_equals(report.body.featureId, "vr");
-  assert_equals(report.body.disposition, "enforce");
   assert_equals(report.body.sourceFile, document.location.href);
   assert_equals(typeof report.body.lineNumber, "number");
   assert_equals(typeof report.body.columnNumber, "number");
   assert_equals(report.body.disposition, "enforce");
 };
 
 promise_test(async (t) => {
   const report = new Promise(resolve => {
--- a/testing/web-platform/tests/fetch/api/headers/headers-no-cors.window.js
+++ b/testing/web-platform/tests/fetch/api/headers/headers-no-cors.window.js
@@ -1,48 +1,19 @@
 promise_test(() => fetch("../cors/resources/not-cors-safelisted.json").then(res => res.json().then(runTests)), "Loading data…");
 
-const longValue = "s".repeat(127);
-
-[
-  {
-    "headers": ["accept", "accept-language", "content-language"],
-    "values": [longValue, "", longValue]
-  },
-  {
-    "headers": ["content-type"],
-    "values": ["text/plain;" + "s".repeat(116), "text/plain"]
-  }
-].forEach(testItem => {
-  testItem.headers.forEach(header => {
-    test(() => {
-      const noCorsHeaders = new Request("about:blank", { mode: "no-cors" }).headers;
-      testItem.values.forEach((value) => {
-        noCorsHeaders.append(header, value);
-        assert_equals(noCorsHeaders.get(header), testItem.values[0]);
-      });
-      noCorsHeaders.set(header, values.join(", "));
-      assert_equals(noCorsHeaders.get(header), testItem.values[0]);
-      noCorsHeaders.delete(header);
-      assert_false(noCorsHeaders.has(header));
-    }, "\"no-cors\" Headers object cannot have " + header + " set to " + testItem.values.join(", "));
-  });
-});
-
 function runTests(testArray) {
   testArray = testArray.concat([
     ["dpr", "2"],
     ["downlink", "1"], // https://wicg.github.io/netinfo/
     ["save-data", "on"],
     ["viewport-width", "100"],
     ["width", "100"]
   ]);
   testArray.forEach(testItem => {
     const [headerName, headerValue] = testItem;
     test(() => {
       const noCorsHeaders = new Request("about:blank", { mode: "no-cors" }).headers;
       noCorsHeaders.append(headerName, headerValue);
       assert_false(noCorsHeaders.has(headerName));
-      noCorsHeaders.set(headerName, headerValue);
-      assert_false(noCorsHeaders.has(headerName));
     }, "\"no-cors\" Headers object cannot have " + headerName + "/" + headerValue + " as header");
   });
 }
deleted file mode 100644
--- a/testing/web-platform/tests/fullscreen/rendering/fullscreen-css-transition.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<!DOCTYPE html>
-<title>Transitions should not be stopped by going fullscreen</title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/resources/testdriver.js"></script>
-<script src="/resources/testdriver-vendor.js"></script>
-<style>
-  #trans {
-    transition: color steps(1, end) 100s;
-    color: green;
-  }
-</style>
-<div id="trans">Should be green</div>
-<script>
-  async_test(t => {
-    document.onfullscreenchange = t.step_func_done(() => {
-      assert_equals(document.fullscreenElement, trans);
-      assert_equals(getComputedStyle(trans).color, "rgb(0, 128, 0)", "Transition is in progress - still green");
-    });
-    trans.addEventListener('click', e => {
-      trans.style.color = "red";
-      trans.offsetTop;
-      trans.requestFullscreen();
-    }, {once: true});
-    test_driver.click(trans);
-  });
-</script>
--- a/testing/web-platform/tests/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events-onerror.html
+++ b/testing/web-platform/tests/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events-onerror.html
@@ -10,17 +10,17 @@ setup({
   allow_uncaught_exception: true
 });
 async_test(function(t) {
   var e = new Error('e');
   var e2 = new Error('e2');
 
   window.onerror = function (msg, url, line, col, error) {
     t.step(function() {
-      assert_true(msg.includes('e2'));
+      assert_equals(msg, 'Uncaught Error: e2');
       assert_equals(error, e2);
     });
     t.done();
   };
 
   window.onrejectionhandled = function() {
     // This should cause onerror
     throw e2;
--- a/testing/web-platform/tests/infrastructure/metadata/infrastructure/testdriver/actions/elementPosition.html.ini
+++ b/testing/web-platform/tests/infrastructure/metadata/infrastructure/testdriver/actions/elementPosition.html.ini
@@ -1,3 +1,3 @@
 [elementPosition.html]
-  expected:
-    if product == "chrome" or product == "safari" or product == "safari_webdriver": ERROR
+  [TestDriver actions: element position]
+    expected: FAIL
--- a/testing/web-platform/tests/infrastructure/metadata/infrastructure/testdriver/actions/eventOrder.html.ini
+++ b/testing/web-platform/tests/infrastructure/metadata/infrastructure/testdriver/actions/eventOrder.html.ini
@@ -1,3 +1,3 @@
 [eventOrder.html]
-  expected:
-    if product == "chrome" or product == "safari" or product == "safari_webdriver": ERROR
+  [TestDriver actions: event order]
+    expected: FAIL
--- a/testing/web-platform/tests/infrastructure/testdriver/actions/elementPosition.html
+++ b/testing/web-platform/tests/infrastructure/testdriver/actions/elementPosition.html
@@ -29,15 +29,15 @@ async_test(t => {
   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()
+    .pointerDown(0, 0, {origin: test})
     .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>
--- a/testing/web-platform/tests/infrastructure/testdriver/actions/eventOrder.html
+++ b/testing/web-platform/tests/infrastructure/testdriver/actions/eventOrder.html
@@ -12,26 +12,24 @@
 
 <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)}));
+                               (x) => x.addEventListener("pointerdown", () => {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"})
+    .addPointer("pointer1", "touch")
+    .addPointer("pointer2", "touch")
+    .pointerDown(0, 0, {origin: button_a, sourceName: "pointer1"})
+    .pointerDown(0, 0, {origin: button_b, sourceName: "pointer2"})
+    .pointerUp({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>
--- a/testing/web-platform/tests/interfaces/geometry.idl
+++ b/testing/web-platform/tests/interfaces/geometry.idl
@@ -151,18 +151,16 @@ interface DOMMatrixReadOnly {
                                     optional unrestricted double ty = 0,
                                     optional unrestricted double tz = 0);
     [NewObject] DOMMatrix scale(optional unrestricted double scaleX = 1,
                                 optional unrestricted double scaleY,
                                 optional unrestricted double scaleZ = 1,
                                 optional unrestricted double originX = 0,
                                 optional unrestricted double originY = 0,
                                 optional unrestricted double originZ = 0);
-    [NewObject] DOMMatrix scaleNonUniform(optional unrestricted double scaleX = 1,
-                                          optional unrestricted double scaleY = 1);
     [NewObject] DOMMatrix scale3d(optional unrestricted double scale = 1,
                                   optional unrestricted double originX = 0,
                                   optional unrestricted double originY = 0,
                                   optional unrestricted double originZ = 0);
     [NewObject] DOMMatrix rotate(optional unrestricted double rotX = 0,
                                  optional unrestricted double rotY,
                                  optional unrestricted double rotZ);
     [NewObject] DOMMatrix rotateFromVector(optional unrestricted double x = 0,
--- a/testing/web-platform/tests/lint.whitelist
+++ b/testing/web-platform/tests/lint.whitelist
@@ -306,17 +306,16 @@ SET TIMEOUT: html/dom/documents/dom-tree
 SET TIMEOUT: html/webappapis/timers/*
 SET TIMEOUT: resources/chromium/*
 SET TIMEOUT: resources/test/tests/functional/add_cleanup.html
 SET TIMEOUT: resources/test/tests/functional/add_cleanup_async.html
 SET TIMEOUT: resources/test/tests/functional/add_cleanup_async_rejection.html
 SET TIMEOUT: resources/test/tests/functional/add_cleanup_async_rejection_after_load.html
 SET TIMEOUT: resources/test/tests/functional/api-tests-1.html
 SET TIMEOUT: resources/test/tests/functional/worker.js
-SET TIMEOUT: resources/test/tests/functional/worker-uncaught-allow.js
 SET TIMEOUT: resources/test/tests/unit/exceptional-cases.html
 SET TIMEOUT: resources/testharness.js
 
 # setTimeout use in reftests
 SET TIMEOUT: acid/acid3/test.html
 
 # CI configuration
 WEB-PLATFORM.TEST: .azure-pipelines.yml
--- a/testing/web-platform/tests/longtask-timing/longtask-attributes.html
+++ b/testing/web-platform/tests/longtask-timing/longtask-attributes.html
@@ -27,17 +27,17 @@
             const currentTime = performance.now();
             assert_less_than_equal(longtask.startTime, currentTime);
 
             // Assert the TaskAttributionTiming entry in attribution.
             assert_equals(longtask.attribution.length, 1,
                 'Exactly one attribution entry is expected');
             const attribution = longtask.attribution[0];
             assert_equals(attribution.entryType, 'taskattribution');
-            assert_equals(attribution.name, 'unknown');
+            assert_equals(attribution.name, 'script');
             assert_equals(attribution.duration, 0);
             assert_equals(attribution.startTime, 0);
             assert_equals(attribution.containerId, '');
             assert_equals(attribution.containerName, '');
             assert_equals(attribution.containerSrc, '');
             observer.disconnect();
             t.done();
         })
@@ -47,9 +47,9 @@
     window.onload = () => {
         /* Generate a slow task */
         const begin = window.performance.now();
         while (window.performance.now() < begin + 60);
     };
 }, 'Performance longtask entries are observable.');
 </script>
 
-</body>
+</body>
\ No newline at end of file
--- a/testing/web-platform/tests/longtask-timing/longtask-in-childiframe-crossorigin.html
+++ b/testing/web-platform/tests/longtask-timing/longtask-in-childiframe-crossorigin.html
@@ -28,17 +28,17 @@
             assert_equals(longtask.name, 'cross-origin-descendant');
             assert_greater_than(longtask.duration, 50);
 
             // Assert the TaskAttributionTiming entry in attribution.
             assert_equals(longtask.attribution.length, 1,
                 'Exactly one attribution entry is expected');
             const attribution = longtask.attribution[0];
             assert_equals(attribution.entryType, 'taskattribution');
-            assert_equals(attribution.name, 'unknown');
+            assert_equals(attribution.name, 'script');
             assert_equals(attribution.duration, 0);
             assert_equals(attribution.startTime, 0);
             assert_equals(attribution.containerId, 'child-iframe-id');
             assert_equals(attribution.containerName, 'child-iframe-name');
             assert_equals(attribution.containerSrc,
                 'resources/subframe-with-longtask.html');
             observer.disconnect();
             t.done();
--- a/testing/web-platform/tests/longtask-timing/longtask-in-childiframe.html
+++ b/testing/web-platform/tests/longtask-timing/longtask-in-childiframe.html
@@ -33,17 +33,17 @@
             const currentTime = performance.now();
             assert_less_than_equal(longtask.startTime, currentTime);
 
             // Assert the TaskAttributionTiming entry in attribution.
             assert_equals(longtask.attribution.length, 1,
                 'Exactly one attribution entry is expected');
             const attribution = longtask.attribution[0];
             assert_equals(attribution.entryType, 'taskattribution');
-            assert_equals(attribution.name, 'unknown');
+            assert_equals(attribution.name, 'script');
             assert_equals(attribution.duration, 0);
             assert_equals(attribution.startTime, 0);
             assert_equals(attribution.containerId, 'child-iframe-id');
             assert_equals(attribution.containerName, 'child-iframe-name');
             assert_equals(attribution.containerSrc, 'resources/subframe-with-longtask.html');
             observer.disconnect();
             t.done();
         })
--- a/testing/web-platform/tests/longtask-timing/longtask-in-externalscript.html
+++ b/testing/web-platform/tests/longtask-timing/longtask-in-externalscript.html
@@ -24,17 +24,17 @@
             assert_equals(longtask.name, 'self');
             assert_greater_than(longtask.duration, 50);
 
             // Assert the TaskAttributionTiming entry in attribution.
             assert_equals(longtask.attribution.length, 1,
                 'Exactly one attribution entry is expected');
             const attribution = longtask.attribution[0];
             assert_equals(attribution.entryType, 'taskattribution');
-            assert_equals(attribution.name, 'unknown');
+            assert_equals(attribution.name, 'script');
             assert_equals(attribution.duration, 0);
             assert_equals(attribution.startTime, 0);
             assert_equals(attribution.containerId, '');
             assert_equals(attribution.containerName, '');
             assert_equals(attribution.containerSrc, '');
             observer.disconnect();
             t.done();
         })
@@ -42,9 +42,9 @@
     observer.observe({entryTypes: ['longtask']});
     window.onload = () => {
         const script = document.createElement('script');
         script.src = 'resources/makelongtask.js';
         document.body.appendChild(script);
     }
 }, 'Performance longtask entries are observable.');
 </script>
-</body>
+</body>
\ No newline at end of file
--- a/testing/web-platform/tests/longtask-timing/longtask-in-parentiframe.html
+++ b/testing/web-platform/tests/longtask-timing/longtask-in-parentiframe.html
@@ -10,17 +10,17 @@
   const t = async_test(t => {
     if (typeof PerformanceLongTaskTiming === 'undefined') {
         assert_unreached("Longtasks are not supported.");
         t.done();
     }
     window.addEventListener('message', t.step_func(e => {
       assert_equals(e.data['entryType'], 'longtask');
       assert_equals(e.data['frame-attribution'], 'same-origin-ancestor');
-      assert_equals(e.data['task-attribution'], 'unknown');
+      assert_equals(e.data['task-attribution'], 'script');
       assert_equals(e.data['containerId'], '');
       assert_equals(e.data['containerName'], '');
       assert_equals(e.data['containerSrc'], '');
       t.done();
     }));
   }, 'Performance longtask entries in parent are observable in child iframe.');
 
   const iframe = document.createElement('iframe');
--- a/testing/web-platform/tests/longtask-timing/longtask-in-raf.html
+++ b/testing/web-platform/tests/longtask-timing/longtask-in-raf.html
@@ -24,17 +24,17 @@
             assert_equals(longtask.name, 'self');
             assert_greater_than(longtask.duration, 50);
 
             // Assert the TaskAttributionTiming entry in attribution.
             assert_equals(longtask.attribution.length, 1,
                 'Exactly one attribution entry is expected');
             const attribution = longtask.attribution[0];
             assert_equals(attribution.entryType, 'taskattribution');
-            assert_equals(attribution.name, 'unknown');
+            assert_equals(attribution.name, 'script');
             assert_equals(attribution.duration, 0);
             assert_equals(attribution.startTime, 0);
             assert_equals(attribution.containerId, '');
             assert_equals(attribution.containerName, '');
             assert_equals(attribution.containerSrc, '');
             observer.disconnect();
             t.done();
         })
--- a/testing/web-platform/tests/longtask-timing/longtask-in-sibling-iframe-crossorigin.html
+++ b/testing/web-platform/tests/longtask-timing/longtask-in-sibling-iframe-crossorigin.html
@@ -10,17 +10,17 @@
   async_test(t => {
     if (typeof PerformanceLongTaskTiming === 'undefined') {
         assert_unreached("Longtasks are not supported.");
         t.done();
     }
     window.addEventListener('message', t.step_func(e => {
       assert_equals(e.data['entryType'], 'longtask');
       assert_equals(e.data['frame-attribution'], 'cross-origin-unreachable');
-      assert_equals(e.data['task-attribution'], 'unknown');
+      assert_equals(e.data['task-attribution'], 'script');
       assert_equals(e.data['containerId'], '');
       assert_equals(e.data['containerName'], '');
       assert_equals(e.data['containerSrc'], '');
       t.done();
     }));
     const observingFrame = document.createElement('iframe');
     observingFrame.id = 'observing-iframe-id';
     observingFrame.name = 'observing-iframe-name';
--- a/testing/web-platform/tests/longtask-timing/longtask-in-sibling-iframe.html
+++ b/testing/web-platform/tests/longtask-timing/longtask-in-sibling-iframe.html
@@ -10,17 +10,17 @@
   async_test(t => {
     if (typeof PerformanceLongTaskTiming === 'undefined') {
         assert_unreached("Longtasks are not supported.");
         t.done();
     }
     window.addEventListener('message', t.step_func(e => {
       assert_equals(e.data['entryType'], 'longtask');
       assert_equals(e.data['frame-attribution'], 'same-origin');
-      assert_equals(e.data['task-attribution'], 'unknown');
+      assert_equals(e.data['task-attribution'], 'script');
       assert_equals(e.data['containerId'], 'longtask-iframe-id');
       assert_equals(e.data['containerName'], 'longtask-iframe-name');
       assert_equals(e.data['containerSrc'], 'resources/subframe-with-longtask.html');
       t.done();
     }));
     const observingFrame = document.createElement('iframe');
     observingFrame.id = 'observing-iframe-id';
     observingFrame.name = 'observing-iframe-name';
deleted file mode 100644
--- a/testing/web-platform/tests/pointerevents/pointerevent_pointermove-manual.html
+++ /dev/null
@@ -1,44 +0,0 @@
-<!doctype html>
-<html>
-    <head>
-        <title>Pointermove</title>
-        <meta name="viewport" content="width=device-width">
-        <meta name="assert" content="When a pointer changes coordinates, the pointermove event must be dispatched."/>
-        <link rel="stylesheet" type="text/css" href="pointerevent_styles.css">
-        <script src="/resources/testharness.js"></script>
-        <script src="/resources/testharnessreport.js"></script>
-        <!-- Additional helper script for common checks across event types -->
-        <script type="text/javascript" src="pointerevent_support.js"></script>
-    </head>
-    <body onload="run()">
-        <h2>PointerMove</h2>
-        <h4>Test Description: This test checks if pointermove event triggers. Move your mouse over the black rectangle or slide it if you are using touchscreen.</h4>
-        <div id="target0" style="background:black"></div>
-        <script>
-            var eventTested = false;
-            var detected_pointertypes = {};
-            var test_pointermove = async_test("pointermove event received");
-            add_completion_callback(showPointerTypes);
-
-            function run() {
-                var target0 = document.getElementById("target0");
-
-                // When a pointer changes coordinates, the pointermove event must be dispatched.
-                // TA: 5.3
-                on_event(target0, "pointermove", function (event) {
-                    detected_pointertypes[event.pointerType] = true;
-                    if (eventTested == false) {
-                        test_pointermove.done();
-                        eventTested = true;
-                    }
-                });
-            }
-        </script>
-        <h1>Pointer Events pointermove Tests</h1>
-        <div id="complete-notice">
-            <p>The following pointer types were detected: <span id="pointertype-log"></span>.</p>
-            <p>Refresh the page to run the tests again with a different pointer type.</p>
-        </div>
-        <div id="log"></div>
-    </body>
-</html>
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/pointerevents/pointerevent_pointermove.html
@@ -0,0 +1,50 @@
+<!doctype html>
+<html>
+    <head>
+        <title>Pointermove</title>
+        <meta name="viewport" content="width=device-width">
+        <meta name="assert" content="When a pointer changes coordinates, the pointermove event must be dispatched."/>
+        <link rel="stylesheet" type="text/css" href="pointerevent_styles.css">
+        <script src="/resources/testharness.js"></script>
+        <script src="/resources/testharnessreport.js"></script>
+        <script src="/resources/testdriver.js"></script>
+        <script src="/resources/testdriver-actions.js"></script>
+        <script src="/resources/testdriver-vendor.js"></script>
+        <!-- Additional helper script for common checks across event types -->
+        <script type="text/javascript" src="pointerevent_support.js"></script>
+    </head>
+    <body onload="run()">
+        <h2>PointerMove</h2>
+        <h4>Test Description: This test checks if pointermove event triggers. Move your mouse over the black rectangle or slide it if you are using touchscreen.</h4>
+        <div id="target0" style="background:black"></div>
+        <script>
+            var eventTested = false;
+            var detected_pointertypes = {};
+            var test_pointermove = async_test("pointermove event received");
+            add_completion_callback(showPointerTypes);
+
+            function run() {
+                var target0 = document.getElementById("target0");
+
+                // When a pointer changes coordinates, the pointermove event must be dispatched.
+                // TA: 5.3
+                on_event(target0, "pointermove", function (event) {
+                    detected_pointertypes[event.pointerType] = true;
+                    if (eventTested == false) {
+                        test_pointermove.done();
+                        eventTested = true;
+                    }
+                });
+
+                // Inject the inputs to run this test.
+                new test_driver.Actions().pointerMove(0, 0, {origin: target0}).send();
+            }
+        </script>
+        <h1>Pointer Events pointermove Tests</h1>
+        <div id="complete-notice">
+            <p>The following pointer types were detected: <span id="pointertype-log"></span>.</p>
+            <p>Refresh the page to run the tests again with a different pointer type.</p>
+        </div>
+        <div id="log"></div>
+    </body>
+</html>
\ No newline at end of file
deleted file mode 100644
--- a/testing/web-platform/tests/resources/test/tests/functional/worker-dedicated-uncaught-allow.html
+++ /dev/null
@@ -1,48 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<head>
-<meta name="variant" content="">
-<meta name="variant" content="?keep-promise">
-<title>Dedicated Worker Tests - Allowed Uncaught Exception</title>
-<script src="../../variants.js"></script>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-</head>
-<body>
-<h1>Dedicated Web Worker Tests - Allowed Uncaught Exception</h1>
-<p>Demonstrates running <tt>testharness</tt> based tests inside a dedicated web worker.
-<p>The test harness is expected to pass despite an uncaught exception in a worker because that worker is configured to allow uncaught exceptions.</p>
-<div id="log"></div>
-
-<script>
-test(function(t) {
-        assert_true("Worker" in self, "Browser should support Workers");
-    },
-    "Browser supports Workers");
-
-fetch_tests_from_worker(new Worker("worker-uncaught-allow.js"));
-</script>
-<script type="text/json" id="expected">
-{
-  "summarized_status": {
-    "status_string": "OK",
-    "message": null
-  },
-  "summarized_tests": [
-    {
-      "status_string": "PASS",
-      "name": "Browser supports Workers",
-      "properties": {},
-      "message": null
-    },
-    {
-      "status_string": "PASS",
-      "name": "onerror event is triggered",
-      "properties": {},
-      "message": null
-    }
-  ],
-  "type": "complete"
-}
-</script>
-</body>
deleted file mode 100644
--- a/testing/web-platform/tests/resources/test/tests/functional/worker-uncaught-allow.js
+++ /dev/null
@@ -1,17 +0,0 @@
-importScripts("/resources/testharness.js");
-
-setup({allow_uncaught_exception:true});
-
-async_test(function(t) {
-  onerror = function() {
-    // Further delay the test's completion to ensure that the worker's
-    // `onerror` handler does not influence results in the parent context.
-    setTimeout(function() {
-      t.done();
-    }, 0);
-  };
-
-  setTimeout(function() {
-    throw new Error("This error is expected.");
-  }, 0);
-}, 'onerror event is triggered');
--- a/testing/web-platform/tests/resources/testdriver-actions.js
+++ b/testing/web-platform/tests/resources/testdriver-actions.js
@@ -17,16 +17,24 @@
     for (let sourceType of this.sourceTypes.keys()) {
       this.currentSources.set(sourceType, null);
     }
     this.createSource("general");
     this.tickIdx = 0;
   }
 
   Actions.prototype = {
+    ButtonType: {
+      LEFT: 0,
+      MIDDLE: 1,
+      RIGHT: 2,
+      BACK: 3,
+      FORWARD: 4,
+    },
+
     /**
      * Generate the action sequence suitable for passing to
      * test_driver.action_sequence
      *
      * @returns {Array} Array of WebDriver-compatible actions sequences
      */
     serialize: function() {
       let actions = [];
@@ -93,17 +101,17 @@
     /**
      * 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);
+      this.createSource("key", name);
       if (set) {
         this.setKeyboard(name);
       }
       return this;
     },
 
     /**
      * Set the current default key source
@@ -120,17 +128,17 @@
      * 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});
+      this.createSource("pointer", name, {pointerType: pointerType});
       if (set) {
         this.setPointer(name);
       }
       return this;
     },
 
     /**
      * Set the current default pointer source
@@ -220,31 +228,31 @@
     /**
      * 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}={}) {
+    pointerDown: function(x, y, {origin="viewport", button=this.ButtonType.LEFT, sourceName=null}={}) {
       let source = this.getSource("pointer", sourceName);
-      source.pointerDown(this, button);
+      source.pointerDown(this, button, x, y, origin);
       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}={}) {
+    pointerUp: function({button=this.ButtonType.LEFT, sourceName=null}={}) {
       let source = this.getSource("pointer", sourceName);
       source.pointerUp(this, button);
       return this;
     },
 
     /**
      * Create a move event for the current default pointer source
      *
@@ -354,22 +362,22 @@
           actions.push(this.actions.get(i));
         } else {
           actions.push({"type": "pause"});
         }
       }
       return data;
     },
 
-    pointerDown: function(actions, button) {
+    pointerDown: function(actions, button, x, y, origin) {
       let tick = actions.tickIdx;
       if (this.actions.has(tick)) {
         tick = actions.addTick().tickIdx;
       }
-      this.actions.set(tick, {type: "pointerDown", button});
+      this.actions.set(tick, {type: "pointerDown", button, x, y, origin});
     },
 
     pointerUp: function(actions, button) {
       let tick = actions.tickIdx;
       if (this.actions.has(tick)) {
         tick = actions.addTick().tickIdx;
       }
       this.actions.set(tick, {type: "pointerUp", button});
--- a/testing/web-platform/tests/resources/testdriver.js
+++ b/testing/web-platform/tests/resources/testdriver.js
@@ -187,17 +187,17 @@
                                     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) {
+        action_sequence: function(actions) {
             return window.test_driver_internal.action_sequence(actions);
         }
     };
 
     window.test_driver_internal = {
         /**
          * Triggers a user-initiated click
          *
@@ -228,16 +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
+         * @returns {Promise} fulfilled after actions are sent, rejected if any actions
          *                    fail
          */
         action_sequence: function(actions) {
             return Promise.reject(new Error("unimplemented"));
         }
     };
 })();
--- a/testing/web-platform/tests/resources/testharness.js
+++ b/testing/web-platform/tests/resources/testharness.js
@@ -1899,19 +1899,17 @@ policies and contribution forms [3].
      * and maintain RemoteTest objects that mirror the tests running in the
      * remote context.
      *
      * An optional third parameter can be used as a predicate to filter incoming
      * MessageEvents.
      */
     function RemoteContext(remote, message_target, message_filter) {
         this.running = true;
-        this.started = false;
         this.tests = new Array();
-        this.early_exception = null;
 
         var this_obj = this;
         // If remote context is cross origin assigning to onerror is not
         // possible, so silently catch those errors.
         try {
           remote.onerror = function(error) { this_obj.remote_error(error); };
         } catch (e) {
           // Ignore.
@@ -1940,46 +1938,26 @@ policies and contribution forms [3].
                 this_obj.doneResolve = resolve;
             });
         }
 
         this.message_target.addEventListener("message", this.message_handler);
     }
 
     RemoteContext.prototype.remote_error = function(error) {
-        if (error.preventDefault) {
-            error.preventDefault();
-        }
-
-        // Defer interpretation of errors until the testing protocol has
-        // started and the remote test's `allow_uncaught_exception` property
-        // is available.
-        if (!this.started) {
-            this.early_exception = error;
-        } else if (!this.allow_uncaught_exception) {
-            this.report_uncaught(error);
-        }
-    };
-
-    RemoteContext.prototype.report_uncaught = function(error) {
         var message = error.message || String(error);
         var filename = (error.filename ? " " + error.filename: "");
         // FIXME: Display remote error states separately from main document
         // error state.
         tests.set_status(tests.status.ERROR,
                          "Error in remote" + filename + ": " + message,
                          error.stack);
-    };
-
-    RemoteContext.prototype.start = function(data) {
-        this.started = true;
-        this.allow_uncaught_exception = data.properties.allow_uncaught_exception;
-
-        if (this.early_exception && !this.allow_uncaught_exception) {
-            this.report_uncaught(this.early_exception);
+
+        if (error.preventDefault) {
+            error.preventDefault();
         }
     };
 
     RemoteContext.prototype.test_state = function(data) {
         var remote_test = this.tests[data.test.index];
         if (!remote_test) {
             remote_test = new RemoteTest(data.test);
             this.tests[data.test.index] = remote_test;
@@ -2019,17 +1997,16 @@ policies and contribution forms [3].
         }
 
         if (tests.all_done()) {
             tests.complete();
         }
     };
 
     RemoteContext.prototype.message_handlers = {
-        start: RemoteContext.prototype.start,
         test_state: RemoteContext.prototype.test_state,
         result: RemoteContext.prototype.test_done,
         complete: RemoteContext.prototype.remote_done
     };
 
     /*
      * Harness
      */
--- a/testing/web-platform/tests/service-workers/service-worker/import-module-scripts.https.html
+++ b/testing/web-platform/tests/service-workers/service-worker/import-module-scripts.https.html
@@ -8,17 +8,16 @@
 <body>
 <script>
 function import_test(testCase) {
   promise_test(async t => {
     const msgPromise = new Promise(resolve => {
       navigator.serviceWorker.onmessage = resolve;
     });
     await service_worker_unregister(t, testCase.scriptURL);
-    t.add_cleanup(() => service_worker_unregister(t, testCase.scriptURL));
     const registration = await navigator.serviceWorker.register(
       testCase.scriptURL,
       { scope: testCase.scriptURL, type: 'module' });
     registration.installing.postMessage(
       'Send message for tests from main script.');
     const msgEvent = await msgPromise;
     assert_array_equals(msgEvent.data, testCase.expectation);
   }, testCase.description);
--- a/testing/web-platform/tests/service-workers/service-worker/navigation-redirect.https.html
+++ b/testing/web-platform/tests/service-workers/service-worker/navigation-redirect.https.html
@@ -92,17 +92,17 @@ function check_clients(clients,
                        expected_id,
                        expected_url,
                        expected_final_client_tag,
                        worker_name) {
   let found = false;
   Object.keys(clients).forEach(key => {
     const info = clients[key];
     if (info.found) {
-      assert_true(!!expected_final_client_tag,
+      assert_true(expected_final_client_tag,
                   `${worker_name} client tag exists`);
       assert_equals(key, expected_final_client_tag,
                     `${worker_name} client tag matches`);
       assert_equals(info.id, expected_id, `${worker_name} client id`);
       assert_equals(info.url, expected_url, `${worker_name} client url`);
       found = true;
     }
   });
@@ -115,20 +115,20 @@ function check_resulting_client_ids(info
   for (var i = 0; i < infos.length; i++) {
     const tag = expected_infos[i].resultingClientIdTag;
     const url = expected_infos[i].url;
     const actual_id = infos[i].resultingClientId;
     const expected_id = actual_ids[tag];
     assert_equals(typeof(actual_id), 'string',
                   `resultingClientId for ${url} request to ${worker}`);
     if (expected_id) {
-      assert_equals(actual_id, expected_id,
+      assert_equals(requestInfos[0], expected_id,
                     `resultingClientId for ${url} request to ${worker}`);
     } else {
-      actual_ids[tag] = actual_id;
+      actual_ids[key] = actual_id;
     }
   }
 }
 
 // Creates an iframe and navigates to |url|, which is expected to start a chain
 // of redirects.
 // - |expected_last_url| is the expected window.location after the
 //   navigation.
@@ -484,17 +484,17 @@ redirect_test(
     'SW-fallbacked redirect to same-origin other-scope.');
 
 url1 = SCOPE1 + 'url=' + encodeURIComponent(OTHER_ORIGIN_OUT_SCOPE);
 url2 = OTHER_ORIGIN_OUT_SCOPE;
 redirect_test(
     url1,
     url2,
     [[{url: url1, resultingClientIdTag: 'a'}], [], []],
-    null,
+    'x',
     'SW-fallbacked redirect to other-origin out-scope.');
 
 url1 = SCOPE1 + 'url=' + encodeURIComponent(OTHER_ORIGIN_SCOPE);
 url2 = OTHER_ORIGIN_SCOPE;
 redirect_test(
     url1,
     url2,
     [
</