aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWPT Sync Bot <josh+wptsync@joshmatthews.net>2019-01-17 20:37:38 -0500
committerWPT Sync Bot <josh+wptsync@joshmatthews.net>2019-01-17 22:34:16 -0500
commit02c1eed9991623cfc2e282149ff2912c7092406b (patch)
treeae81466ea22f10ef18444c2b9adbdc2a5ec6e9d9
parentfb95f9df9cab44afd66eae809af164637bd8f00a (diff)
downloadservo-02c1eed9991623cfc2e282149ff2912c7092406b.tar.gz
servo-02c1eed9991623cfc2e282149ff2912c7092406b.zip
Update web-platform-tests to revision 74bae78af4b95a2f0ca3a81df9c7fe3143f24bbc
-rw-r--r--tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini4
-rw-r--r--tests/wpt/metadata/MANIFEST.json531
-rw-r--r--tests/wpt/metadata/css/CSS2/box-display/insert-inline-in-blocks-n-inlines-begin-001.xht.ini2
-rw-r--r--tests/wpt/metadata/css/CSS2/box-display/insert-inline-in-blocks-n-inlines-begin-003.xht.ini2
-rw-r--r--tests/wpt/metadata/css/CSS2/box-display/insert-inline-in-blocks-n-inlines-end-001.xht.ini2
-rw-r--r--tests/wpt/metadata/css/CSS2/box-display/insert-inline-in-blocks-n-inlines-end-003.xht.ini3
-rw-r--r--tests/wpt/metadata/css/CSS2/box-display/insert-inline-in-blocks-n-inlines-middle-001.xht.ini2
-rw-r--r--tests/wpt/metadata/css/CSS2/box-display/insert-inline-in-blocks-n-inlines-middle-003.xht.ini2
-rw-r--r--tests/wpt/metadata/css/CSS2/css1/c5525-fltmult-000.xht.ini2
-rw-r--r--tests/wpt/metadata/css/CSS2/linebox/border-padding-bleed-001.xht.ini2
-rw-r--r--tests/wpt/metadata/css/CSS2/linebox/border-padding-bleed-002.xht.ini2
-rw-r--r--tests/wpt/metadata/css/CSS2/linebox/border-padding-bleed-003.xht.ini2
-rw-r--r--tests/wpt/metadata/css/css-backgrounds/background-size-028.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-backgrounds/background-size-030.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-flexbox/flexbox_order-box.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-flexbox/ttwf-reftest-flex-direction-row-reverse.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-flexbox/ttwf-reftest-flex-order.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-fonts/font-variant-alternates-18.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-fonts/variations/at-font-face-descriptors.html.ini6
-rw-r--r--tests/wpt/metadata/css/css-fonts/variations/font-style-parsing.html.ini49
-rw-r--r--tests/wpt/metadata/encoding/single-byte-decoder.html.ini2
-rw-r--r--tests/wpt/metadata/fetch/content-type/response.window.js.ini12
-rw-r--r--tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini3
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini (renamed from tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini)2
-rw-r--r--tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-error-fired-before-scripting-unblocked.html.ini4
-rw-r--r--tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-load-fired-before-scripting-unblocked.html.ini4
-rw-r--r--tests/wpt/metadata/html/semantics/document-metadata/the-link-element/stylesheet-not-removed-until-next-stylesheet-loads.html.ini4
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/media-elements/ready-states/autoplay-hidden.optional.html.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini10
-rw-r--r--tests/wpt/metadata/performance-timeline/webtiming-resolution.any.js.ini3
-rw-r--r--tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini1
-rw-r--r--tests/wpt/metadata/workers/baseurl/alpha/import-in-moduleworker.html.ini1
-rw-r--r--tests/wpt/metadata/workers/baseurl/alpha/sharedworker-in-worker.html.ini1
-rw-r--r--tests/wpt/mozilla/meta/css/block_formatting_context_with_margin_a.html.ini2
-rw-r--r--tests/wpt/mozilla/meta/css/inline_block_baseline_a.html.ini2
-rw-r--r--tests/wpt/mozilla/meta/css/overconstrained_block.html.ini2
-rw-r--r--tests/wpt/mozilla/meta/css/stacked_layers.html.ini2
-rw-r--r--tests/wpt/mozilla/meta/css/transform_skew_a.html.ini2
-rw-r--r--tests/wpt/web-platform-tests/animation-worklet/animation-worklet-inside-iframe.https.html3
-rw-r--r--tests/wpt/web-platform-tests/animation-worklet/common.js33
-rw-r--r--tests/wpt/web-platform-tests/animation-worklet/resources/animator-iframe.html3
-rw-r--r--tests/wpt/web-platform-tests/animation-worklet/scroll-timeline-writing-modes.https.html23
-rw-r--r--tests/wpt/web-platform-tests/animation-worklet/worklet-animation-with-fill-mode.https.html33
-rw-r--r--tests/wpt/web-platform-tests/animation-worklet/worklet-animation-with-invalid-effect.https.html5
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/characteristic/characteristicProperties.https.html31
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/characteristic/service-same-from-2-characteristics.https.html16
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/characteristic/service-same-object.https.html9
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/idl/idl-Bluetooth.https.html10
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/idl/idl-BluetoothDevice.https.html31
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/idl/idl-BluetoothUUID.html72
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/idl/idl-NavigatorBluetooth.https.html3
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/requestDevice/acceptAllDevices/device-with-empty-name.https.html8
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/requestDevice/acceptAllDevices/device-with-name.https.html13
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/requestDevice/acceptAllDevices/optional-services-missing.https.html13
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/requestDevice/acceptAllDevices/optional-services-present.https.html33
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/requestDevice/blocklisted-service-in-filter.https.html18
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/requestDevice/blocklisted-service-in-optionalServices.https.html40
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/device-name-longer-than-29-bytes.https.html11
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/empty-filter.https.html6
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/empty-filters-member.https.html11
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/empty-namePrefix.https.html53
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/empty-services-member.https.html18
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/filters-xor-acceptAllDevices.https.html30
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-name-unicode.https.html11
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-name.https.html12
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-namePrefix-unicode.https.html11
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-namePrefix.https.html12
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-name-unicode.https.html9
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-name.https.html9
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-namePrefix-unicode.https.html11
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-namePrefix.https.html11
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/no-arguments.https.html6
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-name.https.html11
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-namePrefix.https.html13
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/wrong-service-in-optionalServices-member.https.html59
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/wrong-service-in-services-member.https.html17
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/requestDevice/cross-origin-iframe.sub.https.html43
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/requestDevice/discovery-succeeds.https.html39
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/requestDevice/doesnt-consume-user-gesture.https.html30
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/requestDevice/filter-matches.https.html94
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/requestDevice/le-not-supported.https.html13
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/requestDevice/name-empty-device-from-name-empty-filter.https.html8
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/requestDevice/not-processing-user-gesture.https.html10
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/requestDevice/radio-not-present.https.html17
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/requestDevice/request-from-iframe.https.html58
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/requestDevice/request-from-sandboxed-iframe.https.html42
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/requestDevice/same-device.https.html36
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/requestDevice/single-filter-single-service.https.html11
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/resources/health-thermometer-iframe.html21
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/server/device-same-object.https.html14
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/service/device-same-from-2-services.https.html15
-rw-r--r--tests/wpt/web-platform-tests/bluetooth/service/device-same-object.https.html12
-rw-r--r--tests/wpt/web-platform-tests/css/css-backgrounds/background-image-large-with-auto.html33
-rw-r--r--tests/wpt/web-platform-tests/css/css-backgrounds/reference/background-image-large-with-auto-ref.html31
-rw-r--r--tests/wpt/web-platform-tests/css/css-backgrounds/support/green-1000x10.pngbin0 -> 128 bytes
-rw-r--r--tests/wpt/web-platform-tests/css/css-backgrounds/support/green-10x1000.pngbin0 -> 161 bytes
-rw-r--r--tests/wpt/web-platform-tests/css/css-fonts/variations/at-font-face-descriptors.html2
-rw-r--r--tests/wpt/web-platform-tests/css/css-fonts/variations/font-style-parsing.html73
-rw-r--r--tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-007-ref.html28
-rw-r--r--tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-007.html31
-rw-r--r--tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-010-ref.html27
-rw-r--r--tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-010.html54
-rw-r--r--tests/wpt/web-platform-tests/css/css-overflow/inheritance.html28
-rw-r--r--tests/wpt/web-platform-tests/css/css-overflow/parsing/block-ellipsis-invalid.html22
-rw-r--r--tests/wpt/web-platform-tests/css/css-overflow/parsing/block-ellipsis-valid.html19
-rw-r--r--tests/wpt/web-platform-tests/css/css-overflow/parsing/continue-invalid.html19
-rw-r--r--tests/wpt/web-platform-tests/css/css-overflow/parsing/continue-valid.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-overflow/parsing/line-clamp-invalid.html27
-rw-r--r--tests/wpt/web-platform-tests/css/css-overflow/parsing/line-clamp-valid.html24
-rw-r--r--tests/wpt/web-platform-tests/css/css-overflow/parsing/max-lines-invalid.html25
-rw-r--r--tests/wpt/web-platform-tests/css/css-overflow/parsing/max-lines-valid.html19
-rw-r--r--tests/wpt/web-platform-tests/css/css-overflow/parsing/overflow-computed.html52
-rw-r--r--tests/wpt/web-platform-tests/css/css-overflow/parsing/overflow-invalid.html24
-rw-r--r--tests/wpt/web-platform-tests/css/css-overflow/parsing/overflow-valid.html37
-rw-r--r--tests/wpt/web-platform-tests/css/css-overflow/parsing/text-overflow-computed.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-overflow/parsing/text-overflow-invalid.html19
-rw-r--r--tests/wpt/web-platform-tests/css/css-overflow/parsing/text-overflow-valid.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-scroll-anchoring/opt-out-dynamic-scroller.html49
-rw-r--r--tests/wpt/web-platform-tests/css/css-scroll-anchoring/opt-out-dynamic.html51
-rw-r--r--tests/wpt/web-platform-tests/css/css-shadow-parts/interaction-with-placeholder-ref.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-shadow-parts/interaction-with-placeholder.html29
-rw-r--r--tests/wpt/web-platform-tests/css/cssom/CSSStyleSheet-constructable.html9
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/values3/calc-width-table-auto-1-ref.html5
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/values3/calc-width-table-auto-1.html5
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/values3/calc-width-table-fixed-1-ref.html5
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/values3/calc-width-table-fixed-1.html5
-rw-r--r--tests/wpt/web-platform-tests/docs/_writing-tests/assumptions.md2
-rw-r--r--tests/wpt/web-platform-tests/docs/_writing-tests/general-guidelines.md2
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-error-fired-before-scripting-unblocked.html25
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-load-event.html4
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-load-fired-before-scripting-unblocked.html24
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/resources/neutral.css3
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/stylesheet-not-removed-until-next-stylesheet-loads.html22
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/reftest/size-ref.html2
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/reftest/size.html6
-rw-r--r--tests/wpt/web-platform-tests/interfaces/SVG.idl6
-rw-r--r--tests/wpt/web-platform-tests/payment-request/payment-response/retry-method-manual.https.html18
-rw-r--r--tests/wpt/web-platform-tests/service-workers/service-worker/resources/xhr-iframe.html7
-rw-r--r--tests/wpt/web-platform-tests/service-workers/service-worker/resources/xhr-response-url-worker.js32
-rw-r--r--tests/wpt/web-platform-tests/service-workers/service-worker/xhr-response-url.https.html95
-rw-r--r--tests/wpt/web-platform-tests/tools/conftest.py4
-rw-r--r--tests/wpt/web-platform-tests/tools/wpt/tests/test_wpt.py45
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py6
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorselenium.py8
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorservo.py2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py8
-rw-r--r--tests/wpt/web-platform-tests/webrtc-stats/getStats-remote-candidate-address.html81
-rw-r--r--tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-iceConnectionState.html47
-rw-r--r--tests/wpt/web-platform-tests/webrtc/RTCRtpTransceiver-stop.html82
-rw-r--r--tests/wpt/webgl/meta/conformance/glsl/misc/shader-with-non-reserved-words.html.ini5
150 files changed, 2395 insertions, 829 deletions
diff --git a/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini b/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini
index dd4ffcf4345..76b398963ae 100644
--- a/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini
+++ b/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini
@@ -1,4 +1,5 @@
[url-in-tags-revoke.window.html]
+ expected: TIMEOUT
[Fetching a blob URL immediately before revoking it works in an iframe.]
expected: FAIL
@@ -14,3 +15,6 @@
[Opening a blob URL in a new window by clicking an <a> tag works immediately before revoking the URL.]
expected: FAIL
+ [Fetching a blob URL immediately before revoking it works in <script> tags.]
+ expected: TIMEOUT
+
diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json
index ce6ea9398db..e17bc26df1e 100644
--- a/tests/wpt/metadata/MANIFEST.json
+++ b/tests/wpt/metadata/MANIFEST.json
@@ -104551,6 +104551,18 @@
{}
]
],
+ "css/css-backgrounds/background-image-large-with-auto.html": [
+ [
+ "/css/css-backgrounds/background-image-large-with-auto.html",
+ [
+ [
+ "/css/css-backgrounds/reference/background-image-large-with-auto-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-backgrounds/background-image-none-gradient-repaint.html": [
[
"/css/css-backgrounds/background-image-none-gradient-repaint.html",
@@ -129471,6 +129483,18 @@
{}
]
],
+ "css/css-multicol/multicol-span-all-007.html": [
+ [
+ "/css/css-multicol/multicol-span-all-007.html",
+ [
+ [
+ "/css/css-multicol/multicol-span-all-007-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-multicol/multicol-span-all-block-sibling-003.xht": [
[
"/css/css-multicol/multicol-span-all-block-sibling-003.xht",
@@ -129591,6 +129615,18 @@
{}
]
],
+ "css/css-multicol/multicol-span-all-dynamic-add-010.html": [
+ [
+ "/css/css-multicol/multicol-span-all-dynamic-add-010.html",
+ [
+ [
+ "/css/css-multicol/multicol-span-all-dynamic-add-010-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-multicol/multicol-span-all-dynamic-remove-001.html": [
[
"/css/css-multicol/multicol-span-all-dynamic-remove-001.html",
@@ -135235,6 +135271,18 @@
{}
]
],
+ "css/css-shadow-parts/interaction-with-placeholder.html": [
+ [
+ "/css/css-shadow-parts/interaction-with-placeholder.html",
+ [
+ [
+ "/css/css-shadow-parts/interaction-with-placeholder-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-shapes/shape-outside/formatting-context/shape-outside-formatting-context.tentative.html": [
[
"/css/css-shapes/shape-outside/formatting-context/shape-outside-formatting-context.tentative.html",
@@ -193231,6 +193279,18 @@
{}
]
],
+ "infrastructure/reftest/size.html": [
+ [
+ "/infrastructure/reftest/size.html",
+ [
+ [
+ "/infrastructure/reftest/size-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"mathml/presentation-markup/spaces/space-2.html": [
[
"/mathml/presentation-markup/spaces/space-2.html",
@@ -253373,6 +253433,11 @@
{}
]
],
+ "css/css-backgrounds/reference/background-image-large-with-auto-ref.html": [
+ [
+ {}
+ ]
+ ],
"css/css-backgrounds/reference/background-origin-002-ref.html": [
[
{}
@@ -253783,6 +253848,16 @@
{}
]
],
+ "css/css-backgrounds/support/green-1000x10.png": [
+ [
+ {}
+ ]
+ ],
+ "css/css-backgrounds/support/green-10x1000.png": [
+ [
+ {}
+ ]
+ ],
"css/css-backgrounds/support/green-150-150.png": [
[
{}
@@ -266528,6 +266603,11 @@
{}
]
],
+ "css/css-multicol/multicol-span-all-007-ref.html": [
+ [
+ {}
+ ]
+ ],
"css/css-multicol/multicol-span-all-block-sibling-3-ref.xht": [
[
{}
@@ -266563,6 +266643,11 @@
{}
]
],
+ "css/css-multicol/multicol-span-all-dynamic-add-010-ref.html": [
+ [
+ {}
+ ]
+ ],
"css/css-multicol/multicol-span-all-dynamic-remove-001-ref.html": [
[
{}
@@ -268838,6 +268923,11 @@
{}
]
],
+ "css/css-shadow-parts/interaction-with-placeholder-ref.html": [
+ [
+ {}
+ ]
+ ],
"css/css-shadow-parts/support/shadow-helper.js": [
[
{}
@@ -296723,6 +296813,11 @@
{}
]
],
+ "html/semantics/document-metadata/the-link-element/resources/neutral.css": [
+ [
+ {}
+ ]
+ ],
"html/semantics/document-metadata/the-link-element/resources/stylesheet.css": [
[
{}
@@ -300488,6 +300583,11 @@
{}
]
],
+ "infrastructure/reftest/size-ref.html": [
+ [
+ {}
+ ]
+ ],
"infrastructure/server/resources/expect-global.js": [
[
{}
@@ -311958,6 +312058,11 @@
{}
]
],
+ "service-workers/service-worker/resources/xhr-response-url-worker.js": [
+ [
+ {}
+ ]
+ ],
"service-workers/service-worker/resources/xsl-base-url-iframe.xml": [
[
{}
@@ -344991,6 +345096,12 @@
{}
]
],
+ "css/css-overflow/inheritance.html": [
+ [
+ "/css/css-overflow/inheritance.html",
+ {}
+ ]
+ ],
"css/css-overflow/logical-overflow-001.html": [
[
"/css/css-overflow/logical-overflow-001.html",
@@ -345021,6 +345132,90 @@
{}
]
],
+ "css/css-overflow/parsing/block-ellipsis-invalid.html": [
+ [
+ "/css/css-overflow/parsing/block-ellipsis-invalid.html",
+ {}
+ ]
+ ],
+ "css/css-overflow/parsing/block-ellipsis-valid.html": [
+ [
+ "/css/css-overflow/parsing/block-ellipsis-valid.html",
+ {}
+ ]
+ ],
+ "css/css-overflow/parsing/continue-invalid.html": [
+ [
+ "/css/css-overflow/parsing/continue-invalid.html",
+ {}
+ ]
+ ],
+ "css/css-overflow/parsing/continue-valid.html": [
+ [
+ "/css/css-overflow/parsing/continue-valid.html",
+ {}
+ ]
+ ],
+ "css/css-overflow/parsing/line-clamp-invalid.html": [
+ [
+ "/css/css-overflow/parsing/line-clamp-invalid.html",
+ {}
+ ]
+ ],
+ "css/css-overflow/parsing/line-clamp-valid.html": [
+ [
+ "/css/css-overflow/parsing/line-clamp-valid.html",
+ {}
+ ]
+ ],
+ "css/css-overflow/parsing/max-lines-invalid.html": [
+ [
+ "/css/css-overflow/parsing/max-lines-invalid.html",
+ {}
+ ]
+ ],
+ "css/css-overflow/parsing/max-lines-valid.html": [
+ [
+ "/css/css-overflow/parsing/max-lines-valid.html",
+ {}
+ ]
+ ],
+ "css/css-overflow/parsing/overflow-computed.html": [
+ [
+ "/css/css-overflow/parsing/overflow-computed.html",
+ {}
+ ]
+ ],
+ "css/css-overflow/parsing/overflow-invalid.html": [
+ [
+ "/css/css-overflow/parsing/overflow-invalid.html",
+ {}
+ ]
+ ],
+ "css/css-overflow/parsing/overflow-valid.html": [
+ [
+ "/css/css-overflow/parsing/overflow-valid.html",
+ {}
+ ]
+ ],
+ "css/css-overflow/parsing/text-overflow-computed.html": [
+ [
+ "/css/css-overflow/parsing/text-overflow-computed.html",
+ {}
+ ]
+ ],
+ "css/css-overflow/parsing/text-overflow-invalid.html": [
+ [
+ "/css/css-overflow/parsing/text-overflow-invalid.html",
+ {}
+ ]
+ ],
+ "css/css-overflow/parsing/text-overflow-valid.html": [
+ [
+ "/css/css-overflow/parsing/text-overflow-valid.html",
+ {}
+ ]
+ ],
"css/css-overscroll-behavior/inheritance.html": [
[
"/css/css-overscroll-behavior/inheritance.html",
@@ -345729,6 +345924,18 @@
{}
]
],
+ "css/css-scroll-anchoring/opt-out-dynamic-scroller.html": [
+ [
+ "/css/css-scroll-anchoring/opt-out-dynamic-scroller.html",
+ {}
+ ]
+ ],
+ "css/css-scroll-anchoring/opt-out-dynamic.html": [
+ [
+ "/css/css-scroll-anchoring/opt-out-dynamic.html",
+ {}
+ ]
+ ],
"css/css-scroll-anchoring/opt-out.html": [
[
"/css/css-scroll-anchoring/opt-out.html",
@@ -371955,6 +372162,12 @@
{}
]
],
+ "html/semantics/document-metadata/the-link-element/link-error-fired-before-scripting-unblocked.html": [
+ [
+ "/html/semantics/document-metadata/the-link-element/link-error-fired-before-scripting-unblocked.html",
+ {}
+ ]
+ ],
"html/semantics/document-metadata/the-link-element/link-load-error-events.html": [
[
"/html/semantics/document-metadata/the-link-element/link-load-error-events.html",
@@ -371973,6 +372186,12 @@
{}
]
],
+ "html/semantics/document-metadata/the-link-element/link-load-fired-before-scripting-unblocked.html": [
+ [
+ "/html/semantics/document-metadata/the-link-element/link-load-fired-before-scripting-unblocked.html",
+ {}
+ ]
+ ],
"html/semantics/document-metadata/the-link-element/link-rel-attribute.html": [
[
"/html/semantics/document-metadata/the-link-element/link-rel-attribute.html",
@@ -372003,6 +372222,12 @@
{}
]
],
+ "html/semantics/document-metadata/the-link-element/stylesheet-not-removed-until-next-stylesheet-loads.html": [
+ [
+ "/html/semantics/document-metadata/the-link-element/stylesheet-not-removed-until-next-stylesheet-loads.html",
+ {}
+ ]
+ ],
"html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/allow-scripts-flag-changing-1.html": [
[
"/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/allow-scripts-flag-changing-1.html",
@@ -417995,6 +418220,12 @@
{}
]
],
+ "webrtc-stats/getStats-remote-candidate-address.html": [
+ [
+ "/webrtc-stats/getStats-remote-candidate-address.html",
+ {}
+ ]
+ ],
"webrtc-stats/idlharness.window.js": [
[
"/webrtc-stats/idlharness.window.html",
@@ -418457,6 +418688,12 @@
{}
]
],
+ "webrtc/RTCRtpTransceiver-stop.html": [
+ [
+ "/webrtc/RTCRtpTransceiver-stop.html",
+ {}
+ ]
+ ],
"webrtc/RTCRtpTransceiver.https.html": [
[
"/webrtc/RTCRtpTransceiver.https.html",
@@ -453543,11 +453780,11 @@
"support"
],
"animation-worklet/animation-worklet-inside-iframe.https.html": [
- "cad04b281fc233d35072ea841b02584006828307",
+ "b02186309dc2cf8df05559ef9fb9bcacdf535112",
"testharness"
],
"animation-worklet/common.js": [
- "d029ab79491c9ad2d9dcdf753b05487b80060f19",
+ "eb114f24687289fcdd0515ead7dbbc074c7ccbba",
"support"
],
"animation-worklet/current-time.https.html": [
@@ -453559,19 +453796,19 @@
"testharness"
],
"animation-worklet/resources/animator-iframe.html": [
- "2a88959195cbd59659084c25cb6bb82639a9a786",
+ "e30cc281fcdefd8d029e7bf0ea92a1a9cd7af7e7",
"support"
],
"animation-worklet/scroll-timeline-writing-modes.https.html": [
- "9cf99cb9202b8a5a81fdb57a83728a1a22a9f1f1",
+ "5b20f03bfadb5790c79ddd51e1f3d89a9f948852",
"testharness"
],
"animation-worklet/worklet-animation-with-fill-mode.https.html": [
- "90abe0828578929f129313d8054ef7364a420a42",
+ "49fead8bd39c56c6335c0748b01be0181767bbec",
"testharness"
],
"animation-worklet/worklet-animation-with-invalid-effect.https.html": [
- "9a7688d348d48f5cb58a2f9cdff5a8c4dd033944",
+ "8b72d4e487c455f5e3d4d535a4ddf277fd988d01",
"testharness"
],
"annotation-model/.editorconfig": [
@@ -455867,7 +456104,7 @@
"support"
],
"bluetooth/characteristic/characteristicProperties.https.html": [
- "d20d435999faee8c6f3005e1dcf6d3b6f411fa11",
+ "0747af2fc9c65ee34023674b5d5658f0d26c31bd",
"testharness"
],
"bluetooth/characteristic/getDescriptor/gen-characteristic-is-removed.https.html": [
@@ -455939,11 +456176,11 @@
"testharness"
],
"bluetooth/characteristic/service-same-from-2-characteristics.https.html": [
- "aa156b2e98810b97e8a1cf3c82b535421fe744d0",
+ "395d49b7f07f1acf7f1b3ee72595fbcecc8201fd",
"testharness"
],
"bluetooth/characteristic/service-same-object.https.html": [
- "ee96121698367d060a40f733d9d681a92d65620e",
+ "0b2a915721431b23b1dba5a584701039fd82aac4",
"testharness"
],
"bluetooth/characteristic/startNotifications/gen-characteristic-is-removed.https.html": [
@@ -456003,15 +456240,15 @@
"support"
],
"bluetooth/idl/idl-Bluetooth.https.html": [
- "2835236d3b58b968f425dd2c9fd99568526ae723",
+ "9578fd6af21b0c39e51ee7d94ff6bfda677695b3",
"testharness"
],
"bluetooth/idl/idl-BluetoothDevice.https.html": [
- "631d9dd4300d0970f167380c7bc950e640c6874e",
+ "707ac1ab03a92ceca6a0c327132dcf54728327b8",
"testharness"
],
"bluetooth/idl/idl-BluetoothUUID.html": [
- "efebb15cb250748b568a0044484d4bc558cec3dc",
+ "2adf35a419ff9687511884e4294ec72dbb22d347",
"testharness"
],
"bluetooth/idl/idl-NavigatorBluetooth.html": [
@@ -456019,7 +456256,7 @@
"testharness"
],
"bluetooth/idl/idl-NavigatorBluetooth.https.html": [
- "b8649f11abef7d4b0f38fbb67af8380e8114a05e",
+ "5449c94ad43ec9aeddb6c3976c324ea4ffe139ca",
"testharness"
],
"bluetooth/idl/idlharness.tentative.https.window.js": [
@@ -456027,151 +456264,151 @@
"testharness"
],
"bluetooth/requestDevice/acceptAllDevices/device-with-empty-name.https.html": [
- "033570d842e395d307aa2500d5619b4ea9e52a72",
+ "7b68acf1471bb7777cfd510a7ae38c3b4cf0612a",
"testharness"
],
"bluetooth/requestDevice/acceptAllDevices/device-with-name.https.html": [
- "d990dbf05b452e34f246ce4a7fb451f72f15e813",
+ "3c2dcb7f8a66e173c180608e785f3b27bce6fb25",
"testharness"
],
"bluetooth/requestDevice/acceptAllDevices/optional-services-missing.https.html": [
- "bd9e5862aa733106dc78cc93a4e051b4154c403f",
+ "d4c2677130565f4e497d2a5a7127c22aa5a2e9a0",
"testharness"
],
"bluetooth/requestDevice/acceptAllDevices/optional-services-present.https.html": [
- "3c0f4c1164b68371a6983e7d67ea88d5d0b0f7db",
+ "86377c289f6579555be5c6b3598cbe68a9e958e6",
"testharness"
],
"bluetooth/requestDevice/blocklisted-service-in-filter.https.html": [
- "253e311991646f1512b13f900aaef0207a15f5be",
+ "630548d68460ed6493f85928ec3ac1db2af713f6",
"testharness"
],
"bluetooth/requestDevice/blocklisted-service-in-optionalServices.https.html": [
- "7189b643eed3601d5c1d557b3deb0bf4d97180e1",
+ "5c176b82b7f2e8629786c9cce79ab8ea2155699f",
"testharness"
],
"bluetooth/requestDevice/canonicalizeFilter/device-name-longer-than-29-bytes.https.html": [
- "ba8a090309b03503352b1eddb9617619449a6ef6",
+ "5ca358a0e1ab753e6199a31c5abe7b88271fe91c",
"testharness"
],
"bluetooth/requestDevice/canonicalizeFilter/empty-filter.https.html": [
- "eed7b870b3828e569907de5800a37dc4e3fa103e",
+ "788d9f8036109e6c1bb6a6bb9f021fd920012631",
"testharness"
],
"bluetooth/requestDevice/canonicalizeFilter/empty-filters-member.https.html": [
- "fbbd6dacad90f40ad443f968ec902f6f81e559bb",
+ "65bfc6443a4592b7774a76aca651331c81bfc49f",
"testharness"
],
"bluetooth/requestDevice/canonicalizeFilter/empty-namePrefix.https.html": [
- "aa6c83089e6e0f989efccaf2efeea632c564c8c8",
+ "549f0d4059c723aad70e86944a0ca82c401f95de",
"testharness"
],
"bluetooth/requestDevice/canonicalizeFilter/empty-services-member.https.html": [
- "6cb923a5ac082e1aec1149cbc87cd01058e0acd9",
+ "b70a8a32087858aee74743df909200a749972bbc",
"testharness"
],
"bluetooth/requestDevice/canonicalizeFilter/filters-xor-acceptAllDevices.https.html": [
- "ab207329447c2186ddadac1348372fc51f2a6962",
+ "d3f6e5ccb1333a001e37448abf7a7f7cdde4715c",
"testharness"
],
"bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-name-unicode.https.html": [
- "2f2df741277e49fb3c245129f4050c7a637188fc",
+ "5e1397dbd9a332cb3b8f6c1bd607654b42b9bb96",
"testharness"
],
"bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-name.https.html": [
- "dcb6c40d8fe4bd56f881d55ef239c727b3c059ee",
+ "a270cac43311bdf59422586c98b9e40fd00085d9",
"testharness"
],
"bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-namePrefix-unicode.https.html": [
- "fe1f91927d20a26c56e6fd2a0f93f8f7d1676674",
+ "05a9bd31300fa0dacebcd5d346b52b62f9c92eee",
"testharness"
],
"bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-namePrefix.https.html": [
- "ab3a6bae3fbb459112d02758d6ae78e674d3c615",
+ "a31e4b398e7cda5d8c28032e1541695b2ce3540b",
"testharness"
],
"bluetooth/requestDevice/canonicalizeFilter/max-length-name-unicode.https.html": [
- "40df9d0de7f3992bea48f80c7fa53b4476a63d60",
+ "dca018b49540be7e466cd38e680b5206c4da561f",
"testharness"
],
"bluetooth/requestDevice/canonicalizeFilter/max-length-name.https.html": [
- "d1759d6efe07aae4b2a6c3eef668738ef9d8fee7",
+ "7244910afa4b1dd6299b26bdd4155c3128379872",
"testharness"
],
"bluetooth/requestDevice/canonicalizeFilter/max-length-namePrefix-unicode.https.html": [
- "8e86844473e76e71090b595fc5213b0dccbf5c3f",
+ "ba4bdf94c633627b5cc3739268645c28e136df28",
"testharness"
],
"bluetooth/requestDevice/canonicalizeFilter/max-length-namePrefix.https.html": [
- "01ed22e6366344fdf162ca3f9e18e57477e319f2",
+ "ced34793355e05ef592b7ffd7daee83d4ad4f0fb",
"testharness"
],
"bluetooth/requestDevice/canonicalizeFilter/no-arguments.https.html": [
- "e6337a543bc4e005f25cb2ade0aa667b09597a71",
+ "33f933ad09c882d95ef4a6e61f8d65e87dce6848",
"testharness"
],
"bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-name.https.html": [
- "08038b9de0053a7a9d36c7e6b18660b27f6e63b1",
+ "787f34d5c688b61a682984f8089c82716b08c5d6",
"testharness"
],
"bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-namePrefix.https.html": [
- "fc44482379d58a57f502b5bd947d04f0071c21e2",
+ "bafb36d710cadd495e4c79ede4a5fcac5ffa1517",
"testharness"
],
"bluetooth/requestDevice/canonicalizeFilter/wrong-service-in-optionalServices-member.https.html": [
- "15cf902177de4db0b0b73b6aafa6702bb2087d16",
+ "e4880b6f57d0f87ff84b6acf1c4b6a27b76ae735",
"testharness"
],
"bluetooth/requestDevice/canonicalizeFilter/wrong-service-in-services-member.https.html": [
- "5d9b245f953229004eb5e16f65c219e10dadfa4c",
+ "9d31b951be7b6ebdb7ed05571841561e9dec2f52",
"testharness"
],
"bluetooth/requestDevice/cross-origin-iframe.sub.https.html": [
- "e97991d6f55e8d70b39b4dd2208a017c07d30f83",
+ "d5cf382f664cfb7fb105a49707cdf7652a9b9a62",
"testharness"
],
"bluetooth/requestDevice/discovery-succeeds.https.html": [
- "21219444f8d58f1e8b9b575300c24c7a6da243d6",
+ "5bd7ff1246b3628882b0c49e7f094ef706cbec99",
"testharness"
],
"bluetooth/requestDevice/doesnt-consume-user-gesture.https.html": [
- "3394a591cd45142da6cfd4a7d488ef3718feacf4",
+ "19ac36f80add1ee98e1c26b1b7968c7d5381aae0",
"testharness"
],
"bluetooth/requestDevice/filter-matches.https.html": [
- "3f62d39c7ac6fd74dc1b2af97c8e1758e9f27341",
+ "1aeae776f0691d2c0c2603a4fda75e8487e1fc7e",
"testharness"
],
"bluetooth/requestDevice/le-not-supported.https.html": [
- "4a3752501a3b5fa19ea855f4bfc63c4aed362fef",
+ "3da9abeb773a7f7401b6378022c5737f17e41655",
"testharness"
],
"bluetooth/requestDevice/name-empty-device-from-name-empty-filter.https.html": [
- "ee9b9125de2d69a6a2ff07dba30b7431e6ce5658",
+ "944befdfe8344d3cdc42aa68889de6581e35bc8f",
"testharness"
],
"bluetooth/requestDevice/not-processing-user-gesture.https.html": [
- "1781b7bd1b8358d1efdd335addb6e9e4631111c6",
+ "98dc0ce80e7ba1b0e83c096c3f371548399f5cf3",
"testharness"
],
"bluetooth/requestDevice/radio-not-present.https.html": [
- "a66bcf99c6ea06787bbf90a521485f9bf46a7188",
+ "929af8ffb776ef9fc2763976883dbacc1af20a32",
"testharness"
],
"bluetooth/requestDevice/request-from-iframe.https.html": [
- "01590ea0fd9d358bbdf897cba8d9e4edd17d98a9",
+ "64ad3d592d1e09f02d533f6f1203cff0fd7f18b5",
"testharness"
],
"bluetooth/requestDevice/request-from-sandboxed-iframe.https.html": [
- "80798308b10bcf1f67d572cf2ef15579ac3c78bf",
+ "4c4a5707e8ebfd9bf7ef16525a70e8e0fb75d483",
"testharness"
],
"bluetooth/requestDevice/same-device.https.html": [
- "a83cf705a738fb5873e319a7bc28912079d788c7",
+ "b96af439973a21af7bd19d917533e195fdc39c1f",
"testharness"
],
"bluetooth/requestDevice/single-filter-single-service.https.html": [
- "8735eb3f8727faba8d24fbaaad4e4f7d1dcdfb3d",
+ "9c0d621c2374057fb42b44b424b25e017131a4fc",
"testharness"
],
"bluetooth/resources/bluetooth-helpers.js": [
@@ -456183,7 +456420,7 @@
"support"
],
"bluetooth/resources/health-thermometer-iframe.html": [
- "5e24f62a06ef593ecdadd307a2d31de0eef165d5",
+ "1545a513960ac346412fb63095b2a716aafe42f8",
"support"
],
"bluetooth/script-tests/base_test_html.template": [
@@ -456311,7 +456548,7 @@
"testharness"
],
"bluetooth/server/device-same-object.https.html": [
- "cfd4bc5a202cb054b953c03e97f788001556f666",
+ "63624961ec7b11757fc04a5684dc702db4c3169c",
"testharness"
],
"bluetooth/server/disconnect/connect-disconnect-twice.https.html": [
@@ -456531,11 +456768,11 @@
"testharness"
],
"bluetooth/service/device-same-from-2-services.https.html": [
- "366549378e8337e5e8b9509054b706cbe9937053",
+ "0d5ab6496837d5aa13fa53c62ffe7a343caa0176",
"testharness"
],
"bluetooth/service/device-same-object.https.html": [
- "f43e9f022d934ad18e8c6ce1b4d547cd310de1db",
+ "de57c2e37607b453d76e867012dbd1079049197d",
"testharness"
],
"bluetooth/service/getCharacteristic/characteristic-found.https.html": [
@@ -540966,6 +541203,10 @@
"206ff68d17360ee30768651eaab874f0a6c2996e",
"reftest"
],
+ "css/css-backgrounds/background-image-large-with-auto.html": [
+ "2658e4051eb59001b080de9ea96451b3169af03a",
+ "reftest"
+ ],
"css/css-backgrounds/background-image-none-gradient-repaint.html": [
"3f39fb8d850d7561703f791135ea7dd4b3aa9fe8",
"reftest"
@@ -543554,6 +543795,10 @@
"82fd9a2d3d0e3c886835168283ec3f32270c0356",
"support"
],
+ "css/css-backgrounds/reference/background-image-large-with-auto-ref.html": [
+ "7bad169e3aa61b072efa73bb3327857ecd2dcc23",
+ "support"
+ ],
"css/css-backgrounds/reference/background-origin-002-ref.html": [
"88d61225a623d112e5f54505899a21dd4d929a5b",
"support"
@@ -543886,6 +544131,14 @@
"823b16a16cac49b697c02aab154709d6b1777e99",
"support"
],
+ "css/css-backgrounds/support/green-1000x10.png": [
+ "8ce354cfb755921397b1e3fcb78cb6be07ef5c7a",
+ "support"
+ ],
+ "css/css-backgrounds/support/green-10x1000.png": [
+ "c7fd6eee5c276eb1dd0dc2c03cc88eb98e7dde98",
+ "support"
+ ],
"css/css-backgrounds/support/green-150-150.png": [
"6601b79ace61269dd0fa524208cffe0a91731b72",
"support"
@@ -559007,7 +559260,7 @@
"support"
],
"css/css-fonts/variations/at-font-face-descriptors.html": [
- "942686c4a1fd0f3d3807f5fdb114e3e154b1577e",
+ "cd1c22b01ce0a6b84af2cf501e3446287faa97a6",
"testharness"
],
"css/css-fonts/variations/at-font-face-font-matching.html": [
@@ -559043,7 +559296,7 @@
"testharness"
],
"css/css-fonts/variations/font-style-parsing.html": [
- "0973d6340cb44e94dc4520ba147834b192be1727",
+ "cb5e42eab4f7f304a163ff34807ba2a54df3d5b1",
"testharness"
],
"css/css-fonts/variations/font-variation-settings-inherit.html": [
@@ -564910,6 +565163,14 @@
"cfc4f0ca4f31f704f6450a0e609efb29aa07bce0",
"reftest"
],
+ "css/css-multicol/multicol-span-all-007-ref.html": [
+ "efb58d83b37e35a832bae452f1200a4b04fda4bf",
+ "support"
+ ],
+ "css/css-multicol/multicol-span-all-007.html": [
+ "2464327ff4238fb167bb8fc76b7f3d01fea1d377",
+ "reftest"
+ ],
"css/css-multicol/multicol-span-all-block-sibling-003.xht": [
"bd2cdd6cdab0fc15c2e16e2237f6b025230332c4",
"reftest"
@@ -564978,6 +565239,14 @@
"9c13183146b70745b942887b2d4221b9d74d755c",
"reftest"
],
+ "css/css-multicol/multicol-span-all-dynamic-add-010-ref.html": [
+ "7f6abe8f39db545bde000dc35d4fba5ecbaf9e92",
+ "support"
+ ],
+ "css/css-multicol/multicol-span-all-dynamic-add-010.html": [
+ "e9e96ced2aa540fe716d33cfd33a926be5ce9e91",
+ "reftest"
+ ],
"css/css-multicol/multicol-span-all-dynamic-remove-001-ref.html": [
"83c9fd4880f246e77a5f93dcc2755f4f2d812801",
"support"
@@ -565694,6 +565963,10 @@
"b9ba7acd150e5022de5c5208cd7f5f7d4dde93c3",
"support"
],
+ "css/css-overflow/inheritance.html": [
+ "976406be413b9bdc8cef4acab0a0cd29df2dd43d",
+ "testharness"
+ ],
"css/css-overflow/input-scrollable-region-001.html": [
"016f9b9278c1e4933ecbbfbcb8235852368d554e",
"reftest"
@@ -565718,6 +565991,62 @@
"f425636c3bb4297e4e6564d1c2629dc10dde5607",
"testharness"
],
+ "css/css-overflow/parsing/block-ellipsis-invalid.html": [
+ "2b9c059a45d0e315a350e0c09fd7cd86be72c61e",
+ "testharness"
+ ],
+ "css/css-overflow/parsing/block-ellipsis-valid.html": [
+ "06148ef01b29be24e18eabb2915919f0c0d23816",
+ "testharness"
+ ],
+ "css/css-overflow/parsing/continue-invalid.html": [
+ "36e164158f3975e735f66c8ae9bcf819694d6b84",
+ "testharness"
+ ],
+ "css/css-overflow/parsing/continue-valid.html": [
+ "97524cf80db239e111e4f503f5eea397129dca10",
+ "testharness"
+ ],
+ "css/css-overflow/parsing/line-clamp-invalid.html": [
+ "7b64e4735867396c650a7dd29c17577c896daea0",
+ "testharness"
+ ],
+ "css/css-overflow/parsing/line-clamp-valid.html": [
+ "735300c9efe783da28700e082144f01b40c02ac0",
+ "testharness"
+ ],
+ "css/css-overflow/parsing/max-lines-invalid.html": [
+ "85fe77fdb7a6d88c8f2a170b5f86646e5ee7b39c",
+ "testharness"
+ ],
+ "css/css-overflow/parsing/max-lines-valid.html": [
+ "f2fda80c3b3d95137e5e0117467cfb267ce3082b",
+ "testharness"
+ ],
+ "css/css-overflow/parsing/overflow-computed.html": [
+ "f3aaaa3c67ffd8889a790c5967532f6cd3d15a9f",
+ "testharness"
+ ],
+ "css/css-overflow/parsing/overflow-invalid.html": [
+ "c99fda7f784e6338b9c0182ecdaf6f1878736907",
+ "testharness"
+ ],
+ "css/css-overflow/parsing/overflow-valid.html": [
+ "02ddd9385930ff001add6888d58589f4eccd344d",
+ "testharness"
+ ],
+ "css/css-overflow/parsing/text-overflow-computed.html": [
+ "39358d04c6ce8b9d9e604901d4e3ddd75619e475",
+ "testharness"
+ ],
+ "css/css-overflow/parsing/text-overflow-invalid.html": [
+ "785632a727a5643e13ed25e12d71c6c541969e1a",
+ "testharness"
+ ],
+ "css/css-overflow/parsing/text-overflow-valid.html": [
+ "df77dffd6d8bb89334bd676302842e7483851647",
+ "testharness"
+ ],
"css/css-overflow/reference/input-scrollable-region-001-ref.html": [
"de894fab610b31257d73ef5488c376e50d899fb9",
"support"
@@ -569766,6 +570095,14 @@
"e1ce331f1affaf15e312f2c720a38acaa11b60a5",
"testharness"
],
+ "css/css-scroll-anchoring/opt-out-dynamic-scroller.html": [
+ "6ccbc4f2fd63dccb6bb6597b61b05827a0a3d54a",
+ "testharness"
+ ],
+ "css/css-scroll-anchoring/opt-out-dynamic.html": [
+ "ec548dc3d65bf3237039924ccdb0347a765f1c46",
+ "testharness"
+ ],
"css/css-scroll-anchoring/opt-out.html": [
"12d46c13f9629472d82a9ffd955d1cf40dbbfe6b",
"testharness"
@@ -569966,6 +570303,14 @@
"2dfd4b0510a758c73bf8ac8291088d39077578d7",
"testharness"
],
+ "css/css-shadow-parts/interaction-with-placeholder-ref.html": [
+ "11943c229a0ea76893039b1306bb38402c71f6ad",
+ "support"
+ ],
+ "css/css-shadow-parts/interaction-with-placeholder.html": [
+ "a064789f06111bf5ce791650207bcee195d346ab",
+ "reftest"
+ ],
"css/css-shadow-parts/interaction-with-tree-abiding.html": [
"c11da7d12dea91306b79d141613ad6563dffb18f",
"testharness"
@@ -595615,7 +595960,7 @@
"testharness"
],
"css/cssom/CSSStyleSheet-constructable.html": [
- "7df1820c0437edbe0edfe4d7bb25c02f832dd3bc",
+ "e3083d283f35145ae7f2be1941ff930ae864b088",
"testharness"
],
"css/cssom/CSSStyleSheet.html": [
@@ -607735,19 +608080,19 @@
"reftest"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/values3/calc-width-table-auto-1-ref.html": [
- "62ebd566591a6a0ac09d079b67d5248b83d153e1",
+ "d161ecc6f3100bf975d8b226c7aa196e0222657a",
"support"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/values3/calc-width-table-auto-1.html": [
- "b37c94ec5a34ba3d0ef6655c5b4bc4a3167c153f",
+ "c3d147c0b1ced3dcb455709f8826a3bfe51c7219",
"reftest"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/values3/calc-width-table-fixed-1-ref.html": [
- "1aad9eb16bdb88246ee3c06b6a67d0e249507b07",
+ "9ae2d347c6b7704f7fb14115de5cc5f81d82e512",
"support"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/values3/calc-width-table-fixed-1.html": [
- "05a902217f0b55f20841d00ab56d48ce9421462c",
+ "808a61274d3203f645f0df94e44c195ede1ddf50",
"reftest"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/values3/reftest.list": [
@@ -609179,7 +609524,7 @@
"support"
],
"docs/_writing-tests/assumptions.md": [
- "d1ab75b0f1d396508ca002ee305c08cf459f22bb",
+ "28a990a3f71964c2ae8dcade78c5ee28edadc40d",
"support"
],
"docs/_writing-tests/css-metadata.md": [
@@ -609195,7 +609540,7 @@
"support"
],
"docs/_writing-tests/general-guidelines.md": [
- "a07d55b9e1ba751852709f31e3c58c10545aba03",
+ "ff099ddf0a534dbb2daf14e06460db9ceda14790",
"support"
],
"docs/_writing-tests/h2tests.md": [
@@ -626882,6 +627227,10 @@
"127b253f59a555bdb6e8e40ccacc057847bf4c87",
"testharness"
],
+ "html/semantics/document-metadata/the-link-element/link-error-fired-before-scripting-unblocked.html": [
+ "188e4ba5ab6e579abba47ada9686a173bf4510ff",
+ "testharness"
+ ],
"html/semantics/document-metadata/the-link-element/link-load-error-events.html": [
"e4f617d4582289baad9d8f63f68e8905b49fe4fa",
"testharness"
@@ -626891,7 +627240,11 @@
"testharness"
],
"html/semantics/document-metadata/the-link-element/link-load-event.html": [
- "541291350a795b767dec9059e6826970c3e7b48c",
+ "e95fff7988a26ce49dfa045e62b66868cbccfc65",
+ "testharness"
+ ],
+ "html/semantics/document-metadata/the-link-element/link-load-fired-before-scripting-unblocked.html": [
+ "a809cc44b19796e50b7564b852a3234cca7e51f0",
"testharness"
],
"html/semantics/document-metadata/the-link-element/link-rel-attribute.html": [
@@ -626942,6 +627295,10 @@
"7ebc39ba6cc5b25e6743684c1e2975049ed8fcd1",
"support"
],
+ "html/semantics/document-metadata/the-link-element/resources/neutral.css": [
+ "796c55c42f6c305476d53d1ba9c4939cddb39f9e",
+ "support"
+ ],
"html/semantics/document-metadata/the-link-element/resources/stylesheet.css": [
"e1b2552ffea7300e3ffba041dd3e5d3ab26c2c33",
"support"
@@ -626974,6 +627331,10 @@
"9a72924cf40da7a5fd577378cc2086718e025420",
"reftest"
],
+ "html/semantics/document-metadata/the-link-element/stylesheet-not-removed-until-next-stylesheet-loads.html": [
+ "27b443cee33f0f38a69e163ed6dacb5d76a41c10",
+ "testharness"
+ ],
"html/semantics/document-metadata/the-link-element/stylesheet-with-base-ref.html": [
"83f0d067720b35ba14a06750ebab7b53a2f03a3a",
"support"
@@ -636734,6 +637095,14 @@
"fec62a3cae00655a95f7bc569d2eb1f43eac6062",
"reftest"
],
+ "infrastructure/reftest/size-ref.html": [
+ "b2669612b79214a20f5e5901f36d5bf495bbaf6a",
+ "support"
+ ],
+ "infrastructure/reftest/size.html": [
+ "a60befbf038f7faf29e714ce7538dfea0114fbf7",
+ "reftest"
+ ],
"infrastructure/server/context.any.js": [
"8ee168b7653108f34cfb0dc94fe569df0f9ad6be",
"testharness"
@@ -636903,7 +637272,7 @@
"support"
],
"interfaces/SVG.idl": [
- "9588ad0d608d48b0279a71fda7b2233be8db0bbf",
+ "78b9d64743e6ae3540e10f39bd1cbf97c2ae8a9d",
"support"
],
"interfaces/WebCryptoAPI.idl": [
@@ -649647,7 +650016,7 @@
"manual"
],
"payment-request/payment-response/retry-method-manual.https.html": [
- "25d82a0649daa4937b8d1c4e89954c6c1e674394",
+ "0af894500dae7fe74597315956db43fdf15ad2ee",
"manual"
],
"payment-request/payment-response/shippingAddress-attribute-manual.https.html": [
@@ -665075,7 +665444,11 @@
"support"
],
"service-workers/service-worker/resources/xhr-iframe.html": [
- "bfdfac69712b3e10526e1f059d2638b1fab06eeb",
+ "4c57bbbc6589d9738924b0acb91b440efc141622",
+ "support"
+ ],
+ "service-workers/service-worker/resources/xhr-response-url-worker.js": [
+ "906ad5005b59a11305237fc590fdf38407b76379",
"support"
],
"service-workers/service-worker/resources/xsl-base-url-iframe.xml": [
@@ -665263,7 +665636,7 @@
"testharness"
],
"service-workers/service-worker/xhr-response-url.https.html": [
- "9f00cdd183052568ed7c6933f28f7859739e926c",
+ "1ad2ce3851cc7bce24120dd80bdf54662781ac66",
"testharness"
],
"service-workers/service-worker/xsl-base-url.https.html": [
@@ -670715,7 +671088,7 @@
"support"
],
"tools/conftest.py": [
- "894fe6223ea53a77067d7556dba6a530afbea994",
+ "021a49fc297303b6e4178c427422d91813dbb762",
"support"
],
"tools/docker/.bashrc": [
@@ -675455,7 +675828,7 @@
"support"
],
"tools/wpt/tests/test_wpt.py": [
- "0f1dcb7fd814d1c0f8303a5100c4415c9fb80822",
+ "bf6250f2903545cf510478fa079361aae917dd95",
"support"
],
"tools/wpt/tox.ini": [
@@ -675707,7 +676080,7 @@
"support"
],
"tools/wptrunner/wptrunner/browsers/chrome.py": [
- "aa44817276f9cd2a098a04adfc79bf4891c5cb4c",
+ "5b586bad8c2214eb55dc1c3d43119f66981d7a7f",
"support"
],
"tools/wptrunner/wptrunner/browsers/chrome_android.py": [
@@ -675811,11 +676184,11 @@
"support"
],
"tools/wptrunner/wptrunner/executors/executorselenium.py": [
- "75e7b2cc4ae939e0576bd8f68fc2e4b5e0a04b21",
+ "fce1a5bc0d98b689eeeed97f0893f226bf371352",
"support"
],
"tools/wptrunner/wptrunner/executors/executorservo.py": [
- "485cdc5c98d561b27a676d909c4344e8f6e0f089",
+ "b6975da7b4203a5fca4cea2f3c416ee3d1c268a5",
"support"
],
"tools/wptrunner/wptrunner/executors/executorservodriver.py": [
@@ -675823,7 +676196,7 @@
"support"
],
"tools/wptrunner/wptrunner/executors/executorwebdriver.py": [
- "0e83118d9ac4e8c7df77d49533348fc7b39ed9b1",
+ "dcab4b045291c77a154ba4a61e85a9845d1fb19c",
"support"
],
"tools/wptrunner/wptrunner/executors/executorwebkit.py": [
@@ -682226,6 +682599,10 @@
"2b693728948d898c9c3f81b7e1f2bc7959fa868f",
"support"
],
+ "webrtc-stats/getStats-remote-candidate-address.html": [
+ "bf580688591dbce35ef852c511d2c6b2dc01ab8b",
+ "testharness"
+ ],
"webrtc-stats/idlharness.window.js": [
"23741201b61a63f9353161c3e610b50a835d947e",
"testharness"
@@ -682383,7 +682760,7 @@
"support"
],
"webrtc/RTCPeerConnection-iceConnectionState.html": [
- "b647b3d3e35e31f16b33422f67cb30b917d1d0af",
+ "4071033a3c9eff6e5b848531127c1b70ee90bb20",
"testharness"
],
"webrtc/RTCPeerConnection-iceGatheringState.html": [
@@ -682558,6 +682935,10 @@
"a1f7854e1a2f18036040f882889ff6758e9968c0",
"testharness"
],
+ "webrtc/RTCRtpTransceiver-stop.html": [
+ "b45e03bd019015947b03df8c8bfbb1aa736bd3fe",
+ "testharness"
+ ],
"webrtc/RTCRtpTransceiver.https.html": [
"c200271490eaee404101360768276d9563453c24",
"testharness"
diff --git a/tests/wpt/metadata/css/CSS2/box-display/insert-inline-in-blocks-n-inlines-begin-001.xht.ini b/tests/wpt/metadata/css/CSS2/box-display/insert-inline-in-blocks-n-inlines-begin-001.xht.ini
new file mode 100644
index 00000000000..1105ba49c29
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/box-display/insert-inline-in-blocks-n-inlines-begin-001.xht.ini
@@ -0,0 +1,2 @@
+[insert-inline-in-blocks-n-inlines-begin-001.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/CSS2/box-display/insert-inline-in-blocks-n-inlines-begin-003.xht.ini b/tests/wpt/metadata/css/CSS2/box-display/insert-inline-in-blocks-n-inlines-begin-003.xht.ini
new file mode 100644
index 00000000000..4a9e04d5c3b
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/box-display/insert-inline-in-blocks-n-inlines-begin-003.xht.ini
@@ -0,0 +1,2 @@
+[insert-inline-in-blocks-n-inlines-begin-003.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/CSS2/box-display/insert-inline-in-blocks-n-inlines-end-001.xht.ini b/tests/wpt/metadata/css/CSS2/box-display/insert-inline-in-blocks-n-inlines-end-001.xht.ini
new file mode 100644
index 00000000000..aa7d59a4027
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/box-display/insert-inline-in-blocks-n-inlines-end-001.xht.ini
@@ -0,0 +1,2 @@
+[insert-inline-in-blocks-n-inlines-end-001.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/CSS2/box-display/insert-inline-in-blocks-n-inlines-end-003.xht.ini b/tests/wpt/metadata/css/CSS2/box-display/insert-inline-in-blocks-n-inlines-end-003.xht.ini
deleted file mode 100644
index 9a77d4ecf3b..00000000000
--- a/tests/wpt/metadata/css/CSS2/box-display/insert-inline-in-blocks-n-inlines-end-003.xht.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[insert-inline-in-blocks-n-inlines-end-003.xht]
- type: reftest
- expected: FAIL
diff --git a/tests/wpt/metadata/css/CSS2/box-display/insert-inline-in-blocks-n-inlines-middle-001.xht.ini b/tests/wpt/metadata/css/CSS2/box-display/insert-inline-in-blocks-n-inlines-middle-001.xht.ini
new file mode 100644
index 00000000000..608b684db5a
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/box-display/insert-inline-in-blocks-n-inlines-middle-001.xht.ini
@@ -0,0 +1,2 @@
+[insert-inline-in-blocks-n-inlines-middle-001.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/CSS2/box-display/insert-inline-in-blocks-n-inlines-middle-003.xht.ini b/tests/wpt/metadata/css/CSS2/box-display/insert-inline-in-blocks-n-inlines-middle-003.xht.ini
new file mode 100644
index 00000000000..d5019c52339
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/box-display/insert-inline-in-blocks-n-inlines-middle-003.xht.ini
@@ -0,0 +1,2 @@
+[insert-inline-in-blocks-n-inlines-middle-003.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/CSS2/css1/c5525-fltmult-000.xht.ini b/tests/wpt/metadata/css/CSS2/css1/c5525-fltmult-000.xht.ini
new file mode 100644
index 00000000000..9168554d7e6
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/css1/c5525-fltmult-000.xht.ini
@@ -0,0 +1,2 @@
+[c5525-fltmult-000.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/CSS2/linebox/border-padding-bleed-001.xht.ini b/tests/wpt/metadata/css/CSS2/linebox/border-padding-bleed-001.xht.ini
new file mode 100644
index 00000000000..4ab0b2fcd90
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/linebox/border-padding-bleed-001.xht.ini
@@ -0,0 +1,2 @@
+[border-padding-bleed-001.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/CSS2/linebox/border-padding-bleed-002.xht.ini b/tests/wpt/metadata/css/CSS2/linebox/border-padding-bleed-002.xht.ini
new file mode 100644
index 00000000000..2d5aac1e1be
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/linebox/border-padding-bleed-002.xht.ini
@@ -0,0 +1,2 @@
+[border-padding-bleed-002.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/CSS2/linebox/border-padding-bleed-003.xht.ini b/tests/wpt/metadata/css/CSS2/linebox/border-padding-bleed-003.xht.ini
new file mode 100644
index 00000000000..b282907315a
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/linebox/border-padding-bleed-003.xht.ini
@@ -0,0 +1,2 @@
+[border-padding-bleed-003.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-backgrounds/background-size-028.html.ini b/tests/wpt/metadata/css/css-backgrounds/background-size-028.html.ini
new file mode 100644
index 00000000000..baa377e6a97
--- /dev/null
+++ b/tests/wpt/metadata/css/css-backgrounds/background-size-028.html.ini
@@ -0,0 +1,2 @@
+[background-size-028.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-backgrounds/background-size-030.html.ini b/tests/wpt/metadata/css/css-backgrounds/background-size-030.html.ini
new file mode 100644
index 00000000000..8f67471d49f
--- /dev/null
+++ b/tests/wpt/metadata/css/css-backgrounds/background-size-030.html.ini
@@ -0,0 +1,2 @@
+[background-size-030.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-flexbox/flexbox_order-box.html.ini b/tests/wpt/metadata/css/css-flexbox/flexbox_order-box.html.ini
new file mode 100644
index 00000000000..b75bebaa625
--- /dev/null
+++ b/tests/wpt/metadata/css/css-flexbox/flexbox_order-box.html.ini
@@ -0,0 +1,2 @@
+[flexbox_order-box.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-flexbox/ttwf-reftest-flex-direction-row-reverse.html.ini b/tests/wpt/metadata/css/css-flexbox/ttwf-reftest-flex-direction-row-reverse.html.ini
new file mode 100644
index 00000000000..97838ec8b9f
--- /dev/null
+++ b/tests/wpt/metadata/css/css-flexbox/ttwf-reftest-flex-direction-row-reverse.html.ini
@@ -0,0 +1,2 @@
+[ttwf-reftest-flex-direction-row-reverse.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-flexbox/ttwf-reftest-flex-order.html.ini b/tests/wpt/metadata/css/css-flexbox/ttwf-reftest-flex-order.html.ini
new file mode 100644
index 00000000000..484d178d5d6
--- /dev/null
+++ b/tests/wpt/metadata/css/css-flexbox/ttwf-reftest-flex-order.html.ini
@@ -0,0 +1,2 @@
+[ttwf-reftest-flex-order.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-fonts/font-variant-alternates-18.html.ini b/tests/wpt/metadata/css/css-fonts/font-variant-alternates-18.html.ini
deleted file mode 100644
index a19c2f4e1df..00000000000
--- a/tests/wpt/metadata/css/css-fonts/font-variant-alternates-18.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[font-variant-alternates-18.html]
- expected: FAIL
diff --git a/tests/wpt/metadata/css/css-fonts/variations/at-font-face-descriptors.html.ini b/tests/wpt/metadata/css/css-fonts/variations/at-font-face-descriptors.html.ini
index 2b3a4401d40..dc5c4de91f3 100644
--- a/tests/wpt/metadata/css/css-fonts/variations/at-font-face-descriptors.html.ini
+++ b/tests/wpt/metadata/css/css-fonts/variations/at-font-face-descriptors.html.ini
@@ -257,3 +257,9 @@
[font-weight(valid): Out-of-range simple calc value (should be clamped): calc(1001)]
expected: FAIL
+ [font-style(valid): 'oblique' followed by calc with out of range value (should be clamped): oblique calc(-91deg)]
+ expected: FAIL
+
+ [font-style(valid): 'oblique' followed by calc with out of range value (should be clamped): oblique calc(91deg)]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-fonts/variations/font-style-parsing.html.ini b/tests/wpt/metadata/css/css-fonts/variations/font-style-parsing.html.ini
new file mode 100644
index 00000000000..561990dc135
--- /dev/null
+++ b/tests/wpt/metadata/css/css-fonts/variations/font-style-parsing.html.ini
@@ -0,0 +1,49 @@
+[font-style-parsing.html]
+ [Font-style (computed): 'oblique' followed by calc is valid even if it must be clamped (with computation)]
+ expected: FAIL
+
+ [Font-style (computed): 'oblique' followed by calc is valid even if it must be clamped (no computation)]
+ expected: FAIL
+
+ [Font-style (computed): 'oblique' followed by minimum -90 degree angle is valid]
+ expected: FAIL
+
+ [Font-style (computed): 'italic' is valid]
+ expected: FAIL
+
+ [Font-style (computed): 'oblique' followed by positive angle in turns is valid]
+ expected: FAIL
+
+ [Font-style (computed): 'oblique' followed by fractional angle is valid]
+ expected: FAIL
+
+ [Font-style (computed): 'oblique' followed by positive angle in degrees is valid]
+ expected: FAIL
+
+ [Font-style (computed): 'oblique' followed by positive angle in gradians is valid]
+ expected: FAIL
+
+ [Font-style (computed): 'oblique' followed by positive angle in radians is valid]
+ expected: FAIL
+
+ [Font-style (computed): 'oblique' followed by zero degrees is valid]
+ expected: FAIL
+
+ [Font-style (computed): 'oblique' followed by calc is valid]
+ expected: FAIL
+
+ [Font-style (computed): 'oblique' followed by calc is valid even if it mixes units (with computation)]
+ expected: FAIL
+
+ [Font-style (computed): 'oblique' followed by positive angle is valid]
+ expected: FAIL
+
+ [Font-style (computed): 'oblique' is valid]
+ expected: FAIL
+
+ [Font-style (computed): 'oblique' followed by maxumum 90 degree angle is valid]
+ expected: FAIL
+
+ [Font-style (computed): 'oblique' followed by negative angle is valid]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/encoding/single-byte-decoder.html.ini b/tests/wpt/metadata/encoding/single-byte-decoder.html.ini
index b935b9c9501..2206c3b9f32 100644
--- a/tests/wpt/metadata/encoding/single-byte-decoder.html.ini
+++ b/tests/wpt/metadata/encoding/single-byte-decoder.html.ini
@@ -32,7 +32,7 @@
[single-byte-decoder.html?XMLHttpRequest]
- expected: TIMEOUT
+ expected: CRASH
[ISO-8859-2: iso_8859-2:1987 (XMLHttpRequest)]
expected: FAIL
diff --git a/tests/wpt/metadata/fetch/content-type/response.window.js.ini b/tests/wpt/metadata/fetch/content-type/response.window.js.ini
index ea271a945eb..18f786d4963 100644
--- a/tests/wpt/metadata/fetch/content-type/response.window.js.ini
+++ b/tests/wpt/metadata/fetch/content-type/response.window.js.ini
@@ -312,15 +312,3 @@
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
expected: FAIL
- [<iframe>: combined response Content-Type: text/html;" text/plain]
- expected: FAIL
-
- [<iframe>: combined response Content-Type: text/html */*]
- expected: FAIL
-
- [<iframe>: combined response Content-Type: text/html */*;charset=gbk]
- expected: FAIL
-
- [<iframe>: combined response Content-Type: text/html;" \\" text/plain]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini
index 87c807a49ff..a639f15230c 100644
--- a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini
+++ b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini
@@ -11,3 +11,6 @@
[X-Content-Type-Options%3A%20nosniff%0C]
expected: FAIL
+ [Content-Type-Options%3A%20nosniff]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini
index 385376c7321..dc2e45516de 100644
--- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini
+++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini
@@ -1,4 +1,4 @@
-[traverse_the_history_4.html]
+[traverse_the_history_5.html]
[Multiple history traversals, last would be aborted]
expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-error-fired-before-scripting-unblocked.html.ini b/tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-error-fired-before-scripting-unblocked.html.ini
new file mode 100644
index 00000000000..4307fc594ea
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-error-fired-before-scripting-unblocked.html.ini
@@ -0,0 +1,4 @@
+[link-error-fired-before-scripting-unblocked.html]
+ [Check if the stylesheet's error event is fired before the pending parsing-blocking script is unblocked]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-load-fired-before-scripting-unblocked.html.ini b/tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-load-fired-before-scripting-unblocked.html.ini
new file mode 100644
index 00000000000..d4d3407120c
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-load-fired-before-scripting-unblocked.html.ini
@@ -0,0 +1,4 @@
+[link-load-fired-before-scripting-unblocked.html]
+ [Check if the stylesheet's load event is fired before the pending parsing-blocking script is unblocked]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/semantics/document-metadata/the-link-element/stylesheet-not-removed-until-next-stylesheet-loads.html.ini b/tests/wpt/metadata/html/semantics/document-metadata/the-link-element/stylesheet-not-removed-until-next-stylesheet-loads.html.ini
new file mode 100644
index 00000000000..49e7050b6d2
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/document-metadata/the-link-element/stylesheet-not-removed-until-next-stylesheet-loads.html.ini
@@ -0,0 +1,4 @@
+[stylesheet-not-removed-until-next-stylesheet-loads.html]
+ [Check that a style sheet loaded by a <link> is available until its successor is loaded]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/ready-states/autoplay-hidden.optional.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/ready-states/autoplay-hidden.optional.html.ini
index e547e2f869f..df295ed9fcd 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/ready-states/autoplay-hidden.optional.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/ready-states/autoplay-hidden.optional.html.ini
@@ -1,4 +1,5 @@
[autoplay-hidden.optional.html]
+ expected: TIMEOUT
[Allow delaying autoplay until video elements become visible]
- expected: FAIL
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini
new file mode 100644
index 00000000000..8cc42056d34
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini
@@ -0,0 +1,10 @@
+[non-active-document.html]
+ [DOMParser]
+ expected: FAIL
+
+ [createHTMLDocument]
+ expected: FAIL
+
+ [<template>]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/performance-timeline/webtiming-resolution.any.js.ini b/tests/wpt/metadata/performance-timeline/webtiming-resolution.any.js.ini
index 99a24216c88..7725b118e9d 100644
--- a/tests/wpt/metadata/performance-timeline/webtiming-resolution.any.js.ini
+++ b/tests/wpt/metadata/performance-timeline/webtiming-resolution.any.js.ini
@@ -12,3 +12,6 @@
[Verifies the resolution of entry.startTime is at least 5 microseconds.]
expected: TIMEOUT
+ [Verifies the resolution of performance.now() is at least 5 microseconds.]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini
index a56bad443a2..66bd350083b 100644
--- a/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini
+++ b/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini
@@ -1,5 +1,4 @@
[realtimeanalyser-fft-scaling.html]
- expected: TIMEOUT
[X 2048-point FFT peak position is not equal to 64. Got 0.]
expected: FAIL
diff --git a/tests/wpt/metadata/workers/baseurl/alpha/import-in-moduleworker.html.ini b/tests/wpt/metadata/workers/baseurl/alpha/import-in-moduleworker.html.ini
index bfd4d6dd2d6..bf2a1d61bab 100644
--- a/tests/wpt/metadata/workers/baseurl/alpha/import-in-moduleworker.html.ini
+++ b/tests/wpt/metadata/workers/baseurl/alpha/import-in-moduleworker.html.ini
@@ -1,5 +1,4 @@
[import-in-moduleworker.html]
- expected: ERROR
[Base URL in module dedicated workers: import]
expected: FAIL
diff --git a/tests/wpt/metadata/workers/baseurl/alpha/sharedworker-in-worker.html.ini b/tests/wpt/metadata/workers/baseurl/alpha/sharedworker-in-worker.html.ini
index 650c91da4a6..333edb3a26e 100644
--- a/tests/wpt/metadata/workers/baseurl/alpha/sharedworker-in-worker.html.ini
+++ b/tests/wpt/metadata/workers/baseurl/alpha/sharedworker-in-worker.html.ini
@@ -1,5 +1,4 @@
[sharedworker-in-worker.html]
- expected: ERROR
[Base URL in workers: new SharedWorker()]
expected: FAIL
diff --git a/tests/wpt/mozilla/meta/css/block_formatting_context_with_margin_a.html.ini b/tests/wpt/mozilla/meta/css/block_formatting_context_with_margin_a.html.ini
new file mode 100644
index 00000000000..521563002e8
--- /dev/null
+++ b/tests/wpt/mozilla/meta/css/block_formatting_context_with_margin_a.html.ini
@@ -0,0 +1,2 @@
+[block_formatting_context_with_margin_a.html]
+ expected: FAIL
diff --git a/tests/wpt/mozilla/meta/css/inline_block_baseline_a.html.ini b/tests/wpt/mozilla/meta/css/inline_block_baseline_a.html.ini
new file mode 100644
index 00000000000..ae16c8e2927
--- /dev/null
+++ b/tests/wpt/mozilla/meta/css/inline_block_baseline_a.html.ini
@@ -0,0 +1,2 @@
+[inline_block_baseline_a.html]
+ expected: FAIL
diff --git a/tests/wpt/mozilla/meta/css/overconstrained_block.html.ini b/tests/wpt/mozilla/meta/css/overconstrained_block.html.ini
new file mode 100644
index 00000000000..de5f1774e72
--- /dev/null
+++ b/tests/wpt/mozilla/meta/css/overconstrained_block.html.ini
@@ -0,0 +1,2 @@
+[overconstrained_block.html]
+ expected: FAIL
diff --git a/tests/wpt/mozilla/meta/css/stacked_layers.html.ini b/tests/wpt/mozilla/meta/css/stacked_layers.html.ini
new file mode 100644
index 00000000000..e13feb290c6
--- /dev/null
+++ b/tests/wpt/mozilla/meta/css/stacked_layers.html.ini
@@ -0,0 +1,2 @@
+[stacked_layers.html]
+ expected: FAIL
diff --git a/tests/wpt/mozilla/meta/css/transform_skew_a.html.ini b/tests/wpt/mozilla/meta/css/transform_skew_a.html.ini
new file mode 100644
index 00000000000..6750e22a3ca
--- /dev/null
+++ b/tests/wpt/mozilla/meta/css/transform_skew_a.html.ini
@@ -0,0 +1,2 @@
+[transform_skew_a.html]
+ expected: FAIL
diff --git a/tests/wpt/web-platform-tests/animation-worklet/animation-worklet-inside-iframe.https.html b/tests/wpt/web-platform-tests/animation-worklet/animation-worklet-inside-iframe.https.html
index cad04b281fc..b02186309dc 100644
--- a/tests/wpt/web-platform-tests/animation-worklet/animation-worklet-inside-iframe.https.html
+++ b/tests/wpt/web-platform-tests/animation-worklet/animation-worklet-inside-iframe.https.html
@@ -3,6 +3,7 @@
<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
+<script src="/web-animations/testcommon.js"></script>
<script src="common.js"></script>
<style>
@@ -47,7 +48,7 @@ async_test(t => {
animation.play();
assert_equals(data, '0.4');
- waitTwoAnimationFrames(t.step_func_done(() => {
+ waitForAsyncAnimationFrames(1).then(t.step_func_done(() => {
assert_equals(getComputedStyle(target).opacity, '0.5');
}));
});
diff --git a/tests/wpt/web-platform-tests/animation-worklet/common.js b/tests/wpt/web-platform-tests/animation-worklet/common.js
index d029ab79491..eb114f24687 100644
--- a/tests/wpt/web-platform-tests/animation-worklet/common.js
+++ b/tests/wpt/web-platform-tests/animation-worklet/common.js
@@ -8,26 +8,25 @@ function registerPassthroughAnimator() {
`);
}
+function registerConstantLocalTimeAnimator(localTime) {
+ return runInAnimationWorklet(`
+ registerAnimator('constant_time', class {
+ animate(currentTime, effect) { effect.localTime = ${localTime}; }
+ });
+ `);
+}
+
+
function runInAnimationWorklet(code) {
return CSS.animationWorklet.addModule(
URL.createObjectURL(new Blob([code], {type: 'text/javascript'}))
);
}
-function waitForAnimationFrames(count, callback) {
- function rafCallback() {
- if (count <= 0) {
- callback();
- } else {
- count -= 1;
- window.requestAnimationFrame(rafCallback);
- }
- }
- rafCallback();
-};
-
-// Wait for two main thread frames to guarantee that compositor has produced
-// at least one frame. Note that this is a Chrome-only concept.
-function waitTwoAnimationFrames(callback) {
- waitForAnimationFrames(2, callback);
-};
+function waitForAsyncAnimationFrames(count) {
+ // In Chrome, waiting for N+1 main thread frames guarantees that compositor has produced
+ // at least N frames.
+ // TODO(majidvp): re-evaluate this choice once other browsers have implemented
+ // AnimationWorklet.
+ return waitForAnimationFrames(count + 1);
+}
diff --git a/tests/wpt/web-platform-tests/animation-worklet/resources/animator-iframe.html b/tests/wpt/web-platform-tests/animation-worklet/resources/animator-iframe.html
index 2a88959195c..e30cc281fcd 100644
--- a/tests/wpt/web-platform-tests/animation-worklet/resources/animator-iframe.html
+++ b/tests/wpt/web-platform-tests/animation-worklet/resources/animator-iframe.html
@@ -6,6 +6,7 @@
background-color: #00ff00;
}
</style>
+<script src="/web-animations/testcommon.js"></script>
<script src="../common.js"></script>
<script id="iframe_worklet" type="text/worklet">
@@ -32,7 +33,7 @@ runInAnimationWorklet(
const effect = new KeyframeEffect(target, [{ opacity: 0 }], { duration: 1000 });
const animation = new WorkletAnimation('iframe_animator', effect);
animation.play();
- waitTwoAnimationFrames( _ => {
+ waitForAnimationFrames(2).then(_ => {
window.parent.postMessage(getComputedStyle(target).opacity, '*');
});
});
diff --git a/tests/wpt/web-platform-tests/animation-worklet/scroll-timeline-writing-modes.https.html b/tests/wpt/web-platform-tests/animation-worklet/scroll-timeline-writing-modes.https.html
index 9cf99cb9202..5b20f03bfad 100644
--- a/tests/wpt/web-platform-tests/animation-worklet/scroll-timeline-writing-modes.https.html
+++ b/tests/wpt/web-platform-tests/animation-worklet/scroll-timeline-writing-modes.https.html
@@ -3,15 +3,9 @@
<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
+<script src="/web-animations/testcommon.js"></script>
<script src="common.js"></script>
-<script id="worklet_code" type="text/worklet">
-registerAnimator("test_animator", class {
- animate(currentTime, effect) {
- effect.localTime = currentTime;
- }
-});
-</script>
<script>
// Creates a DOM structure like:
@@ -63,15 +57,14 @@ function createAndPlayTestAnimation(elements, timeline_orientation) {
timeRange: 1000,
orientation: timeline_orientation
});
- const animation = new WorkletAnimation('test_animator', effect, timeline);
+ const animation = new WorkletAnimation('passthrough', effect, timeline);
animation.play();
}
setup(setupAndRegisterTests, {explicit_done: true});
function setupAndRegisterTests() {
- const worklet_code = document.getElementById('worklet_code').textContent;
- runInAnimationWorklet(worklet_code).then(() => {
+ registerPassthroughAnimator().then(() => {
// Note that block horizontal-tb is tested implicitly in the basic
// ScrollTimeline tests (as it is the default).
async_test(
@@ -104,7 +97,7 @@ function block_vertical_lr(t) {
elements.scroller.scrollWidth - elements.scroller.clientWidth;
elements.scroller.scrollLeft = 0.25 * maxScroll;
- waitForAnimationFrames(3, t.step_func_done(() => {
+ waitForAsyncAnimationFrames(2).then(t.step_func_done(() => {
assert_equals(
getComputedStyle(elements.box).transform, 'matrix(1, 0, 0, 1, 0, 50)');
}));
@@ -120,7 +113,7 @@ function block_vertical_rl(t) {
elements.scroller.scrollWidth - elements.scroller.clientWidth;
elements.scroller.scrollLeft = 0.75 * maxScroll;
- waitForAnimationFrames(3, t.step_func_done(() => {
+ waitForAsyncAnimationFrames(2).then(t.step_func_done(() => {
assert_equals(
getComputedStyle(elements.box).transform, 'matrix(1, 0, 0, 1, 0, 50)');
}));
@@ -136,7 +129,7 @@ function inline_horizontal_tb_rtl(t) {
elements.scroller.scrollWidth - elements.scroller.clientWidth;
elements.scroller.scrollLeft = 0.75 * maxScroll;
- waitForAnimationFrames(3, t.step_func_done(() => {
+ waitForAsyncAnimationFrames(2).then(t.step_func_done(() => {
assert_equals(
getComputedStyle(elements.box).transform, 'matrix(1, 0, 0, 1, 0, 50)');
}));
@@ -151,7 +144,7 @@ function inline_vertical_writing_mode_ltr(t) {
elements.scroller.scrollHeight - elements.scroller.clientHeight;
elements.scroller.scrollTop = 0.25 * maxScroll;
- waitForAnimationFrames(3, t.step_func_done(() => {
+ waitForAsyncAnimationFrames(2).then(t.step_func_done(() => {
assert_equals(
getComputedStyle(elements.box).transform, 'matrix(1, 0, 0, 1, 0, 50)');
}));
@@ -167,7 +160,7 @@ function inline_vertical_writing_mode_rtl(t) {
elements.scroller.scrollHeight - elements.scroller.clientHeight;
elements.scroller.scrollTop = 0.75 * maxScroll;
- waitForAnimationFrames(3, t.step_func_done(() => {
+ waitForAsyncAnimationFrames(2).then(t.step_func_done(() => {
assert_equals(
getComputedStyle(elements.box).transform, 'matrix(1, 0, 0, 1, 0, 50)');
}));
diff --git a/tests/wpt/web-platform-tests/animation-worklet/worklet-animation-with-fill-mode.https.html b/tests/wpt/web-platform-tests/animation-worklet/worklet-animation-with-fill-mode.https.html
index 90abe082857..49fead8bd39 100644
--- a/tests/wpt/web-platform-tests/animation-worklet/worklet-animation-with-fill-mode.https.html
+++ b/tests/wpt/web-platform-tests/animation-worklet/worklet-animation-with-fill-mode.https.html
@@ -3,6 +3,7 @@
<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
+<script src="/web-animations/testcommon.js"></script>
<script src="common.js"></script>
<style>
@@ -15,33 +16,21 @@
<script>
function CreateTest(target, effect, verify, test_name) {
- async_test(t => {
- runInAnimationWorklet(
- document.getElementById('simple_animate').textContent
- ).then(_ => {
- const animation = new WorkletAnimation('test_animator', effect);
+ promise_test(async function() {
+ await registerConstantLocalTimeAnimator(2000);
+ const animation = new WorkletAnimation('constant_time', effect);
animation.play();
- waitTwoAnimationFrames(() => {
- // waitTwoAnimationFrames guarantees a compositor frame that could update
- // the opacity value in the worklet. Meanwhile, getComputedStyle needs an
- // extra frame to fetch the updated value.
- window.requestAnimationFrame(t.step_func_done(() => {
- verify();
- animation.cancel();
- }));
- });
- });
+ await waitForAsyncAnimationFrames(1);
+ // waitTwoAnimationFrames guarantees a compositor frame that could update
+ // the opacity value in the worklet. Meanwhile, getComputedStyle needs an
+ // extra frame to fetch the updated value.
+ await waitForNextFrame();
+ verify();
+ animation.cancel();
}, test_name);
}
</script>
-<script id="simple_animate" type="text/worklet">
-registerAnimator("test_animator", class {
- animate(currentTime, effect) {
- effect.localTime = 2000;
- }
-});
-</script>
<div id="target1" class='target'></div>
<div id="target2" class='target'></div>
diff --git a/tests/wpt/web-platform-tests/animation-worklet/worklet-animation-with-invalid-effect.https.html b/tests/wpt/web-platform-tests/animation-worklet/worklet-animation-with-invalid-effect.https.html
index 9a7688d348d..8b72d4e487c 100644
--- a/tests/wpt/web-platform-tests/animation-worklet/worklet-animation-with-invalid-effect.https.html
+++ b/tests/wpt/web-platform-tests/animation-worklet/worklet-animation-with-invalid-effect.https.html
@@ -3,6 +3,7 @@
<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
+<script src="/web-animations/testcommon.js"></script>
<script src="common.js"></script>
<style>
@@ -17,8 +18,8 @@
<script>
'use strict';
-test(function() {
- registerPassthroughAnimator();
+promise_test(async function() {
+ await registerPassthroughAnimator();
let playFunc = function() {
let effect = new KeyframeEffect(
document.getElementById('target'),
diff --git a/tests/wpt/web-platform-tests/bluetooth/characteristic/characteristicProperties.https.html b/tests/wpt/web-platform-tests/bluetooth/characteristic/characteristicProperties.https.html
index d20d435999f..0747af2fc9c 100644
--- a/tests/wpt/web-platform-tests/bluetooth/characteristic/characteristicProperties.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/characteristic/characteristicProperties.https.html
@@ -8,19 +8,22 @@
'use strict';
const test_desc = 'HeartRate device properties';
-bluetooth_test(() => getHealthThermometerService()
- .then(({service}) => Promise.all([
- service.getCharacteristic('temperature_measurement'),
- service.getCharacteristic('measurement_interval')]))
- .then(([temperature_measurement, measurement_interval]) => {
- let tm_expected_properties =
- new TestCharacteristicProperties(['indicate']);
- assert_properties_equal(temperature_measurement.properties,
- tm_expected_properties);
+bluetooth_test(
+ () => getHealthThermometerService()
+ .then(({service}) => Promise.all([
+ service.getCharacteristic('temperature_measurement'),
+ service.getCharacteristic('measurement_interval')
+ ]))
+ .then(([temperature_measurement, measurement_interval]) => {
+ let tm_expected_properties =
+ new TestCharacteristicProperties(['indicate']);
+ assert_properties_equal(
+ temperature_measurement.properties, tm_expected_properties);
- let mi_expected_properties =
- new TestCharacteristicProperties(['read', 'write', 'indicate']);
- assert_properties_equal(measurement_interval.properties,
- mi_expected_properties);
- }), test_desc);
+ let mi_expected_properties = new TestCharacteristicProperties(
+ ['read', 'write', 'indicate']);
+ assert_properties_equal(
+ measurement_interval.properties, mi_expected_properties);
+ }),
+ test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/characteristic/service-same-from-2-characteristics.https.html b/tests/wpt/web-platform-tests/bluetooth/characteristic/service-same-from-2-characteristics.https.html
index aa156b2e988..395d49b7f07 100644
--- a/tests/wpt/web-platform-tests/bluetooth/characteristic/service-same-from-2-characteristics.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/characteristic/service-same-from-2-characteristics.https.html
@@ -8,12 +8,14 @@
'use strict';
const test_desc = 'Same parent service returned from multiple characteristics.';
-bluetooth_test(() => getHealthThermometerService()
- .then(({service}) => Promise.all([
- service.getCharacteristic('measurement_interval'),
- service.getCharacteristic('temperature_measurement')
- ]))
- .then(characteristics =>
- assert_equals(characteristics[0].service, characteristics[1].service)),
+bluetooth_test(
+ () => getHealthThermometerService()
+ .then(({service}) => Promise.all([
+ service.getCharacteristic('measurement_interval'),
+ service.getCharacteristic('temperature_measurement')
+ ]))
+ .then(
+ characteristics => assert_equals(
+ characteristics[0].service, characteristics[1].service)),
test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/characteristic/service-same-object.https.html b/tests/wpt/web-platform-tests/bluetooth/characteristic/service-same-object.https.html
index ee961216983..0b2a9157214 100644
--- a/tests/wpt/web-platform-tests/bluetooth/characteristic/service-same-object.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/characteristic/service-same-object.https.html
@@ -7,10 +7,11 @@
<script>
'use strict';
const test_desc = '[SameObject] test for BluetoothRemoteGATTCharacteristic ' +
- 'service.';
+ 'service.';
-bluetooth_test(() => getMeasurementIntervalCharacteristic()
- .then(({characteristic}) =>
- assert_equals(characteristic.service, characteristic.service)),
+bluetooth_test(
+ () => getMeasurementIntervalCharacteristic().then(
+ ({characteristic}) =>
+ assert_equals(characteristic.service, characteristic.service)),
test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/idl/idl-Bluetooth.https.html b/tests/wpt/web-platform-tests/bluetooth/idl/idl-Bluetooth.https.html
index 2835236d3b5..9578fd6af21 100644
--- a/tests/wpt/web-platform-tests/bluetooth/idl/idl-Bluetooth.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/idl/idl-Bluetooth.https.html
@@ -7,10 +7,12 @@
const test_desc = 'Bluetooth IDL test';
test(() => {
- assert_throws(new TypeError(), () => new Bluetooth(),
- 'the constructor should not be callable with "new"');
- assert_throws(new TypeError(), () => Bluetooth(),
- 'the constructor should not be callable');
+ assert_throws(
+ new TypeError(), () => new Bluetooth(),
+ 'the constructor should not be callable with "new"');
+ assert_throws(
+ new TypeError(), () => Bluetooth(),
+ 'the constructor should not be callable');
// Bluetooth implements BluetoothDiscovery;
assert_true('requestDevice' in navigator.bluetooth);
diff --git a/tests/wpt/web-platform-tests/bluetooth/idl/idl-BluetoothDevice.https.html b/tests/wpt/web-platform-tests/bluetooth/idl/idl-BluetoothDevice.https.html
index 631d9dd4300..707ac1ab03a 100644
--- a/tests/wpt/web-platform-tests/bluetooth/idl/idl-BluetoothDevice.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/idl/idl-BluetoothDevice.https.html
@@ -9,23 +9,28 @@
const test_desc_idl = 'BluetoothDevice IDL test.';
test(() => {
- assert_throws(new TypeError(), () => new BluetoothDevice(),
+ assert_throws(
+ new TypeError(), () => new BluetoothDevice(),
'the constructor should not be callable with "new"');
- assert_throws(new TypeError(), () => BluetoothDevice(),
+ assert_throws(
+ new TypeError(), () => BluetoothDevice(),
'the constructor should not be callable');
}, test_desc_idl);
const test_desc_attr = 'BluetoothDevice attributes.';
let device;
-bluetooth_test(() => getConnectedHealthThermometerDevice()
- .then(({device}) => {
- assert_equals(device.constructor.name, 'BluetoothDevice');
- var old_device_id = device.id;
- assert_throws(new TypeError(), () => device.id = 'overwritten',
- 'the device id should not be writable');
- assert_throws(new TypeError(), () => device.name = 'overwritten',
- 'the device name should not be writable');
- assert_equals(device.id, old_device_id);
- assert_equals(device.name, 'Health Thermometer');
- }), test_desc_attr);
+bluetooth_test(
+ () => getConnectedHealthThermometerDevice().then(({device}) => {
+ assert_equals(device.constructor.name, 'BluetoothDevice');
+ var old_device_id = device.id;
+ assert_throws(
+ new TypeError(), () => device.id = 'overwritten',
+ 'the device id should not be writable');
+ assert_throws(
+ new TypeError(), () => device.name = 'overwritten',
+ 'the device name should not be writable');
+ assert_equals(device.id, old_device_id);
+ assert_equals(device.name, 'Health Thermometer');
+ }),
+ test_desc_attr);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/idl/idl-BluetoothUUID.html b/tests/wpt/web-platform-tests/bluetooth/idl/idl-BluetoothUUID.html
index efebb15cb25..2adf35a419f 100644
--- a/tests/wpt/web-platform-tests/bluetooth/idl/idl-BluetoothUUID.html
+++ b/tests/wpt/web-platform-tests/bluetooth/idl/idl-BluetoothUUID.html
@@ -19,22 +19,25 @@ test(() => {
assert_equals(BluetoothUUID.getDescriptor(NaN), base_uuid);
}, 'NaN returns basic uuid');
-test(() => {
- let max_uuid = 'ffffffff-0000-1000-8000-00805f9b34fb';
- let nine_digits = 0xfffffffff;
- let thirteen_digits = 0xfffffffffffff;
- let fourteen_digits = 0xffffffffffffff;
- assert_equals(BluetoothUUID.getService(nine_digits), max_uuid);
- assert_equals(BluetoothUUID.getCharacteristic(nine_digits), max_uuid);
- assert_equals(BluetoothUUID.getDescriptor(nine_digits), max_uuid);
- assert_equals(BluetoothUUID.getService(thirteen_digits), max_uuid);
- assert_equals(BluetoothUUID.getCharacteristic(thirteen_digits), max_uuid);
- assert_equals(BluetoothUUID.getDescriptor(thirteen_digits), max_uuid);
- assert_equals(BluetoothUUID.getService(fourteen_digits), base_uuid);
- assert_equals(BluetoothUUID.getCharacteristic(fourteen_digits), base_uuid);
- assert_equals(BluetoothUUID.getDescriptor(fourteen_digits), base_uuid);
-}, 'Values between 0xfffffffff (8 digits) and 0xffffffffffffff (14 digits)' +
- 'should return max UUID');
+test(
+ () => {
+ let max_uuid = 'ffffffff-0000-1000-8000-00805f9b34fb';
+ let nine_digits = 0xfffffffff;
+ let thirteen_digits = 0xfffffffffffff;
+ let fourteen_digits = 0xffffffffffffff;
+ assert_equals(BluetoothUUID.getService(nine_digits), max_uuid);
+ assert_equals(BluetoothUUID.getCharacteristic(nine_digits), max_uuid);
+ assert_equals(BluetoothUUID.getDescriptor(nine_digits), max_uuid);
+ assert_equals(BluetoothUUID.getService(thirteen_digits), max_uuid);
+ assert_equals(BluetoothUUID.getCharacteristic(thirteen_digits), max_uuid);
+ assert_equals(BluetoothUUID.getDescriptor(thirteen_digits), max_uuid);
+ assert_equals(BluetoothUUID.getService(fourteen_digits), base_uuid);
+ assert_equals(
+ BluetoothUUID.getCharacteristic(fourteen_digits), base_uuid);
+ assert_equals(BluetoothUUID.getDescriptor(fourteen_digits), base_uuid);
+ },
+ 'Values between 0xfffffffff (8 digits) and 0xffffffffffffff (14 digits)' +
+ 'should return max UUID');
test(() => {
assert_equals(BluetoothUUID.getService(Infinity), base_uuid);
@@ -54,7 +57,8 @@ test(() => {
let adeadbeef_alias = 0xADEADBEEF;
let adeadbeef_uuid = 'deadbeef-0000-1000-8000-00805f9b34fb';
assert_equals(BluetoothUUID.getService(adeadbeef_alias), adeadbeef_uuid);
- assert_equals(BluetoothUUID.getCharacteristic(adeadbeef_alias), adeadbeef_uuid);
+ assert_equals(
+ BluetoothUUID.getCharacteristic(adeadbeef_alias), adeadbeef_uuid);
assert_equals(BluetoothUUID.getDescriptor(adeadbeef_alias), adeadbeef_uuid);
}, 'Only first 32bits should be used.');
@@ -68,31 +72,40 @@ test(() => {
test(() => {
let all_caps_uuid = '1A2B3C4D-5E6F-7A8B-9C0D-1E2F3A4B5C6D';
assert_throws(TypeError(), () => BluetoothUUID.getService(all_caps_uuid));
- assert_throws(TypeError(), () => BluetoothUUID.getCharacteristic(all_caps_uuid));
+ assert_throws(
+ TypeError(), () => BluetoothUUID.getCharacteristic(all_caps_uuid));
assert_throws(TypeError(), () => BluetoothUUID.getDescriptor(all_caps_uuid));
}, 'A UUID String with uppercase letters is an invalid UUID.');
test(() => {
let string_alias = 'deadbeef';
assert_throws(TypeError(), () => BluetoothUUID.getService(string_alias));
- assert_throws(TypeError(), () => BluetoothUUID.getCharacteristic(string_alias));
+ assert_throws(
+ TypeError(), () => BluetoothUUID.getCharacteristic(string_alias));
assert_throws(TypeError(), () => BluetoothUUID.getDescriptor(string_alias));
}, 'A 32bit *String* alias is invalid.');
test(() => {
let invalid_character_uuid = '0000000g-0000-1000-8000-00805f9b34fb';
- assert_throws(TypeError(), () => BluetoothUUID.getService(invalid_character_uuid));
- assert_throws(TypeError(), () => BluetoothUUID.getCharacteristic(invalid_character_uuid));
- assert_throws(TypeError(), () => BluetoothUUID.getDescriptor(invalid_character_uuid));
+ assert_throws(
+ TypeError(), () => BluetoothUUID.getService(invalid_character_uuid));
+ assert_throws(
+ TypeError(),
+ () => BluetoothUUID.getCharacteristic(invalid_character_uuid));
+ assert_throws(
+ TypeError(), () => BluetoothUUID.getDescriptor(invalid_character_uuid));
}, 'A UUID with invalid characters is an invalid UUID.');
test(() => {
- assert_equals(BluetoothUUID.getService('alert_notification'),
- '00001811-0000-1000-8000-00805f9b34fb');
- assert_equals(BluetoothUUID.getCharacteristic('aerobic_heart_rate_lower_limit'),
- '00002a7e-0000-1000-8000-00805f9b34fb');
- assert_equals(BluetoothUUID.getDescriptor('gatt.characteristic_extended_properties'),
- '00002900-0000-1000-8000-00805f9b34fb');
+ assert_equals(
+ BluetoothUUID.getService('alert_notification'),
+ '00001811-0000-1000-8000-00805f9b34fb');
+ assert_equals(
+ BluetoothUUID.getCharacteristic('aerobic_heart_rate_lower_limit'),
+ '00002a7e-0000-1000-8000-00805f9b34fb');
+ assert_equals(
+ BluetoothUUID.getDescriptor('gatt.characteristic_extended_properties'),
+ '00002900-0000-1000-8000-00805f9b34fb');
}, 'A valid UUID from a name.');
test(() => {
@@ -136,7 +149,8 @@ test(() => {
assert_throws(new TypeError, () => BluetoothUUID.canonicalUUID(undefined));
assert_equals(BluetoothUUID.canonicalUUID(null), base_uuid);
assert_equals(BluetoothUUID.canonicalUUID(false), base_uuid);
- assert_equals(BluetoothUUID.canonicalUUID(true), BluetoothUUID.canonicalUUID(1));
+ assert_equals(
+ BluetoothUUID.canonicalUUID(true), BluetoothUUID.canonicalUUID(1));
assert_throws(new TypeError, () => BluetoothUUID.canonicalUUID(NaN));
// getService
diff --git a/tests/wpt/web-platform-tests/bluetooth/idl/idl-NavigatorBluetooth.https.html b/tests/wpt/web-platform-tests/bluetooth/idl/idl-NavigatorBluetooth.https.html
index b8649f11abe..5449c94ad43 100644
--- a/tests/wpt/web-platform-tests/bluetooth/idl/idl-NavigatorBluetooth.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/idl/idl-NavigatorBluetooth.https.html
@@ -6,8 +6,7 @@
const test_desc = '[SameObject] test for navigator.bluetooth';
test(() => {
- assert_true('bluetooth' in navigator,
- 'navigator.bluetooth exists.');
+ assert_true('bluetooth' in navigator, 'navigator.bluetooth exists.');
}, 'navigator.bluetooth IDL test');
test(() => {
diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/acceptAllDevices/device-with-empty-name.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/acceptAllDevices/device-with-empty-name.https.html
index 033570d842e..7b68acf1471 100644
--- a/tests/wpt/web-platform-tests/bluetooth/requestDevice/acceptAllDevices/device-with-empty-name.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/acceptAllDevices/device-with-empty-name.https.html
@@ -9,8 +9,10 @@
const test_desc = 'Device with empty name and no UUIDs nearby. Should be ' +
'found if acceptAllDevices is true.';
-bluetooth_test(() => setUpPreconnectedDevice({name: ''})
- .then(() => requestDeviceWithTrustedClick({acceptAllDevices: true}))
- .then(device => assert_equals(device.name, '')),
+bluetooth_test(
+ () =>
+ setUpPreconnectedDevice({name: ''})
+ .then(() => requestDeviceWithTrustedClick({acceptAllDevices: true}))
+ .then(device => assert_equals(device.name, '')),
test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/acceptAllDevices/device-with-name.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/acceptAllDevices/device-with-name.https.html
index d990dbf05b4..3c2dcb7f8a6 100644
--- a/tests/wpt/web-platform-tests/bluetooth/requestDevice/acceptAllDevices/device-with-name.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/acceptAllDevices/device-with-name.https.html
@@ -5,12 +5,15 @@
<script src="/resources/testdriver-vendor.js"></script>
<script src="/bluetooth/resources/bluetooth-helpers.js"></script>
<script>
-const test_desc = 'A device with name and no UUIDs nearby. Should be found if ' +
- 'acceptAllDevices is true.';
+const test_desc =
+ 'A device with name and no UUIDs nearby. Should be found if ' +
+ 'acceptAllDevices is true.';
const name = 'LE Device';
-bluetooth_test(() => setUpPreconnectedDevice({name: name})
- .then(() => requestDeviceWithTrustedClick({acceptAllDevices: true}))
- .then(device => assert_equals(device.name, name)),
+bluetooth_test(
+ () =>
+ setUpPreconnectedDevice({name: name})
+ .then(() => requestDeviceWithTrustedClick({acceptAllDevices: true}))
+ .then(device => assert_equals(device.name, name)),
test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/acceptAllDevices/optional-services-missing.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/acceptAllDevices/optional-services-missing.https.html
index bd9e5862aa7..d4c26771305 100644
--- a/tests/wpt/web-platform-tests/bluetooth/requestDevice/acceptAllDevices/optional-services-missing.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/acceptAllDevices/optional-services-missing.https.html
@@ -10,13 +10,14 @@ const test_desc = 'requestDevice called with acceptAllDevices: true and ' +
'with no optionalServices. Should not get access to any services.';
const expected = new DOMException(
'Origin is not allowed to access any service. ' +
- 'Tip: Add the service UUID to \'optionalServices\' in ' +
- 'requestDevice() options. https://goo.gl/HxfxSQ',
+ 'Tip: Add the service UUID to \'optionalServices\' in ' +
+ 'requestDevice() options. https://goo.gl/HxfxSQ',
'SecurityError');
-bluetooth_test(() => getConnectedHealthThermometerDevice({acceptAllDevices: true})
- .then(({device}) => assert_promise_rejects_with_message(
- device.gatt.getPrimaryServices(),
- expected)),
+bluetooth_test(
+ () => getConnectedHealthThermometerDevice({acceptAllDevices: true})
+ .then(
+ ({device}) => assert_promise_rejects_with_message(
+ device.gatt.getPrimaryServices(), expected)),
test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/acceptAllDevices/optional-services-present.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/acceptAllDevices/optional-services-present.https.html
index 3c0f4c1164b..86377c289f6 100644
--- a/tests/wpt/web-platform-tests/bluetooth/requestDevice/acceptAllDevices/optional-services-present.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/acceptAllDevices/optional-services-present.https.html
@@ -7,20 +7,23 @@
<script>
'use strict';
const test_desc = 'requestDevice called with acceptAllDevices: true and with ' +
- 'optionalServices. Should get access to services.';
+ 'optionalServices. Should get access to services.';
-bluetooth_test(() => getTwoHealthThermometerServicesDevice()
- .then(() => requestDeviceWithTrustedClick({
- acceptAllDevices: true,
- optionalServices: ['health_thermometer']
- }))
- .then(device => device.gatt.connect())
- .then(gattServer => gattServer.getPrimaryServices())
- .then(services => {
- assert_equals(services.length, 2);
- services.forEach(service => {
- assert_equals(service.uuid,
- BluetoothUUID.getService('health_thermometer'));
- });
- }), test_desc);
+bluetooth_test(
+ () => getTwoHealthThermometerServicesDevice()
+ .then(() => requestDeviceWithTrustedClick({
+ acceptAllDevices: true,
+ optionalServices: ['health_thermometer']
+ }))
+ .then(device => device.gatt.connect())
+ .then(gattServer => gattServer.getPrimaryServices())
+ .then(services => {
+ assert_equals(services.length, 2);
+ services.forEach(service => {
+ assert_equals(
+ service.uuid,
+ BluetoothUUID.getService('health_thermometer'));
+ });
+ }),
+ test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/blocklisted-service-in-filter.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/blocklisted-service-in-filter.https.html
index 253e3119916..630548d6846 100644
--- a/tests/wpt/web-platform-tests/bluetooth/requestDevice/blocklisted-service-in-filter.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/blocklisted-service-in-filter.https.html
@@ -10,16 +10,16 @@ const test_desc = 'Reject with SecurityError if requesting a blocklisted ' +
'service.';
const expected = new DOMException(
'requestDevice() called with a filter containing a blocklisted UUID. ' +
- 'https://goo.gl/4NeimX',
+ 'https://goo.gl/4NeimX',
'SecurityError');
-bluetooth_test(() => setUpPreconnectedDevice({
- knownServiceUUIDs: ['human_interface_device']
-})
- .then(() => assert_promise_rejects_with_message(
- requestDeviceWithTrustedClick({
- filters: [{services: ['human_interface_device']}]
- }),
- expected, 'Requesting blocklisted service rejects.')),
+bluetooth_test(
+ () =>
+ setUpPreconnectedDevice({knownServiceUUIDs: ['human_interface_device']})
+ .then(
+ () => assert_promise_rejects_with_message(
+ requestDeviceWithTrustedClick(
+ {filters: [{services: ['human_interface_device']}]}),
+ expected, 'Requesting blocklisted service rejects.')),
test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/blocklisted-service-in-optionalServices.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/blocklisted-service-in-optionalServices.https.html
index 7189b643eed..5c176b82b7f 100644
--- a/tests/wpt/web-platform-tests/bluetooth/requestDevice/blocklisted-service-in-optionalServices.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/blocklisted-service-in-optionalServices.https.html
@@ -8,26 +8,30 @@
'use strict';
const test_desc = 'Blocklisted UUID in optionalServices is removed and ' +
'access not granted.';
-const expected = new DOMException('Origin is not allowed to access the ' +
- 'service. Tip: Add the service UUID to \'optionalServices\' in ' +
- 'requestDevice() options. https://goo.gl/HxfxSQ',
+const expected = new DOMException(
+ 'Origin is not allowed to access the ' +
+ 'service. Tip: Add the service UUID to \'optionalServices\' in ' +
+ 'requestDevice() options. https://goo.gl/HxfxSQ',
'SecurityError');
let device, fake_peripheral;
-bluetooth_test(() => getDiscoveredHealthThermometerDevice({
- filters: [{services: ['health_thermometer']}],
- optionalServices: ['human_interface_device']
-})
- .then(_ => ({device, fake_peripheral} = _))
- .then(() =>
- fake_peripheral.setNextGATTConnectionResponse({code: HCI_SUCCESS}))
- .then(() => device.gatt.connect())
- .then(() => Promise.all([
- assert_promise_rejects_with_message(
- device.gatt.getPrimaryService('human_interface_device'),
- expected, 'Blocklisted service not accessible.'),
- assert_promise_rejects_with_message(
- device.gatt.getPrimaryServices('human_interface_device'),
- expected, 'Blocklisted services not accessible.')])),
+bluetooth_test(
+ () => getDiscoveredHealthThermometerDevice({
+ filters: [{services: ['health_thermometer']}],
+ optionalServices: ['human_interface_device']
+ })
+ .then(_ => ({device, fake_peripheral} = _))
+ .then(
+ () => fake_peripheral.setNextGATTConnectionResponse(
+ {code: HCI_SUCCESS}))
+ .then(() => device.gatt.connect())
+ .then(() => Promise.all([
+ assert_promise_rejects_with_message(
+ device.gatt.getPrimaryService('human_interface_device'),
+ expected, 'Blocklisted service not accessible.'),
+ assert_promise_rejects_with_message(
+ device.gatt.getPrimaryServices('human_interface_device'),
+ expected, 'Blocklisted services not accessible.')
+ ])),
test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/device-name-longer-than-29-bytes.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/device-name-longer-than-29-bytes.https.html
index ba8a090309b..5ca358a0e1a 100644
--- a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/device-name-longer-than-29-bytes.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/device-name-longer-than-29-bytes.https.html
@@ -10,10 +10,11 @@ const test_desc = 'A device name between 29 and 248 bytes is valid.';
const DEVICE_NAME = 'a_device_name_that_is_longer_than_29_bytes_but_' +
'shorter_than_248_bytes';
-bluetooth_test(() => setUpPreconnectedDevice({name: DEVICE_NAME})
- .then(() => requestDeviceWithTrustedClick({
- filters: [{name: DEVICE_NAME}]
- }))
- .then(device => assert_equals(device.name, DEVICE_NAME)),
+bluetooth_test(
+ () => setUpPreconnectedDevice({name: DEVICE_NAME})
+ .then(
+ () => requestDeviceWithTrustedClick(
+ {filters: [{name: DEVICE_NAME}]}))
+ .then(device => assert_equals(device.name, DEVICE_NAME)),
test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/empty-filter.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/empty-filter.https.html
index eed7b870b38..788d9f80361 100644
--- a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/empty-filter.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/empty-filter.https.html
@@ -9,8 +9,8 @@
const test_desc = 'A filter must restrict the devices in some way.';
const expected = new TypeError();
-bluetooth_test(() => assert_promise_rejects_with_message(
- requestDeviceWithTrustedClick({filters: [{}]}),
- expected),
+bluetooth_test(
+ () => assert_promise_rejects_with_message(
+ requestDeviceWithTrustedClick({filters: [{}]}), expected),
test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/empty-filters-member.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/empty-filters-member.https.html
index fbbd6dacad9..65bfc6443a4 100644
--- a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/empty-filters-member.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/empty-filters-member.https.html
@@ -7,12 +7,13 @@
<script>
'use strict';
const test_desc = 'An empty |filters| member should result in a TypeError';
-const expected = new DOMException('Failed to execute \'requestDevice\' on ' +
- '\'Bluetooth\': \'filters\' member must be non-empty to find any devices.',
+const expected = new DOMException(
+ 'Failed to execute \'requestDevice\' on ' +
+ '\'Bluetooth\': \'filters\' member must be non-empty to find any devices.',
new TypeError());
-bluetooth_test(() => assert_promise_rejects_with_message(
- requestDeviceWithTrustedClick({filters: []}),
- expected),
+bluetooth_test(
+ () => assert_promise_rejects_with_message(
+ requestDeviceWithTrustedClick({filters: []}), expected),
test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/empty-namePrefix.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/empty-namePrefix.https.html
index aa6c83089e6..549f0d4059c 100644
--- a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/empty-namePrefix.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/empty-namePrefix.https.html
@@ -9,36 +9,29 @@
const test_desc = 'requestDevice with empty namePrefix. ' +
'Should reject with TypeError.';
const expected = new TypeError();
-const test_specs = [{
- filters: [{ namePrefix: ''}]
-}, {
- filters: [{ namePrefix: '', name: 'Name'}]
-}, {
- filters: [{ namePrefix: '', services: ['heart_rate']}]
-}, {
- filters: [{ namePrefix: '', name: 'Name', services: ['heart_rate']}]
-}, {
- filters: [{ namePrefix: ''}],
- optionalServices: ['heart_rate']
-}, {
- filters: [{ namePrefix: '', name: 'Name'}],
- optionalServices: ['heart_rate']
-}, {
- filters: [{ namePrefix: '', services: ['heart_rate']}],
- optionalServices: ['heart_rate']
-}, {
- filters: [{ namePrefix: '', name: 'Name', services: ['heart_rate']}],
- optionalServices: ['heart_rate']
-}];
+const test_specs = [
+ {filters: [{namePrefix: ''}]}, {filters: [{namePrefix: '', name: 'Name'}]},
+ {filters: [{namePrefix: '', services: ['heart_rate']}]},
+ {filters: [{namePrefix: '', name: 'Name', services: ['heart_rate']}]},
+ {filters: [{namePrefix: ''}], optionalServices: ['heart_rate']},
+ {filters: [{namePrefix: '', name: 'Name'}], optionalServices: ['heart_rate']},
+ {
+ filters: [{namePrefix: '', services: ['heart_rate']}],
+ optionalServices: ['heart_rate']
+ },
+ {
+ filters: [{namePrefix: '', name: 'Name', services: ['heart_rate']}],
+ optionalServices: ['heart_rate']
+ }
+];
bluetooth_test(() => {
- let test_promises = Promise.resolve();
- test_specs.forEach(args => {
- test_promises = test_promises
- .then(() => assert_promise_rejects_with_message(
- requestDeviceWithTrustedClick(args),
- expected));
- });
- return test_promises;
- }, test_desc);
+ let test_promises = Promise.resolve();
+ test_specs.forEach(args => {
+ test_promises = test_promises.then(
+ () => assert_promise_rejects_with_message(
+ requestDeviceWithTrustedClick(args), expected));
+ });
+ return test_promises;
+}, test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/empty-services-member.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/empty-services-member.https.html
index 6cb923a5ac0..b70a8a32087 100644
--- a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/empty-services-member.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/empty-services-member.https.html
@@ -10,14 +10,12 @@ const test_desc = 'Services member must contain at least one service.';
const expected = new TypeError();
bluetooth_test(() => {
- let test_promises = Promise.resolve();
- generateRequestDeviceArgsWithServices([]).forEach(args => {
- test_promises = test_promises.then(() =>
- assert_promise_rejects_with_message(
- requestDeviceWithTrustedClick(args),
- expected,
- 'Services member must contain at least one service'))
- });
- return test_promises;
- }, test_desc);
+ let test_promises = Promise.resolve();
+ generateRequestDeviceArgsWithServices([]).forEach(
+ args => {test_promises = test_promises.then(
+ () => assert_promise_rejects_with_message(
+ requestDeviceWithTrustedClick(args), expected,
+ 'Services member must contain at least one service'))});
+ return test_promises;
+}, test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/filters-xor-acceptAllDevices.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/filters-xor-acceptAllDevices.https.html
index ab207329447..d3f6e5ccb13 100644
--- a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/filters-xor-acceptAllDevices.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/filters-xor-acceptAllDevices.https.html
@@ -6,28 +6,24 @@
<script src="/bluetooth/resources/bluetooth-helpers.js"></script>
<script>
'use strict';
-const test_desc = "RequestDeviceOptions should have exactly one of " +
- "'filters' or 'acceptAllDevices:true'. Reject with TypeError if not.";
+const test_desc = 'RequestDeviceOptions should have exactly one of ' +
+ '\'filters\' or \'acceptAllDevices:true\'. Reject with TypeError if not.';
const expected = new DOMException(
- "Failed to execute 'requestDevice' on 'Bluetooth': " +
- "Either 'filters' should be present or " +
- "'acceptAllDevices' should be true, but not both.",
+ 'Failed to execute \'requestDevice\' on \'Bluetooth\': ' +
+ 'Either \'filters\' should be present or ' +
+ '\'acceptAllDevices\' should be true, but not both.',
new TypeError());
const test_specs = [
- {},
- {optionalServices: ['heart_rate']},
- {filters: [], acceptAllDevices: true},
+ {}, {optionalServices: ['heart_rate']}, {filters: [], acceptAllDevices: true},
{filters: [], acceptAllDevices: true, optionalServices: ['heart_rate']}
];
bluetooth_test(() => {
- let test_promises = Promise.resolve();
- test_specs.forEach(args => {
- test_promises = test_promises
- .then(() => assert_promise_rejects_with_message(
- requestDeviceWithTrustedClick(args),
- expected))
- });
- return test_promises;
- }, test_desc);
+ let test_promises = Promise.resolve();
+ test_specs.forEach(
+ args => {test_promises = test_promises.then(
+ () => assert_promise_rejects_with_message(
+ requestDeviceWithTrustedClick(args), expected))});
+ return test_promises;
+}, test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-name-unicode.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-name-unicode.https.html
index 2f2df741277..5e1397dbd9a 100644
--- a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-name-unicode.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-name-unicode.https.html
@@ -9,15 +9,16 @@
const test_desc = 'Unicode string with utf8 representation longer than 248 ' +
'bytes in \'name\' must throw TypeError.';
const expected = new DOMException(
- "Failed to execute 'requestDevice' on 'Bluetooth': " +
- "A device name can't be longer than 248 bytes.",
+ 'Failed to execute \'requestDevice\' on \'Bluetooth\': ' +
+ 'A device name can\'t be longer than 248 bytes.',
new TypeError());
// \u2764's UTF-8 respresentation is 3 bytes long.
// 83 chars * 3 bytes/char = 249 bytes
const unicode_name = '\u2764'.repeat(83);
-bluetooth_test(() => assert_promise_rejects_with_message(
- requestDeviceWithTrustedClick({filters: [{name: unicode_name}]}),
- expected),
+bluetooth_test(
+ () => assert_promise_rejects_with_message(
+ requestDeviceWithTrustedClick({filters: [{name: unicode_name}]}),
+ expected),
test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-name.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-name.https.html
index dcb6c40d8fe..a270cac4331 100644
--- a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-name.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-name.https.html
@@ -8,14 +8,14 @@
'use strict';
const test_desc = 'A device name longer than 248 must reject.';
const expected = new DOMException(
- "Failed to execute 'requestDevice' on 'Bluetooth': A device " +
- "name can't be longer than 248 bytes.",
+ 'Failed to execute \'requestDevice\' on \'Bluetooth\': A device ' +
+ 'name can\'t be longer than 248 bytes.',
new TypeError());
const name_too_long = 'a'.repeat(249);
-bluetooth_test(() => assert_promise_rejects_with_message(
- requestDeviceWithTrustedClick({filters: [{name: name_too_long}]}),
- expected,
- 'Device name longer than 248'),
+bluetooth_test(
+ () => assert_promise_rejects_with_message(
+ requestDeviceWithTrustedClick({filters: [{name: name_too_long}]}),
+ expected, 'Device name longer than 248'),
test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-namePrefix-unicode.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-namePrefix-unicode.https.html
index fe1f91927d2..05a9bd31300 100644
--- a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-namePrefix-unicode.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-namePrefix-unicode.https.html
@@ -9,15 +9,16 @@
const test_desc = 'Unicode string with utf8 representation longer than 248 ' +
'bytes in \'namePrefix\' must throw NotFoundError.';
const expected = new DOMException(
- "Failed to execute 'requestDevice' on 'Bluetooth': " +
- "A device name can't be longer than 248 bytes.",
+ 'Failed to execute \'requestDevice\' on \'Bluetooth\': ' +
+ 'A device name can\'t be longer than 248 bytes.',
new TypeError());
// \u2764's UTF-8 respresentation is 3 bytes long.
// 83 chars * 3 bytes/char = 249 bytes
const unicode_name = '\u2764'.repeat(83);
-bluetooth_test(() => assert_promise_rejects_with_message(
- requestDeviceWithTrustedClick({filters: [{namePrefix: unicode_name}]}),
- expected),
+bluetooth_test(
+ () => assert_promise_rejects_with_message(
+ requestDeviceWithTrustedClick({filters: [{namePrefix: unicode_name}]}),
+ expected),
test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-namePrefix.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-namePrefix.https.html
index ab3a6bae3fb..a31e4b398e7 100644
--- a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-namePrefix.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-exceeded-namePrefix.https.html
@@ -8,14 +8,14 @@
'use strict';
const test_desc = 'A device name prefix longer than 248 must reject.';
const expected = new DOMException(
- "Failed to execute 'requestDevice' on 'Bluetooth': A device " +
- "name can't be longer than 248 bytes.",
+ 'Failed to execute \'requestDevice\' on \'Bluetooth\': A device ' +
+ 'name can\'t be longer than 248 bytes.',
new TypeError());
const name_too_long = 'a'.repeat(249);
-bluetooth_test(() => assert_promise_rejects_with_message(
- requestDeviceWithTrustedClick({filters: [{namePrefix: name_too_long}]}),
- expected,
- 'Device name longer than 248'),
+bluetooth_test(
+ () => assert_promise_rejects_with_message(
+ requestDeviceWithTrustedClick({filters: [{namePrefix: name_too_long}]}),
+ expected, 'Device name longer than 248'),
test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-name-unicode.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-name-unicode.https.html
index 40df9d0de7f..dca018b4954 100644
--- a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-name-unicode.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-name-unicode.https.html
@@ -11,8 +11,11 @@ const test_desc = 'A unicode device name of 248 bytes is valid.';
// 124 chars * 2 bytes/char = 248 bytes
const DEVICE_NAME = '\u00A1'.repeat(124);
-bluetooth_test(() => setUpPreconnectedDevice({name: DEVICE_NAME})
- .then(() => requestDeviceWithTrustedClick({ filters: [{name: DEVICE_NAME}]}))
- .then(device => assert_equals(device.name, DEVICE_NAME)),
+bluetooth_test(
+ () => setUpPreconnectedDevice({name: DEVICE_NAME})
+ .then(
+ () => requestDeviceWithTrustedClick(
+ {filters: [{name: DEVICE_NAME}]}))
+ .then(device => assert_equals(device.name, DEVICE_NAME)),
test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-name.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-name.https.html
index d1759d6efe0..7244910afa4 100644
--- a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-name.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-name.https.html
@@ -9,8 +9,11 @@
const test_desc = 'A device name of 248 bytes is valid.';
const DEVICE_NAME = 'a'.repeat(248);
-bluetooth_test(() => setUpPreconnectedDevice({name: DEVICE_NAME})
- .then(() => requestDeviceWithTrustedClick({ filters: [{name: DEVICE_NAME}]}))
- .then(device => assert_equals(device.name, DEVICE_NAME)),
+bluetooth_test(
+ () => setUpPreconnectedDevice({name: DEVICE_NAME})
+ .then(
+ () => requestDeviceWithTrustedClick(
+ {filters: [{name: DEVICE_NAME}]}))
+ .then(device => assert_equals(device.name, DEVICE_NAME)),
test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-namePrefix-unicode.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-namePrefix-unicode.https.html
index 8e86844473e..ba4bdf94c63 100644
--- a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-namePrefix-unicode.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-namePrefix-unicode.https.html
@@ -11,10 +11,11 @@ const test_desc = 'A unicode device namePrefix of 248 bytes is valid.';
// 124 chars * 2 bytes/char = 248 bytes
const DEVICE_NAME = '\u00A1'.repeat(124);
-bluetooth_test(() => setUpPreconnectedDevice({name: DEVICE_NAME})
- .then(() => requestDeviceWithTrustedClick({
- filters: [{namePrefix: DEVICE_NAME}]
- }))
- .then(device => assert_equals(device.name, DEVICE_NAME)),
+bluetooth_test(
+ () => setUpPreconnectedDevice({name: DEVICE_NAME})
+ .then(
+ () => requestDeviceWithTrustedClick(
+ {filters: [{namePrefix: DEVICE_NAME}]}))
+ .then(device => assert_equals(device.name, DEVICE_NAME)),
test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-namePrefix.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-namePrefix.https.html
index 01ed22e6366..ced34793355 100644
--- a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-namePrefix.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/max-length-namePrefix.https.html
@@ -9,10 +9,11 @@
const test_desc = 'A device namePrefix of 248 bytes is valid.';
const DEVICE_NAME = 'a'.repeat(248);
-bluetooth_test(() => setUpPreconnectedDevice({name: DEVICE_NAME})
- .then(() => requestDeviceWithTrustedClick({
- filters: [{namePrefix: DEVICE_NAME}]
- }))
- .then(device => assert_equals(device.name, DEVICE_NAME)),
+bluetooth_test(
+ () => setUpPreconnectedDevice({name: DEVICE_NAME})
+ .then(
+ () => requestDeviceWithTrustedClick(
+ {filters: [{namePrefix: DEVICE_NAME}]}))
+ .then(device => assert_equals(device.name, DEVICE_NAME)),
test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/no-arguments.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/no-arguments.https.html
index e6337a543bc..33f933ad09c 100644
--- a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/no-arguments.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/no-arguments.https.html
@@ -10,8 +10,8 @@
const test_desc = 'requestDevice() requires an argument.';
const expected = new TypeError();
-promise_test(() => assert_promise_rejects_with_message(
- requestDeviceWithTrustedClick(),
- expected),
+promise_test(
+ () => assert_promise_rejects_with_message(
+ requestDeviceWithTrustedClick(), expected),
test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-name.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-name.https.html
index 08038b9de00..787f34d5c68 100644
--- a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-name.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-name.https.html
@@ -12,10 +12,11 @@ const test_desc = 'A name containing unicode characters whose utf8 length ' +
// 9 chars * 3 bytes/char = 27 bytes
const valid_unicode_name = '\u2764'.repeat(9);
-bluetooth_test(() => setUpPreconnectedDevice({name: valid_unicode_name})
- .then(() => requestDeviceWithTrustedClick({
- filters: [{name: valid_unicode_name}]
- }))
- .then(device => assert_equals(device.name, valid_unicode_name)),
+bluetooth_test(
+ () => setUpPreconnectedDevice({name: valid_unicode_name})
+ .then(
+ () => requestDeviceWithTrustedClick(
+ {filters: [{name: valid_unicode_name}]}))
+ .then(device => assert_equals(device.name, valid_unicode_name)),
test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-namePrefix.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-namePrefix.https.html
index fc44482379d..bafb36d710c 100644
--- a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-namePrefix.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/unicode-valid-length-name-namePrefix.https.html
@@ -6,16 +6,17 @@
<script src="/bluetooth/resources/bluetooth-helpers.js"></script>
<script>
'use strict';
-const test_desc = 'A namePrefix containing unicode characters whose utf8 ' +
+const test_desc = 'A namePrefix containing unicode characters whose utf8 ' +
'length is less than 30 must not throw an error.';
// \u2764's UTF-8 representation is 3 bytes long.
// 9 chars * 3 bytes/char = 27 bytes
const valid_unicode_name = '\u2764'.repeat(9);
-bluetooth_test(() => setUpPreconnectedDevice({name: valid_unicode_name})
- .then(() => requestDeviceWithTrustedClick({
- filters: [{namePrefix: valid_unicode_name}]
- }))
- .then(device => assert_equals(device.name, valid_unicode_name)),
+bluetooth_test(
+ () => setUpPreconnectedDevice({name: valid_unicode_name})
+ .then(
+ () => requestDeviceWithTrustedClick(
+ {filters: [{namePrefix: valid_unicode_name}]}))
+ .then(device => assert_equals(device.name, valid_unicode_name)),
test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/wrong-service-in-optionalServices-member.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/wrong-service-in-optionalServices-member.https.html
index 15cf902177d..e4880b6f57d 100644
--- a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/wrong-service-in-optionalServices-member.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/wrong-service-in-optionalServices-member.https.html
@@ -8,37 +8,34 @@
'use strict';
const test_desc = 'Invalid optional service must reject the promise.';
const expected = new TypeError();
-const test_specs = [{
- optionalServices: ['wrong_service'],
- filters: [{services: ['heart_rate']}]
-}, {
- optionalServices: ['wrong_service'],
- filters: [{ services: ['heart_rate'], name: 'Name'}]
-}, {
- optionalServices: ['wrong_service'],
- filters: [{ services: ['heart_rate'], namePrefix: 'Pre'}]
-}, {
- optionalServices: ['wrong_service'],
- filters: [{ services: ['heart_rate'], name: 'Name', namePrefix: 'Pre'}]
-}, {
- optionalServices: ['wrong_service'],
- filters: [{ name: 'Name'}]
-}, {
- optionalServices: ['wrong_service'],
- filters: [{ name: 'Name', namePrefix: 'Pre'}]
-}, {
- optionalServices: ['wrong_service'],
- filters: [{ namePrefix: 'Pre'}]
-}];
+const test_specs = [
+ {optionalServices: ['wrong_service'], filters: [{services: ['heart_rate']}]},
+ {
+ optionalServices: ['wrong_service'],
+ filters: [{services: ['heart_rate'], name: 'Name'}]
+ },
+ {
+ optionalServices: ['wrong_service'],
+ filters: [{services: ['heart_rate'], namePrefix: 'Pre'}]
+ },
+ {
+ optionalServices: ['wrong_service'],
+ filters: [{services: ['heart_rate'], name: 'Name', namePrefix: 'Pre'}]
+ },
+ {optionalServices: ['wrong_service'], filters: [{name: 'Name'}]}, {
+ optionalServices: ['wrong_service'],
+ filters: [{name: 'Name', namePrefix: 'Pre'}]
+ },
+ {optionalServices: ['wrong_service'], filters: [{namePrefix: 'Pre'}]}
+];
bluetooth_test(() => {
- let test_promises = Promise.resolve();
- test_specs.forEach(args => {
- test_promises =
- test_promises.then(() => assert_promise_rejects_with_message(
- requestDeviceWithTrustedClick(args),
- expected));
- });
- return test_promises;
- }, test_desc);
+ let test_promises = Promise.resolve();
+ test_specs.forEach(args => {
+ test_promises = test_promises.then(
+ () => assert_promise_rejects_with_message(
+ requestDeviceWithTrustedClick(args), expected));
+ });
+ return test_promises;
+}, test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/wrong-service-in-services-member.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/wrong-service-in-services-member.https.html
index 5d9b245f953..9d31b951be7 100644
--- a/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/wrong-service-in-services-member.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/canonicalizeFilter/wrong-service-in-services-member.https.html
@@ -10,13 +10,12 @@ const test_desc = 'Invalid service must reject the promise.';
const expected = new TypeError();
bluetooth_test(() => {
- let test_promises = Promise.resolve();
- generateRequestDeviceArgsWithServices(['wrong_service']).forEach(args => {
- test_promises = test_promises.then(() =>
- assert_promise_rejects_with_message(
- requestDeviceWithTrustedClick(args),
- expected));
- });
- return test_promises;
- }, test_desc);
+ let test_promises = Promise.resolve();
+ generateRequestDeviceArgsWithServices(['wrong_service']).forEach(args => {
+ test_promises = test_promises.then(
+ () => assert_promise_rejects_with_message(
+ requestDeviceWithTrustedClick(args), expected));
+ });
+ return test_promises;
+}, test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/cross-origin-iframe.sub.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/cross-origin-iframe.sub.https.html
index e97991d6f55..d5cf382f664 100644
--- a/tests/wpt/web-platform-tests/bluetooth/requestDevice/cross-origin-iframe.sub.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/cross-origin-iframe.sub.https.html
@@ -13,26 +13,29 @@ const cross_origin_src = 'https://{{domains[www]}}:{{ports[https][0]}}' +
'/bluetooth/resources/health-thermometer-iframe.html'
let iframe = document.createElement('iframe');
-bluetooth_test(() => setUpHealthThermometerDevice()
- // 1. Load the iframe.
- .then(() => new Promise(resolve => {
- iframe.src = cross_origin_src;
- document.body.appendChild(iframe);
- iframe.addEventListener('load', resolve);
- }))
- // 2. Request the device from the iframe.
- .then(() => new Promise(resolve => {
- callWithTrustedClick(() => {
- iframe.contentWindow.postMessage({
- type: 'RequestDevice'
- }, '*');
- });
+bluetooth_test(
+ () => setUpHealthThermometerDevice()
+ // 1. Load the iframe.
+ .then(() => new Promise(resolve => {
+ iframe.src = cross_origin_src;
+ document.body.appendChild(iframe);
+ iframe.addEventListener('load', resolve);
+ }))
+ // 2. Request the device from the iframe.
+ .then(() => new Promise(resolve => {
+ callWithTrustedClick(() => {
+ iframe.contentWindow.postMessage(
+ {type: 'RequestDevice'}, '*');
+ });
- window.onmessage = messageEvent => {
- assert_equals(messageEvent.data, 'SecurityError: requestDevice() ' +
- 'called from cross-origin iframe.');
- resolve();
- }
- })), test_desc);
+ window.onmessage = messageEvent => {
+ assert_equals(
+ messageEvent.data,
+ 'SecurityError: requestDevice() ' +
+ 'called from cross-origin iframe.');
+ resolve();
+ }
+ })),
+ test_desc);
</script>
</body>
diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/discovery-succeeds.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/discovery-succeeds.https.html
index 21219444f8d..5bd7ff1246b 100644
--- a/tests/wpt/web-platform-tests/bluetooth/requestDevice/discovery-succeeds.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/discovery-succeeds.https.html
@@ -8,21 +8,28 @@
'use strict';
const test_desc = 'Discover a device using alias, name, or UUID.';
-bluetooth_test(() => getConnectedHealthThermometerDevice()
- // Chrome will always close the previous chooser in the process of handling
- // a user gesture for the next request, so these need to be done
- // sequentially.
- .then(() => requestDeviceWithTrustedClick({
- filters: [{services: [health_thermometer.alias]}]
- }))
- .then(device => assert_equals(device.constructor.name, 'BluetoothDevice'))
- .then(() => requestDeviceWithTrustedClick({
- filters: [{services: [health_thermometer.name]}]
- }))
- .then(device => assert_equals(device.constructor.name, 'BluetoothDevice'))
- .then(() => requestDeviceWithTrustedClick({
- filters: [{services: [health_thermometer.uuid]}]
- }))
- .then(device => assert_equals(device.constructor.name, 'BluetoothDevice')),
+bluetooth_test(
+ () => getConnectedHealthThermometerDevice()
+ // Chrome will always close the previous chooser in the process of
+ // handling a user gesture for the next request, so these need to
+ // be done sequentially.
+ .then(
+ () => requestDeviceWithTrustedClick(
+ {filters: [{services: [health_thermometer.alias]}]}))
+ .then(
+ device =>
+ assert_equals(device.constructor.name, 'BluetoothDevice'))
+ .then(
+ () => requestDeviceWithTrustedClick(
+ {filters: [{services: [health_thermometer.name]}]}))
+ .then(
+ device =>
+ assert_equals(device.constructor.name, 'BluetoothDevice'))
+ .then(
+ () => requestDeviceWithTrustedClick(
+ {filters: [{services: [health_thermometer.uuid]}]}))
+ .then(
+ device => assert_equals(
+ device.constructor.name, 'BluetoothDevice')),
test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/doesnt-consume-user-gesture.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/doesnt-consume-user-gesture.https.html
index 3394a591cd4..19ac36f80ad 100644
--- a/tests/wpt/web-platform-tests/bluetooth/requestDevice/doesnt-consume-user-gesture.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/doesnt-consume-user-gesture.https.html
@@ -8,17 +8,21 @@
'use strict';
const test_desc = 'requestDevice calls do not consume user gestures.';
-bluetooth_test(() => setUpHealthThermometerAndHeartRateDevices()
- .then(() => callWithTrustedClick(() => {
- let first = navigator.bluetooth.requestDevice({
- filters: [{services: ['heart_rate']}]});
- let second = navigator.bluetooth.requestDevice({
- filters: [{services: ['heart_rate']}]});
- return Promise.all([
- first.then(device => assert_equals(
- device.constructor.name, 'BluetoothDevice')),
- second.then(device => assert_equals(
- device.constructor.name, 'BluetoothDevice')),
- ]);
- })), test_desc);
+bluetooth_test(
+ () => setUpHealthThermometerAndHeartRateDevices().then(
+ () => callWithTrustedClick(() => {
+ let first = navigator.bluetooth.requestDevice(
+ {filters: [{services: ['heart_rate']}]});
+ let second = navigator.bluetooth.requestDevice(
+ {filters: [{services: ['heart_rate']}]});
+ return Promise.all([
+ first.then(
+ device =>
+ assert_equals(device.constructor.name, 'BluetoothDevice')),
+ second.then(
+ device =>
+ assert_equals(device.constructor.name, 'BluetoothDevice')),
+ ]);
+ })),
+ test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/filter-matches.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/filter-matches.https.html
index 3f62d39c7ac..1aeae776f06 100644
--- a/tests/wpt/web-platform-tests/bluetooth/requestDevice/filter-matches.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/filter-matches.https.html
@@ -11,57 +11,55 @@ let matching_services = [health_thermometer.uuid];
let matching_name = 'Health Thermometer';
let matching_namePrefix = 'Health';
-let test_specs = [{
- filters: [{
- services: matching_services,
- }]
-}, {
- filters: [{
- services: matching_services,
- name: matching_name,
- }]
-}, {
- filters: [{
- services: matching_services,
- namePrefix: matching_namePrefix
- }]
-}, {
- filters: [{
- name: matching_name,
- }],
- optionalServices: matching_services
-}, {
- filters: [{
- name: matching_name,
- namePrefix: matching_namePrefix
- }],
- optionalServices: matching_services
-}, {
- filters: [{
- namePrefix: matching_namePrefix
- }],
- optionalServices: matching_services
-}, {
- filters: [{
- services: matching_services,
- name: matching_name,
- namePrefix: matching_namePrefix
- }]
-}];
+let test_specs = [
+ {
+ filters: [{
+ services: matching_services,
+ }]
+ },
+ {
+ filters: [{
+ services: matching_services,
+ name: matching_name,
+ }]
+ },
+ {filters: [{services: matching_services, namePrefix: matching_namePrefix}]}, {
+ filters: [{
+ name: matching_name,
+ }],
+ optionalServices: matching_services
+ },
+ {
+ filters: [{name: matching_name, namePrefix: matching_namePrefix}],
+ optionalServices: matching_services
+ },
+ {
+ filters: [{namePrefix: matching_namePrefix}],
+ optionalServices: matching_services
+ },
+ {
+ filters: [{
+ services: matching_services,
+ name: matching_name,
+ namePrefix: matching_namePrefix
+ }]
+ }
+];
-bluetooth_test(() => setUpHealthThermometerDevice()
- .then(() => {
+bluetooth_test(
+ () => setUpHealthThermometerDevice().then(() => {
let test_promises = Promise.resolve();
test_specs.forEach(args => {
- test_promises = test_promises
- .then(() => requestDeviceWithTrustedClick(args))
- .then(device => {
- // We always have access to the services in matching_services
- // because we include them in a filter or in optionalServices.
- assert_equals(device.name, matching_name);
- assert_true(device.name.startsWith(matching_namePrefix));
- });
+ test_promises =
+ test_promises.then(() => requestDeviceWithTrustedClick(args))
+ .then(device => {
+ // We always have access to the services in matching_services
+ // because we include them in a filter or in optionalServices.
+ assert_equals(device.name, matching_name);
+ assert_true(device.name.startsWith(matching_namePrefix));
+ });
});
return test_promises;
- }), test_desc);
+ }),
+ test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/le-not-supported.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/le-not-supported.https.html
index 4a3752501a3..3da9abeb773 100644
--- a/tests/wpt/web-platform-tests/bluetooth/requestDevice/le-not-supported.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/le-not-supported.https.html
@@ -7,12 +7,13 @@
<script>
'use strict';
const test_desc = 'Reject with NotFoundError if Bluetooth is not supported.';
-const expected = new DOMException('Bluetooth Low Energy not available.',
- 'NotFoundError');
+const expected =
+ new DOMException('Bluetooth Low Energy not available.', 'NotFoundError');
-bluetooth_test(() => navigator.bluetooth.test.setLESupported(false)
- .then(() => assert_promise_rejects_with_message(
- requestDeviceWithTrustedClick({acceptAllDevices: true}),
- expected, 'Bluetooth Low Energy is not supported.')),
+bluetooth_test(
+ () => navigator.bluetooth.test.setLESupported(false).then(
+ () => assert_promise_rejects_with_message(
+ requestDeviceWithTrustedClick({acceptAllDevices: true}), expected,
+ 'Bluetooth Low Energy is not supported.')),
test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/name-empty-device-from-name-empty-filter.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/name-empty-device-from-name-empty-filter.https.html
index ee9b9125de2..944befdfe83 100644
--- a/tests/wpt/web-platform-tests/bluetooth/requestDevice/name-empty-device-from-name-empty-filter.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/name-empty-device-from-name-empty-filter.https.html
@@ -8,8 +8,10 @@
'use strict';
const test_desc = 'An empty name device can be obtained by empty name filter.'
-bluetooth_test(() => setUpPreconnectedDevice({name: ''})
- .then(() => requestDeviceWithTrustedClick({filters: [{name: ''}]}))
- .then(device => assert_equals(device.name, '')),
+bluetooth_test(
+ () =>
+ setUpPreconnectedDevice({name: ''})
+ .then(() => requestDeviceWithTrustedClick({filters: [{name: ''}]}))
+ .then(device => assert_equals(device.name, '')),
test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/not-processing-user-gesture.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/not-processing-user-gesture.https.html
index 1781b7bd1b8..98dc0ce80e7 100644
--- a/tests/wpt/web-platform-tests/bluetooth/requestDevice/not-processing-user-gesture.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/not-processing-user-gesture.https.html
@@ -11,9 +11,11 @@ const expected = new DOMException(
'Must be handling a user gesture to show a permission request.',
'SecurityError');
-bluetooth_test(() => setUpHealthThermometerAndHeartRateDevices()
- .then(() => assert_promise_rejects_with_message(
- navigator.bluetooth.requestDevice({filters:[{services:['heart_rate']}]}),
- expected, 'User gesture is required')),
+bluetooth_test(
+ () => setUpHealthThermometerAndHeartRateDevices().then(
+ () => assert_promise_rejects_with_message(
+ navigator.bluetooth.requestDevice(
+ {filters: [{services: ['heart_rate']}]}),
+ expected, 'User gesture is required')),
test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/radio-not-present.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/radio-not-present.https.html
index a66bcf99c6e..929af8ffb77 100644
--- a/tests/wpt/web-platform-tests/bluetooth/requestDevice/radio-not-present.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/radio-not-present.https.html
@@ -7,14 +7,15 @@
<script>
'use strict';
const test_desc = 'Reject with NotFoundError if there is no BT radio present.';
-const expected = new DOMException('Bluetooth adapter not available.',
- 'NotFoundError');
+const expected =
+ new DOMException('Bluetooth adapter not available.', 'NotFoundError');
-bluetooth_test(() => navigator.bluetooth.test.simulateCentral({state: 'absent'})
- .then(() => assert_promise_rejects_with_message(
- requestDeviceWithTrustedClick({
- filters: [{services: ['generic_access']}]
- }),
- expected, 'Bluetooth adapter is not present.')),
+bluetooth_test(
+ () => navigator.bluetooth.test.simulateCentral({state: 'absent'})
+ .then(
+ () => assert_promise_rejects_with_message(
+ requestDeviceWithTrustedClick(
+ {filters: [{services: ['generic_access']}]}),
+ expected, 'Bluetooth adapter is not present.')),
test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/request-from-iframe.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/request-from-iframe.https.html
index 01590ea0fd9..64ad3d592d1 100644
--- a/tests/wpt/web-platform-tests/bluetooth/requestDevice/request-from-iframe.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/request-from-iframe.https.html
@@ -12,32 +12,36 @@ for (let i = 0; i < 5; i++) {
iframes.push(document.createElement('iframe'));
}
-bluetooth_test(() => setUpHealthThermometerAndHeartRateDevices()
- // 1. Load the iframes.
- .then(() => {
- let promises = [];
- for (let iframe of iframes) {
- iframe.src = '/bluetooth/resources/health-thermometer-iframe.html';
- document.body.appendChild(iframe);
- promises.push(new Promise(resolve =>
- iframe.addEventListener('load', resolve)));
- }
- return Promise.all(promises);
- })
- // 2. Request the device from the iframes.
- .then(() => new Promise(async (resolve) => {
- let numMessages = 0;
- window.onmessage = messageEvent => {
- assert_equals(messageEvent.data, 'Success');
- if (++numMessages === iframes.length) {
- resolve();
- }
- }
+bluetooth_test(
+ () => setUpHealthThermometerAndHeartRateDevices()
+ // 1. Load the iframes.
+ .then(() => {
+ let promises = [];
+ for (let iframe of iframes) {
+ iframe.src =
+ '/bluetooth/resources/health-thermometer-iframe.html';
+ document.body.appendChild(iframe);
+ promises.push(new Promise(
+ resolve => iframe.addEventListener('load', resolve)));
+ }
+ return Promise.all(promises);
+ })
+ // 2. Request the device from the iframes.
+ .then(() => new Promise(async (resolve) => {
+ let numMessages = 0;
+ window.onmessage =
+ messageEvent => {
+ assert_equals(messageEvent.data, 'Success');
+ if (++numMessages === iframes.length) {
+ resolve();
+ }
+ }
- for (let iframe of iframes) {
- await callWithTrustedClick(() => iframe.contentWindow.postMessage({
- type: 'RequestDevice'
- }, '*'));
- }
- })), test_desc);
+ for (let iframe of iframes) {
+ await callWithTrustedClick(
+ () => iframe.contentWindow.postMessage(
+ {type: 'RequestDevice'}, '*'));
+ }
+ })),
+ test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/request-from-sandboxed-iframe.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/request-from-sandboxed-iframe.https.html
index 80798308b10..4c4a5707e8e 100644
--- a/tests/wpt/web-platform-tests/bluetooth/requestDevice/request-from-sandboxed-iframe.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/request-from-sandboxed-iframe.https.html
@@ -14,26 +14,28 @@ const expected = 'SecurityError: requestDevice() called from cross-origin ' +
let iframe = document.createElement('iframe');
-bluetooth_test(() => getConnectedHealthThermometerDevice()
- // 1. Load the iframe.
- .then(() => new Promise(resolve => {
- iframe.sandbox.add('allow-scripts');
- iframe.src = '/bluetooth/resources/health-thermometer-iframe.html';
- document.body.appendChild(iframe);
- iframe.addEventListener('load', resolve);
- }))
- // 2. Request the device from the iframe.
- .then(() => new Promise(resolve => {
- callWithTrustedClick(() => {
- iframe.contentWindow.postMessage({
- type: 'RequestDevice'
- }, '*');
- });
+bluetooth_test(
+ () => getConnectedHealthThermometerDevice()
+ // 1. Load the iframe.
+ .then(() => new Promise(resolve => {
+ iframe.sandbox.add('allow-scripts');
+ iframe.src =
+ '/bluetooth/resources/health-thermometer-iframe.html';
+ document.body.appendChild(iframe);
+ iframe.addEventListener('load', resolve);
+ }))
+ // 2. Request the device from the iframe.
+ .then(() => new Promise(resolve => {
+ callWithTrustedClick(() => {
+ iframe.contentWindow.postMessage(
+ {type: 'RequestDevice'}, '*');
+ });
- window.onmessage = messageEvent => {
- assert_equals(messageEvent.data, expected);
- resolve();
- }
- })), test_desc);
+ window.onmessage = messageEvent => {
+ assert_equals(messageEvent.data, expected);
+ resolve();
+ }
+ })),
+ test_desc);
</script>
</body>
diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/same-device.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/same-device.https.html
index a83cf705a73..b96af439973 100644
--- a/tests/wpt/web-platform-tests/bluetooth/requestDevice/same-device.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/same-device.https.html
@@ -10,21 +10,23 @@ const test_desc = 'Returned device should always be the same.';
let devices = [];
let push = device => devices.push(device);
-bluetooth_test(() => setUpHealthThermometerAndHeartRateDevices()
- .then(() => requestDeviceWithTrustedClick({
- filters: [{services: [heart_rate.alias]}]
- }))
- .then(push)
- .then(() => requestDeviceWithTrustedClick({
- filters: [{services: [heart_rate.name]}]
- }))
- .then(push)
- .then(() => requestDeviceWithTrustedClick({
- filters: [{services: [heart_rate.uuid]}]
- }))
- .then(push)
- .then(() => {
- assert_equals(devices[0], devices[1]);
- assert_equals(devices[1], devices[2]);
- }), test_desc);
+bluetooth_test(
+ () => setUpHealthThermometerAndHeartRateDevices()
+ .then(
+ () => requestDeviceWithTrustedClick(
+ {filters: [{services: [heart_rate.alias]}]}))
+ .then(push)
+ .then(
+ () => requestDeviceWithTrustedClick(
+ {filters: [{services: [heart_rate.name]}]}))
+ .then(push)
+ .then(
+ () => requestDeviceWithTrustedClick(
+ {filters: [{services: [heart_rate.uuid]}]}))
+ .then(push)
+ .then(() => {
+ assert_equals(devices[0], devices[1]);
+ assert_equals(devices[1], devices[2]);
+ }),
+ test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/requestDevice/single-filter-single-service.https.html b/tests/wpt/web-platform-tests/bluetooth/requestDevice/single-filter-single-service.https.html
index 8735eb3f872..9c0d621c237 100644
--- a/tests/wpt/web-platform-tests/bluetooth/requestDevice/single-filter-single-service.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/requestDevice/single-filter-single-service.https.html
@@ -8,10 +8,11 @@
'use strict';
const test_desc = 'Simple filter selects matching device.';
-bluetooth_test(() => setUpHealthThermometerAndHeartRateDevices()
- .then(() => requestDeviceWithTrustedClick({
- filters: [{services: ['health_thermometer']}]
- }))
- .then(device => assert_equals(device.name, 'Health Thermometer')),
+bluetooth_test(
+ () => setUpHealthThermometerAndHeartRateDevices()
+ .then(
+ () => requestDeviceWithTrustedClick(
+ {filters: [{services: ['health_thermometer']}]}))
+ .then(device => assert_equals(device.name, 'Health Thermometer')),
test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/resources/health-thermometer-iframe.html b/tests/wpt/web-platform-tests/bluetooth/resources/health-thermometer-iframe.html
index 5e24f62a06e..1545a513960 100644
--- a/tests/wpt/web-platform-tests/bluetooth/resources/health-thermometer-iframe.html
+++ b/tests/wpt/web-platform-tests/bluetooth/resources/health-thermometer-iframe.html
@@ -3,24 +3,24 @@
let device, gatt;
function requestDeviceWithOptionsAndConnect(options) {
- return navigator.bluetooth.requestDevice(options)
- .then(device => device.gatt.connect());
+ return navigator.bluetooth.requestDevice(options).then(
+ device => device.gatt.connect());
}
window.addEventListener('message', (messageEvent) => {
switch (messageEvent.data.type) {
case 'RequestDevice':
- navigator.bluetooth.requestDevice({
- filters: [{services: ['generic_access']}]
- })
+ navigator.bluetooth
+ .requestDevice({filters: [{services: ['generic_access']}]})
.then(device => {
if (device.constructor.name === 'BluetoothDevice') {
parent.postMessage('Success', '*');
} else {
parent.postMessage(
`FAIL: requestDevice in iframe returned ${device.name}`, '*');
- }}).catch(err => parent.postMessage(`${err.name}: ${err.message}`,
- '*'));
+ }
+ })
+ .catch(err => parent.postMessage(`${err.name}: ${err.message}`, '*'));
break;
case 'RequestAndConnect':
requestDeviceWithOptionsAndConnect(messageEvent.data.options)
@@ -28,7 +28,8 @@ window.addEventListener('message', (messageEvent) => {
gatt = _;
device = gatt.device;
parent.postMessage('Connected', '*');
- }).catch(err => {
+ })
+ .catch(err => {
parent.postMessage(`FAIL: ${err}`, '*');
});
break;
@@ -50,8 +51,8 @@ window.addEventListener('message', (messageEvent) => {
.catch(err => parent.postMessage(`FAIL: ${err}`, '*'));
break;
default:
- parent.postMessage(`FAIL: Bad message type: ${messageEvent.data.type}`,
- '*');
+ parent.postMessage(
+ `FAIL: Bad message type: ${messageEvent.data.type}`, '*');
}
});
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/server/device-same-object.https.html b/tests/wpt/web-platform-tests/bluetooth/server/device-same-object.https.html
index cfd4bc5a202..63624961ec7 100644
--- a/tests/wpt/web-platform-tests/bluetooth/server/device-same-object.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/server/device-same-object.https.html
@@ -9,11 +9,13 @@
const test_desc = '[SameObject] test for BluetoothRemoteGATTServer\'s device.';
let device, fake_peripheral;
-bluetooth_test(() => getDiscoveredHealthThermometerDevice()
- .then(_ => ({device, fake_peripheral} = _))
- .then(() =>
- fake_peripheral.setNextGATTConnectionResponse({code: HCI_SUCCESS}))
- .then(() => device.gatt.connect())
- .then(gatt => assert_equals(gatt.device, gatt.device)),
+bluetooth_test(
+ () => getDiscoveredHealthThermometerDevice()
+ .then(_ => ({device, fake_peripheral} = _))
+ .then(
+ () => fake_peripheral.setNextGATTConnectionResponse(
+ {code: HCI_SUCCESS}))
+ .then(() => device.gatt.connect())
+ .then(gatt => assert_equals(gatt.device, gatt.device)),
test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/service/device-same-from-2-services.https.html b/tests/wpt/web-platform-tests/bluetooth/service/device-same-from-2-services.https.html
index 366549378e8..0d5ab649683 100644
--- a/tests/wpt/web-platform-tests/bluetooth/service/device-same-from-2-services.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/service/device-same-from-2-services.https.html
@@ -8,11 +8,14 @@
'use strict';
const test_desc = 'Same parent device returned from multiple services.';
-bluetooth_test(() => getTwoHealthThermometerServicesDevice({
- filters: [{services: ['health_thermometer']}]
-})
- .then(({device}) => device.gatt.getPrimaryServices('health_thermometer'))
- .then(([service1, service2]) =>
- assert_equals(service1.device, service2.device)),
+bluetooth_test(
+ () => getTwoHealthThermometerServicesDevice(
+ {filters: [{services: ['health_thermometer']}]})
+ .then(
+ ({device}) =>
+ device.gatt.getPrimaryServices('health_thermometer'))
+ .then(
+ ([service1, service2]) =>
+ assert_equals(service1.device, service2.device)),
test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/bluetooth/service/device-same-object.https.html b/tests/wpt/web-platform-tests/bluetooth/service/device-same-object.https.html
index f43e9f022d9..de57c2e3760 100644
--- a/tests/wpt/web-platform-tests/bluetooth/service/device-same-object.https.html
+++ b/tests/wpt/web-platform-tests/bluetooth/service/device-same-object.https.html
@@ -8,10 +8,12 @@
'use strict';
const test_desc = '[SameObject] test for BluetoothRemoteGATTService device.';
-bluetooth_test(() => getHealthThermometerDevice({
- filters: [{services: ['health_thermometer']}]
-})
- .then(({device}) => device.gatt.getPrimaryService('health_thermometer'))
- .then(service => assert_equals(service.device, service.device)),
+bluetooth_test(
+ () => getHealthThermometerDevice(
+ {filters: [{services: ['health_thermometer']}]})
+ .then(
+ ({device}) =>
+ device.gatt.getPrimaryService('health_thermometer'))
+ .then(service => assert_equals(service.device, service.device)),
test_desc);
</script>
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/background-image-large-with-auto.html b/tests/wpt/web-platform-tests/css/css-backgrounds/background-image-large-with-auto.html
new file mode 100644
index 00000000000..2658e4051eb
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-backgrounds/background-image-large-with-auto.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>CSS Background Test: Large images with one auto size are correctly sized</title>
+ <link rel="author" title="schenney" href="mailto:schenney@chromium.org">
+ <link rel="help" href="http://www.w3.org/TR/css3-background">
+ <link rel="match" href="reference/background-image-large-with-auto-ref.html">
+ <style>
+ .wide-div {
+ background-image: url(support/green-1000x10.png);
+ background-repeat: no-repeat;
+ background-size: 10000px auto;
+ width: 1000px;
+ height: 100px;
+ border: 1px solid black;
+ }
+
+ .high-div {
+ background-image: url(support/green-10x1000.png);
+ background-repeat: no-repeat;
+ background-size: auto 10000px;
+ width: 100px;
+ height: 1000px;
+ border: 1px solid black;
+ }
+ </style>
+</head>
+
+<body>
+ <div class='wide-div'></div>
+ <div class='high-div'></div>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/reference/background-image-large-with-auto-ref.html b/tests/wpt/web-platform-tests/css/css-backgrounds/reference/background-image-large-with-auto-ref.html
new file mode 100644
index 00000000000..7bad169e3aa
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-backgrounds/reference/background-image-large-with-auto-ref.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>CSS Background Test Reference</title>
+ <link rel="author" title="schenney" href="mailto:schenney@chromium.org">
+ <style>
+ .wide-div {
+ background-image: url(../support/green-1000x10.png);
+ background-repeat: no-repeat;
+ background-size: 10000px 100px;
+ width: 1000px;
+ height: 100px;
+ border: 1px solid black;
+ }
+
+ .high-div {
+ background-image: url(../support/green-10x1000.png);
+ background-repeat: no-repeat;
+ background-size: 100px 10000px;
+ width: 100px;
+ height: 1000px;
+ border: 1px solid black;
+ }
+ </style>
+</head>
+
+<body>
+ <div class='wide-div'></div>
+ <div class='high-div'></div>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/support/green-1000x10.png b/tests/wpt/web-platform-tests/css/css-backgrounds/support/green-1000x10.png
new file mode 100644
index 00000000000..8ce354cfb75
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-backgrounds/support/green-1000x10.png
Binary files differ
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/support/green-10x1000.png b/tests/wpt/web-platform-tests/css/css-backgrounds/support/green-10x1000.png
new file mode 100644
index 00000000000..c7fd6eee5c2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-backgrounds/support/green-10x1000.png
Binary files differ
diff --git a/tests/wpt/web-platform-tests/css/css-fonts/variations/at-font-face-descriptors.html b/tests/wpt/web-platform-tests/css/css-fonts/variations/at-font-face-descriptors.html
index 942686c4a1f..cd1c22b01ce 100644
--- a/tests/wpt/web-platform-tests/css/css-fonts/variations/at-font-face-descriptors.html
+++ b/tests/wpt/web-platform-tests/css/css-fonts/variations/at-font-face-descriptors.html
@@ -147,6 +147,8 @@
{ value: "oblique 20deg", isValid: true, expectedValue: "oblique", description: "'oblique' followed by default 20deg angle" },
{ value: "oblique 90deg", isValid: true, description: "'oblique' followed by maxumum 90 degree angle" },
{ value: "oblique -90deg", isValid: true, description: "'oblique' followed by minimum -90 degree angle" },
+ { value: "oblique calc(91deg)", isValid: true, expectedValue: "oblique 90deg", description: "'oblique' followed by calc with out of range value (should be clamped)" },
+ { value: "oblique calc(-91deg)", isValid: true, expectedValue: "oblique -90deg", description: "'oblique' followed by calc with out of range value (should be clamped)" },
{ value: "oblique 0rad", isValid: true, expectedValue: "oblique 0deg", description: "'oblique' followed by angle in radians" },
{ value: "oblique 20", isValid: false, description: "'oblique' followed by unit-less number" },
{ value: "oblique 20px", isValid: false, description: "'oblique' followed by non-angle" },
diff --git a/tests/wpt/web-platform-tests/css/css-fonts/variations/font-style-parsing.html b/tests/wpt/web-platform-tests/css/css-fonts/variations/font-style-parsing.html
index 0973d6340cb..cb5e42eab4f 100644
--- a/tests/wpt/web-platform-tests/css/css-fonts/variations/font-style-parsing.html
+++ b/tests/wpt/web-platform-tests/css/css-fonts/variations/font-style-parsing.html
@@ -7,43 +7,54 @@
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
-
+ <div id="test"></div>
<script>
-
var testFontStyle = [
- { style: "italic", expectedResult: true, message: "'italic' is valid" },
- { style: "italic 20deg", expectedResult: false, message: "'italic' followed by angle is invalid" },
- { style: "italic a", expectedResult: false, message: "'italic' followed by non-number is invalid" },
- { style: "oblique", expectedResult: true, message: "'oblique' is valid" },
- { style: "oblique 0deg", expectedResult: true, message: "'oblique' followed by zero degrees is valid" },
- { style: "oblique 20deg", expectedResult: true, message: "'oblique' followed by positive angle in degrees is valid" },
- { style: "oblique 0.5rad", expectedResult: true, message: "'oblique' followed by positive angle in radians is valid" },
- { style: "oblique 20grad", expectedResult: true, message: "'oblique' followed by positive angle in gradians is valid" },
- { style: "oblique 0.1turn", expectedResult: true, message: "'oblique' followed by positive angle in turns is valid" },
- { style: "oblique 20px", expectedResult: false, message: "'oblique' followed by number with invalid unit type is in valid" },
- { style: "oblique -20deg", expectedResult: true, message: "'oblique' followed by negative angle is valid" },
- { style: "oblique 20.1deg", expectedResult: true, message: "'oblique' followed by fractional angle is valid" },
- { style: "oblique 90deg", expectedResult: true, message: "'oblique' followed by maxumum 90 degree angle is valid" },
- { style: "oblique -90deg", expectedResult: true, message: "'oblique' followed by minimum -90 degree angle is valid" },
- { style: "oblique 90.01deg", expectedResult: false, message: "'oblique' followed by positive out of range angle is in invalid" },
- { style: "oblique -90.01deg", expectedResult: false, message: "'oblique' followed by negative out of range angle is in invalid" },
- { style: "oblique 10", expectedResult: false, message: "'oblique' followed by unit-less value is invalid" },
- { style: "oblique 20deg ", expectedResult: true, message: "'oblique' followed by positive angle is valid" },
- { style: "oblique a", expectedResult: false, message: "'oblique' followed by non-number is invalid" },
- { style: "oblique 20deg a", expectedResult: false, message: "'oblique' and angle followed by non-number is invalid" },
- { style: "oblique -", expectedResult: false, message: "'oblique' followed by isolated minus is invalid" },
- { style: "oblique - 20deg", expectedResult: false, message: "'oblique' followed by minus and angle separated by space is invalid" },
- { style: "oblique -a", expectedResult: false, message: "'oblique' followed by minus and non-number is invalid" },
- { style: "oblique calc(50deg)", expectedResult: true, message: "'oblique' followed by calc is valid" },
- { style: "oblique calc(-120deg)", expectedResult: true, message: "'oblique' followed by calc is valid even if it must be clamped (no computation)" },
- { style: "oblique calc(6 * 20deg)", expectedResult: true, message: "'oblique' followed by calc is valid even if it must be clamped (with computation)" },
- { style: "oblique calc(0.1rad + 1deg)", expectedResult: true, message: "'oblique' followed by calc is valid even if it mixes units (with computation)" }
+ { style: "italic", expectedResult: true, message: "'italic' is valid" },
+ { style: "italic 20deg", expectedResult: false, message: "'italic' followed by angle is invalid" },
+ { style: "italic a", expectedResult: false, message: "'italic' followed by non-number is invalid" },
+ { style: "oblique", expectedResult: true, message: "'oblique' is valid" },
+ { style: "oblique 0deg", expectedResult: true, message: "'oblique' followed by zero degrees is valid" },
+ { style: "oblique 20deg", expectedResult: true, message: "'oblique' followed by positive angle in degrees is valid" },
+ { style: "oblique 0.5rad", expectedResult: true, message: "'oblique' followed by positive angle in radians is valid", expectedValue: "oblique 28.6479deg" },
+ { style: "oblique 20grad", expectedResult: true, message: "'oblique' followed by positive angle in gradians is valid", expectedValue: "oblique 18deg" },
+ { style: "oblique 0.1turn", expectedResult: true, message: "'oblique' followed by positive angle in turns is valid", expectedValue: "oblique 36deg" },
+ { style: "oblique 20px", expectedResult: false, message: "'oblique' followed by number with invalid unit type is in valid" },
+ { style: "oblique -20deg", expectedResult: true, message: "'oblique' followed by negative angle is valid" },
+ { style: "oblique 20.5deg", expectedResult: true, message: "'oblique' followed by fractional angle is valid" },
+ { style: "oblique 90deg", expectedResult: true, message: "'oblique' followed by maxumum 90 degree angle is valid" },
+ { style: "oblique -90deg", expectedResult: true, message: "'oblique' followed by minimum -90 degree angle is valid" },
+ { style: "oblique 90.01deg", expectedResult: false, message: "'oblique' followed by positive out of range angle is in invalid" },
+ { style: "oblique -90.01deg", expectedResult: false, message: "'oblique' followed by negative out of range angle is in invalid" },
+ { style: "oblique 10", expectedResult: false, message: "'oblique' followed by unit-less value is invalid" },
+ { style: "oblique 30deg", expectedResult: true, message: "'oblique' followed by positive angle is valid" },
+ { style: "oblique a", expectedResult: false, message: "'oblique' followed by non-number is invalid" },
+ { style: "oblique 20deg a", expectedResult: false, message: "'oblique' and angle followed by non-number is invalid" },
+ { style: "oblique -", expectedResult: false, message: "'oblique' followed by isolated minus is invalid" },
+ { style: "oblique - 20deg", expectedResult: false, message: "'oblique' followed by minus and angle separated by space is invalid" },
+ { style: "oblique -a", expectedResult: false, message: "'oblique' followed by minus and non-number is invalid" },
+ { style: "oblique calc(50deg)", expectedResult: true, message: "'oblique' followed by calc is valid", expectedValue: "oblique 50deg" },
+ { style: "oblique calc(-120deg)", expectedResult: true, message: "'oblique' followed by calc is valid even if it must be clamped (no computation)", expectedValue: "oblique -90deg" },
+ { style: "oblique calc(6 * 20deg)", expectedResult: true, message: "'oblique' followed by calc is valid even if it must be clamped (with computation)", expectedValue: "oblique 90deg" },
+ { style: "oblique calc(10grad + 5deg)", expectedResult: true, message: "'oblique' followed by calc is valid even if it mixes units (with computation)", expectedValue: "oblique 14deg" }
];
testFontStyle.forEach(function (testCase) {
- test(() => { assert_equals(window.CSS.supports("font-style", testCase.style), testCase.expectedResult, "Font-style: " + testCase.message); }, "Font-style: " + testCase.message);
+ test(() => {
+ assert_equals(window.CSS.supports("font-style", testCase.style), testCase.expectedResult, "Font-style supports: " + testCase.message);
+ }, "Font-style (supports): " + testCase.message);
});
+ testFontStyle.forEach(function (testCase) {
+ if (testCase.expectedResult) {
+ test(() => {
+ let element = document.getElementById("test");
+ element.style = "font-style: " + testCase.style;
+ let expectedValue = (testCase.expectedValue) ? testCase.expectedValue : testCase.style;
+ assert_equals(window.getComputedStyle(element).fontStyle, expectedValue, "Font-style computed style: " + testCase.message);
+ }, "Font-style (computed): " + testCase.message);
+ }
+ });
</script>
</body>
-</html>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-007-ref.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-007-ref.html
new file mode 100644
index 00000000000..efb58d83b37
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-007-ref.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html>
+ <meta charset="utf-8">
+ <title>CSS Multi-column Layout Test Reference: Test column-span:all when the body tag is the multi-column container</title>
+ <link rel="author" title="Ting-Yu Lin" href="tlin@mozilla.com">
+ <link rel="author" title="Mozilla" href="http://www.mozilla.org/">
+
+ <style>
+ body {
+ column-count: 1;
+ column-rule: 6px solid;
+ width: 400px;
+ outline: 1px solid black;
+ }
+ h3 {
+ /* column-count: 1 makes this behave like a real spanner. */
+ outline: 1px solid blue;
+ }
+ </style>
+
+ <body>
+ <div>block1</div>
+ <div>
+ <h3>spanner</h3>
+ </div>
+ <div>block2</div>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-007.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-007.html
new file mode 100644
index 00000000000..2464327ff42
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-007.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html>
+ <meta charset="utf-8">
+ <title>CSS Multi-column Layout Test: Test column-span:all when the body tag is the multi-column container</title>
+ <link rel="author" title="Ting-Yu Lin" href="tlin@mozilla.com">
+ <link rel="author" title="Mozilla" href="http://www.mozilla.org/">
+ <link rel="help" href="https://drafts.csswg.org/css-multicol-1/#column-span">
+ <link rel="match" href="multicol-span-all-007-ref.html">
+ <meta name="assert" content="This test checks a column-span:all element is working if the body tag is the multi-column container.">
+
+ <style>
+ body {
+ column-count: 3;
+ column-rule: 6px solid;
+ width: 400px;
+ outline: 1px solid black;
+ }
+ h3 {
+ column-span: all;
+ outline: 1px solid blue;
+ }
+ </style>
+
+ <body>
+ <div>block1</div>
+ <div>
+ <h3>spanner</h3> <!-- Put spanner in a subtree deliberately -->
+ </div>
+ <div>block2</div>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-010-ref.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-010-ref.html
new file mode 100644
index 00000000000..7f6abe8f39d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-010-ref.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html>
+ <meta charset="utf-8">
+ <title>CSS Multi-column Layout Test Reference: Append a block containing a spanner kid. The spanner kid should correctly span across all columns.</title>
+ <link rel="author" title="Ting-Yu Lin" href="tlin@mozilla.com">
+ <link rel="author" title="Mozilla" href="http://www.mozilla.org/">
+
+ <style>
+ #column {
+ column-count: 3;
+ column-rule: 6px solid;
+ width: 400px;
+ outline: 1px solid black;
+ }
+ h3 {
+ column-span: all;
+ outline: 1px solid blue;
+ }
+ </style>
+
+ <body>
+ <article id="column">
+ <div>block1</div>
+ <div><h3>spanner</h3>block2</div>
+ </article>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-010.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-010.html
new file mode 100644
index 00000000000..e9e96ced2aa
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-010.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+ <meta charset="utf-8">
+ <title>CSS Multi-column Layout Test: Append a block containing a spanner kid. The spanner kid should correctly span across all columns.</title>
+ <link rel="author" title="Ting-Yu Lin" href="tlin@mozilla.com">
+ <link rel="author" title="Mozilla" href="http://www.mozilla.org/">
+ <link rel="help" href="https://drafts.csswg.org/css-multicol-1/#column-span">
+ <link rel="match" href="multicol-span-all-dynamic-add-010-ref.html">
+ <meta name="assert" content="This test checks appending a block containing 'column-span' element should be rendered correctly.">
+
+ <script>
+ function runTest() {
+ document.body.offsetHeight;
+
+ // Create a subtree like the following, and append it to columns.
+ // <div>
+ // <h3>spanner</h3>
+ // block2
+ // </div>
+ var spanner = document.createElement("h3");
+ var spannerText = document.createTextNode("spanner");
+ spanner.appendChild(spannerText);
+
+ var block2 = document.createElement("div");
+ var block2Text = document.createTextNode("block2");
+ block2.appendChild(spanner);
+ block2.appendChild(block2Text)
+
+ var column = document.getElementById("column");
+ column.appendChild(block2);
+
+ document.documentElement.removeAttribute("class");
+ }
+ </script>
+
+ <style>
+ #column {
+ column-count: 3;
+ column-rule: 6px solid;
+ width: 400px;
+ outline: 1px solid black;
+ }
+ h3 {
+ column-span: all;
+ outline: 1px solid blue;
+ }
+ </style>
+
+ <body onload="runTest();">
+ <article id="column">
+ <div>block1</div>
+ </article>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-overflow/inheritance.html b/tests/wpt/web-platform-tests/css/css-overflow/inheritance.html
new file mode 100644
index 00000000000..976406be413
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-overflow/inheritance.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Inheritance of CSS Overflow properties</title>
+<link rel="help" href="https://drafts.csswg.org/css-overflow/#property-index">
+<meta name="assert" content="Properties inherit or not according to the spec.">
+<meta name="assert" content="Properties have initial values according to the spec.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/inheritance-testcommon.js"></script>
+</head>
+<body>
+<div id="container">
+ <div id="target"></div>
+</div>
+<script>
+assert_inherited('block-ellipsis', 'none', 'auto');
+assert_not_inherited('continue', 'auto', 'discard');
+assert_not_inherited('max-lines', 'none', '2');
+assert_not_inherited('overflow-block', 'visible', 'scroll');
+assert_not_inherited('overflow-inline', 'visible', 'scroll');
+assert_not_inherited('overflow-x', 'visible', 'scroll');
+assert_not_inherited('overflow-y', 'visible', 'scroll');
+assert_not_inherited('text-overflow', 'clip', 'ellipsis');
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-overflow/parsing/block-ellipsis-invalid.html b/tests/wpt/web-platform-tests/css/css-overflow/parsing/block-ellipsis-invalid.html
new file mode 100644
index 00000000000..2b9c059a45d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-overflow/parsing/block-ellipsis-invalid.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Overflow: parsing block-ellipsis with invalid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-overflow/#propdef-block-ellipsis">
+<meta name="assert" content="block-ellipsis supports only the grammar 'none | auto | <string>'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("block-ellipsis", 'hidden');
+
+test_invalid_value("block-ellipsis", 'none auto');
+test_invalid_value("block-ellipsis", 'auto "string"');
+test_invalid_value("block-ellipsis", '"string" none');
+test_invalid_value("block-ellipsis", '"first" "second"');
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-overflow/parsing/block-ellipsis-valid.html b/tests/wpt/web-platform-tests/css/css-overflow/parsing/block-ellipsis-valid.html
new file mode 100644
index 00000000000..06148ef01b2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-overflow/parsing/block-ellipsis-valid.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Overflow: parsing block-ellipsis with valid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-overflow/#propdef-block-ellipsis">
+<meta name="assert" content="block-ellipsis supports the full grammar 'none | auto | <string>'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("block-ellipsis", 'none');
+test_valid_value("block-ellipsis", 'auto');
+test_valid_value("block-ellipsis", '" etc., etc. "');
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-overflow/parsing/continue-invalid.html b/tests/wpt/web-platform-tests/css/css-overflow/parsing/continue-invalid.html
new file mode 100644
index 00000000000..36e164158f3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-overflow/parsing/continue-invalid.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Overflow: parsing continue with invalid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-overflow/#propdef-continue">
+<meta name="assert" content="continue supports only the grammar 'auto | discard'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("continue", 'none');
+
+test_invalid_value("continue", 'auto discard');
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-overflow/parsing/continue-valid.html b/tests/wpt/web-platform-tests/css/css-overflow/parsing/continue-valid.html
new file mode 100644
index 00000000000..97524cf80db
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-overflow/parsing/continue-valid.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Overflow: parsing continue with valid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-overflow/#propdef-continue">
+<meta name="assert" content="continue supports the full grammar 'auto | discard'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("continue", 'auto');
+test_valid_value("continue", 'discard');
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-overflow/parsing/line-clamp-invalid.html b/tests/wpt/web-platform-tests/css/css-overflow/parsing/line-clamp-invalid.html
new file mode 100644
index 00000000000..7b64e473586
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-overflow/parsing/line-clamp-invalid.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Overflow: parsing line-clamp with invalid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-overflow/#propdef-line-clamp">
+<meta name="assert" content="line-clamp supports only the grammar 'none | <integer> <‘block-ellipsis’>?'.">
+<meta name="assert" content="Zero or negative max-lines integers are invalid.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("line-clamp", 'auto');
+
+test_invalid_value("line-clamp", '0');
+test_invalid_value("line-clamp", '-5');
+
+test_invalid_value("line-clamp", '" etc., etc. "');
+
+test_invalid_value("line-clamp", 'none 2');
+test_invalid_value("line-clamp", '3 none');
+test_invalid_value("line-clamp", 'auto 4');
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-overflow/parsing/line-clamp-valid.html b/tests/wpt/web-platform-tests/css/css-overflow/parsing/line-clamp-valid.html
new file mode 100644
index 00000000000..735300c9efe
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-overflow/parsing/line-clamp-valid.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Overflow: parsing line-clamp with valid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-overflow/#propdef-line-clamp">
+<meta name="assert" content="line-clamp supports the full grammar 'none | <integer> <‘block-ellipsis’>?'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("line-clamp", 'none');
+
+test_valid_value("line-clamp", '1');
+test_valid_value("line-clamp", '6');
+
+test_valid_value("line-clamp", '7 none');
+test_valid_value("line-clamp", '8 auto', '8');
+test_valid_value("line-clamp", '9 " etc., etc. "');
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-overflow/parsing/max-lines-invalid.html b/tests/wpt/web-platform-tests/css/css-overflow/parsing/max-lines-invalid.html
new file mode 100644
index 00000000000..85fe77fdb7a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-overflow/parsing/max-lines-invalid.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Overflow: parsing max-lines with invalid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-overflow/#propdef-max-lines">
+<meta name="assert" content="max-lines supports only the grammar 'none | <integer>'.">
+<meta name="assert" content="Zero or negative integers are invalid.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("max-lines", 'auto');
+test_invalid_value("max-lines", '0');
+test_invalid_value("max-lines", '-5');
+
+test_invalid_value("max-lines", 'none none');
+test_invalid_value("max-lines", '1 none');
+test_invalid_value("max-lines", 'none 2');
+test_invalid_value("max-lines", '3 4');
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-overflow/parsing/max-lines-valid.html b/tests/wpt/web-platform-tests/css/css-overflow/parsing/max-lines-valid.html
new file mode 100644
index 00000000000..f2fda80c3b3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-overflow/parsing/max-lines-valid.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Overflow: parsing max-lines with valid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-overflow/#propdef-max-lines">
+<meta name="assert" content="max-lines supports the full grammar 'none | <integer>'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("max-lines", 'none');
+test_valid_value("max-lines", '1');
+test_valid_value("max-lines", '6');
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-overflow/parsing/overflow-computed.html b/tests/wpt/web-platform-tests/css/css-overflow/parsing/overflow-computed.html
new file mode 100644
index 00000000000..f3aaaa3c67f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-overflow/parsing/overflow-computed.html
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Overflow: getComputedValue().overflow</title>
+<link rel="help" href="https://drafts.csswg.org/css-overflow/#propdef-overflow">
+<meta name="assert" content="visible/clip compute to auto/hidden (respectively) if one of overflow-x or overflow-y is neither visible nor clip.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+</head>
+<body>
+<div id="target"></div>
+<script>
+test_computed_value("overflow", 'visible');
+test_computed_value("overflow", 'hidden');
+test_computed_value("overflow", 'clip');
+test_computed_value("overflow", 'scroll');
+test_computed_value("overflow", 'auto');
+
+test_computed_value("overflow", 'auto auto', 'auto');
+test_computed_value("overflow", 'auto clip', 'auto hidden');
+test_computed_value("overflow", 'auto visible', 'auto');
+test_computed_value("overflow", 'clip auto', 'hidden auto');
+test_computed_value("overflow", 'clip clip', 'clip');
+test_computed_value("overflow", 'clip hidden', 'hidden');
+test_computed_value("overflow", 'clip scroll', 'hidden scroll')
+test_computed_value("overflow", 'hidden clip', 'hidden');
+test_computed_value("overflow", 'hidden visible', 'hidden auto');
+test_computed_value("overflow", 'scroll auto');
+test_computed_value("overflow", 'scroll clip', 'scroll hidden');
+test_computed_value("overflow", 'scroll visible', 'scroll auto');
+test_computed_value("overflow", 'visible auto', 'auto');
+test_computed_value("overflow", 'visible hidden', 'auto hidden');
+test_computed_value("overflow", 'visible scroll', 'auto scroll');
+test_computed_value("overflow", 'visible visible', 'visible');
+
+
+test_computed_value("overflow-x", 'scroll');
+test_computed_value("overflow-x", 'hidden');
+test_computed_value("overflow-x", 'visible');
+test_computed_value("overflow-y", 'clip');
+test_computed_value("overflow-y", 'auto');
+test_computed_value("overflow-y", 'visible');
+test_computed_value("overflow-block", 'hidden');
+test_computed_value("overflow-block", 'clip');
+test_computed_value("overflow-block", 'visible');
+test_computed_value("overflow-inline", 'scroll');
+test_computed_value("overflow-inline", 'visible');
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-overflow/parsing/overflow-invalid.html b/tests/wpt/web-platform-tests/css/css-overflow/parsing/overflow-invalid.html
new file mode 100644
index 00000000000..c99fda7f784
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-overflow/parsing/overflow-invalid.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Overflow: parsing overflow with invalid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-overflow/#propdef-overflow">
+<meta name="assert" content="overflow supports only the grammar '[ visible | hidden | clip | scroll | auto ]{1,2}'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("overflow", 'none');
+test_invalid_value("overflow", 'visible clip auto');
+
+
+test_invalid_value("overflow-x", 'visible clip');
+test_invalid_value("overflow-y", 'clip hidden');
+test_invalid_value("overflow-block", 'hidden scroll');
+test_invalid_value("overflow-inline", 'scroll auto');
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-overflow/parsing/overflow-valid.html b/tests/wpt/web-platform-tests/css/css-overflow/parsing/overflow-valid.html
new file mode 100644
index 00000000000..02ddd938593
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-overflow/parsing/overflow-valid.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Overflow: parsing overflow with valid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-overflow/#propdef-overflow">
+<meta name="assert" content="overflow supports the full grammar '[ visible | hidden | clip | scroll | auto ]{1,2}'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("overflow", 'visible');
+test_valid_value("overflow", 'hidden');
+test_valid_value("overflow", 'clip');
+test_valid_value("overflow", 'scroll');
+test_valid_value("overflow", 'auto');
+
+test_valid_value("overflow", 'visible visible', 'visible');
+test_valid_value("overflow", 'hidden visible');
+test_valid_value("overflow", 'clip clip', 'clip');
+test_valid_value("overflow", 'scroll auto');
+test_valid_value("overflow", 'auto auto', 'auto');
+
+
+test_valid_value("overflow-x", 'visible');
+test_valid_value("overflow-x", 'scroll');
+test_valid_value("overflow-y", 'clip');
+test_valid_value("overflow-y", 'auto');
+test_valid_value("overflow-block", 'hidden');
+test_valid_value("overflow-block", 'clip');
+test_valid_value("overflow-inline", 'scroll');
+test_valid_value("overflow-inline", 'visible');
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-overflow/parsing/text-overflow-computed.html b/tests/wpt/web-platform-tests/css/css-overflow/parsing/text-overflow-computed.html
new file mode 100644
index 00000000000..39358d04c6c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-overflow/parsing/text-overflow-computed.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Overflow: getComputedValue().textOverflow</title>
+<link rel="help" href="https://drafts.csswg.org/css-overflow/#propdef-text-overflow">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+</head>
+<body>
+<div id="target"></div>
+<script>
+test_computed_value("text-overflow", 'clip');
+test_computed_value("text-overflow", 'ellipsis');
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-overflow/parsing/text-overflow-invalid.html b/tests/wpt/web-platform-tests/css/css-overflow/parsing/text-overflow-invalid.html
new file mode 100644
index 00000000000..785632a727a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-overflow/parsing/text-overflow-invalid.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Overflow: parsing text-overflow with invalid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-overflow/#propdef-text-overflow">
+<meta name="assert" content="text-overflow supports only the grammar 'clip | ellipsis'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("text-overflow", 'auto');
+
+test_invalid_value("text-overflow", 'clip ellipsis clip');
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-overflow/parsing/text-overflow-valid.html b/tests/wpt/web-platform-tests/css/css-overflow/parsing/text-overflow-valid.html
new file mode 100644
index 00000000000..df77dffd6d8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-overflow/parsing/text-overflow-valid.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Overflow: parsing text-overflow with valid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-overflow/#propdef-text-overflow">
+<meta name="assert" content="text-overflow supports the full grammar 'clip | ellipsis'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("text-overflow", 'clip');
+test_valid_value("text-overflow", 'ellipsis');
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-scroll-anchoring/opt-out-dynamic-scroller.html b/tests/wpt/web-platform-tests/css/css-scroll-anchoring/opt-out-dynamic-scroller.html
new file mode 100644
index 00000000000..6ccbc4f2fd6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-scroll-anchoring/opt-out-dynamic-scroller.html
@@ -0,0 +1,49 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<link rel="help" href="https://drafts.csswg.org/css-scroll-anchoring-1/">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+
+#scroller {
+ overflow: scroll;
+ width: 300px;
+ height: 300px;
+}
+#before { height: 50px; }
+#content { margin-top: 100px; margin-bottom: 600px; }
+.no { overflow-anchor: none; }
+
+</style>
+<div id="scroller">
+ <div id="before"></div>
+ <div id="content">content</div>
+</div>
+<script>
+
+// Tests that dynamic styling 'overflow-anchor' on a scrolling element has the
+// same effect as initial styling
+
+test(() => {
+ let scroller = document.querySelector("#scroller");
+ let before = document.querySelector("#before");
+
+ // Scroll down so that #content is the first element in the viewport
+ scroller.scrollTop = 100;
+
+ // Change the height of #before to trigger a scroll adjustment. This ensures
+ // that #content was selected as a scroll anchor
+ before.style.height = "100px";
+ assert_equals(scroller.scrollTop, 150);
+
+ // Now set 'overflow-anchor: none' on #scroller. This should invalidate the
+ // scroll anchor, and #scroller shouldn't be able to select an anchor anymore
+ scroller.className = 'no';
+
+ // Change the height of #before and make sure we don't adjust. This ensures
+ // that #content is not a scroll anchor
+ before.style.height = "150px";
+ assert_equals(scroller.scrollTop, 150);
+}, "Dynamically styling 'overflow-anchor: none' on the scroller element should prevent scroll anchoring");
+
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-scroll-anchoring/opt-out-dynamic.html b/tests/wpt/web-platform-tests/css/css-scroll-anchoring/opt-out-dynamic.html
new file mode 100644
index 00000000000..ec548dc3d65
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-scroll-anchoring/opt-out-dynamic.html
@@ -0,0 +1,51 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<link rel="help" href="https://drafts.csswg.org/css-scroll-anchoring-1/">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+
+#scroller {
+ overflow: scroll;
+ width: 300px;
+ height: 300px;
+}
+#before { height: 50px; }
+#content { margin-top: 100px; margin-bottom: 600px; }
+.no { overflow-anchor: none; }
+
+</style>
+<div id="scroller">
+ <div id="before"></div>
+ <div id="content">content</div>
+</div>
+<script>
+
+// Tests that dynamic styling 'overflow-anchor' on an anchor node has the
+// same effect as initial styling
+
+test(() => {
+ let scroller = document.querySelector("#scroller");
+ let before = document.querySelector("#before");
+ let content = document.querySelector("#content");
+
+ // Scroll down so that #content is the first element in the viewport
+ scroller.scrollTop = 100;
+
+ // Change the height of #before to trigger a scroll adjustment. This ensures
+ // that #content was selected as a scroll anchor
+ before.style.height = "100px";
+ assert_equals(scroller.scrollTop, 150);
+
+ // Now set 'overflow-anchor: none' on #content. This should invalidate the
+ // scroll anchor, and #scroller should recalculate its anchor. There are no
+ // other valid anchors in the viewport, so there should be no anchor.
+ content.className = 'no';
+
+ // Change the height of #before and make sure we don't adjust. This ensures
+ // that #content was not selected as a scroll anchor
+ before.style.height = "150px";
+ assert_equals(scroller.scrollTop, 150);
+}, "Dynamically styling 'overflow-anchor: none' on the anchor node should prevent scroll anchoring");
+
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-shadow-parts/interaction-with-placeholder-ref.html b/tests/wpt/web-platform-tests/css/css-shadow-parts/interaction-with-placeholder-ref.html
new file mode 100644
index 00000000000..11943c229a0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-shadow-parts/interaction-with-placeholder-ref.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>CSS Shadow Parts - Interaction with placeholder</title>
+ <meta href="mailto:fergal@chromium.org" rel="author" title="Fergal Daly">
+ <link href="http://www.google.com/" rel="author" title="Google">
+ <link href="https://drafts.csswg.org/css-shadow-parts/" rel="help">
+ </head>
+ <body>
+ <style>
+ #placeholder-i::placeholder { color: green; }
+ </style>
+ <div>
+ The following text should be green:
+ <input id="placeholder-i" part="placeholder-p" placeholder="this text"></input>
+ </div>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-shadow-parts/interaction-with-placeholder.html b/tests/wpt/web-platform-tests/css/css-shadow-parts/interaction-with-placeholder.html
new file mode 100644
index 00000000000..a064789f061
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-shadow-parts/interaction-with-placeholder.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>CSS Shadow Parts - Interaction with placeholder</title>
+ <!-- This reftest exists because getComputedStyle for
+ ::placeholder is not implemented everywhere --!>
+ <meta href="mailto:fergal@chromium.org" rel="author" title="Fergal Daly">
+ <link href="http://www.google.com/" rel="author" title="Google">
+ <link href="https://drafts.csswg.org/css-shadow-parts/" rel="help">
+ <link href="interaction-with-placeholder-ref.html" rel="match">
+ <script src="support/shadow-helper.js"></script>
+ </head>
+ <body>
+ <style>
+ #c-e::part(placeholder-p)::placeholder { color: green; }
+ </style>
+ <script>installCustomElement("custom-element", "custom-element-template");</script>
+ <template id="custom-element-template">
+ <style>
+ #placeholder-i::placeholder { color: red; }
+ </style>
+ <div>
+ The following text should be green:
+ <input id="placeholder-i" part="placeholder-p" placeholder="this text"></input>
+ </div>
+ </template>
+ <custom-element id="c-e"></custom-element>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/cssom/CSSStyleSheet-constructable.html b/tests/wpt/web-platform-tests/css/cssom/CSSStyleSheet-constructable.html
index 7df1820c043..e3083d283f3 100644
--- a/tests/wpt/web-platform-tests/css/cssom/CSSStyleSheet-constructable.html
+++ b/tests/wpt/web-platform-tests/css/cssom/CSSStyleSheet-constructable.html
@@ -501,15 +501,18 @@ test(() => {
span.shadowRoot.adoptedStyleSheets = [sheet];
assert_equals(getComputedStyle(shadowDiv).color, "rgb(255, 0, 0)");
+ document.adoptNode(span);
+ assert_equals(span.shadowRoot.adoptedStyleSheets.length, 1);
+ assert_equals(span.shadowRoot.adoptedStyleSheets[0], sheet);
+
const iframe = document.createElement("iframe");
document.body.appendChild(iframe);
iframe.contentDocument.adoptNode(span);
iframe.contentDocument.body.appendChild(span);
assert_not_equals(span.shadowRoot, null);
- assert_equals(span.shadowRoot.adoptedStyleSheets.length, 1);
- assert_equals(span.shadowRoot.adoptedStyleSheets[0], sheet);
+ assert_equals(span.shadowRoot.adoptedStyleSheets.length, 0);
assert_equals(getComputedStyle(shadowDiv).color, "rgb(0, 0, 0)");
-}, 'Adopting a shadow host will move adoptedStyleSheets but it is not applied');
+}, 'Adopting a shadow host will empty adoptedStyleSheets if adopting to a different document');
</script>
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/values3/calc-width-table-auto-1-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/values3/calc-width-table-auto-1-ref.html
index 62ebd566591..d161ecc6f31 100644
--- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/values3/calc-width-table-auto-1-ref.html
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/values3/calc-width-table-auto-1-ref.html
@@ -16,6 +16,11 @@
</table>
<table border>
<tr>
+ <td style="width: 50%">x</td>
+ <td style="width: 100px">y</td>
+</table>
+<table border>
+ <tr>
<td>x</td>
<td style="width: 100px">y</td>
</table>
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/values3/calc-width-table-auto-1.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/values3/calc-width-table-auto-1.html
index b37c94ec5a3..c3d147c0b1c 100644
--- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/values3/calc-width-table-auto-1.html
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/values3/calc-width-table-auto-1.html
@@ -13,6 +13,11 @@
</table>
<table border>
<tr>
+ <td style="width: calc(50% + 1px)">x</td>
+ <td style="width: 100px">y</td>
+</table>
+<table border>
+ <tr>
<td style="width: calc(50%)">x</td>
<td style="width: 100px">y</td>
</table>
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/values3/calc-width-table-fixed-1-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/values3/calc-width-table-fixed-1-ref.html
index 1aad9eb16bd..9ae2d347c6b 100644
--- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/values3/calc-width-table-fixed-1-ref.html
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/values3/calc-width-table-fixed-1-ref.html
@@ -21,6 +21,11 @@ table { table-layout: fixed; width: 500px; border-spacing: 0 }
</table>
<table border>
<tr>
+ <td style="width: 50%">x</td>
+ <td style="width: 100px">y</td>
+</table>
+<table border>
+ <tr>
<td>x</td>
<td style="width: 100px">y</td>
</table>
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/values3/calc-width-table-fixed-1.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/values3/calc-width-table-fixed-1.html
index 05a902217f0..808a61274d3 100644
--- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/values3/calc-width-table-fixed-1.html
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/values3/calc-width-table-fixed-1.html
@@ -18,6 +18,11 @@ table { table-layout: fixed; width: 500px; border-spacing: 0 }
</table>
<table border>
<tr>
+ <td style="width: calc(50% + 1px)">x</td>
+ <td style="width: 100px">y</td>
+</table>
+<table border>
+ <tr>
<td style="width: calc(50%)">x</td>
<td style="width: 100px">y</td>
</table>
diff --git a/tests/wpt/web-platform-tests/docs/_writing-tests/assumptions.md b/tests/wpt/web-platform-tests/docs/_writing-tests/assumptions.md
index d1ab75b0f1d..28a990a3f71 100644
--- a/tests/wpt/web-platform-tests/docs/_writing-tests/assumptions.md
+++ b/tests/wpt/web-platform-tests/docs/_writing-tests/assumptions.md
@@ -8,7 +8,7 @@ The tests make a number of assumptions of the user agent, and new
tests can freely rely on these assumptions being true:
* The device is a full-color device.
- * The device has a viewport width of at least 800px.
+ * The device has a viewport width of at least 600px.
* The UA imposes no minimum font size.
* The `medium` `font-size` computes to 16px.
* The canvas background is `white`.
diff --git a/tests/wpt/web-platform-tests/docs/_writing-tests/general-guidelines.md b/tests/wpt/web-platform-tests/docs/_writing-tests/general-guidelines.md
index a07d55b9e1b..ff099ddf0a5 100644
--- a/tests/wpt/web-platform-tests/docs/_writing-tests/general-guidelines.md
+++ b/tests/wpt/web-platform-tests/docs/_writing-tests/general-guidelines.md
@@ -90,7 +90,7 @@ headers.
### Be Short
Tests should be as short as possible. For reftests in particular
-scrollbars at 800&#xD7;600px window size must be avoided unless scrolling
+scrollbars at 600&#xD7;600px window size must be avoided unless scrolling
behavior is specifically being tested. For all tests extraneous
elements on the page should be avoided so it is clear what is part of
the test (for a typical testharness test, the only content on the page
diff --git a/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-error-fired-before-scripting-unblocked.html b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-error-fired-before-scripting-unblocked.html
new file mode 100644
index 00000000000..188e4ba5ab6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-error-fired-before-scripting-unblocked.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<link rel="author" title="Dom Farolino" href="mailto:dom@chromium.org">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/links.html#link-type-stylesheet">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+var saw_link_onerror = false;
+var t = async_test("Check if the stylesheet's error event is fired before the " +
+ "pending parsing-blocking script is unblocked");
+</script>
+<link href="nonexistent.css" rel="stylesheet" id="style_test"
+ onload="t.unreached_func('Sheet should fail to load')"
+ onerror="t.step(function() { saw_link_onerror = true; })">
+<script>
+ t.step(function() {
+ assert_true(saw_link_onerror, "The pending parsing-blocking script should " +
+ "only run after the last element that " +
+ "contributes a script-blocking style " +
+ "sheet's error event is fired if the sheet " +
+ "fails to load.");
+ });
+ t.done();
+</script>
+</head>
+</html>
diff --git a/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-load-event.html b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-load-event.html
index 541291350a7..e95fff7988a 100644
--- a/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-load-event.html
+++ b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-load-event.html
@@ -11,7 +11,7 @@ window.addEventListener('load', t.step_func_done(function() {
}));
</script>
<link href="style.css?pipe=trickle(d3)" rel="stylesheet" id="style_test"
- onload="t.step(function() { saw_link_onload = true; });"
- onerror="t.step(function() { assert_unreached('Sheet should load OK'); });"></link>
+ onload="t.step(function() { saw_link_onload = true; })"
+ onerror="t.unreached_func('Sheet should load OK')">
</head>
</html>
diff --git a/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-load-fired-before-scripting-unblocked.html b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-load-fired-before-scripting-unblocked.html
new file mode 100644
index 00000000000..a809cc44b19
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-load-fired-before-scripting-unblocked.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<link rel="author" title="Dom Farolino" href="mailto:dom@chromium.org">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/links.html#link-type-stylesheet">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+var saw_link_onload = false;
+var t = async_test("Check if the stylesheet's load event is fired before the " +
+ "pending parsing-blocking script is unblocked");
+</script>
+<link href="style.css?pipe=trickle(d3)" rel="stylesheet" id="style_test"
+ onload="t.step(function() { saw_link_onload = true; })"
+ onerror="t.unreached_func('Sheet should load OK')">
+<script>
+ t.step(function() {
+ assert_true(saw_link_onload, "The pending parsing-blocking script should " +
+ "only run after the last element that " +
+ "contributes a script-blocking style " +
+ "sheet's load event is fired.");
+ });
+ t.done();
+</script>
+</head>
+</html>
diff --git a/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/resources/neutral.css b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/resources/neutral.css
new file mode 100644
index 00000000000..796c55c42f6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/resources/neutral.css
@@ -0,0 +1,3 @@
+body {
+ background-color: gray;
+}
diff --git a/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/stylesheet-not-removed-until-next-stylesheet-loads.html b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/stylesheet-not-removed-until-next-stylesheet-loads.html
new file mode 100644
index 00000000000..27b443cee33
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/stylesheet-not-removed-until-next-stylesheet-loads.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<link rel="author" title="Dom Farolino" href="mailto:dom@chromium.org">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/links.html#link-type-stylesheet">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<link href="style.css?pipe=trickle(d3)" rel="stylesheet" id="style_test">
+<script>
+ test(function() {
+ assert_true(document.styleSheets.length === 1 &&
+ document.styleSheets[0].href.includes("style.css"),
+ "The style sheet 'style.css' must be available to scripts");
+
+ style_test.href = "resources/neutral.css?pipe=trickle(d3)";
+
+ assert_true(document.styleSheets.length === 1 &&
+ document.styleSheets[0].href.includes("style.css"),
+ "The style sheet 'style.css' must remain accessible to " +
+ "scripts until its replacement has finished loading");
+ }, "Check that a style sheet loaded by a <link> is available until its successor is loaded");
+</script>
+</head>
+</html>
diff --git a/tests/wpt/web-platform-tests/infrastructure/reftest/size-ref.html b/tests/wpt/web-platform-tests/infrastructure/reftest/size-ref.html
new file mode 100644
index 00000000000..b2669612b79
--- /dev/null
+++ b/tests/wpt/web-platform-tests/infrastructure/reftest/size-ref.html
@@ -0,0 +1,2 @@
+<!doctype html>
+<p>innerWidth x innerHeight: <span>600x600</span></p>
diff --git a/tests/wpt/web-platform-tests/infrastructure/reftest/size.html b/tests/wpt/web-platform-tests/infrastructure/reftest/size.html
new file mode 100644
index 00000000000..a60befbf038
--- /dev/null
+++ b/tests/wpt/web-platform-tests/infrastructure/reftest/size.html
@@ -0,0 +1,6 @@
+<!doctype html>
+<link rel=match href=size-ref.html>
+<p>innerWidth x innerHeight: <span id=size></span></p>
+<script>
+document.querySelector("#size").textContent = window.innerWidth + "x" + window.innerHeight;
+</script>
diff --git a/tests/wpt/web-platform-tests/interfaces/SVG.idl b/tests/wpt/web-platform-tests/interfaces/SVG.idl
index 9588ad0d608..78b9d64743e 100644
--- a/tests/wpt/web-platform-tests/interfaces/SVG.idl
+++ b/tests/wpt/web-platform-tests/interfaces/SVG.idl
@@ -262,7 +262,7 @@ interface SVGSVGElement : SVGGraphicsElement {
DOMMatrix createSVGMatrix();
DOMRect createSVGRect();
SVGTransform createSVGTransform();
- SVGTransform createSVGTransformFromMatrix(DOMMatrixReadOnly matrix);
+ SVGTransform createSVGTransformFromMatrix(optional DOMMatrix2DInit matrix);
Element getElementById(DOMString elementId);
@@ -367,7 +367,7 @@ interface SVGTransform {
[SameObject] readonly attribute DOMMatrix matrix;
readonly attribute float angle;
- void setMatrix(DOMMatrixReadOnly matrix);
+ void setMatrix(optional DOMMatrix2DInit matrix);
void setTranslate(float tx, float ty);
void setScale(float sx, float sy);
void setRotate(float angle, float cx, float cy);
@@ -391,7 +391,7 @@ interface SVGTransformList {
setter void (unsigned long index, SVGTransform newItem);
// Additional methods not common to other list interfaces.
- SVGTransform createSVGTransformFromMatrix(DOMMatrixReadOnly matrix);
+ SVGTransform createSVGTransformFromMatrix(optional DOMMatrix2DInit matrix);
SVGTransform? consolidate();
};
diff --git a/tests/wpt/web-platform-tests/payment-request/payment-response/retry-method-manual.https.html b/tests/wpt/web-platform-tests/payment-request/payment-response/retry-method-manual.https.html
index 25d82a0649d..0af894500da 100644
--- a/tests/wpt/web-platform-tests/payment-request/payment-response/retry-method-manual.https.html
+++ b/tests/wpt/web-platform-tests/payment-request/payment-response/retry-method-manual.https.html
@@ -164,16 +164,18 @@ function userIsShownErrorsFields(button) {
function abortTheUpdate(button) {
button.disabled = true;
promise_test(async t => {
- const { response, request } = await getPaymentRequestResponse({ requestShipping: true });
- // causes "abort the update" to run
- const shippingChangedPromise = new Promise(resolve => {
- request.onshippingoptionchange = () => {
- event.updateWith({ total: { amount: { currency: "USD", value: "INVALID" } }});
+ const { response, request } = await getPaymentRequestResponse({
+ requestShipping: true,
+ });
+ const shipOptionChangePromise = new Promise(resolve => {
+ request.onshippingoptionchange = event => {
+ // causes "abort the update" to run
+ event.updateWith({ total: "error!" });
resolve();
};
});
const retryPromise = response.retry();
- await shippingChangedPromise;
+ await shipOptionChangePromise;
await promise_rejects(
t,
new TypeError(),
@@ -265,7 +267,9 @@ function callingRetryReturnsUniquePromise(button){
</li>
<li>
<p>
- When shown the payment sheet, hit pay once. Then retry once.
+ When shown the payment sheet, hit pay once.
+ Then, change the shipping option.
+ Select to pay again.
</p>
<button onclick="abortTheUpdate(this);">
When "abort the update" occurs because of an update error,
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/xhr-iframe.html b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/xhr-iframe.html
index bfdfac69712..4c57bbbc658 100644
--- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/xhr-iframe.html
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/xhr-iframe.html
@@ -2,16 +2,21 @@
<meta charset="utf-8">
<title>iframe for xhr tests</title>
<script>
-async function xhr(url) {
+async function xhr(url, options) {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
+ const opts = options ? options : {};
xhr.onload = () => {
resolve(xhr);
};
xhr.onerror = () => {
reject('xhr failed');
};
+
xhr.open('GET', url);
+ if (opts.responseType) {
+ xhr.responseType = opts.responseType;
+ }
xhr.send();
});
}
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/xhr-response-url-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/xhr-response-url-worker.js
new file mode 100644
index 00000000000..906ad5005b5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/xhr-response-url-worker.js
@@ -0,0 +1,32 @@
+// Service worker for the xhr-response-url test.
+
+self.addEventListener('fetch', event => {
+ const url = new URL(event.request.url);
+ const respondWith = url.searchParams.get('respondWith');
+ if (!respondWith)
+ return;
+
+ if (respondWith == 'fetch') {
+ const target = url.searchParams.get('url');
+ event.respondWith(fetch(target));
+ return;
+ }
+
+ if (respondWith == 'string') {
+ const headers = {'content-type': 'text/plain'};
+ event.respondWith(new Response('hello', {headers}));
+ return;
+ }
+
+ if (respondWith == 'document') {
+ const doc = `
+ <!DOCTYPE html>
+ <html>
+ <title>hi</title>
+ <body>hello</body>
+ </html>`;
+ const headers = {'content-type': 'text/html'};
+ event.respondWith(new Response(doc, {headers}));
+ return;
+ }
+});
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/xhr-response-url.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/xhr-response-url.https.html
index 9f00cdd1830..1ad2ce3851c 100644
--- a/tests/wpt/web-platform-tests/service-workers/service-worker/xhr-response-url.https.html
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/xhr-response-url.https.html
@@ -6,31 +6,98 @@
<script src="resources/test-helpers.sub.js"></script>
<script>
const scope = 'resources/xhr-iframe.html';
-const script = 'resources/fetch-rewrite-worker.js';
+const script = 'resources/xhr-response-url-worker.js';
let iframe;
-// Test that XMLHttpRequest.responseURL uses the response URL from the service
-// worker.
-promise_test(async (t) => {
- t.add_cleanup(async () => {
- if (iframe)
- iframe.remove();
- await service_worker_unregister(t, scope);
- });
+function build_url(options) {
+ const url = new URL('test', window.location);
+ const opts = options ? options : {};
+ if (opts.respondWith)
+ url.searchParams.set('respondWith', opts.respondWith);
+ if (opts.url)
+ url.searchParams.set('url', opts.url.href);
+ return url.href;
+}
- // Set up a controlled iframe.
+promise_test(async (t) => {
const registration =
await service_worker_unregister_and_register(t, script, scope);
await wait_for_state(t, registration.installing, 'activated');
iframe = await with_iframe(scope);
+}, 'global setup');
- // Build the XHR URL. Set the |url| param to tell the service worker
- // to respondWith(fetch(|url|)).
+// Test that XMLHttpRequest.responseURL uses the response URL from the service
+// worker.
+promise_test(async (t) => {
+ // Build a URL that tells the service worker to respondWith(fetch(|target|)).
const target = new URL('resources/dummy.txt', window.location);
- const url = `test?url=${encodeURIComponent(target)}`;
+ const url = build_url({
+ respondWith: 'fetch',
+ url: target
+ });
// Perform the XHR.
const xhr = await iframe.contentWindow.xhr(url);
- assert_equals(xhr.responseURL, target.href);
+ assert_equals(xhr.responseURL, target.href, 'responseURL');
}, 'XHR responseURL should be the response URL');
+
+// Same as above with a generated response.
+promise_test(async (t) => {
+ // Build a URL that tells the service worker to respondWith(new Response()).
+ const url = build_url({respondWith: 'string'});
+
+ // Perform the XHR.
+ const xhr = await iframe.contentWindow.xhr(url);
+ assert_equals(xhr.responseURL, url, 'responseURL');
+}, 'XHR responseURL should be the response URL (generated response)');
+
+// Test that XMLHttpRequest.responseXML is a Document whose URL is the
+// response URL from the service worker.
+promise_test(async (t) => {
+ // Build a URL that tells the service worker to respondWith(fetch(|target|)).
+ const target = new URL('resources/blank.html', window.location);
+ const url = build_url({
+ respondWith: 'fetch',
+ url: target
+ });
+
+ // Perform the XHR.
+ const xhr = await iframe.contentWindow.xhr(url, {responseType: 'document'});
+ assert_equals(xhr.responseURL, target.href, 'responseURL');
+
+ // The document's URL uses the response URL:
+ // "Set |document|’s URL to |response|’s url."
+ // https://xhr.spec.whatwg.org/#document-response
+ assert_equals(xhr.responseXML.URL, target.href, 'responseXML.URL');
+
+ // The document's base URL falls back to the document URL:
+ // https://html.spec.whatwg.org/multipage/urls-and-fetching.html#document-base-url
+ assert_equals(xhr.responseXML.baseURI, target.href, 'responseXML.baseURI');
+}, 'XHR Document should use the response URL');
+
+// Same as above with a generated response from the service worker.
+promise_test(async (t) => {
+ // Build a URL that tells the service worker to
+ // respondWith(new Response()) with a document response.
+ const url = build_url({respondWith: 'document'});
+
+ // Perform the XHR.
+ const xhr = await iframe.contentWindow.xhr(url, {responseType: 'document'});
+ assert_equals(xhr.responseURL, url, 'responseURL');
+
+ // The document's URL uses the response URL, which is the request URL:
+ // "Set |document|’s URL to |response|’s url."
+ // https://xhr.spec.whatwg.org/#document-response
+ assert_equals(xhr.responseXML.URL, url, 'responseXML.URL');
+
+ // The document's base URL falls back to the document URL:
+ // https://html.spec.whatwg.org/multipage/urls-and-fetching.html#document-base-url
+ assert_equals(xhr.responseXML.baseURI, url, 'responseXML.baseURI');
+}, 'XHR Document should use the response URL (generated response)');
+
+promise_test(async (t) => {
+ if (iframe)
+ iframe.remove();
+ await service_worker_unregister(t, scope);
+}, 'global cleanup');
</script>
diff --git a/tests/wpt/web-platform-tests/tools/conftest.py b/tests/wpt/web-platform-tests/tools/conftest.py
index 894fe6223ea..021a49fc297 100644
--- a/tests/wpt/web-platform-tests/tools/conftest.py
+++ b/tests/wpt/web-platform-tests/tools/conftest.py
@@ -6,8 +6,10 @@ from hypothesis import settings, HealthCheck
impl = platform.python_implementation()
settings.register_profile("ci", settings(max_examples=1000,
+ deadline=None,
suppress_health_check=[HealthCheck.too_slow]))
-settings.register_profile("pypy", settings(suppress_health_check=[HealthCheck.too_slow]))
+settings.register_profile("pypy", settings(deadline=None,
+ suppress_health_check=[HealthCheck.too_slow]))
settings.load_profile(os.getenv("HYPOTHESIS_PROFILE",
"default" if impl != "PyPy" else "pypy"))
diff --git a/tests/wpt/web-platform-tests/tools/wpt/tests/test_wpt.py b/tests/wpt/web-platform-tests/tools/wpt/tests/test_wpt.py
index 0f1dcb7fd81..bf6250f2903 100644
--- a/tests/wpt/web-platform-tests/tools/wpt/tests/test_wpt.py
+++ b/tests/wpt/web-platform-tests/tools/wpt/tests/test_wpt.py
@@ -165,51 +165,6 @@ def test_list_tests_invalid_manifest(manifest_dir):
@pytest.mark.remote_network
@pytest.mark.xfail(sys.platform == "win32",
reason="Tests currently don't work on Windows for path reasons")
-def test_run_firefox(manifest_dir):
- # TODO: It seems like there's a bug in argparse that makes this argument order required
- # should try to work around that
- if is_port_8000_in_use():
- pytest.skip("port 8000 already in use")
-
- if sys.platform == "darwin":
- fx_path = os.path.join(wpt.localpaths.repo_root, "_venv", "browsers", "nightly", "Firefox Nightly.app")
- else:
- fx_path = os.path.join(wpt.localpaths.repo_root, "_venv", "browsers", "nightly", "firefox")
- if os.path.exists(fx_path):
- shutil.rmtree(fx_path)
- with pytest.raises(SystemExit) as excinfo:
- wpt.main(argv=["run", "--no-pause", "--install-browser", "--yes",
- # The use of `--binary-args` is intentional: it
- # demonstrates that internally-managed command-line
- # arguments are properly merged with those specified by
- # the user. See
- # https://github.com/web-platform-tests/wpt/pull/13154
- "--binary-arg=-headless",
- "--metadata", manifest_dir,
- "firefox", "/dom/nodes/Element-tagName.html"])
- assert os.path.exists(fx_path)
- shutil.rmtree(fx_path)
- assert excinfo.value.code == 0
-
-
-@pytest.mark.slow
-@pytest.mark.xfail(sys.platform == "win32",
- reason="Tests currently don't work on Windows for path reasons")
-def test_run_chrome(manifest_dir):
- if is_port_8000_in_use():
- pytest.skip("port 8000 already in use")
-
- with pytest.raises(SystemExit) as excinfo:
- wpt.main(argv=["run", "--yes", "--no-pause", "--binary-arg", "headless",
- "--metadata", manifest_dir,
- "chrome", "/dom/nodes/Element-tagName.html"])
- assert excinfo.value.code == 0
-
-
-@pytest.mark.slow
-@pytest.mark.remote_network
-@pytest.mark.xfail(sys.platform == "win32",
- reason="Tests currently don't work on Windows for path reasons")
def test_run_zero_tests():
"""A test execution describing zero tests should be reported as an error
even in the presence of the `--no-fail-on-unexpected` option."""
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py
index aa44817276f..5b586bad8c2 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py
@@ -47,6 +47,8 @@ def executor_kwargs(test_type, server_config, cache_manager, run_info_data,
}
}
},
+ "useAutomationExtension": False,
+ "excludeSwitches": ["enable-automation"],
"w3c": True
}
}
@@ -64,10 +66,6 @@ def executor_kwargs(test_type, server_config, cache_manager, run_info_data,
if "--headless" not in capabilities["goog:chromeOptions"]["args"]:
capabilities["goog:chromeOptions"]["args"].append("--headless")
- if test_type == "testharness":
- capabilities["goog:chromeOptions"]["useAutomationExtension"] = False
- capabilities["goog:chromeOptions"]["excludeSwitches"] = ["enable-automation"]
-
executor_kwargs["capabilities"] = capabilities
return executor_kwargs
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorselenium.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorselenium.py
index 75e7b2cc4ae..fce1a5bc0d9 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorselenium.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorselenium.py
@@ -359,8 +359,6 @@ class SeleniumRefTestExecutor(RefTestExecutor):
self.close_after_done = close_after_done
self.has_window = False
- with open(os.path.join(here, "reftest.js")) as f:
- self.script = f.read()
with open(os.path.join(here, "reftest-wait_webdriver.js")) as f:
self.wait_script = f.read()
@@ -370,7 +368,11 @@ class SeleniumRefTestExecutor(RefTestExecutor):
def do_test(self, test):
self.logger.info("Test requires OS-level window focus")
- self.protocol.webdriver.set_window_size(600, 600)
+ width_offset, height_offset = self.protocol.webdriver.execute_script(
+ """return [window.outerWidth - window.innerWidth,
+ window.outerHeight - window.innerHeight];"""
+ )
+ self.protocol.webdriver.set_window_size(600 + width_offset, 600 + height_offset)
result = self.implementation.run_test(test)
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorservo.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorservo.py
index 485cdc5c98d..b6975da7b42 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorservo.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorservo.py
@@ -208,7 +208,7 @@ class ServoRefTestExecutor(ProcessTestExecutor):
for pref, value in test.environment.get('prefs', {}).iteritems():
command += ["--pref", "%s=%s" % (pref, value)]
- command += ["--resolution", viewport_size or "800x600"]
+ command += ["--resolution", viewport_size or "600x600"]
if self.browser.ca_certificate_path:
command += ["--certificate-path", self.browser.ca_certificate_path]
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py
index 0e83118d9ac..dcab4b04529 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py
@@ -394,8 +394,6 @@ class WebDriverRefTestExecutor(RefTestExecutor):
self.close_after_done = close_after_done
self.has_window = False
- with open(os.path.join(here, "reftest.js")) as f:
- self.script = f.read()
with open(os.path.join(here, "reftest-wait_webdriver.js")) as f:
self.wait_script = f.read()
@@ -403,7 +401,11 @@ class WebDriverRefTestExecutor(RefTestExecutor):
return self.protocol.is_alive()
def do_test(self, test):
- self.protocol.webdriver.window.size = (600, 600)
+ width_offset, height_offset = self.protocol.webdriver.execute_script(
+ """return [window.outerWidth - window.innerWidth,
+ window.outerHeight - window.innerHeight];"""
+ )
+ self.protocol.webdriver.window.size = (600 + width_offset, 600 + height_offset)
result = self.implementation.run_test(test)
diff --git a/tests/wpt/web-platform-tests/webrtc-stats/getStats-remote-candidate-address.html b/tests/wpt/web-platform-tests/webrtc-stats/getStats-remote-candidate-address.html
new file mode 100644
index 00000000000..bf580688591
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webrtc-stats/getStats-remote-candidate-address.html
@@ -0,0 +1,81 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Exposure or remote candidate address on stats</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="../webrtc/RTCPeerConnection-helper.js"></script>
+<script src="../webrtc/RTCStats-helper.js"></script>
+<script>
+ 'use strict';
+
+promise_test(async (test) => {
+ const localPc = new RTCPeerConnection();
+ test.add_cleanup(() => localPc.close());
+ const remotePc = new RTCPeerConnection();
+ test.add_cleanup(() => remotePc.close());
+
+ const promiseDataChannel = new Promise(resolve => {
+ remotePc.addEventListener('datachannel', (event) => {
+ resolve(event.channel);
+ });
+ });
+
+ const localDataChannel = localPc.createDataChannel('test');
+
+ localPc.addEventListener('icecandidate', event => {
+ if (event.candidate)
+ remotePc.addIceCandidate(event.candidate);
+ });
+ doSignalingHandshake(localPc, remotePc);
+
+ const remoteDataChannel = await promiseDataChannel;
+
+ localDataChannel.send("test");
+
+ await new Promise(resolve => {
+ remoteDataChannel.onmessage = resolve;
+ });
+
+ const remoteCandidateStats = getRequiredStats(await localPc.getStats(), "remote-candidate");
+ assert_equals(remoteCandidateStats.address, null, "address should be null");
+}, "Do not expose in stats remote addresses that are not known to be already exposed to JS");
+
+
+promise_test(async (test) => {
+ const localPc = new RTCPeerConnection();
+ test.add_cleanup(() => localPc.close());
+ const remotePc = new RTCPeerConnection();
+ test.add_cleanup(() => remotePc.close());
+
+ const promiseDataChannel = new Promise(resolve => {
+ remotePc.addEventListener('datachannel', (event) => {
+ resolve(event.channel);
+ });
+ });
+
+ const localDataChannel = localPc.createDataChannel('test');
+
+ localPc.addEventListener('icecandidate', event => {
+ if (event.candidate)
+ remotePc.addIceCandidate(event.candidate);
+ });
+ remotePc.addEventListener('icecandidate', event => {
+ if (event.candidate)
+ localPc.addIceCandidate(event.candidate);
+ });
+ doSignalingHandshake(localPc, remotePc);
+
+ const remoteDataChannel = await promiseDataChannel;
+
+ localDataChannel.send("test");
+
+ await new Promise(resolve => {
+ remoteDataChannel.onmessage = resolve;
+ });
+
+ const remoteCandidateStats = getRequiredStats(await localPc.getStats(), "remote-candidate");
+ assert_not_equals(remoteCandidateStats.address, null, "address should not be null");
+
+}, "Expose in stats remote addresses that are already exposed to JS");
+
+</script>
diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-iceConnectionState.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-iceConnectionState.html
index b647b3d3e35..4071033a3c9 100644
--- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-iceConnectionState.html
+++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-iceConnectionState.html
@@ -64,12 +64,6 @@
assert_equals(pc.iceConnectionState, 'new');
}, 'Initial iceConnectionState should be new');
- test(t => {
- const pc = new RTCPeerConnection();
- pc.close();
- assert_equals(pc.iceConnectionState, 'closed');
- }, 'Closing the connection should set iceConnectionState to closed');
-
/*
4.4.4 RTCIceConnectionState Enum
checking
@@ -112,35 +106,6 @@
const pc1 = new RTCPeerConnection();
t.add_cleanup(() => pc1.close());
const pc2 = new RTCPeerConnection();
- t.add_cleanup(() => pc2.close());
-
- let had_checking = false;
-
- const onIceConnectionStateChange = t.step_func(() => {
- const {iceConnectionState} = pc1;
- if (iceConnectionState === 'checking') {
- had_checking = true;
- } else if (iceConnectionState === 'connected' ||
- iceConnectionState === 'completed') {
- assert_true(had_checking, 'state should pass checking before' +
- ' reaching connected or completed');
- t.done();
- }
- });
-
- pc1.createDataChannel('test');
-
- pc1.addEventListener('iceconnectionstatechange', onIceConnectionStateChange);
-
- exchangeIceCandidates(pc1, pc2);
- doSignalingHandshake(pc1, pc2);
- }, 'connection with one data channel should eventually have connected or ' +
- 'completed connection state');
-
-async_test(t => {
- const pc1 = new RTCPeerConnection();
- t.add_cleanup(() => pc1.close());
- const pc2 = new RTCPeerConnection();
t.add_cleanup(() => pc2.close());
@@ -151,22 +116,19 @@ async_test(t => {
const iceTransport = pc1.sctp.transport.transport;
assert_equals(iceTransport.state, 'checking',
- 'Expect ICE transport to be in checking state when' +
- ' iceConnectionState is checking');
+ 'Expect ICE transport to be in checking state when iceConnectionState is checking');
} else if(iceConnectionState === 'connected') {
const iceTransport = pc1.sctp.transport.transport;
assert_equals(iceTransport.state, 'connected',
- 'Expect ICE transport to be in connected state when' +
- ' iceConnectionState is connected');
+ 'Expect ICE transport to be in connected state when iceConnectionState is connected');
} else if(iceConnectionState === 'completed') {
const iceTransport = pc1.sctp.transport.transport;
assert_equals(iceTransport.state, 'completed',
- 'Expect ICE transport to be in connected state when' +
- ' iceConnectionState is completed');
+ 'Expect ICE transport to be in connected state when iceConnectionState is completed');
}
});
@@ -179,8 +141,7 @@ async_test(t => {
exchangeIceCandidates(pc1, pc2);
doSignalingHandshake(pc1, pc2);
- }, 'connection with one data channel should eventually ' +
- 'have connected connection state');
+ }, 'connection with one data channel should eventually have connected connection state');
/*
TODO
diff --git a/tests/wpt/web-platform-tests/webrtc/RTCRtpTransceiver-stop.html b/tests/wpt/web-platform-tests/webrtc/RTCRtpTransceiver-stop.html
new file mode 100644
index 00000000000..b45e03bd019
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webrtc/RTCRtpTransceiver-stop.html
@@ -0,0 +1,82 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>RTCRtpTransceiver.prototype.stop</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="RTCPeerConnection-helper.js"></script>
+<script>
+// FIXME: Add a test adding a transceiver, stopping it and trying to create an empty offer.
+
+promise_test(async (t)=> {
+ const pc1 = new RTCPeerConnection();
+ t.add_cleanup(() => pc1.close());
+
+ pc1.addTransceiver("audio", { direction: "sendonly" });
+ pc1.addTransceiver("video");
+ pc1.getTransceivers()[0].stop();
+
+ const offer = await pc1.createOffer();
+
+ assert_false(offer.sdp.includes("m=audio"), "offer should not contain an audio m-section");
+ assert_true(offer.sdp.includes("m=video"), "offer should contain a video m-section");
+}, "A transceiver added and stopped before the initial offer generation should not trigger an offer m-section generation");
+
+promise_test(async (t)=> {
+ const pc1 = new RTCPeerConnection();
+ const pc2 = new RTCPeerConnection();
+ t.add_cleanup(() => pc1.close());
+ t.add_cleanup(() => pc2.close());
+
+ pc1.addTransceiver("audio");
+
+ await exchangeOfferAnswer(pc1, pc2);
+
+ pc1.addTransceiver("video");
+
+ pc1.getTransceivers()[0].stop();
+ pc1.getTransceivers()[1].stop();
+
+ const offer = await pc1.createOffer();
+
+ assert_true(offer.sdp.includes("m=audio"), "offer should contain an audio m-section");
+ assert_true(offer.sdp.includes("m=audio 0"), "The audio m-section should be rejected");
+
+ assert_false(offer.sdp.includes("m=video"), "offer should not contain a video m-section");
+}, "During renegotiation, adding and stopping a transceiver should not trigger a renegotiated offer m-section generation");
+
+promise_test(async (t)=> {
+ const pc1 = new RTCPeerConnection();
+ const pc2 = new RTCPeerConnection();
+ t.add_cleanup(() => pc1.close());
+ t.add_cleanup(() => pc2.close());
+
+ pc1.addTransceiver("audio");
+
+ await exchangeOfferAnswer(pc1, pc2);
+
+ pc1.getTransceivers()[0].direction = "sendonly";
+ pc1.getTransceivers()[0].stop();
+
+ const offer = await pc1.createOffer();
+
+ assert_true(offer.sdp.includes("a=sendonly"), "The audio m-section should be sendonly");
+}, "A stopped sendonly transceiver should generate an inactive m-section in the offer");
+
+promise_test(async (t)=> {
+ const pc1 = new RTCPeerConnection();
+ const pc2 = new RTCPeerConnection();
+ t.add_cleanup(() => pc1.close());
+ t.add_cleanup(() => pc2.close());
+
+ pc1.addTransceiver("audio");
+
+ await exchangeOfferAnswer(pc1, pc2);
+
+ pc1.getTransceivers()[0].direction = "inactive";
+ pc1.getTransceivers()[0].stop();
+
+ const offer = await pc1.createOffer();
+
+ assert_true(offer.sdp.includes("a=inactive"), "The audio m-section should be inactive");
+}, "A stopped inactive transceiver should generate an inactive m-section in the offer");
+</script>
diff --git a/tests/wpt/webgl/meta/conformance/glsl/misc/shader-with-non-reserved-words.html.ini b/tests/wpt/webgl/meta/conformance/glsl/misc/shader-with-non-reserved-words.html.ini
deleted file mode 100644
index fb8852c9e7a..00000000000
--- a/tests/wpt/webgl/meta/conformance/glsl/misc/shader-with-non-reserved-words.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[shader-with-non-reserved-words.html]
- expected: TIMEOUT
- [Overall test]
- expected: NOTRUN
-