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 -->
This commit is contained in:
bors-servo 2018-02-14 21:22:06 -05:00 committed by GitHub
commit b9862f7b28
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
78 changed files with 1911 additions and 118 deletions

View file

@ -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"

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -0,0 +1,4 @@
[script-html-correctly-labeled.tentative.sub.html]
[Untitled]
expected: FAIL

View file

@ -0,0 +1,4 @@
[script-js-mislabeled-as-html-nosniff.sub.html]
[Untitled]
expected: FAIL

View 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

View file

@ -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

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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);
} }
} }
} }

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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&quot;bar\n"></div>');
}, '"is" content attribute should be serialized even if the element is a customized built-in element');
</script>
</body>

View file

@ -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);

View file

@ -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>

View file

@ -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>

View file

@ -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();

View file

@ -0,0 +1,3 @@
def main(request, response):
headers = [("Location", "")]
return 302, headers, ""

View file

@ -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,

View file

@ -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>

View file

@ -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">

View file

@ -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">

View file

@ -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">

View file

@ -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">

View file

@ -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">

View file

@ -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">

View file

@ -0,0 +1 @@
Content-Type: image/png

View file

@ -0,0 +1,10 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Page Title</title>
</head>
<body>
<p>Page body</p>
</body>
</html>

View file

@ -0,0 +1 @@
Content-Type: text/html

View file

@ -0,0 +1 @@
window.has_executed_script = true;

View file

@ -0,0 +1,2 @@
Content-Type: text/html
X-Content-Type-Options: nosniff

View file

@ -0,0 +1 @@
window.has_executed_script = true;

View file

@ -0,0 +1 @@
Content-Type: text/html

Binary file not shown.

After

Width:  |  Height:  |  Size: 1,010 B

View file

@ -0,0 +1 @@
Content-Type: image/png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1,010 B

View file

@ -0,0 +1,2 @@
Content-Type: text/html
X-Content-Type-Options: nosniff

Binary file not shown.

After

Width:  |  Height:  |  Size: 1,010 B

View file

@ -0,0 +1 @@
Content-Type: text/html

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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) {

View file

@ -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

View file

@ -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) => {

View file

@ -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) {

View file

@ -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>

View file

@ -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);
} }

View file

@ -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>

View file

@ -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>

View file

@ -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

View 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

View file

@ -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

View 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