Auto merge of #20053 - servo-wpt-sync:wpt_update_14-02-2018, r=jdm
Sync WPT with upstream (14-02-2018) Automated downstream sync of changes from upstream as of 14-02-2018. [no-wpt-sync] <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/20053) <!-- Reviewable:end -->
|
@ -110727,6 +110727,18 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"css/css-flexbox/flexbox_flex-none-wrappable-content.html": [
|
||||||
|
[
|
||||||
|
"/css/css-flexbox/flexbox_flex-none-wrappable-content.html",
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"/css/css-flexbox/flexbox_flex-none-wrappable-content-ref.html",
|
||||||
|
"=="
|
||||||
|
]
|
||||||
|
],
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"css/css-flexbox/flexbox_flex-none.html": [
|
"css/css-flexbox/flexbox_flex-none.html": [
|
||||||
[
|
[
|
||||||
"/css/css-flexbox/flexbox_flex-none.html",
|
"/css/css-flexbox/flexbox_flex-none.html",
|
||||||
|
@ -112523,6 +112535,30 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"css/css-fonts/font-variant-05.xht": [
|
||||||
|
[
|
||||||
|
"/css/css-fonts/font-variant-05.xht",
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"/css/css-fonts/font-variant-05-ref.xht",
|
||||||
|
"=="
|
||||||
|
]
|
||||||
|
],
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"css/css-fonts/font-variant-06.xht": [
|
||||||
|
[
|
||||||
|
"/css/css-fonts/font-variant-06.xht",
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"/css/css-fonts/font-variant-06-ref.xht",
|
||||||
|
"=="
|
||||||
|
]
|
||||||
|
],
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"css/css-fonts/font-variant-alternates-01.html": [
|
"css/css-fonts/font-variant-alternates-01.html": [
|
||||||
[
|
[
|
||||||
"/css/css-fonts/font-variant-alternates-01.html",
|
"/css/css-fonts/font-variant-alternates-01.html",
|
||||||
|
@ -175407,6 +175443,42 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"fetch/corb/img-html-correctly-labeled.sub.html": [
|
||||||
|
[
|
||||||
|
"/fetch/corb/img-html-correctly-labeled.sub.html",
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"/fetch/corb/img-png-mislabeled-as-html.sub-expected.html",
|
||||||
|
"=="
|
||||||
|
]
|
||||||
|
],
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"fetch/corb/img-png-mislabeled-as-html-nosniff.tentative.sub.html": [
|
||||||
|
[
|
||||||
|
"/fetch/corb/img-png-mislabeled-as-html-nosniff.tentative.sub.html",
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"/fetch/corb/img-png-mislabeled-as-html.sub-expected.html",
|
||||||
|
"=="
|
||||||
|
]
|
||||||
|
],
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"fetch/corb/img-png-mislabeled-as-html.sub.html": [
|
||||||
|
[
|
||||||
|
"/fetch/corb/img-png-mislabeled-as-html.sub.html",
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"/fetch/corb/img-png-mislabeled-as-html.sub-expected.html",
|
||||||
|
"=="
|
||||||
|
]
|
||||||
|
],
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"html/browsers/sandboxing/sandbox-parse-noscript.html": [
|
"html/browsers/sandboxing/sandbox-parse-noscript.html": [
|
||||||
[
|
[
|
||||||
"/html/browsers/sandboxing/sandbox-parse-noscript.html",
|
"/html/browsers/sandboxing/sandbox-parse-noscript.html",
|
||||||
|
@ -179607,6 +179679,18 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"svg/shapes/line-dasharray.svg": [
|
||||||
|
[
|
||||||
|
"/svg/shapes/line-dasharray.svg",
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"/svg/shapes/line-dasharray-ref.svg",
|
||||||
|
"=="
|
||||||
|
]
|
||||||
|
],
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"svg/shapes/rect-01.svg": [
|
"svg/shapes/rect-01.svg": [
|
||||||
[
|
[
|
||||||
"/svg/shapes/rect-01.svg",
|
"/svg/shapes/rect-01.svg",
|
||||||
|
@ -236411,6 +236495,11 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"css/css-flexbox/flexbox_flex-none-wrappable-content-ref.html": [
|
||||||
|
[
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"css/css-flexbox/flexbox_flex-unitless-basis-ref.html": [
|
"css/css-flexbox/flexbox_flex-unitless-basis-ref.html": [
|
||||||
[
|
[
|
||||||
{}
|
{}
|
||||||
|
@ -237281,6 +237370,16 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"css/css-fonts/font-variant-05-ref.xht": [
|
||||||
|
[
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"css/css-fonts/font-variant-06-ref.xht": [
|
||||||
|
[
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"css/css-fonts/font-variant-alternates-01-ref.html": [
|
"css/css-fonts/font-variant-alternates-01-ref.html": [
|
||||||
[
|
[
|
||||||
{}
|
{}
|
||||||
|
@ -269496,6 +269595,11 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"fetch/api/redirect/redirect-empty-location.js": [
|
||||||
|
[
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"fetch/api/redirect/redirect-location.js": [
|
"fetch/api/redirect/redirect-location.js": [
|
||||||
[
|
[
|
||||||
{}
|
{}
|
||||||
|
@ -269691,6 +269795,11 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"fetch/api/resources/redirect-empty-location.py": [
|
||||||
|
[
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"fetch/api/resources/redirect.py": [
|
"fetch/api/resources/redirect.py": [
|
||||||
[
|
[
|
||||||
{}
|
{}
|
||||||
|
@ -269756,11 +269865,96 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"fetch/corb/img-html-correctly-labeled.sub-expected.html": [
|
||||||
|
[
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"fetch/corb/img-png-mislabeled-as-html-nosniff.tentative.sub-expected.html": [
|
||||||
|
[
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"fetch/corb/img-png-mislabeled-as-html.sub-expected.html": [
|
||||||
|
[
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"fetch/corb/resources/css-with-json-parser-breaker.css": [
|
"fetch/corb/resources/css-with-json-parser-breaker.css": [
|
||||||
[
|
[
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"fetch/corb/resources/empty-labeled-as-png.png": [
|
||||||
|
[
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"fetch/corb/resources/empty-labeled-as-png.png.headers": [
|
||||||
|
[
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"fetch/corb/resources/html-correctly-labeled.html": [
|
||||||
|
[
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"fetch/corb/resources/html-correctly-labeled.html.headers": [
|
||||||
|
[
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"fetch/corb/resources/js-mislabeled-as-html-nosniff.js": [
|
||||||
|
[
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"fetch/corb/resources/js-mislabeled-as-html-nosniff.js.headers": [
|
||||||
|
[
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"fetch/corb/resources/js-mislabeled-as-html.js": [
|
||||||
|
[
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"fetch/corb/resources/js-mislabeled-as-html.js.headers": [
|
||||||
|
[
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"fetch/corb/resources/png-correctly-labeled.png": [
|
||||||
|
[
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"fetch/corb/resources/png-correctly-labeled.png.headers": [
|
||||||
|
[
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"fetch/corb/resources/png-mislabeled-as-html-nosniff.png": [
|
||||||
|
[
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"fetch/corb/resources/png-mislabeled-as-html-nosniff.png.headers": [
|
||||||
|
[
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"fetch/corb/resources/png-mislabeled-as-html.png": [
|
||||||
|
[
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"fetch/corb/resources/png-mislabeled-as-html.png.headers": [
|
||||||
|
[
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"fetch/data-urls/README.md": [
|
"fetch/data-urls/README.md": [
|
||||||
[
|
[
|
||||||
{}
|
{}
|
||||||
|
@ -290991,6 +291185,11 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"svg/shapes/line-dasharray-ref.svg": [
|
||||||
|
[
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"svg/shapes/rect-01-ref.html": [
|
"svg/shapes/rect-01-ref.html": [
|
||||||
[
|
[
|
||||||
{}
|
{}
|
||||||
|
@ -313481,15 +313680,111 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"css/css-typed-om/the-stylepropertymap/properties/animation-direction.html": [
|
||||||
|
[
|
||||||
|
"/css/css-typed-om/the-stylepropertymap/properties/animation-direction.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"css/css-typed-om/the-stylepropertymap/properties/background-image.html": [
|
||||||
|
[
|
||||||
|
"/css/css-typed-om/the-stylepropertymap/properties/background-image.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"css/css-typed-om/the-stylepropertymap/properties/border-style.html": [
|
||||||
|
[
|
||||||
|
"/css/css-typed-om/the-stylepropertymap/properties/border-style.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"css/css-typed-om/the-stylepropertymap/properties/border-width.html": [
|
||||||
|
[
|
||||||
|
"/css/css-typed-om/the-stylepropertymap/properties/border-width.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"css/css-typed-om/the-stylepropertymap/properties/bottom.html": [
|
||||||
|
[
|
||||||
|
"/css/css-typed-om/the-stylepropertymap/properties/bottom.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"css/css-typed-om/the-stylepropertymap/properties/display.html": [
|
"css/css-typed-om/the-stylepropertymap/properties/display.html": [
|
||||||
[
|
[
|
||||||
"/css/css-typed-om/the-stylepropertymap/properties/display.html",
|
"/css/css-typed-om/the-stylepropertymap/properties/display.html",
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"css/css-typed-om/the-stylepropertymap/properties/margin-top.html": [
|
"css/css-typed-om/the-stylepropertymap/properties/height.html": [
|
||||||
[
|
[
|
||||||
"/css/css-typed-om/the-stylepropertymap/properties/margin-top.html",
|
"/css/css-typed-om/the-stylepropertymap/properties/height.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"css/css-typed-om/the-stylepropertymap/properties/left.html": [
|
||||||
|
[
|
||||||
|
"/css/css-typed-om/the-stylepropertymap/properties/left.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"css/css-typed-om/the-stylepropertymap/properties/margin.html": [
|
||||||
|
[
|
||||||
|
"/css/css-typed-om/the-stylepropertymap/properties/margin.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"css/css-typed-om/the-stylepropertymap/properties/object-position.html": [
|
||||||
|
[
|
||||||
|
"/css/css-typed-om/the-stylepropertymap/properties/object-position.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"css/css-typed-om/the-stylepropertymap/properties/padding.html": [
|
||||||
|
[
|
||||||
|
"/css/css-typed-om/the-stylepropertymap/properties/padding.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"css/css-typed-om/the-stylepropertymap/properties/position.html": [
|
||||||
|
[
|
||||||
|
"/css/css-typed-om/the-stylepropertymap/properties/position.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"css/css-typed-om/the-stylepropertymap/properties/right.html": [
|
||||||
|
[
|
||||||
|
"/css/css-typed-om/the-stylepropertymap/properties/right.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"css/css-typed-om/the-stylepropertymap/properties/text-align.html": [
|
||||||
|
[
|
||||||
|
"/css/css-typed-om/the-stylepropertymap/properties/text-align.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"css/css-typed-om/the-stylepropertymap/properties/text-decoration-style.html": [
|
||||||
|
[
|
||||||
|
"/css/css-typed-om/the-stylepropertymap/properties/text-decoration-style.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"css/css-typed-om/the-stylepropertymap/properties/top.html": [
|
||||||
|
[
|
||||||
|
"/css/css-typed-om/the-stylepropertymap/properties/top.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"css/css-typed-om/the-stylepropertymap/properties/transform.html": [
|
||||||
|
[
|
||||||
|
"/css/css-typed-om/the-stylepropertymap/properties/transform.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"css/css-typed-om/the-stylepropertymap/properties/width.html": [
|
||||||
|
[
|
||||||
|
"/css/css-typed-om/the-stylepropertymap/properties/width.html",
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
@ -315695,6 +315990,12 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"custom-elements/parser/serializing-html-fragments.html": [
|
||||||
|
[
|
||||||
|
"/custom-elements/parser/serializing-html-fragments.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"custom-elements/pseudo-class-defined.html": [
|
"custom-elements/pseudo-class-defined.html": [
|
||||||
[
|
[
|
||||||
"/custom-elements/pseudo-class-defined.html",
|
"/custom-elements/pseudo-class-defined.html",
|
||||||
|
@ -320861,6 +321162,18 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"fetch/api/redirect/redirect-empty-location-worker.html": [
|
||||||
|
[
|
||||||
|
"/fetch/api/redirect/redirect-empty-location-worker.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"fetch/api/redirect/redirect-empty-location.html": [
|
||||||
|
[
|
||||||
|
"/fetch/api/redirect/redirect-empty-location.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"fetch/api/redirect/redirect-location-worker.html": [
|
"fetch/api/redirect/redirect-location-worker.html": [
|
||||||
[
|
[
|
||||||
"/fetch/api/redirect/redirect-location-worker.html",
|
"/fetch/api/redirect/redirect-location-worker.html",
|
||||||
|
@ -321229,6 +321542,24 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"fetch/corb/script-html-correctly-labeled.tentative.sub.html": [
|
||||||
|
[
|
||||||
|
"/fetch/corb/script-html-correctly-labeled.tentative.sub.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"fetch/corb/script-js-mislabeled-as-html-nosniff.sub.html": [
|
||||||
|
[
|
||||||
|
"/fetch/corb/script-js-mislabeled-as-html-nosniff.sub.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"fetch/corb/script-js-mislabeled-as-html.sub.html": [
|
||||||
|
[
|
||||||
|
"/fetch/corb/script-js-mislabeled-as-html.sub.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"fetch/data-urls/base64.any.js": [
|
"fetch/data-urls/base64.any.js": [
|
||||||
[
|
[
|
||||||
"/fetch/data-urls/base64.any.html",
|
"/fetch/data-urls/base64.any.html",
|
||||||
|
@ -326551,6 +326882,12 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"html/semantics/embedded-content/media-elements/track/track-element/src-empty-string.html": [
|
||||||
|
[
|
||||||
|
"/html/semantics/embedded-content/media-elements/track/track-element/src-empty-string.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"html/semantics/embedded-content/media-elements/track/track-element/track-active-cues.html": [
|
"html/semantics/embedded-content/media-elements/track/track-element/track-active-cues.html": [
|
||||||
[
|
[
|
||||||
"/html/semantics/embedded-content/media-elements/track/track-element/track-active-cues.html",
|
"/html/semantics/embedded-content/media-elements/track/track-element/track-active-cues.html",
|
||||||
|
@ -334953,6 +335290,12 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"mediacapture-streams/MediaStreamTrack-getCapabilities.https.html": [
|
||||||
|
[
|
||||||
|
"/mediacapture-streams/MediaStreamTrack-getCapabilities.https.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"mediacapture-streams/MediaStreamTrack-getSettings.https.html": [
|
"mediacapture-streams/MediaStreamTrack-getSettings.https.html": [
|
||||||
[
|
[
|
||||||
"/mediacapture-streams/MediaStreamTrack-getSettings.https.html",
|
"/mediacapture-streams/MediaStreamTrack-getSettings.https.html",
|
||||||
|
@ -358475,6 +358818,18 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"svg/shapes/line-getPointAtLength.svg": [
|
||||||
|
[
|
||||||
|
"/svg/shapes/line-getPointAtLength.svg",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"svg/shapes/line-pathLength.svg": [
|
||||||
|
[
|
||||||
|
"/svg/shapes/line-pathLength.svg",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"svg/struct/UnknownElement/interface.svg": [
|
"svg/struct/UnknownElement/interface.svg": [
|
||||||
[
|
[
|
||||||
"/svg/struct/UnknownElement/interface.svg",
|
"/svg/struct/UnknownElement/interface.svg",
|
||||||
|
@ -484798,6 +485153,14 @@
|
||||||
"9e6b4d11350f15489db6a454f94d9a1118849f99",
|
"9e6b4d11350f15489db6a454f94d9a1118849f99",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
|
"css/css-flexbox/flexbox_flex-none-wrappable-content-ref.html": [
|
||||||
|
"2b25e256bb4caad2a246bdfb10d04bf37cbb313c",
|
||||||
|
"support"
|
||||||
|
],
|
||||||
|
"css/css-flexbox/flexbox_flex-none-wrappable-content.html": [
|
||||||
|
"9311950e6319a66bcf5202e1bedbef723e63f17a",
|
||||||
|
"reftest"
|
||||||
|
],
|
||||||
"css/css-flexbox/flexbox_flex-none.html": [
|
"css/css-flexbox/flexbox_flex-none.html": [
|
||||||
"97e73494da7313ed921bb6321f40974cbd310450",
|
"97e73494da7313ed921bb6321f40974cbd310450",
|
||||||
"reftest"
|
"reftest"
|
||||||
|
@ -486439,7 +486802,7 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"css/css-fonts/font-feature-settings-serialization-001.html": [
|
"css/css-fonts/font-feature-settings-serialization-001.html": [
|
||||||
"d1032e08aee1e9a7d1309ad94bd5633535ce9315",
|
"bf557e7f93663a36dab3ea358401b16c2e88811a",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"css/css-fonts/font-features-across-space-1-ref.html": [
|
"css/css-fonts/font-features-across-space-1-ref.html": [
|
||||||
|
@ -486674,6 +487037,22 @@
|
||||||
"b5417f15f571c21e754df033a597193384cf8610",
|
"b5417f15f571c21e754df033a597193384cf8610",
|
||||||
"reftest"
|
"reftest"
|
||||||
],
|
],
|
||||||
|
"css/css-fonts/font-variant-05-ref.xht": [
|
||||||
|
"62d82d51077bb2c104b0d70b2d866ab40debe8d1",
|
||||||
|
"support"
|
||||||
|
],
|
||||||
|
"css/css-fonts/font-variant-05.xht": [
|
||||||
|
"b83b63950f36fcfff48b395a6bfe97d7b600f5ce",
|
||||||
|
"reftest"
|
||||||
|
],
|
||||||
|
"css/css-fonts/font-variant-06-ref.xht": [
|
||||||
|
"faa93a08f03137f79c128a0a2e166a6b12e75e27",
|
||||||
|
"support"
|
||||||
|
],
|
||||||
|
"css/css-fonts/font-variant-06.xht": [
|
||||||
|
"2452e37602f11bfb2711e371206588d9dfd403ac",
|
||||||
|
"reftest"
|
||||||
|
],
|
||||||
"css/css-fonts/font-variant-alternates-01-ref.html": [
|
"css/css-fonts/font-variant-alternates-01-ref.html": [
|
||||||
"2d7df070714d9efa07d70e434666ff4f780b55be",
|
"2d7df070714d9efa07d70e434666ff4f780b55be",
|
||||||
"support"
|
"support"
|
||||||
|
@ -516050,18 +516429,82 @@
|
||||||
"197b30d860a97f20a8c25a5357f5b2e096c7b2fd",
|
"197b30d860a97f20a8c25a5357f5b2e096c7b2fd",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"css/css-typed-om/the-stylepropertymap/properties/display.html": [
|
"css/css-typed-om/the-stylepropertymap/properties/animation-direction.html": [
|
||||||
"344c75e256cf3284d6582c2cd3c9f726d6d7f443",
|
"05e0be2c67fd695d693f2a639acf88ff78d8fd04",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"css/css-typed-om/the-stylepropertymap/properties/margin-top.html": [
|
"css/css-typed-om/the-stylepropertymap/properties/background-image.html": [
|
||||||
"3a6cb963dd8ff07522ade6839f8de5493fd49414",
|
"1255fea8e74561e14720ccf422fd841e1d3e32fa",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"css/css-typed-om/the-stylepropertymap/properties/border-style.html": [
|
||||||
|
"5d258827fb6a26d07efbdf5b47a440300f0aa307",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"css/css-typed-om/the-stylepropertymap/properties/border-width.html": [
|
||||||
|
"9a3cb4f96aa14f9a63261434ec46331447821965",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"css/css-typed-om/the-stylepropertymap/properties/bottom.html": [
|
||||||
|
"e710943711544b28d07676df15966950c0d76efa",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"css/css-typed-om/the-stylepropertymap/properties/display.html": [
|
||||||
|
"26ba44d8d5146b9d606a1668659ee16876b371c5",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"css/css-typed-om/the-stylepropertymap/properties/height.html": [
|
||||||
|
"aa7fdef188168368bbf8d867c96712bb9c77d857",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"css/css-typed-om/the-stylepropertymap/properties/left.html": [
|
||||||
|
"354512fcb071a863f11305f36cf3605ceef733b8",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"css/css-typed-om/the-stylepropertymap/properties/margin.html": [
|
||||||
|
"b475a6446e769e44237bb9d99176069dae10b4fb",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"css/css-typed-om/the-stylepropertymap/properties/object-position.html": [
|
||||||
|
"c3040ca9284c50c2149dc09502fde5f20d0a4baa",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"css/css-typed-om/the-stylepropertymap/properties/padding.html": [
|
||||||
|
"45d4a9a76054d2f867c28e7cda8f006d90551770",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"css/css-typed-om/the-stylepropertymap/properties/position.html": [
|
||||||
|
"4e3eccee58cec470febe4cd9a9149f4b4436487e",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"css/css-typed-om/the-stylepropertymap/properties/resources/testsuite.js": [
|
"css/css-typed-om/the-stylepropertymap/properties/resources/testsuite.js": [
|
||||||
"c399dc2c73ebcabbcbc2bb6716558b71bfd487b5",
|
"44d21574cfeaa42e292a5c7add83a85fd3ed6975",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
|
"css/css-typed-om/the-stylepropertymap/properties/right.html": [
|
||||||
|
"68a2611eaf9eecb7393c2b0db0f4378ebe285f22",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"css/css-typed-om/the-stylepropertymap/properties/text-align.html": [
|
||||||
|
"88a1f5866a767c25dec2ef75728c68c5631d371f",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"css/css-typed-om/the-stylepropertymap/properties/text-decoration-style.html": [
|
||||||
|
"aa9698c5b4cb896fc43c58794df84ec0bbb0e3e9",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"css/css-typed-om/the-stylepropertymap/properties/top.html": [
|
||||||
|
"218b50f6b7d8209514bca8d0a8121263b07ab1e2",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"css/css-typed-om/the-stylepropertymap/properties/transform.html": [
|
||||||
|
"2723b6d3e9a213a1b33e9ecfafd5fd42eb8bca33",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"css/css-typed-om/the-stylepropertymap/properties/width.html": [
|
||||||
|
"b6f2104ac9a5a4e288b83e5d4db6077ba72a0bad",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
"css/css-ui/OWNERS": [
|
"css/css-ui/OWNERS": [
|
||||||
"beeb8a77d396e48731fd1e69a922b6e2c84c2caa",
|
"beeb8a77d396e48731fd1e69a922b6e2c84c2caa",
|
||||||
"support"
|
"support"
|
||||||
|
@ -538202,6 +538645,10 @@
|
||||||
"a62669ffcc75d54df38b65e33463566238c8644c",
|
"a62669ffcc75d54df38b65e33463566238c8644c",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
|
"custom-elements/parser/serializing-html-fragments.html": [
|
||||||
|
"cee443e8fbf77d347a7d97fdbdf497af2181d2c1",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
"custom-elements/pseudo-class-defined.html": [
|
"custom-elements/pseudo-class-defined.html": [
|
||||||
"cf29756830dc12e60390c08486bbb3170c9c9c71",
|
"cf29756830dc12e60390c08486bbb3170c9c9c71",
|
||||||
"testharness"
|
"testharness"
|
||||||
|
@ -543267,7 +543714,7 @@
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"fetch/api/abort/general.any.js": [
|
"fetch/api/abort/general.any.js": [
|
||||||
"784c14c7fd5a605d380584aeefb35392579f21d9",
|
"a0b775a19b3046336c45289f5a87ea57e476f084",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"fetch/api/abort/serviceworker-intercepted.https.html": [
|
"fetch/api/abort/serviceworker-intercepted.https.html": [
|
||||||
|
@ -543686,6 +544133,18 @@
|
||||||
"2c01e28adc2334a1405fc2f53481584be89dd5d5",
|
"2c01e28adc2334a1405fc2f53481584be89dd5d5",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
|
"fetch/api/redirect/redirect-empty-location-worker.html": [
|
||||||
|
"12efb427d7507bb712dfe8734c0c3af25fbfb34d",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"fetch/api/redirect/redirect-empty-location.html": [
|
||||||
|
"1fcd9a1d5e05204da9e6bdc9b7794e887c857950",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"fetch/api/redirect/redirect-empty-location.js": [
|
||||||
|
"1b3e1c6ea531f0e313c6a41ed4d4b16df27022d4",
|
||||||
|
"support"
|
||||||
|
],
|
||||||
"fetch/api/redirect/redirect-location-worker.html": [
|
"fetch/api/redirect/redirect-location-worker.html": [
|
||||||
"f3c0991345e839954459801454d22fe81df8d72d",
|
"f3c0991345e839954459801454d22fe81df8d72d",
|
||||||
"testharness"
|
"testharness"
|
||||||
|
@ -544006,6 +544465,10 @@
|
||||||
"de99c8990074a9f248989cebe7cf1adb0f4ec84b",
|
"de99c8990074a9f248989cebe7cf1adb0f4ec84b",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
|
"fetch/api/resources/redirect-empty-location.py": [
|
||||||
|
"cbf1d7b4ee75f79144114c3444337d4c1fc30402",
|
||||||
|
"support"
|
||||||
|
],
|
||||||
"fetch/api/resources/redirect.py": [
|
"fetch/api/resources/redirect.py": [
|
||||||
"79c8b1bcad05e05a7b628edb22fdaedbdf2c3bc5",
|
"79c8b1bcad05e05a7b628edb22fdaedbdf2c3bc5",
|
||||||
"support"
|
"support"
|
||||||
|
@ -544131,17 +544594,109 @@
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"fetch/corb/README.md": [
|
"fetch/corb/README.md": [
|
||||||
"5107a057d88964121d276f1f3b3a7c0f694c9485",
|
"5dd841770382cd2f6f1a09dca1103ef146bc912a",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"fetch/corb/css-with-json-parser-breaker.sub.html": [
|
"fetch/corb/css-with-json-parser-breaker.sub.html": [
|
||||||
"20b9663300023edef5a62029e74d5100be1239fd",
|
"f8d39858fe81759e62e431e06f05b759ab3b5d77",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
|
"fetch/corb/img-html-correctly-labeled.sub-expected.html": [
|
||||||
|
"a252054121e7f50a3bcb949ae5a40f278c842c04",
|
||||||
|
"support"
|
||||||
|
],
|
||||||
|
"fetch/corb/img-html-correctly-labeled.sub.html": [
|
||||||
|
"699a8b2c8bb1f089f3ef1827bf8cfe1873849bf8",
|
||||||
|
"reftest"
|
||||||
|
],
|
||||||
|
"fetch/corb/img-png-mislabeled-as-html-nosniff.tentative.sub-expected.html": [
|
||||||
|
"1980633a4167993d90636be2ebba2aa8d72299b7",
|
||||||
|
"support"
|
||||||
|
],
|
||||||
|
"fetch/corb/img-png-mislabeled-as-html-nosniff.tentative.sub.html": [
|
||||||
|
"7169e4ebe99797d15f006f6787e84093780fbaa6",
|
||||||
|
"reftest"
|
||||||
|
],
|
||||||
|
"fetch/corb/img-png-mislabeled-as-html.sub-expected.html": [
|
||||||
|
"730878950e0b7a4097d42e7eaaae79304fe05106",
|
||||||
|
"support"
|
||||||
|
],
|
||||||
|
"fetch/corb/img-png-mislabeled-as-html.sub.html": [
|
||||||
|
"a7775fb534d38a5d5b5827a27f0c16e1268f4d0b",
|
||||||
|
"reftest"
|
||||||
|
],
|
||||||
"fetch/corb/resources/css-with-json-parser-breaker.css": [
|
"fetch/corb/resources/css-with-json-parser-breaker.css": [
|
||||||
"dfcdf2ea931e4eeaaed36c471bad6b80f2c0115d",
|
"dfcdf2ea931e4eeaaed36c471bad6b80f2c0115d",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
|
"fetch/corb/resources/empty-labeled-as-png.png": [
|
||||||
|
"da39a3ee5e6b4b0d3255bfef95601890afd80709",
|
||||||
|
"support"
|
||||||
|
],
|
||||||
|
"fetch/corb/resources/empty-labeled-as-png.png.headers": [
|
||||||
|
"4b4c62250186abda4150724d10904b350d82cec0",
|
||||||
|
"support"
|
||||||
|
],
|
||||||
|
"fetch/corb/resources/html-correctly-labeled.html": [
|
||||||
|
"3f89c5d2069c30b9d7108fd69ed8e65f4ade2e9c",
|
||||||
|
"support"
|
||||||
|
],
|
||||||
|
"fetch/corb/resources/html-correctly-labeled.html.headers": [
|
||||||
|
"41e260e7df49e0e4ddb1fc5df11913dbda15edd7",
|
||||||
|
"support"
|
||||||
|
],
|
||||||
|
"fetch/corb/resources/js-mislabeled-as-html-nosniff.js": [
|
||||||
|
"ec322736e35e0649e1f3cd4d5b88e2f211436e2b",
|
||||||
|
"support"
|
||||||
|
],
|
||||||
|
"fetch/corb/resources/js-mislabeled-as-html-nosniff.js.headers": [
|
||||||
|
"1bea535d497ae73eb7a84d3a14a5276e9d0ccc34",
|
||||||
|
"support"
|
||||||
|
],
|
||||||
|
"fetch/corb/resources/js-mislabeled-as-html.js": [
|
||||||
|
"ec322736e35e0649e1f3cd4d5b88e2f211436e2b",
|
||||||
|
"support"
|
||||||
|
],
|
||||||
|
"fetch/corb/resources/js-mislabeled-as-html.js.headers": [
|
||||||
|
"41e260e7df49e0e4ddb1fc5df11913dbda15edd7",
|
||||||
|
"support"
|
||||||
|
],
|
||||||
|
"fetch/corb/resources/png-correctly-labeled.png": [
|
||||||
|
"99949c515749e66f471c3589ee7a0ef518aaccb5",
|
||||||
|
"support"
|
||||||
|
],
|
||||||
|
"fetch/corb/resources/png-correctly-labeled.png.headers": [
|
||||||
|
"4b4c62250186abda4150724d10904b350d82cec0",
|
||||||
|
"support"
|
||||||
|
],
|
||||||
|
"fetch/corb/resources/png-mislabeled-as-html-nosniff.png": [
|
||||||
|
"99949c515749e66f471c3589ee7a0ef518aaccb5",
|
||||||
|
"support"
|
||||||
|
],
|
||||||
|
"fetch/corb/resources/png-mislabeled-as-html-nosniff.png.headers": [
|
||||||
|
"1bea535d497ae73eb7a84d3a14a5276e9d0ccc34",
|
||||||
|
"support"
|
||||||
|
],
|
||||||
|
"fetch/corb/resources/png-mislabeled-as-html.png": [
|
||||||
|
"99949c515749e66f471c3589ee7a0ef518aaccb5",
|
||||||
|
"support"
|
||||||
|
],
|
||||||
|
"fetch/corb/resources/png-mislabeled-as-html.png.headers": [
|
||||||
|
"41e260e7df49e0e4ddb1fc5df11913dbda15edd7",
|
||||||
|
"support"
|
||||||
|
],
|
||||||
|
"fetch/corb/script-html-correctly-labeled.tentative.sub.html": [
|
||||||
|
"71cb97517821177aa1c1d116f830cd2315963d18",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"fetch/corb/script-js-mislabeled-as-html-nosniff.sub.html": [
|
||||||
|
"ff421a4a827db6c8eeec97d2a7ee7010fd8fd686",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"fetch/corb/script-js-mislabeled-as-html.sub.html": [
|
||||||
|
"f629f76593a03c769ca4a66b8cd9e5b1d2d20bfe",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
"fetch/data-urls/README.md": [
|
"fetch/data-urls/README.md": [
|
||||||
"83d54a0532dd87ab1fa9f5f9b7e01d9a43d91eae",
|
"83d54a0532dd87ab1fa9f5f9b7e01d9a43d91eae",
|
||||||
"support"
|
"support"
|
||||||
|
@ -544215,7 +544770,7 @@
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"fetch/nosniff/importscripts.js": [
|
"fetch/nosniff/importscripts.js": [
|
||||||
"e7c02b40c457cc5347acb5a13d0ce14268b8187d",
|
"625178211adedea920694a0ed2687b9eea77f20e",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"fetch/nosniff/parsing-nosniff.html": [
|
"fetch/nosniff/parsing-nosniff.html": [
|
||||||
|
@ -544263,15 +544818,15 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"fetch/nosniff/script.html": [
|
"fetch/nosniff/script.html": [
|
||||||
"762b6033a5b75465417f9921f7d06781ad036cbe",
|
"cfbd6d0996251d5f311a70d889af3a11552eb844",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"fetch/nosniff/stylesheet.html": [
|
"fetch/nosniff/stylesheet.html": [
|
||||||
"2c5801cbf150010da8ef42a1f9e37b93540a8f04",
|
"32dd5cdbc638ac7c141036633e136137854c3bb4",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"fetch/nosniff/worker.html": [
|
"fetch/nosniff/worker.html": [
|
||||||
"94af02c5ca5146386acd4fae5856f89cd244bed1",
|
"a9e0f5b9b70917aabbff3ad5dd03a5d5dccfa9f0",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"fetch/security/dangling-markup-mitigation-data-url.tentative.sub.html": [
|
"fetch/security/dangling-markup-mitigation-data-url.tentative.sub.html": [
|
||||||
|
@ -556822,6 +557377,10 @@
|
||||||
"9e5b2fa642544c20e04d542d9a8f701d1fa2d165",
|
"9e5b2fa642544c20e04d542d9a8f701d1fa2d165",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
|
"html/semantics/embedded-content/media-elements/track/track-element/src-empty-string.html": [
|
||||||
|
"7ecc926df96bf76a9e35355699edd1530e713570",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
"html/semantics/embedded-content/media-elements/track/track-element/track-active-cues.html": [
|
"html/semantics/embedded-content/media-elements/track/track-element/track-active-cues.html": [
|
||||||
"ee900652dced5cb21fde825760c7ee3450ffba00",
|
"ee900652dced5cb21fde825760c7ee3450ffba00",
|
||||||
"testharness"
|
"testharness"
|
||||||
|
@ -564467,7 +565026,7 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"innerText/getter.html": [
|
"innerText/getter.html": [
|
||||||
"644b5b18359d26db9cd4d037b075ca016e2337b5",
|
"28fc321d84fac1173da328bdfb65b052000fcb4d",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"innerText/multiple-text-nodes.window.js": [
|
"innerText/multiple-text-nodes.window.js": [
|
||||||
|
@ -566102,6 +566661,10 @@
|
||||||
"6511203b417168722d1e05d90e58364ebce145ea",
|
"6511203b417168722d1e05d90e58364ebce145ea",
|
||||||
"manual"
|
"manual"
|
||||||
],
|
],
|
||||||
|
"mediacapture-streams/MediaStreamTrack-getCapabilities.https.html": [
|
||||||
|
"06662744434126b87eb1934504b53953419825cb",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
"mediacapture-streams/MediaStreamTrack-getSettings.https.html": [
|
"mediacapture-streams/MediaStreamTrack-getSettings.https.html": [
|
||||||
"013d31ba196d5a6f1506ceb8eab088e629dfd59b",
|
"013d31ba196d5a6f1506ceb8eab088e629dfd59b",
|
||||||
"testharness"
|
"testharness"
|
||||||
|
@ -586199,7 +586762,7 @@
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"service-workers/service-worker/webvtt-cross-origin.https.html": [
|
"service-workers/service-worker/webvtt-cross-origin.https.html": [
|
||||||
"a2d74b1653b4b6f4768d2cc571e1e5ad3bfbb44c",
|
"996d69509c5b63ab919a123cc7bf872bcce21c06",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"service-workers/service-worker/windowclient-navigate.https.html": [
|
"service-workers/service-worker/windowclient-navigate.https.html": [
|
||||||
|
@ -590678,6 +591241,22 @@
|
||||||
"b85e9086b134478e4c4b468cb19cc4e57aca06ae",
|
"b85e9086b134478e4c4b468cb19cc4e57aca06ae",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
|
"svg/shapes/line-dasharray-ref.svg": [
|
||||||
|
"1703bd2fa544c3b2a0cd9a2ff3ff329089f19e6a",
|
||||||
|
"support"
|
||||||
|
],
|
||||||
|
"svg/shapes/line-dasharray.svg": [
|
||||||
|
"871c635c20ed0d6fb5466d706488bb0e9b846cf0",
|
||||||
|
"reftest"
|
||||||
|
],
|
||||||
|
"svg/shapes/line-getPointAtLength.svg": [
|
||||||
|
"33812f7122653c9d6c90a04c30cc77a4e160a0b3",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"svg/shapes/line-pathLength.svg": [
|
||||||
|
"639fd788d2a53a43811a69ac17199f005d7510ab",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
"svg/shapes/rect-01-ref.html": [
|
"svg/shapes/rect-01-ref.html": [
|
||||||
"f22176bd9807ed4a8cb38ce8481e1aaaecd6bb9b",
|
"f22176bd9807ed4a8cb38ce8481e1aaaecd6bb9b",
|
||||||
"support"
|
"support"
|
||||||
|
|
|
@ -5,3 +5,6 @@
|
||||||
[font-feature-settings should be serialized with double quotes, and the default value of 1 should be omitted]
|
[font-feature-settings should be serialized with double quotes, and the default value of 1 should be omitted]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[font-feature-settings should serialize 0 instead of off, given it's shorter]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
[serializing-html-fragments.html]
|
||||||
|
["is" value should be serialized if the custom element has no "is" content attribute]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
["is" value should be serialized even for an undefined element]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
[redirect-empty-location-worker.html]
|
||||||
|
[redirect response with empty Location, follow mode]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[redirect response with empty Location, manual mode]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
[redirect-empty-location.html]
|
||||||
|
[redirect response with empty Location, follow mode]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[redirect response with empty Location, manual mode]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[script-html-correctly-labeled.tentative.sub.html]
|
||||||
|
[Untitled]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[script-js-mislabeled-as-html-nosniff.sub.html]
|
||||||
|
[Untitled]
|
||||||
|
expected: FAIL
|
||||||
|
|
13
tests/wpt/metadata/fetch/nosniff/stylesheet.html.ini
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
[stylesheet.html]
|
||||||
|
[URL query: text/html]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[URL query: text/json]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Revalidated URL query: text/html]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Revalidated URL query: text/json]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
[xmlhttprequest-sync-default-feature-policy.sub.html]
|
[xmlhttprequest-sync-default-feature-policy.sub.html]
|
||||||
expected: ERROR
|
expected: TIMEOUT
|
||||||
[Default "sync-xhr" feature policy ["*"\] allows same-origin iframes.]
|
[Default "sync-xhr" feature policy ["*"\] allows same-origin iframes.]
|
||||||
expected: TIMEOUT
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<title>Reference for specifying flex:none on wrappable content should give content its full width</title>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
span {
|
||||||
|
font-family: Ahem;
|
||||||
|
color: green;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div><span>XXX XXX XXX</span></div>
|
||||||
|
|
||||||
|
<div style="margin-top: 1em;">You should see three green rectangles above, all on the same line.</div>
|
|
@ -0,0 +1,20 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<title>Specifying flex:none on wrappable content should give content its full width</title>
|
||||||
|
<link rel="help" href="http://www.w3.org/TR/css-flexbox-1/#flex-common">
|
||||||
|
<meta name="assert" content="When content has flex:none, it should be given its full width">
|
||||||
|
<link rel="match" href="flexbox_flex-none-wrappable-content-ref.html">
|
||||||
|
|
||||||
|
<style>
|
||||||
|
span {
|
||||||
|
font-family: Ahem;
|
||||||
|
color: green;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div style="display: flex; width: 5px;">
|
||||||
|
<div style="flex: none;">
|
||||||
|
<span>XXX XXX XXX</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div style="margin-top: 1em;">You should see three green rectangles above, all on the same line.</div>
|
|
@ -13,14 +13,22 @@
|
||||||
#test1 {
|
#test1 {
|
||||||
font-feature-settings: 'vert' 1;
|
font-feature-settings: 'vert' 1;
|
||||||
}
|
}
|
||||||
|
#test2 {
|
||||||
|
font-feature-settings: "vert" off;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
<div id="test"></div>
|
<div id="test"></div>
|
||||||
<div id="test1"></div>
|
<div id="test1"></div>
|
||||||
|
<div id="test2"></div>
|
||||||
<script>
|
<script>
|
||||||
const div = document.querySelector("#test");
|
const div = document.querySelector("#test");
|
||||||
const div1 = document.querySelector("#test1");
|
const div1 = document.querySelector("#test1");
|
||||||
|
const div2 = document.querySelector("#test2");
|
||||||
test(function() {
|
test(function() {
|
||||||
assert_equals(getComputedStyle(div).fontFeatureSettings, '"vert"');
|
assert_equals(getComputedStyle(div).fontFeatureSettings, '"vert"');
|
||||||
assert_equals(getComputedStyle(div1).fontFeatureSettings, '"vert"');
|
assert_equals(getComputedStyle(div1).fontFeatureSettings, '"vert"');
|
||||||
}, "font-feature-settings should be serialized with double quotes, and the default value of 1 should be omitted");
|
}, "font-feature-settings should be serialized with double quotes, and the default value of 1 should be omitted");
|
||||||
|
test(function() {
|
||||||
|
assert_equals(getComputedStyle(div2).fontFeatureSettings, '"vert" 0');
|
||||||
|
}, "font-feature-settings should serialize 0 instead of off, given it's shorter");
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<title>CSS Test: font-variant: none; low level equivalence</title>
|
||||||
|
<link rel="author" title="Mike Bremford" href="mike@bfo.com" />
|
||||||
|
<style>
|
||||||
|
@font-face {
|
||||||
|
font-family: fwf;
|
||||||
|
src: url(support/fonts/FontWithFancyFeatures.otf);
|
||||||
|
}
|
||||||
|
.test {
|
||||||
|
font-family: fwf;
|
||||||
|
font-size: 2.4em;
|
||||||
|
line-height: 0.5;
|
||||||
|
color: purple;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>Test passes if the six lines below are identical, with five check marks.</p>
|
||||||
|
<section class="test">
|
||||||
|
<p>AAAAA</p>
|
||||||
|
<p>AAAAA</p>
|
||||||
|
<p>AAAAA</p>
|
||||||
|
<p>AAAAA</p>
|
||||||
|
<p>AAAAA</p>
|
||||||
|
<p>AAAAA</p>
|
||||||
|
</section>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,69 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<title>CSS Test: font-variant in @font-face rule is overriden by equivalent style rules</title>
|
||||||
|
<link rel="author" title="Mike Bremford" href="mike@bfo.com" />
|
||||||
|
<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-prop" />
|
||||||
|
<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop" />
|
||||||
|
<link rel="match" href="font-variant-05-ref.xht" />
|
||||||
|
<meta name="assert" content="Setting ‘font-variant-ligatures’ properties will override the same properties set in the @font-face rule. But properties set there and not explicitly turned off or on later remain set." />
|
||||||
|
<style>
|
||||||
|
@font-face {
|
||||||
|
font-family: fwf;
|
||||||
|
src: url(support/fonts/FontWithFancyFeatures.otf);
|
||||||
|
font-variant: no-common-ligatures no-contextual discretionary-ligatures historical-ligatures;
|
||||||
|
}
|
||||||
|
.test {
|
||||||
|
font-family: fwf;
|
||||||
|
font-size: 2.4em;
|
||||||
|
line-height: 0.5;
|
||||||
|
color: purple;
|
||||||
|
}
|
||||||
|
.line1 { }
|
||||||
|
.line2 { font-variant-ligatures: normal; }
|
||||||
|
.line3 { font-variant-ligatures: common-ligatures contextual; }
|
||||||
|
.line4 { font-variant-ligatures: common-ligatures contextual discretionary-ligatures historical-ligatures; }
|
||||||
|
.line5 { font-feature-settings: "liga" on, "clig" on, "calt" on, "hlig" on, "dlig" on }
|
||||||
|
/**
|
||||||
|
* Some notes on this test case, which aims to explore the
|
||||||
|
* font-variant precedence rules and the exact value of
|
||||||
|
* "normal" for font-variant-ligatures.
|
||||||
|
*
|
||||||
|
* line1:
|
||||||
|
* font-variant is completely set in the @font-face rule.
|
||||||
|
*
|
||||||
|
* line2:
|
||||||
|
* font-variant-ligatures: normal will reset "common-ligatures"
|
||||||
|
* and "contextual" both to true. Discretionary and historical
|
||||||
|
* ligatures are off by default, but they are not explicitly
|
||||||
|
* disabled with a value of "normal". As stated in section 7.1,
|
||||||
|
* "Individual features are only disabled when explicitly
|
||||||
|
* overridden by the author". These features were turned on in
|
||||||
|
* the @font-face rule, so remain on.
|
||||||
|
*
|
||||||
|
* line3:
|
||||||
|
* identical to line2 except that instead of "normal" for
|
||||||
|
* font-variant-ligatures we use the expanded equivalent,
|
||||||
|
* explicitly turning on common-ligatures and contextual, and
|
||||||
|
* leaving discretionary and historical unchanged.
|
||||||
|
*
|
||||||
|
* line4:
|
||||||
|
* we explicitly reset all values of font-variant-ligatures
|
||||||
|
* properties to the same values as are set in the @font-face
|
||||||
|
* rule.
|
||||||
|
*/
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>Test passes if the six lines below are identical, with five check marks.</p>
|
||||||
|
<section class="test">
|
||||||
|
<p class="line1">AAAFE</p>
|
||||||
|
<p class="line2">CDGFE</p>
|
||||||
|
<p class="line3">CDGFE</p>
|
||||||
|
<p class="line4">CDGFE</p>
|
||||||
|
<p class="line5">CDGFE</p>
|
||||||
|
<p>AAAAA</p>
|
||||||
|
</section>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,34 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<title>CSS Test: font-variant in @font-face rule is overriden by equivalent style rules</title>
|
||||||
|
<link rel="author" title="Mike Bremford" href="mike@bfo.com" />
|
||||||
|
<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#feature-precedence" />
|
||||||
|
<style>
|
||||||
|
@font-face {
|
||||||
|
font-family: fwf;
|
||||||
|
src: url(support/fonts/FontWithFancyFeatures.otf);
|
||||||
|
}
|
||||||
|
.test {
|
||||||
|
font-family: fwf;
|
||||||
|
font-size: 2.4em;
|
||||||
|
color: green;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>Test passes if there are nine check marks below and no red visible.</p>
|
||||||
|
<section class="test">
|
||||||
|
<span>A</span>
|
||||||
|
<span>A</span>
|
||||||
|
<span>A</span>
|
||||||
|
<span>A</span>
|
||||||
|
<span>A</span>
|
||||||
|
<span>A</span>
|
||||||
|
<span>A</span>
|
||||||
|
<span>A</span>
|
||||||
|
<span>A</span>
|
||||||
|
</section>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,82 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<title>CSS Test: font-variant in @font-face rule is overriden by equivalent style rules</title>
|
||||||
|
<link rel="author" title="Mike Bremford" href="mike@bfo.com" />
|
||||||
|
<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-prop" />
|
||||||
|
<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#feature-precedence" />
|
||||||
|
<link rel="match" href="font-variant-06-ref.xht" />
|
||||||
|
<meta name="assert" content="‘font-variant-numeric’ cannot turn OFF features turned ON in @font-face" />
|
||||||
|
<style>
|
||||||
|
@font-face {
|
||||||
|
font-family: fwf;
|
||||||
|
src: url(support/fonts/FontWithFancyFeatures.otf);
|
||||||
|
font-variant: oldstyle-nums;
|
||||||
|
}
|
||||||
|
.test, .ref {
|
||||||
|
font-family: fwf;
|
||||||
|
font-size: 2.4em;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
.test {
|
||||||
|
color: green;
|
||||||
|
}
|
||||||
|
.ref {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
.t1 { }
|
||||||
|
.t2 { font-variant-numeric: oldstyle-nums; }
|
||||||
|
.t3 { font-variant-numeric: normal; }
|
||||||
|
.t4 { font-variant-numeric: slashed-zero; }
|
||||||
|
.t5 { font-variant-numeric: invalid-value; }
|
||||||
|
.t6 { font-variant: none; }
|
||||||
|
.t7 { font-variant: normal; }
|
||||||
|
.t8 { font-variant: initial; }
|
||||||
|
.t9 { font-variant: invalid-value; }
|
||||||
|
/**
|
||||||
|
* Some notes on this test.
|
||||||
|
*
|
||||||
|
* t1
|
||||||
|
* the font-variant property from @font-face is applied.
|
||||||
|
* t2
|
||||||
|
* simply restating the value set in the @font-face rule
|
||||||
|
* t3
|
||||||
|
* "font-variant-numeric: normal" does not turn off the "on" value
|
||||||
|
* for oldstyle-nums, which remains on as set in @font-face
|
||||||
|
* t4
|
||||||
|
* "font-variant-numeric: slashed-zero" is valid, but does not
|
||||||
|
* change the "on" value for oldstyle-nums as set in @font-face
|
||||||
|
* t6, t7, t8
|
||||||
|
these font-variant values all set font-variant-numeric to normal
|
||||||
|
* t5, r9
|
||||||
|
* an invalid value means the rule is invalid, and should be ignored.
|
||||||
|
*/
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>Test passes if there are nine check marks below and no red visible.</p>
|
||||||
|
<section class="ref">
|
||||||
|
<span>A</span>
|
||||||
|
<span>A</span>
|
||||||
|
<span>A</span>
|
||||||
|
<span>A</span>
|
||||||
|
<span>A</span>
|
||||||
|
<span>A</span>
|
||||||
|
<span>A</span>
|
||||||
|
<span>A</span>
|
||||||
|
<span>A</span>
|
||||||
|
</section>
|
||||||
|
<section class="test">
|
||||||
|
<span class="t1">Q</span>
|
||||||
|
<span class="t2">Q</span>
|
||||||
|
<span class="t3">Q</span>
|
||||||
|
<span class="t4">Q</span>
|
||||||
|
<span class="t5">Q</span>
|
||||||
|
<span class="t6">Q</span>
|
||||||
|
<span class="t7">Q</span>
|
||||||
|
<span class="t8">Q</span>
|
||||||
|
<span class="t9">Q</span>
|
||||||
|
</section>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,24 @@
|
||||||
|
<!doctype html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>'animation-direction' property</title>
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="../../resources/testhelper.js"></script>
|
||||||
|
<script src="resources/testsuite.js"></script>
|
||||||
|
<body>
|
||||||
|
<div id="log"></div>
|
||||||
|
<script>
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// FIXME: animation-direction is list-valued. Run list-valued tests here too.
|
||||||
|
runPropertyTests('animation-direction', [
|
||||||
|
{ syntax: 'normal' },
|
||||||
|
{ syntax: 'reverse' },
|
||||||
|
{ syntax: 'alternate-reverse' },
|
||||||
|
{ syntax: 'alternate' },
|
||||||
|
]);
|
||||||
|
|
||||||
|
</script>
|
|
@ -1,6 +1,6 @@
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>'margin-top' property</title>
|
<title>'background-image' property</title>
|
||||||
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
|
||||||
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
|
||||||
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
|
||||||
|
@ -9,15 +9,14 @@
|
||||||
<script src="../../resources/testhelper.js"></script>
|
<script src="../../resources/testhelper.js"></script>
|
||||||
<script src="resources/testsuite.js"></script>
|
<script src="resources/testsuite.js"></script>
|
||||||
<body>
|
<body>
|
||||||
<div id="log">
|
<div id="log"></div>
|
||||||
<script>
|
<script>
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
runPropertyTests('margin-top', [
|
// FIXME: background-image is list-valued. Run list-valued tests here too.
|
||||||
{ specified: '0' },
|
runPropertyTests('background-image', [
|
||||||
{ specified: '<ident>', examples: [new CSSKeywordValue('auto')] },
|
{ syntax: 'none' },
|
||||||
{ specified: '<percentage>' },
|
{ syntax: '<image>' },
|
||||||
{ specified: '<length>' },
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
</script>
|
</script>
|
|
@ -0,0 +1,24 @@
|
||||||
|
<!doctype html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>border style properties</title>
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="../../resources/testhelper.js"></script>
|
||||||
|
<script src="resources/testsuite.js"></script>
|
||||||
|
<body>
|
||||||
|
<div id="log"></div>
|
||||||
|
<script>
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
for (const suffix of ['top', 'left', 'right', 'bottom']) {
|
||||||
|
runPropertyTests('border-' + suffix + '-style', [
|
||||||
|
{ syntax: 'none' },
|
||||||
|
{ syntax: 'solid' },
|
||||||
|
// and other keywords
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
|
@ -0,0 +1,31 @@
|
||||||
|
<!doctype html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>border width properties</title>
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="../../resources/testhelper.js"></script>
|
||||||
|
<script src="resources/testsuite.js"></script>
|
||||||
|
<body>
|
||||||
|
<div id="log"></div>
|
||||||
|
<script>
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
function assert_is_zero_px(result) {
|
||||||
|
assert_style_value_equals(result, new CSSUnitValue(0, 'px'));
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const suffix of ['top', 'left', 'right', 'bottom']) {
|
||||||
|
runPropertyTests('border-' + suffix + '-width', [
|
||||||
|
// Computed value is 0 when border-style is 'none'.
|
||||||
|
// FIXME: Add separate test where border-style is not 'none' or 'hidden'.
|
||||||
|
{ syntax: 'thin', computed: assert_is_zero_px },
|
||||||
|
{ syntax: 'medium', computed: assert_is_zero_px },
|
||||||
|
{ syntax: 'thick', computed: assert_is_zero_px },
|
||||||
|
{ syntax: '<length>' },
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
|
@ -0,0 +1,22 @@
|
||||||
|
<!doctype html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>'bottom' property</title>
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="../../resources/testhelper.js"></script>
|
||||||
|
<script src="resources/testsuite.js"></script>
|
||||||
|
<body>
|
||||||
|
<div id="log"></div>
|
||||||
|
<script>
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
runPropertyTests('bottom', [
|
||||||
|
{ syntax: 'auto' },
|
||||||
|
{ syntax: '<percentage>' },
|
||||||
|
{ syntax: '<length>' },
|
||||||
|
]);
|
||||||
|
|
||||||
|
</script>
|
|
@ -9,15 +9,14 @@
|
||||||
<script src="../../resources/testhelper.js"></script>
|
<script src="../../resources/testhelper.js"></script>
|
||||||
<script src="resources/testsuite.js"></script>
|
<script src="resources/testsuite.js"></script>
|
||||||
<body>
|
<body>
|
||||||
<div id="log">
|
<div id="log"></div>
|
||||||
<script>
|
<script>
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
runPropertyTests('display', [
|
runPropertyTests('display', [
|
||||||
{
|
{ syntax: 'none' },
|
||||||
specified: '<ident>',
|
{ syntax: 'block' },
|
||||||
examples: [new CSSKeywordValue('none'), new CSSKeywordValue('block')]
|
// and other keywords
|
||||||
},
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
<!doctype html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>'height' property</title>
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="../../resources/testhelper.js"></script>
|
||||||
|
<script src="resources/testsuite.js"></script>
|
||||||
|
<body>
|
||||||
|
<div id="log"></div>
|
||||||
|
<script>
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
runPropertyTests('height', [
|
||||||
|
{ syntax: 'auto' },
|
||||||
|
{ syntax: '<percentage>' },
|
||||||
|
{ syntax: '<length>' },
|
||||||
|
]);
|
||||||
|
|
||||||
|
</script>
|
|
@ -0,0 +1,22 @@
|
||||||
|
<!doctype html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>'left' property</title>
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="../../resources/testhelper.js"></script>
|
||||||
|
<script src="resources/testsuite.js"></script>
|
||||||
|
<body>
|
||||||
|
<div id="log"></div>
|
||||||
|
<script>
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
runPropertyTests('left', [
|
||||||
|
{ syntax: 'auto' },
|
||||||
|
{ syntax: '<percentage>' },
|
||||||
|
{ syntax: '<length>' },
|
||||||
|
]);
|
||||||
|
|
||||||
|
</script>
|
|
@ -0,0 +1,30 @@
|
||||||
|
<!doctype html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>margin properties</title>
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="../../resources/testhelper.js"></script>
|
||||||
|
<script src="resources/testsuite.js"></script>
|
||||||
|
<body>
|
||||||
|
<div id="log"></div>
|
||||||
|
<script>
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
for (const suffix of ['top', 'left', 'right', 'bottom']) {
|
||||||
|
runPropertyTests('margin-' + suffix, [
|
||||||
|
{
|
||||||
|
syntax: 'auto',
|
||||||
|
// Depending on which CSS spec is implemented, the computed value
|
||||||
|
// can be 'auto' or a browser specific value.
|
||||||
|
// FIXME: Figure out how to test this.
|
||||||
|
computed: () => {}
|
||||||
|
},
|
||||||
|
{ syntax: '<percentage>' },
|
||||||
|
{ syntax: '<length>' },
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
|
@ -0,0 +1,20 @@
|
||||||
|
<!doctype html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>'object-position' property</title>
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="../../resources/testhelper.js"></script>
|
||||||
|
<script src="resources/testsuite.js"></script>
|
||||||
|
<body>
|
||||||
|
<div id="log"></div>
|
||||||
|
<script>
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
runPropertyTests('object-position', [
|
||||||
|
{ syntax: '<position>' },
|
||||||
|
]);
|
||||||
|
|
||||||
|
</script>
|
|
@ -0,0 +1,23 @@
|
||||||
|
<!doctype html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>padding properties</title>
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="../../resources/testhelper.js"></script>
|
||||||
|
<script src="resources/testsuite.js"></script>
|
||||||
|
<body>
|
||||||
|
<div id="log"></div>
|
||||||
|
<script>
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
for (const suffix of ['top', 'left', 'right', 'bottom']) {
|
||||||
|
runPropertyTests('padding-' + suffix, [
|
||||||
|
{ syntax: '<percentage>' },
|
||||||
|
{ syntax: '<length>' },
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
|
@ -0,0 +1,22 @@
|
||||||
|
<!doctype html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>'position' property</title>
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="../../resources/testhelper.js"></script>
|
||||||
|
<script src="resources/testsuite.js"></script>
|
||||||
|
<body>
|
||||||
|
<div id="log"></div>
|
||||||
|
<script>
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
runPropertyTests('position', [
|
||||||
|
{ syntax: 'relative' },
|
||||||
|
{ syntax: 'absolute' },
|
||||||
|
// and other keywords
|
||||||
|
]);
|
||||||
|
|
||||||
|
</script>
|
|
@ -1,115 +1,208 @@
|
||||||
const gTestSyntax = {
|
const gTestSyntaxExamples = {
|
||||||
'0': {
|
|
||||||
description: 'unitless zero',
|
|
||||||
set: true,
|
|
||||||
examples: [
|
|
||||||
new CSSUnitValue(0, 'number'),
|
|
||||||
],
|
|
||||||
},
|
|
||||||
'<length>': {
|
'<length>': {
|
||||||
description: 'a length',
|
description: 'a length',
|
||||||
get: true,
|
|
||||||
set: true,
|
|
||||||
examples: [
|
examples: [
|
||||||
new CSSUnitValue(0, 'px'),
|
{
|
||||||
new CSSUnitValue(-3.14, 'em'),
|
description: "zero px",
|
||||||
new CSSUnitValue(3.14, 'cm'),
|
input: new CSSUnitValue(0, 'px')
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description: "a negative em",
|
||||||
|
input: new CSSUnitValue(-3.14, 'em'),
|
||||||
|
defaultComputed: value => {
|
||||||
|
// 'ems' are relative units, so just check that it computes to px
|
||||||
|
assert_class_string(value, 'CSSUnitValue',
|
||||||
|
'"em" lengths must compute to a CSSUnitValue');
|
||||||
|
assert_equals(value.unit, 'px', 'unit');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description: "a positive cm",
|
||||||
|
input: new CSSUnitValue(3.14, 'cm'),
|
||||||
|
defaultComputed: value => {
|
||||||
|
// 'cms' are relative units, so just check that it computes to px
|
||||||
|
assert_class_string(value, 'CSSUnitValue',
|
||||||
|
'"cm" lengths must compute to a CSSUnitValue');
|
||||||
|
assert_equals(value.unit, 'px', 'unit');
|
||||||
|
}
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
'<percentage>': {
|
'<percentage>': {
|
||||||
description: 'a percent',
|
description: 'a percent',
|
||||||
get: true,
|
|
||||||
set: true,
|
|
||||||
examples: [
|
examples: [
|
||||||
new CSSUnitValue(0, 'percent'),
|
{
|
||||||
new CSSUnitValue(-3.14, 'percent'),
|
description: "zero percent",
|
||||||
new CSSUnitValue(3.14, 'percent'),
|
input: new CSSUnitValue(0, 'percent')
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description: "a negative percent",
|
||||||
|
input: new CSSUnitValue(-3.14, 'percent')
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description: "a positive percent",
|
||||||
|
input: new CSSUnitValue(3.14, 'percent')
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
'<time>': {
|
'<time>': {
|
||||||
description: 'a time',
|
description: 'a time',
|
||||||
get: true,
|
|
||||||
set: true,
|
|
||||||
examples: [
|
examples: [
|
||||||
new CSSUnitValue(0, 's'),
|
{
|
||||||
new CSSUnitValue(-3.14, 'ms'),
|
description: "zero seconds",
|
||||||
new CSSUnitValue(3.14, 's'),
|
input: new CSSUnitValue(0, 's')
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description: "negative milliseconds",
|
||||||
|
input: new CSSUnitValue(-3.14, 'ms')
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description: "positive seconds",
|
||||||
|
input: new CSSUnitValue(3.14, 's')
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
'<ident>': {
|
'<position>': {
|
||||||
description: 'a CSSKeywordValue',
|
description: 'a position',
|
||||||
set: true,
|
examples: [
|
||||||
get: true,
|
{
|
||||||
// user-specified examples
|
decription: "origin position",
|
||||||
examples: null,
|
input: new CSSPositionValue(new CSSUnitValue(0, 'px'), new CSSUnitValue(0, 'px'))
|
||||||
|
}
|
||||||
|
],
|
||||||
|
},
|
||||||
|
'<image>': {
|
||||||
|
description: 'an image',
|
||||||
|
examples: [
|
||||||
|
{
|
||||||
|
description: "a PNG image",
|
||||||
|
input: new CSSURLImageValue('/media/1x1.png'),
|
||||||
|
defaultComputed: result => {
|
||||||
|
// URLs compute to absolute URLs
|
||||||
|
assert_true(result instanceof CSSURLImageValue,
|
||||||
|
'Computed value should be a CSSURLImageValue');
|
||||||
|
assert_true(result.url.endsWith('/media/1x1.png'),
|
||||||
|
'Computed value should be an absolute URL');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
},
|
||||||
|
'<transform>': {
|
||||||
|
description: 'a transform',
|
||||||
|
examples: [
|
||||||
|
{
|
||||||
|
description: 'a transform containing only a translate',
|
||||||
|
input: new CSSTransformValue([
|
||||||
|
new CSSTranslate(
|
||||||
|
new CSSUnitValue(0, 'px'),
|
||||||
|
new CSSUnitValue(1, 'px'),
|
||||||
|
new CSSUnitValue(2, 'px'),
|
||||||
|
)
|
||||||
|
]),
|
||||||
|
}
|
||||||
|
],
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
function testGet(propertyName, values, description) {
|
// Test setting a value in a style map and then getting it from the inline and
|
||||||
|
// computed styles.
|
||||||
|
function testPropertyValid(propertyName, examples, specified, computed, description) {
|
||||||
test(t => {
|
test(t => {
|
||||||
let element = createDivWithStyle(t);
|
let element = createDivWithStyle(t);
|
||||||
let styleMap = element.attributeStyleMap;
|
|
||||||
|
|
||||||
for (const styleValue of values) {
|
for (const example of examples) {
|
||||||
element.style[propertyName] = styleValue.toString();
|
element.attributeStyleMap.set(propertyName, example.input);
|
||||||
|
|
||||||
getComputedStyle(element); // Force a style recalc.
|
// specified style
|
||||||
const result = styleMap.get(propertyName);
|
const specifiedResult = element.attributeStyleMap.get(propertyName);
|
||||||
assert_style_value_equals(result, styleValue);
|
if (specified || example.defaultSpecified) {
|
||||||
}
|
(specified || example.defaultSpecified)(specifiedResult);
|
||||||
}, `Can get ${description} from '${propertyName}'`);
|
} else {
|
||||||
}
|
assert_not_equals(specifiedResult, null,
|
||||||
|
'Specified value must not be null');
|
||||||
|
assert_true(specifiedResult instanceof CSSStyleValue,
|
||||||
|
'Specified value must be a CSSStyleValue');
|
||||||
|
assert_style_value_equals(specifiedResult, example.input,
|
||||||
|
`Setting ${example.description} and getting its specified value`);
|
||||||
|
}
|
||||||
|
|
||||||
function testSet(propertyName, values, description) {
|
// computed style
|
||||||
test(t => {
|
const computedResult = element.computedStyleMap().get(propertyName);
|
||||||
let element = createDivWithStyle(t);
|
if (computed || example.defaultComputed) {
|
||||||
let styleMap = element.attributeStyleMap;
|
(computed || example.defaultComputed)(computedResult);
|
||||||
|
} else {
|
||||||
for (const styleValue of values) {
|
assert_not_equals(computedResult, null,
|
||||||
styleMap.set(propertyName, styleValue);
|
'Computed value must not be null');
|
||||||
|
assert_true(computedResult instanceof CSSStyleValue,
|
||||||
getComputedStyle(element); // Force a style recalc.
|
'Computed value must be a CSSStyleValue');
|
||||||
assert_equals(element.style[propertyName], styleValue.toString());
|
assert_style_value_equals(computedResult, example.input,
|
||||||
|
`Setting ${example.description} and getting its computed value`);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}, `Can set '${propertyName}' to ${description}`);
|
}, `Can set '${propertyName}' to ${description}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
function testSetInvalid(propertyName, values, description) {
|
// Test that styleMap.set throws for invalid values
|
||||||
|
function testPropertyInvalid(propertyName, examples, description) {
|
||||||
test(t => {
|
test(t => {
|
||||||
let element = createDivWithStyle(t);
|
let styleMap = createInlineStyleMap(t);
|
||||||
let styleMap = element.attributeStyleMap;
|
for (const example of examples) {
|
||||||
|
assert_throws(new TypeError(), () => styleMap.set(propertyName, example.input));
|
||||||
for (const styleValue of values) {
|
|
||||||
assert_throws(new TypeError(), () => styleMap.set(propertyName, styleValue));
|
|
||||||
}
|
}
|
||||||
}, `Setting '${propertyName}' to ${description} throws TypeError`);
|
}, `Setting '${propertyName}' to ${description} throws TypeError`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function createKeywordExample(keyword) {
|
||||||
|
return {
|
||||||
|
description: `the '${keyword}' keyword`,
|
||||||
|
examples: [ { input: new CSSKeywordValue(keyword) } ]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// Run a battery of StylePropertyMap tests on |propertyName|.
|
||||||
|
// Second argument is a list of test cases. A test case has the form:
|
||||||
|
//
|
||||||
|
// {
|
||||||
|
// syntax: "<length>",
|
||||||
|
// specified: /* a callback */ (optional)
|
||||||
|
// computed: /* a callback */ (optional)
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// If a callback is passed to |specified|, then the callback will be passed
|
||||||
|
// the result of calling get() on the inline style map (specified values).
|
||||||
|
// The callback should check if the result is expected using assert_* functions.
|
||||||
|
// If no callback is passed, then we assert that the result is the same as
|
||||||
|
// the input.
|
||||||
|
//
|
||||||
|
// Same goes for |computed|, but with the computed style map (computed values).
|
||||||
function runPropertyTests(propertyName, testCases) {
|
function runPropertyTests(propertyName, testCases) {
|
||||||
let productionsTested = new Set();
|
let syntaxTested = new Set();
|
||||||
|
|
||||||
for (const testCase of testCases) {
|
for (const testCase of testCases) {
|
||||||
const syntax = gTestSyntax[testCase.specified];
|
// Retrieve test examples for this test case's syntax. If the syntax
|
||||||
if (!syntax)
|
// looks like a keyword, then create an example on the fly.
|
||||||
throw new Error(`'${testCase.specified}' is not a valid production`);
|
const syntaxExamples = testCase.syntax.match(/^[a-z\-]+$/) ?
|
||||||
|
createKeywordExample(testCase.syntax) :
|
||||||
|
gTestSyntaxExamples[testCase.syntax];
|
||||||
|
|
||||||
const examples = testCase.examples || syntax.examples;
|
if (!syntaxExamples)
|
||||||
if (!examples)
|
throw new Error(`'${testCase.syntax}' is not a valid CSS component`);
|
||||||
throw new Error(`'${testCase.specified}' tests require explicit examples`);
|
|
||||||
|
|
||||||
if (syntax.get)
|
testPropertyValid(propertyName,
|
||||||
testGet(propertyName, examples, syntax.description);
|
syntaxExamples.examples,
|
||||||
if (syntax.set)
|
testCase.specified,
|
||||||
testSet(propertyName, examples, syntax.description);
|
testCase.computed,
|
||||||
|
syntaxExamples.description);
|
||||||
|
|
||||||
productionsTested.add(testCase.specified);
|
syntaxTested.add(testCase.syntax);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Also test that styleMap.set rejects invalid CSSStyleValues.
|
// Also test that styleMap.set rejects invalid CSSStyleValues.
|
||||||
for (const [production, syntax] of Object.entries(gTestSyntax)) {
|
for (const [syntax, syntaxExamples] of Object.entries(gTestSyntaxExamples)) {
|
||||||
if (!productionsTested.has(production)) {
|
if (!syntaxTested.has(syntax)) {
|
||||||
if (syntax.set && syntax.examples)
|
testPropertyInvalid(propertyName,
|
||||||
testSetInvalid(propertyName, syntax.examples, syntax.description);
|
syntaxExamples.examples,
|
||||||
|
syntaxExamples.description);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
<!doctype html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>'right' property</title>
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="../../resources/testhelper.js"></script>
|
||||||
|
<script src="resources/testsuite.js"></script>
|
||||||
|
<body>
|
||||||
|
<div id="log"></div>
|
||||||
|
<script>
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
runPropertyTests('right', [
|
||||||
|
{ syntax: 'auto' },
|
||||||
|
{ syntax: '<percentage>' },
|
||||||
|
{ syntax: '<length>' },
|
||||||
|
]);
|
||||||
|
|
||||||
|
</script>
|
|
@ -0,0 +1,22 @@
|
||||||
|
<!doctype html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>'text-align' property</title>
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="../../resources/testhelper.js"></script>
|
||||||
|
<script src="resources/testsuite.js"></script>
|
||||||
|
<body>
|
||||||
|
<div id="log"></div>
|
||||||
|
<script>
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
runPropertyTests('text-align', [
|
||||||
|
{ syntax: 'center' },
|
||||||
|
{ syntax: 'justify' },
|
||||||
|
// and other keywords
|
||||||
|
]);
|
||||||
|
|
||||||
|
</script>
|
|
@ -0,0 +1,22 @@
|
||||||
|
<!doctype html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>'text-decoration-style' property</title>
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="../../resources/testhelper.js"></script>
|
||||||
|
<script src="resources/testsuite.js"></script>
|
||||||
|
<body>
|
||||||
|
<div id="log"></div>
|
||||||
|
<script>
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
runPropertyTests('text-decoration-style', [
|
||||||
|
{ syntax: 'solid' },
|
||||||
|
{ syntax: 'double' },
|
||||||
|
// and other keywords
|
||||||
|
]);
|
||||||
|
|
||||||
|
</script>
|
|
@ -0,0 +1,22 @@
|
||||||
|
<!doctype html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>'top' property</title>
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="../../resources/testhelper.js"></script>
|
||||||
|
<script src="resources/testsuite.js"></script>
|
||||||
|
<body>
|
||||||
|
<div id="log"></div>
|
||||||
|
<script>
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
runPropertyTests('top', [
|
||||||
|
{ syntax: 'auto' },
|
||||||
|
{ syntax: '<percentage>' },
|
||||||
|
{ syntax: '<length>' },
|
||||||
|
]);
|
||||||
|
|
||||||
|
</script>
|
|
@ -0,0 +1,21 @@
|
||||||
|
<!doctype html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>'transform' property</title>
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="../../resources/testhelper.js"></script>
|
||||||
|
<script src="resources/testsuite.js"></script>
|
||||||
|
<body>
|
||||||
|
<div id="log"></div>
|
||||||
|
<script>
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
runPropertyTests('transform', [
|
||||||
|
{ syntax: 'none' },
|
||||||
|
{ syntax: '<transform>' },
|
||||||
|
]);
|
||||||
|
|
||||||
|
</script>
|
|
@ -0,0 +1,22 @@
|
||||||
|
<!doctype html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>'width' property</title>
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="../../resources/testhelper.js"></script>
|
||||||
|
<script src="resources/testsuite.js"></script>
|
||||||
|
<body>
|
||||||
|
<div id="log"></div>
|
||||||
|
<script>
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
runPropertyTests('width', [
|
||||||
|
{ syntax: 'auto' },
|
||||||
|
{ syntax: '<percentage>' },
|
||||||
|
{ syntax: '<length>' },
|
||||||
|
]);
|
||||||
|
|
||||||
|
</script>
|
|
@ -0,0 +1,37 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<link rel="help" href="https://html.spec.whatwg.org/multipage/parsing.html#serialising-html-fragments">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<body>
|
||||||
|
<div id="container"></div>
|
||||||
|
<script>
|
||||||
|
test(() => {
|
||||||
|
class MyParagraph extends HTMLParagraphElement {}
|
||||||
|
customElements.define('my-p', MyParagraph, { extends: 'p' });
|
||||||
|
|
||||||
|
let p = new MyParagraph();
|
||||||
|
p.setAttribute('class', 'foo');
|
||||||
|
assert_equals(p.outerHTML, '<p is="my-p" class="foo"></p>');
|
||||||
|
|
||||||
|
let container = document.querySelector('#container');
|
||||||
|
container.appendChild(p);
|
||||||
|
container.innerHTML = container.innerHTML;
|
||||||
|
assert_not_equals(container.firstChild, p);
|
||||||
|
assert_true(container.firstChild instanceof MyParagraph);
|
||||||
|
}, '"is" value should be serialized if the custom element has no "is" content attribute');
|
||||||
|
|
||||||
|
test(() => {
|
||||||
|
let p = document.createElement('p', { is: 'your-p' });
|
||||||
|
assert_equals(p.outerHTML, '<p is="your-p"></p>');
|
||||||
|
}, '"is" value should be serialized even for an undefined element');
|
||||||
|
|
||||||
|
test(() => {
|
||||||
|
class MyDiv extends HTMLDivElement {}
|
||||||
|
customElements.define('my-div', MyDiv, { extends: 'div' });
|
||||||
|
|
||||||
|
let div = document.createElement('div', { is: 'my-div' });
|
||||||
|
div.setAttribute('is', 'foo"bar\n');
|
||||||
|
assert_equals(div.outerHTML, '<div is="foo"bar\n"></div>');
|
||||||
|
}, '"is" content attribute should be serialized even if the element is a customized built-in element');
|
||||||
|
</script>
|
||||||
|
</body>
|
|
@ -78,6 +78,7 @@ promise_test(async t => {
|
||||||
assert_true(Boolean(request.signal), "Signal member is present & truthy");
|
assert_true(Boolean(request.signal), "Signal member is present & truthy");
|
||||||
assert_equals(request.signal.constructor, AbortSignal);
|
assert_equals(request.signal.constructor, AbortSignal);
|
||||||
assert_not_equals(request.signal, signal, 'Request has a new signal, not a reference');
|
assert_not_equals(request.signal, signal, 'Request has a new signal, not a reference');
|
||||||
|
assert_true(request.signal.aborted, `Request's signal has aborted`);
|
||||||
|
|
||||||
const fetchPromise = fetch(request);
|
const fetchPromise = fetch(request);
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Fetch in worker: handling empty Location header during redirection</title>
|
||||||
|
<meta name="help" href="https://fetch.spec.whatwg.org/#http-network-or-cache-fetch">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
fetch_tests_from_worker(new Worker("redirect-empty-location.js"));
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,14 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Fetch: handling empty Location header during redirection</title>
|
||||||
|
<meta name="help" href="https://fetch.spec.whatwg.org/#http-network-or-cache-fetch">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script src="../resources/utils.js"></script>
|
||||||
|
<script src="redirect-empty-location.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,23 @@
|
||||||
|
// Tests receiving a redirect response with a Location header with an empty
|
||||||
|
// value.
|
||||||
|
|
||||||
|
if (this.document === undefined) {
|
||||||
|
importScripts("/resources/testharness.js");
|
||||||
|
importScripts("../resources/utils.js");
|
||||||
|
}
|
||||||
|
|
||||||
|
const url = RESOURCES_DIR + 'redirect-empty-location.py';
|
||||||
|
|
||||||
|
promise_test(t => {
|
||||||
|
return promise_rejects(t, new TypeError(), fetch(url, {redirect:'follow'}));
|
||||||
|
}, 'redirect response with empty Location, follow mode');
|
||||||
|
|
||||||
|
promise_test(t => {
|
||||||
|
return fetch(url, {redirect:'manual'})
|
||||||
|
.then(resp => {
|
||||||
|
assert_equals(resp.type, 'opaqueredirect');
|
||||||
|
assert_equals(resp.status, 0);
|
||||||
|
});
|
||||||
|
}, 'redirect response with empty Location, manual mode');
|
||||||
|
|
||||||
|
done();
|
|
@ -0,0 +1,3 @@
|
||||||
|
def main(request, response):
|
||||||
|
headers = [("Location", "")]
|
||||||
|
return 302, headers, ""
|
|
@ -1,7 +1,8 @@
|
||||||
# Tests related to Cross-Origin Resource Blocking (CORB).
|
# Tests related to Cross-Origin Resource Blocking (CORB).
|
||||||
|
|
||||||
This directory contains tests related to the
|
This directory contains tests related to the
|
||||||
[Cross-Origin Resource Blocking (CORB)](https://chromium.googlesource.com/chromium/src/+/master/content/browser/loader/cross_origin_read_blocking_explainer.md) algorithm.
|
[Cross-Origin Resource Blocking (CORB)](https://chromium.googlesource.com/chromium/src/+/master/content/browser/loader/cross_origin_read_blocking_explainer.md)
|
||||||
|
algorithm.
|
||||||
|
|
||||||
Note that CORB is currently in very early stages of standardization path. At
|
Note that CORB is currently in very early stages of standardization path. At
|
||||||
the same time, some tests in this directory (e.g.
|
the same time, some tests in this directory (e.g.
|
||||||
|
@ -13,7 +14,21 @@ Tests that cover behavior that is changed by CORB have to be marked as
|
||||||
[tentative](http://web-platform-tests.org/writing-tests/file-names.html)
|
[tentative](http://web-platform-tests.org/writing-tests/file-names.html)
|
||||||
(using `.tentative` substring in their filename) until CORB
|
(using `.tentative` substring in their filename) until CORB
|
||||||
is included in the official
|
is included in the official
|
||||||
[Fetch spec](https://fetch.spec.whatwg.org/).
|
[Fetch spec](https://fetch.spec.whatwg.org/). Such tests may fail unless
|
||||||
|
CORB is enabled. In practice this means that:
|
||||||
|
* Such tests will fail in default Chromium and have to be listed
|
||||||
|
in `third_party/WebKit/LayoutTests/TestExpectations` and associated
|
||||||
|
with https://crbug.com/802835.
|
||||||
|
* Such tests will pass in Chromium when either
|
||||||
|
1) CORB is explicitly, manually enabled by passing extra cmdline flags to
|
||||||
|
`run-webkit-tests`:
|
||||||
|
`--additional-driver-flag=--enable-features=CrossSiteDocumentBlockingAlways` and
|
||||||
|
`--additional-expectations=third_party/WebKit/LayoutTests/FlagExpectations/site-per-process`.
|
||||||
|
2) CORB is implicitly enabled via Site Isolation (e.g. in
|
||||||
|
`site_per_process_webkit_layout_tests` step on the test bots). The
|
||||||
|
expectations that the tests pass in this mode is controlled by the
|
||||||
|
`third_party/WebKit/LayoutTests/FlagExpectations/site-per-process` file.
|
||||||
|
* Such tests may fail in other browsers.
|
||||||
|
|
||||||
The tests in this directory interact with various, random features,
|
The tests in this directory interact with various, random features,
|
||||||
but the tests have been grouped together into the `fetch/corb` directory,
|
but the tests have been grouped together into the `fetch/corb` directory,
|
||||||
|
|
|
@ -1,17 +1,20 @@
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>CORB should not block text/css with a JSON parser breaker</title>
|
<title>CORB should not block text/css with a JSON parser breaker</title>
|
||||||
<link rel="stylesheet" type="text/css"
|
|
||||||
href="http://{{domains[www1]}}:{{ports[http][0]}}/fetch/corb/resources/css-with-json-parser-breaker.css">
|
|
||||||
<script src=/resources/testharness.js></script>
|
<script src=/resources/testharness.js></script>
|
||||||
<script src=/resources/testharnessreport.js></script>
|
<script src=/resources/testharnessreport.js></script>
|
||||||
|
|
||||||
|
<!-- www1 is cross-origin, so the HTTP response is CORB-eligible -->
|
||||||
|
<link rel="stylesheet" type="text/css"
|
||||||
|
href="http://{{domains[www1]}}:{{ports[http][0]}}/fetch/corb/resources/css-with-json-parser-breaker.css">
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<h1 id="header">Header example</h1>
|
<h1 id="header">Header example</h1>
|
||||||
<p>Paragraph body</p>
|
<p>Paragraph body</p>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
test(function() {
|
var style = getComputedStyle(document.getElementById('header'));
|
||||||
var style = getComputedStyle(document.getElementById('header'));
|
assert_equals(style.getPropertyValue('color'), 'rgb(255, 0, 0)');
|
||||||
assert_equals(style.getPropertyValue('color'), 'rgb(255, 0, 0)');
|
done();
|
||||||
}, "CORB should not block text/css with a JSON parser breaker");
|
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<!-- Same-origin, so the HTTP response is not CORB-eligible -->
|
||||||
|
<img src="resources/html-correctly-labeled.html">
|
|
@ -0,0 +1,11 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!-- Test verifies that html fed to an <img> tag doesn't have any observable
|
||||||
|
difference with and without CORB (in both cases the resource body cannot be
|
||||||
|
rendered as an image - html cannot be rendered as an image and the empty body
|
||||||
|
from a CORB-blocked response also cannot be rendered as an image).
|
||||||
|
-->
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<!-- Reference page uses same-origin resources, which are not CORB-eligible. -->
|
||||||
|
<link rel="match" href="img-png-mislabeled-as-html.sub-expected.html">
|
||||||
|
<!-- www1 is cross-origin, so the HTTP response is CORB-eligible -->
|
||||||
|
<img src="http://{{domains[www1]}}:{{ports[http][0]}}/fetch/corb/resources/html-correctly-labeled.html">
|
|
@ -0,0 +1,4 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<!-- Same-origin, so the HTTP response is not CORB-eligible -->
|
||||||
|
<img src="resources/empty-labeled-as-png.png">
|
|
@ -0,0 +1,11 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!-- Test verifies that CORB blocks an image mislabeled as text/html if
|
||||||
|
sniffing is disabled via `X-Content-Type-Options: nosniff` response header.
|
||||||
|
This has an observable effect (the image stops rendering), compared to the
|
||||||
|
behavior with no CORB.
|
||||||
|
-->
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<!-- Reference page uses same-origin resources, which are not CORB-eligible. -->
|
||||||
|
<link rel="match" href="img-png-mislabeled-as-html.sub-expected.html">
|
||||||
|
<!-- www1 is cross-origin, so the HTTP response is CORB-eligible -->
|
||||||
|
<img src="http://{{domains[www1]}}:{{ports[http][0]}}/fetch/corb/resources/png-mislabeled-as-html-nosniff.png">
|
|
@ -0,0 +1,4 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<!-- Same-origin, so the HTTP response is not CORB-eligible -->
|
||||||
|
<img src="resources/png-correctly-labeled.png">
|
|
@ -0,0 +1,10 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!-- Test verifies that CORB won't block an image after sniffing determines
|
||||||
|
that the text/html Content-Type response header doesn't match the response
|
||||||
|
body.
|
||||||
|
-->
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<!-- Reference page uses same-origin resources, which are not CORB-eligible. -->
|
||||||
|
<link rel="match" href="img-png-mislabeled-as-html.sub-expected.html">
|
||||||
|
<!-- www1 is cross-origin, so the HTTP response is CORB-eligible -->
|
||||||
|
<img src="http://{{domains[www1]}}:{{ports[http][0]}}/fetch/corb/resources/png-mislabeled-as-html.png">
|
|
@ -0,0 +1 @@
|
||||||
|
Content-Type: image/png
|
|
@ -0,0 +1,10 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Page Title</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>Page body</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1 @@
|
||||||
|
Content-Type: text/html
|
|
@ -0,0 +1 @@
|
||||||
|
window.has_executed_script = true;
|
|
@ -0,0 +1,2 @@
|
||||||
|
Content-Type: text/html
|
||||||
|
X-Content-Type-Options: nosniff
|
|
@ -0,0 +1 @@
|
||||||
|
window.has_executed_script = true;
|
|
@ -0,0 +1 @@
|
||||||
|
Content-Type: text/html
|
After Width: | Height: | Size: 1,010 B |
|
@ -0,0 +1 @@
|
||||||
|
Content-Type: image/png
|
After Width: | Height: | Size: 1,010 B |
|
@ -0,0 +1,2 @@
|
||||||
|
Content-Type: text/html
|
||||||
|
X-Content-Type-Options: nosniff
|
After Width: | Height: | Size: 1,010 B |
|
@ -0,0 +1 @@
|
||||||
|
Content-Type: text/html
|
|
@ -0,0 +1,30 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!-- Test verifies that html fed to a <script> tag won't report a syntax
|
||||||
|
error after CORB blocks the response (an empty response body injected
|
||||||
|
by CORB won't have any JavaScript syntax errors).
|
||||||
|
-->
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<div id=log></div>
|
||||||
|
<script>
|
||||||
|
setup({allow_uncaught_exception : true});
|
||||||
|
async_test(function(t) {
|
||||||
|
var script = document.createElement("script")
|
||||||
|
|
||||||
|
// Without CORB, the html document would cause a syntax error when parsed as
|
||||||
|
// JavaScript, but with CORB there should be no errors (because CORB will
|
||||||
|
// replace the response body with an empty body).
|
||||||
|
script.onload = t.step_func_done(function(){})
|
||||||
|
addEventListener("error",function(e) {
|
||||||
|
t.step(function() {
|
||||||
|
assert_unreached("Empty body of a CORS-blocked response shouldn't trigger syntax errors.");
|
||||||
|
t.done();
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
// www1 is cross-origin, so the HTTP response is CORB-eligible.
|
||||||
|
script.src = 'http://{{domains[www1]}}:{{ports[http][0]}}/fetch/corb/resources/html-correctly-labeled.html';
|
||||||
|
document.body.appendChild(script)
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -0,0 +1,32 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!-- Test verifies that script mislabeled as html won't execute with and without CORB
|
||||||
|
if the nosniff response header is present.
|
||||||
|
|
||||||
|
The expected behavior is covered by the Fetch spec at
|
||||||
|
https://fetch.spec.whatwg.org/#should-response-to-request-be-blocked-due-to-nosniff?
|
||||||
|
|
||||||
|
See also the following tests:
|
||||||
|
- fetch/nosniff/importscripts.html
|
||||||
|
- fetch/nosniff/script.html
|
||||||
|
- fetch/nosniff/worker.html
|
||||||
|
-->
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<div id=log></div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
window.has_executed_script = false;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<!-- www1 is cross-origin, so the HTTP response is CORB-eligible -->
|
||||||
|
<script src="http://{{domains[www1]}}:{{ports[http][0]}}/fetch/corb/resources/js-mislabeled-as-html-nosniff.js">
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// Verify what observable effects the <script> tag above had.
|
||||||
|
// Assertion should hold with and without CORB:
|
||||||
|
assert_false(window.has_executed_script,
|
||||||
|
'The cross-origin script should not be executed');
|
||||||
|
done();
|
||||||
|
</script>
|
|
@ -0,0 +1,24 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!-- Test verifies that script mislabeled as html will execute with and without
|
||||||
|
CORB (CORB should allow the script after sniffing).
|
||||||
|
-->
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<div id=log></div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
window.has_executed_script = false;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<!-- www1 is cross-origin, so the HTTP response is CORB-eligible -->
|
||||||
|
<script src="http://{{domains[www1]}}:{{ports[http][0]}}/fetch/corb/resources/js-mislabeled-as-html.js">
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// Verify what observable effects the <script> tag above had.
|
||||||
|
// Assertion should hold with and without CORB:
|
||||||
|
assert_true(window.has_executed_script,
|
||||||
|
'The cross-origin script should execute');
|
||||||
|
done();
|
||||||
|
</script>
|
|
@ -14,7 +14,7 @@ const get_url = (mime, outcome) => {
|
||||||
return url
|
return url
|
||||||
}
|
}
|
||||||
|
|
||||||
[null, "", "x", "x/x"].forEach(function(mime) {
|
[null, "", "x", "x/x", "text/html", "text/json"].forEach(function(mime) {
|
||||||
try {
|
try {
|
||||||
importScripts(get_url(mime))
|
importScripts(get_url(mime))
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
<script>
|
<script>
|
||||||
var log = function() {}, // see comment below
|
var log = function() {}, // see comment below
|
||||||
p = function() {}, // see comment below
|
p = function() {}, // see comment below
|
||||||
fails = [null, "", "x", "x/x"],
|
fails = [null, "", "x", "x/x", "text/html", "text/json"],
|
||||||
passes = ["text/javascript", "text/ecmascript", "text/ecmascript;blah"]
|
passes = ["text/javascript", "text/ecmascript", "text/ecmascript;blah"]
|
||||||
|
|
||||||
// Ideally we'd also check whether the scripts in fact execute, but that would involve
|
// Ideally we'd also check whether the scripts in fact execute, but that would involve
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<script src=/resources/testharnessreport.js></script>
|
<script src=/resources/testharnessreport.js></script>
|
||||||
<div id=log></div>
|
<div id=log></div>
|
||||||
<script>
|
<script>
|
||||||
var fails = [null, "", "x", "x/x"],
|
var fails = [null, "", "x", "x/x", "text/html", "text/json"],
|
||||||
passes = ["text/css", "text/css;charset=utf-8", "text/css;blah"]
|
passes = ["text/css", "text/css;charset=utf-8", "text/css;blah"]
|
||||||
|
|
||||||
const get_url = (mime) => {
|
const get_url = (mime) => {
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<div id=log></div>
|
<div id=log></div>
|
||||||
<script>
|
<script>
|
||||||
var workers = [],
|
var workers = [],
|
||||||
fails = ["", "?type=", "?type=x", "?type=x/x"],
|
fails = ["", "?type=", "?type=x", "?type=x/x", "?type=text/html", "?type=text/json"],
|
||||||
passes = ["?type=text/javascript", "?type=text/ecmascript", "?type=text/ecmascript;yay"]
|
passes = ["?type=text/javascript", "?type=text/ecmascript", "?type=text/ecmascript;yay"]
|
||||||
|
|
||||||
fails.forEach(function(urlpart) {
|
fails.forEach(function(urlpart) {
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<title>Setting HTMLTrackElement.src to the empty string fires 'error' and sets readyState to ERROR</title>
|
||||||
|
<link rel="help" href="https://html.spec.whatwg.org/multipage/media.html#sourcing-out-of-band-text-tracks">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<video></video>
|
||||||
|
<script>
|
||||||
|
async_test(t => {
|
||||||
|
let track = document.createElement("track");
|
||||||
|
track.src = '';
|
||||||
|
track.default = true;
|
||||||
|
track.onerror = t.step_func_done(() => {
|
||||||
|
assert_equals(track.readyState, HTMLTrackElement.ERROR);
|
||||||
|
});
|
||||||
|
track.onload = t.unreached_func('fired load');
|
||||||
|
|
||||||
|
assert_equals(track.readyState, HTMLTrackElement.NONE);
|
||||||
|
|
||||||
|
document.querySelector('video').appendChild(track);
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -15,6 +15,8 @@
|
||||||
<div id="container"></div>
|
<div id="container"></div>
|
||||||
<svg id="svgContainer"></svg>
|
<svg id="svgContainer"></svg>
|
||||||
<script>
|
<script>
|
||||||
|
let container = document.querySelector('#container');
|
||||||
|
let svgContainer = document.querySelector('#svgContainer');
|
||||||
function testText(html, expectedPlain, msg) {
|
function testText(html, expectedPlain, msg) {
|
||||||
textTextInContainer(container, html, expectedPlain, msg);
|
textTextInContainer(container, html, expectedPlain, msg);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
<!doctype html>
|
||||||
|
<title>MediaStreamTrack GetCapabilities</title>
|
||||||
|
<p class="instructions">This test checks for the presence of
|
||||||
|
<code>echoCancellation</code> and <code>deviceId</code> fields
|
||||||
|
in <code>MediaStreamTrack.getCapabilities()</code> method.</p>
|
||||||
|
<script src=/resources/testharness.js></script>
|
||||||
|
<script src=/resources/testharnessreport.js></script>
|
||||||
|
<script>
|
||||||
|
promise_test(() => {
|
||||||
|
return navigator.mediaDevices.getUserMedia({audio: true})
|
||||||
|
.then(stream => {
|
||||||
|
var capabilities = stream.getAudioTracks()[0].getCapabilities();
|
||||||
|
assert_true(undefined !== capabilities.deviceId, "MediaTrackCapabilities's deviceId should exist.");
|
||||||
|
assert_true(undefined !== capabilities.echoCancellation, "MediaTrackCapabilities's echoCancellation should exist.");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -57,7 +57,7 @@ promise_test(t => {
|
||||||
|
|
||||||
promise_test(t => {
|
promise_test(t => {
|
||||||
let url = '/media/foo.vtt';
|
let url = '/media/foo.vtt';
|
||||||
// Add '?url' and tell the service worker to return a same-origin URL.
|
// Add '?url' and tell the service worker to fetch a same-origin URL.
|
||||||
url += '?url=' + host_info.HTTPS_ORIGIN + '/media/foo.vtt';
|
url += '?url=' + host_info.HTTPS_ORIGIN + '/media/foo.vtt';
|
||||||
return load_track(url)
|
return load_track(url)
|
||||||
.then(result => {
|
.then(result => {
|
||||||
|
@ -67,7 +67,7 @@ promise_test(t => {
|
||||||
|
|
||||||
promise_test(t => {
|
promise_test(t => {
|
||||||
let url = '/media/foo.vtt';
|
let url = '/media/foo.vtt';
|
||||||
// Add '?url' and tell the service worker to return a cross-origin URL.
|
// Add '?url' and tell the service worker to fetch a cross-origin URL.
|
||||||
url += '?url=' + get_host_info().HTTPS_REMOTE_ORIGIN + '/media/foo.vtt';
|
url += '?url=' + get_host_info().HTTPS_REMOTE_ORIGIN + '/media/foo.vtt';
|
||||||
return load_track(url)
|
return load_track(url)
|
||||||
.then(result => {
|
.then(result => {
|
||||||
|
@ -77,7 +77,7 @@ promise_test(t => {
|
||||||
|
|
||||||
promise_test(t => {
|
promise_test(t => {
|
||||||
let url = '/media/foo.vtt';
|
let url = '/media/foo.vtt';
|
||||||
// Add '?url' and tell the service worker to return a cross-origin URL that
|
// Add '?url' and tell the service worker to fetch a cross-origin URL that
|
||||||
// doesn't support CORS.
|
// doesn't support CORS.
|
||||||
url += '?url=' + get_host_info().HTTPS_REMOTE_ORIGIN +
|
url += '?url=' + get_host_info().HTTPS_REMOTE_ORIGIN +
|
||||||
'/media/foo-no-cors.vtt';
|
'/media/foo-no-cors.vtt';
|
||||||
|
@ -91,16 +91,82 @@ promise_test(t => {
|
||||||
|
|
||||||
promise_test(t => {
|
promise_test(t => {
|
||||||
let url = '/media/foo.vtt';
|
let url = '/media/foo.vtt';
|
||||||
// Add '?url' and tell the service worker to return a cross-origin URL.
|
// Add '?url' and tell the service worker to fetch a cross-origin URL.
|
||||||
url += '?url=' + get_host_info().HTTPS_REMOTE_ORIGIN + '/media/foo.vtt';
|
url += '?url=' + get_host_info().HTTPS_REMOTE_ORIGIN + '/media/foo.vtt';
|
||||||
// Add '&mode' to tell the service worker to do a CORS request.
|
// Add '&mode' to tell the service worker to do a CORS request.
|
||||||
url += '&mode=cors';
|
url += '&mode=cors';
|
||||||
// Add '&credentials=anonymous' to allow Access-Control-Allow-Origin=*.
|
// Add '&credentials=anonymous' to allow Access-Control-Allow-Origin=* so
|
||||||
|
// that CORS will succeed if the service approves it.
|
||||||
url += '&credentials=anonymous';
|
url += '&credentials=anonymous';
|
||||||
return load_track(url)
|
return load_track(url)
|
||||||
.then(result => {
|
.then(result => {
|
||||||
assert_equals(result, 'load event');
|
assert_equals(result, 'load event');
|
||||||
});
|
});
|
||||||
}, 'cross-origin text track with approved cors request should load');
|
}, 'cross-origin text track with approved cors request should load');
|
||||||
|
|
||||||
|
// Redirect tests.
|
||||||
|
|
||||||
|
promise_test(t => {
|
||||||
|
let url = '/media/foo.vtt';
|
||||||
|
// Add '?url' and tell the service worker to fetch a same-origin URL that redirects...
|
||||||
|
redirector_url = host_info.HTTPS_ORIGIN + base_path() + 'resources/redirect.py?Redirect=';
|
||||||
|
// ... to a same-origin URL.
|
||||||
|
redirect_target = host_info.HTTPS_ORIGIN + '/media/foo.vtt';
|
||||||
|
url += '?url=' + encodeURIComponent(redirector_url + encodeURIComponent(redirect_target));
|
||||||
|
return load_track(url)
|
||||||
|
.then(result => {
|
||||||
|
assert_equals(result, 'load event');
|
||||||
|
});
|
||||||
|
}, 'same-origin text track that redirects same-origin should load');
|
||||||
|
|
||||||
|
promise_test(t => {
|
||||||
|
let url = '/media/foo.vtt';
|
||||||
|
// Add '?url' and tell the service worker to fetch a same-origin URL that redirects...
|
||||||
|
redirector_url = host_info.HTTPS_ORIGIN + base_path() + 'resources/redirect.py?Redirect=';
|
||||||
|
// ... to a cross-origin URL.
|
||||||
|
redirect_target = host_info.HTTPS_REMOTE_ORIGIN + '/media/foo.vtt';
|
||||||
|
url += '?url=' + encodeURIComponent(redirector_url + encodeURIComponent(redirect_target));
|
||||||
|
return load_track(url)
|
||||||
|
.then(result => {
|
||||||
|
assert_equals(result, 'error event');
|
||||||
|
});
|
||||||
|
}, 'same-origin text track that redirects cross-origin should not load');
|
||||||
|
|
||||||
|
|
||||||
|
promise_test(t => {
|
||||||
|
let url = '/media/foo.vtt';
|
||||||
|
// Add '?url' and tell the service worker to fetch a same-origin URL that redirects...
|
||||||
|
redirector_url = host_info.HTTPS_ORIGIN + base_path() + 'resources/redirect.py?Redirect=';
|
||||||
|
// ... to a cross-origin URL.
|
||||||
|
redirect_target = host_info.HTTPS_REMOTE_ORIGIN + '/media/foo-no-cors.vtt';
|
||||||
|
url += '?url=' + encodeURIComponent(redirector_url + encodeURIComponent(redirect_target));
|
||||||
|
// Add '&mode' to tell the service worker to do a CORS request.
|
||||||
|
url += '&mode=cors';
|
||||||
|
// Add '&credentials=anonymous' to allow Access-Control-Allow-Origin=* so
|
||||||
|
// that CORS will succeed if the server approves it.
|
||||||
|
url += '&credentials=anonymous';
|
||||||
|
return load_track(url)
|
||||||
|
.then(result => {
|
||||||
|
assert_equals(result, 'error event');
|
||||||
|
});
|
||||||
|
}, 'same-origin text track that redirects to a cross-origin text track with rejected cors should not load');
|
||||||
|
|
||||||
|
promise_test(t => {
|
||||||
|
let url = '/media/foo.vtt';
|
||||||
|
// Add '?url' and tell the service worker to fetch a same-origin URL that redirects...
|
||||||
|
redirector_url = host_info.HTTPS_ORIGIN + base_path() + 'resources/redirect.py?Redirect=';
|
||||||
|
// ... to a cross-origin URL.
|
||||||
|
redirect_target = host_info.HTTPS_REMOTE_ORIGIN + '/media/foo.vtt';
|
||||||
|
url += '?url=' + encodeURIComponent(redirector_url + encodeURIComponent(redirect_target));
|
||||||
|
// Add '&mode' to tell the service worker to do a CORS request.
|
||||||
|
url += '&mode=cors';
|
||||||
|
// Add '&credentials=anonymous' to allow Access-Control-Allow-Origin=* so
|
||||||
|
// that CORS will succeed if the server approves it.
|
||||||
|
url += '&credentials=anonymous';
|
||||||
|
return load_track(url)
|
||||||
|
.then(result => {
|
||||||
|
assert_equals(result, 'load event');
|
||||||
|
});
|
||||||
|
}, 'same-origin text track that redirects to a cross-origin text track with approved cors should load');
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="300" height="200">
|
||||||
|
<style>
|
||||||
|
line {
|
||||||
|
stroke: blue;
|
||||||
|
stroke-dasharray: 24 8;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<line id="interval" x1="50" y1="100" x2="250" y2="100"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 264 B |
17
tests/wpt/web-platform-tests/svg/shapes/line-dasharray.svg
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:h="http://www.w3.org/1999/xhtml"
|
||||||
|
width="300" height="200">
|
||||||
|
<metadata>
|
||||||
|
<h:link rel="help" href="https://www.w3.org/TR/SVG2/painting.html#StrokeDashing"/>
|
||||||
|
<h:link rel="match" href="line-dasharray-ref.svg"/>
|
||||||
|
<h:meta name="assert" content="The ‘pathLength’ attribute on a ‘path’ element affects stroke-dasharray."/>
|
||||||
|
</metadata>
|
||||||
|
<style>
|
||||||
|
line {
|
||||||
|
stroke: blue;
|
||||||
|
stroke-dasharray: 3 1;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<line id="interval" x1="50" y1="100" x2="250" y2="100" pathLength="25"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 612 B |
|
@ -0,0 +1,35 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:h="http://www.w3.org/1999/xhtml">
|
||||||
|
<metadata>
|
||||||
|
<h:link rel="help" href="https://www.w3.org/TR/SVG2/shapes.html#InterfaceSVGLineElement"/>
|
||||||
|
<h:link rel="help" href="https://www.w3.org/TR/SVG2/types.html#InterfaceSVGGeometryElement"/>
|
||||||
|
<h:meta name="assert" content="The line element supports getPointAtLength."/>
|
||||||
|
</metadata>
|
||||||
|
<line id="interval" x1="300" y1="400" x2="500" y2="400"/>
|
||||||
|
<h:script src="/resources/testharness.js"/>
|
||||||
|
<h:script src="/resources/testharnessreport.js"/>
|
||||||
|
<script><![CDATA[
|
||||||
|
test(function() {
|
||||||
|
var interval = document.getElementById('interval');
|
||||||
|
assert_true(interval.getTotalLength !== undefined, 'getTotalLength is defined for SVGLineElement');
|
||||||
|
assert_true(interval.getPointAtLength !== undefined, 'getPointAtLength is defined for SVGLineElement');
|
||||||
|
assert_equals(interval.getTotalLength(), 200, 'total length');
|
||||||
|
|
||||||
|
var point = interval.getPointAtLength(10);
|
||||||
|
assert_equals(point.x, 310, 'x');
|
||||||
|
assert_equals(point.y, 400, 'y');
|
||||||
|
}, 'line supports getPointAtLength');
|
||||||
|
|
||||||
|
test(function() {
|
||||||
|
var interval = document.getElementById('interval');
|
||||||
|
interval.setAttribute('pathLength', '25');
|
||||||
|
|
||||||
|
assert_equals(interval.getTotalLength(), 200, 'total length');
|
||||||
|
|
||||||
|
var point = interval.getPointAtLength(10);
|
||||||
|
assert_equals(point.x, 310, 'x');
|
||||||
|
assert_equals(point.y, 400, 'y');
|
||||||
|
}, 'line getPointAtLength ignores pathLength');
|
||||||
|
]]></script>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.5 KiB |
19
tests/wpt/web-platform-tests/svg/shapes/line-pathLength.svg
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:h="http://www.w3.org/1999/xhtml">
|
||||||
|
<metadata>
|
||||||
|
<h:link rel="help" href="https://www.w3.org/TR/SVG2/shapes.html#InterfaceSVGLineElement"/>
|
||||||
|
<h:link rel="help" href="https://www.w3.org/TR/SVG2/types.html#InterfaceSVGGeometryElement"/>
|
||||||
|
<h:meta name="assert" content="The pathLength IDL attribute reflects the ‘pathLength’ content attribute."/>
|
||||||
|
</metadata>
|
||||||
|
<line id="interval" x1="300" y1="400" x2="500" y2="400" pathLength="25"/>
|
||||||
|
<h:script src="/resources/testharness.js"/>
|
||||||
|
<h:script src="/resources/testharnessreport.js"/>
|
||||||
|
<script><![CDATA[
|
||||||
|
test(function() {
|
||||||
|
var interval = document.getElementById('interval');
|
||||||
|
assert_true(interval.pathLength !== undefined, "pathLength is defined for SVGLineElement");
|
||||||
|
assert_equals(interval.pathLength.baseVal, 25);
|
||||||
|
}, 'line supports pathLength attribute');
|
||||||
|
]]></script>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 944 B |