mirror of
https://github.com/servo/servo.git
synced 2025-07-23 15:23:42 +01:00
Auto merge of #24309 - servo-wpt-sync:wpt_update_27-09-2019, r=servo-wpt-sync
Sync WPT with upstream (27-09-2019) Automated downstream sync of changes from upstream as of 27-09-2019. [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/24309) <!-- Reviewable:end -->
This commit is contained in:
commit
b0b01b86b8
89 changed files with 11097 additions and 382 deletions
|
@ -144947,6 +144947,18 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"css/css-text/hanging-punctuation/hanging-punctuation-inline-001.html": [
|
||||
[
|
||||
"css/css-text/hanging-punctuation/hanging-punctuation-inline-001.html",
|
||||
[
|
||||
[
|
||||
"/css/css-text/hanging-punctuation/reference/hanging-punctuation-inline-001-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"css/css-text/hanging-punctuation/hanging-scrollable-001.html": [
|
||||
[
|
||||
"css/css-text/hanging-punctuation/hanging-scrollable-001.html",
|
||||
|
@ -147831,6 +147843,18 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"css/css-text/line-breaking/line-breaking-021.html": [
|
||||
[
|
||||
"css/css-text/line-breaking/line-breaking-021.html",
|
||||
[
|
||||
[
|
||||
"/css/css-text/line-breaking/reference/line-breaking-021-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"css/css-text/line-breaking/line-breaking-atomic-001.html": [
|
||||
[
|
||||
"css/css-text/line-breaking/line-breaking-atomic-001.html",
|
||||
|
@ -149187,6 +149211,18 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"css/css-text/text-align/text-align-last-wins-001.html": [
|
||||
[
|
||||
"css/css-text/text-align/text-align-last-wins-001.html",
|
||||
[
|
||||
[
|
||||
"/css/css-text/text-align/reference/text-align-last-wins-001-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"css/css-text/text-align/text-align-start-001.html": [
|
||||
[
|
||||
"css/css-text/text-align/text-align-start-001.html",
|
||||
|
@ -149535,6 +149571,18 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"css/css-text/text-justify/text-justify-006.html": [
|
||||
[
|
||||
"css/css-text/text-justify/text-justify-006.html",
|
||||
[
|
||||
[
|
||||
"/css/css-text/text-justify/reference/text-justify-006-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"css/css-text/text-transform/math/text-transform-math-auto-001.tentative.html": [
|
||||
[
|
||||
"css/css-text/text-transform/math/text-transform-math-auto-001.tentative.html",
|
||||
|
@ -150147,6 +150195,30 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"css/css-text/text-transform/text-transform-fullwidth-008.html": [
|
||||
[
|
||||
"css/css-text/text-transform/text-transform-fullwidth-008.html",
|
||||
[
|
||||
[
|
||||
"/css/css-text/text-transform/reference/text-transform-fullwidth-008-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"css/css-text/text-transform/text-transform-fullwidth-009.html": [
|
||||
[
|
||||
"css/css-text/text-transform/text-transform-fullwidth-009.html",
|
||||
[
|
||||
[
|
||||
"/css/css-text/text-transform/reference/text-transform-fullwidth-009-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"css/css-text/text-transform/text-transform-lowercase-001.xht": [
|
||||
[
|
||||
"css/css-text/text-transform/text-transform-lowercase-001.xht",
|
||||
|
@ -152463,6 +152535,30 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"css/css-text/white-space/seg-break-transformation-018.html": [
|
||||
[
|
||||
"css/css-text/white-space/seg-break-transformation-018.html",
|
||||
[
|
||||
[
|
||||
"/css/reference/ref-filled-green-100px-square.xht",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"css/css-text/white-space/seg-break-transformation-019.html": [
|
||||
[
|
||||
"css/css-text/white-space/seg-break-transformation-019.html",
|
||||
[
|
||||
[
|
||||
"/css/reference/ref-filled-green-100px-square.xht",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"css/css-text/white-space/tab-stop-threshold-001.html": [
|
||||
[
|
||||
"css/css-text/white-space/tab-stop-threshold-001.html",
|
||||
|
@ -153659,6 +153755,30 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"css/css-text/word-break/word-break-keep-all-007.html": [
|
||||
[
|
||||
"css/css-text/word-break/word-break-keep-all-007.html",
|
||||
[
|
||||
[
|
||||
"/css/css-text/word-break/reference/word-break-keep-all-005-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"css/css-text/word-break/word-break-keep-all-008.html": [
|
||||
[
|
||||
"css/css-text/word-break/word-break-keep-all-008.html",
|
||||
[
|
||||
[
|
||||
"/css/css-text/word-break/reference/word-break-keep-all-005-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"css/css-text/word-break/word-break-normal-001.html": [
|
||||
[
|
||||
"css/css-text/word-break/word-break-normal-001.html",
|
||||
|
@ -213075,6 +213195,9 @@
|
|||
"client-hints/echo_client_hints_received.py": [
|
||||
[]
|
||||
],
|
||||
"client-hints/echo_ua_client_hints_received.py": [
|
||||
[]
|
||||
],
|
||||
"client-hints/resources/accept-ch-lifetime-test.js": [
|
||||
[]
|
||||
],
|
||||
|
@ -213120,6 +213243,9 @@
|
|||
"client-hints/resources/stale-echo-client-hints.py": [
|
||||
[]
|
||||
],
|
||||
"client-hints/sec-ch-quotes.https.html.headers": [
|
||||
[]
|
||||
],
|
||||
"clipboard-apis/META.yml": [
|
||||
[]
|
||||
],
|
||||
|
@ -226632,6 +226758,12 @@
|
|||
"content-security-policy/form-action/support/post-message-to-parent.sub.html": [
|
||||
[]
|
||||
],
|
||||
"content-security-policy/frame-ancestors/support/content-security-policy.sub.html": [
|
||||
[]
|
||||
],
|
||||
"content-security-policy/frame-ancestors/support/content-security-policy.sub.html.sub.headers": [
|
||||
[]
|
||||
],
|
||||
"content-security-policy/frame-ancestors/support/frame-ancestors-and-x-frame-options.sub.html": [
|
||||
[]
|
||||
],
|
||||
|
@ -253593,6 +253725,9 @@
|
|||
"css/css-text/hanging-punctuation/reference/hanging-punctuation-force-end-001-ref.xht": [
|
||||
[]
|
||||
],
|
||||
"css/css-text/hanging-punctuation/reference/hanging-punctuation-inline-001-ref.html": [
|
||||
[]
|
||||
],
|
||||
"css/css-text/hanging-punctuation/reference/hanging-punctuation-last-001-ref.xht": [
|
||||
[]
|
||||
],
|
||||
|
@ -254307,6 +254442,9 @@
|
|||
"css/css-text/line-breaking/reference/line-breaking-019-ref.html": [
|
||||
[]
|
||||
],
|
||||
"css/css-text/line-breaking/reference/line-breaking-021-ref.html": [
|
||||
[]
|
||||
],
|
||||
"css/css-text/line-breaking/reference/line-breaking-atomic-003-ref.html": [
|
||||
[]
|
||||
],
|
||||
|
@ -254664,6 +254802,9 @@
|
|||
"css/css-text/text-align/reference/text-align-justifyall-ref-006.html": [
|
||||
[]
|
||||
],
|
||||
"css/css-text/text-align/reference/text-align-last-wins-001-ref.html": [
|
||||
[]
|
||||
],
|
||||
"css/css-text/text-align/reference/text-align-start-ref-001.html": [
|
||||
[]
|
||||
],
|
||||
|
@ -254736,6 +254877,9 @@
|
|||
"css/css-text/text-indent/reference/text-indent-tab-positions-001-ref.html": [
|
||||
[]
|
||||
],
|
||||
"css/css-text/text-justify/reference/text-justify-006-ref.html": [
|
||||
[]
|
||||
],
|
||||
"css/css-text/text-justify/reference/text-justify-ref-001.html": [
|
||||
[]
|
||||
],
|
||||
|
@ -254880,6 +255024,12 @@
|
|||
"css/css-text/text-transform/reference/text-transform-fullwidth-007-ref.html": [
|
||||
[]
|
||||
],
|
||||
"css/css-text/text-transform/reference/text-transform-fullwidth-008-ref.html": [
|
||||
[]
|
||||
],
|
||||
"css/css-text/text-transform/reference/text-transform-fullwidth-009-ref.html": [
|
||||
[]
|
||||
],
|
||||
"css/css-text/text-transform/reference/text-transform-lowercase-001-ref.xht": [
|
||||
[]
|
||||
],
|
||||
|
@ -278370,6 +278520,9 @@
|
|||
"resources/test/tests/functional/idlharness/IdlInterface/test_immutable_prototype.html": [
|
||||
[]
|
||||
],
|
||||
"resources/test/tests/functional/idlharness/IdlInterface/test_interface_mixin.html": [
|
||||
[]
|
||||
],
|
||||
"resources/test/tests/functional/idlharness/IdlInterface/test_partial_interface_of.html": [
|
||||
[]
|
||||
],
|
||||
|
@ -308073,6 +308226,12 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"client-hints/sec-ch-quotes.https.html": [
|
||||
[
|
||||
"client-hints/sec-ch-quotes.https.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
"client-hints/sec-ch-ua.http.html": [
|
||||
[
|
||||
"client-hints/sec-ch-ua.http.html",
|
||||
|
@ -308138,6 +308297,12 @@
|
|||
}
|
||||
]
|
||||
],
|
||||
"compat/webkit-radial-gradient-radii.html": [
|
||||
[
|
||||
"compat/webkit-radial-gradient-radii.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
"compat/webkit-text-fill-color-currentColor.html": [
|
||||
[
|
||||
"compat/webkit-text-fill-color-currentColor.html",
|
||||
|
@ -308850,6 +309015,12 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"content-security-policy/frame-ancestors/report-blocked-frame.sub.html": [
|
||||
[
|
||||
"content-security-policy/frame-ancestors/report-blocked-frame.sub.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
"content-security-policy/frame-src/frame-src-about-blank-allowed-by-default.sub.html": [
|
||||
[
|
||||
"content-security-policy/frame-src/frame-src-about-blank-allowed-by-default.sub.html",
|
||||
|
@ -327668,6 +327839,18 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"css/css-values/minmax-length-percent-serialize.html": [
|
||||
[
|
||||
"css/css-values/minmax-length-percent-serialize.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
"css/css-values/minmax-length-serialize.html": [
|
||||
[
|
||||
"css/css-values/minmax-length-serialize.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
"css/css-values/minmax-number-computed.html": [
|
||||
[
|
||||
"css/css-values/minmax-number-computed.html",
|
||||
|
@ -327680,6 +327863,12 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"css/css-values/minmax-number-serialize.html": [
|
||||
[
|
||||
"css/css-values/minmax-number-serialize.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
"css/css-values/minmax-percentage-computed.html": [
|
||||
[
|
||||
"css/css-values/minmax-percentage-computed.html",
|
||||
|
@ -327692,6 +327881,12 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"css/css-values/minmax-percentage-serialize.html": [
|
||||
[
|
||||
"css/css-values/minmax-percentage-serialize.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
"css/css-values/minmax-time-computed.html": [
|
||||
[
|
||||
"css/css-values/minmax-time-computed.html",
|
||||
|
@ -394405,9 +394600,24 @@
|
|||
}
|
||||
]
|
||||
],
|
||||
"reporting/idlharness.window.js": [
|
||||
"reporting/idlharness.any.js": [
|
||||
[
|
||||
"reporting/idlharness.window.html",
|
||||
"reporting/idlharness.any.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
"script",
|
||||
"/resources/WebIDLParser.js"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"/resources/idlharness.js"
|
||||
]
|
||||
]
|
||||
}
|
||||
],
|
||||
[
|
||||
"reporting/idlharness.any.worker.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
|
@ -404193,23 +404403,6 @@
|
|||
}
|
||||
]
|
||||
],
|
||||
"subresource-integrity/idlharness.window.js": [
|
||||
[
|
||||
"subresource-integrity/idlharness.window.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
"script",
|
||||
"/resources/WebIDLParser.js"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"/resources/idlharness.js"
|
||||
]
|
||||
]
|
||||
}
|
||||
]
|
||||
],
|
||||
"subresource-integrity/subresource-css-ed25519.tentative.html": [
|
||||
[
|
||||
"subresource-integrity/subresource-css-ed25519.tentative.html",
|
||||
|
@ -413200,6 +413393,48 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"webgl/idlharness.any.js": [
|
||||
[
|
||||
"webgl/idlharness.any.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
"script",
|
||||
"/resources/WebIDLParser.js"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"/resources/idlharness.js"
|
||||
],
|
||||
[
|
||||
"timeout",
|
||||
"long"
|
||||
]
|
||||
],
|
||||
"timeout": "long"
|
||||
}
|
||||
],
|
||||
[
|
||||
"webgl/idlharness.any.worker.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
"script",
|
||||
"/resources/WebIDLParser.js"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"/resources/idlharness.js"
|
||||
],
|
||||
[
|
||||
"timeout",
|
||||
"long"
|
||||
]
|
||||
],
|
||||
"timeout": "long"
|
||||
}
|
||||
]
|
||||
],
|
||||
"webgl/texImage2D.html": [
|
||||
[
|
||||
"webgl/texImage2D.html",
|
||||
|
@ -413218,90 +413453,6 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"webgl/webgl1-idlharness.any.js": [
|
||||
[
|
||||
"webgl/webgl1-idlharness.any.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
"script",
|
||||
"/resources/WebIDLParser.js"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"/resources/idlharness.js"
|
||||
],
|
||||
[
|
||||
"timeout",
|
||||
"long"
|
||||
]
|
||||
],
|
||||
"timeout": "long"
|
||||
}
|
||||
],
|
||||
[
|
||||
"webgl/webgl1-idlharness.any.worker.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
"script",
|
||||
"/resources/WebIDLParser.js"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"/resources/idlharness.js"
|
||||
],
|
||||
[
|
||||
"timeout",
|
||||
"long"
|
||||
]
|
||||
],
|
||||
"timeout": "long"
|
||||
}
|
||||
]
|
||||
],
|
||||
"webgl/webgl2-idlharness.any.js": [
|
||||
[
|
||||
"webgl/webgl2-idlharness.any.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
"script",
|
||||
"/resources/WebIDLParser.js"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"/resources/idlharness.js"
|
||||
],
|
||||
[
|
||||
"timeout",
|
||||
"long"
|
||||
]
|
||||
],
|
||||
"timeout": "long"
|
||||
}
|
||||
],
|
||||
[
|
||||
"webgl/webgl2-idlharness.any.worker.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
"script",
|
||||
"/resources/WebIDLParser.js"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"/resources/idlharness.js"
|
||||
],
|
||||
[
|
||||
"timeout",
|
||||
"long"
|
||||
]
|
||||
],
|
||||
"timeout": "long"
|
||||
}
|
||||
]
|
||||
],
|
||||
"webgpu/cts.html": [
|
||||
[
|
||||
"webgpu/cts.html?q=cts:buffers/create_mapped:",
|
||||
|
@ -445805,7 +445956,7 @@
|
|||
"support"
|
||||
],
|
||||
".taskcluster.yml": [
|
||||
"61cc38c9bd1d051b5ad18d59de0f9febd1b3f2a2",
|
||||
"dffccbb7971382d599ff622fb31a949fa570fa49",
|
||||
"support"
|
||||
],
|
||||
".well-known/README.md": [
|
||||
|
@ -457200,6 +457351,10 @@
|
|||
"e5088c87199247416aac2397ee1a3a78f0a6e688",
|
||||
"support"
|
||||
],
|
||||
"client-hints/echo_ua_client_hints_received.py": [
|
||||
"a713047ede62874d33bc62540166303e8a7fc444",
|
||||
"support"
|
||||
],
|
||||
"client-hints/http_equiv_accept_ch.tentative.http.html": [
|
||||
"03c5799908b971ec6e6057fb8e5325e1bc2e203d",
|
||||
"testharness"
|
||||
|
@ -457280,6 +457435,14 @@
|
|||
"769fa909fa4b3b960fbde2e6df282efc970b35d0",
|
||||
"support"
|
||||
],
|
||||
"client-hints/sec-ch-quotes.https.html": [
|
||||
"86dce18904b0636092247c42ecb06fdd4fc7bc32",
|
||||
"testharness"
|
||||
],
|
||||
"client-hints/sec-ch-quotes.https.html.headers": [
|
||||
"703b5ad9bf94fd4b4986e2dcd48213ae6429878e",
|
||||
"support"
|
||||
],
|
||||
"client-hints/sec-ch-ua.http.html": [
|
||||
"e333c605301e621133ee5e6f3d01e2525d5c058a",
|
||||
"testharness"
|
||||
|
@ -457744,6 +457907,10 @@
|
|||
"579d88220610e4f2ea7e884018b655cf1c5c8dca",
|
||||
"reftest"
|
||||
],
|
||||
"compat/webkit-radial-gradient-radii.html": [
|
||||
"bff414a44e2aeff1276d99ca015288142de09f4e",
|
||||
"testharness"
|
||||
],
|
||||
"compat/webkit-text-fill-color-currentColor.html": [
|
||||
"f4912c93450edf03b43b220d205460cc82ef9ba2",
|
||||
"testharness"
|
||||
|
@ -475876,6 +476043,18 @@
|
|||
"c320370be515ee039fbc799ad088bf7a74779702",
|
||||
"testharness"
|
||||
],
|
||||
"content-security-policy/frame-ancestors/report-blocked-frame.sub.html": [
|
||||
"047d377cf4cf5d05851e1d0c9c3b20c77f098cc6",
|
||||
"testharness"
|
||||
],
|
||||
"content-security-policy/frame-ancestors/support/content-security-policy.sub.html": [
|
||||
"2182f4a3d2292218bc05243895510c4403f76528",
|
||||
"support"
|
||||
],
|
||||
"content-security-policy/frame-ancestors/support/content-security-policy.sub.html.sub.headers": [
|
||||
"322c99d518575f1e0bfa468ff640740f819cc190",
|
||||
"support"
|
||||
],
|
||||
"content-security-policy/frame-ancestors/support/frame-ancestors-and-x-frame-options.sub.html": [
|
||||
"e22fea3ccd3607d770634b9dfddae36c1b6dd314",
|
||||
"support"
|
||||
|
@ -577457,7 +577636,7 @@
|
|||
"manual"
|
||||
],
|
||||
"css/css-speech/META.yml": [
|
||||
"b0097dd021a007759116d26aaf47359c7d1e8015",
|
||||
"3b5bead823a76a3a8129e3444d2d1805d77c9c54",
|
||||
"support"
|
||||
],
|
||||
"css/css-speech/age-declarations-001.html": [
|
||||
|
@ -579688,6 +579867,10 @@
|
|||
"b9f94626330f4f1135e0861c1d37d80e66c1c0f1",
|
||||
"manual"
|
||||
],
|
||||
"css/css-text/hanging-punctuation/hanging-punctuation-inline-001.html": [
|
||||
"9be9947fe1148e63ff552f05b0f6150426bd6bcf",
|
||||
"reftest"
|
||||
],
|
||||
"css/css-text/hanging-punctuation/hanging-punctuation-last-001.xht": [
|
||||
"be7ea6bda86f4777bfb8baaae44a82dfddb55f4d",
|
||||
"manual"
|
||||
|
@ -579708,6 +579891,10 @@
|
|||
"a9e7e0c1c3e53559b82bd3e10024bf24ad6d45d5",
|
||||
"support"
|
||||
],
|
||||
"css/css-text/hanging-punctuation/reference/hanging-punctuation-inline-001-ref.html": [
|
||||
"b679e5b9131f16399963c0d9c82142dd601008f1",
|
||||
"support"
|
||||
],
|
||||
"css/css-text/hanging-punctuation/reference/hanging-punctuation-last-001-ref.xht": [
|
||||
"1f8aa4a57bb653409c5211b186f0e8b6214525ac",
|
||||
"support"
|
||||
|
@ -582384,6 +582571,10 @@
|
|||
"7c8d0f119edb5ef768b37a5a41b8df9bb9e59600",
|
||||
"testharness"
|
||||
],
|
||||
"css/css-text/line-breaking/line-breaking-021.html": [
|
||||
"b3b907410e82d87ac3912e0f27cfc1dbea17d3a9",
|
||||
"reftest"
|
||||
],
|
||||
"css/css-text/line-breaking/line-breaking-atomic-001.html": [
|
||||
"e071378c95fd436484a3056ecb2ba6ff35ddbaae",
|
||||
"reftest"
|
||||
|
@ -582480,6 +582671,10 @@
|
|||
"4a7772aa290f5ba72b3f9c604e9935438269e6f9",
|
||||
"support"
|
||||
],
|
||||
"css/css-text/line-breaking/reference/line-breaking-021-ref.html": [
|
||||
"b1cc22bd2049f66a86f61bd8bf8f6c8a6ec26258",
|
||||
"support"
|
||||
],
|
||||
"css/css-text/line-breaking/reference/line-breaking-atomic-003-ref.html": [
|
||||
"a9fdd2591b3f3af3d2a9accfd8c65db028f87749",
|
||||
"support"
|
||||
|
@ -583500,6 +583695,10 @@
|
|||
"4496c3866ee10cee2da3b716203ec46d6730a6c0",
|
||||
"support"
|
||||
],
|
||||
"css/css-text/text-align/reference/text-align-last-wins-001-ref.html": [
|
||||
"997d58a79884ac3086426da2a84b992019bfd100",
|
||||
"support"
|
||||
],
|
||||
"css/css-text/text-align/reference/text-align-start-ref-001.html": [
|
||||
"72e11fae2dd1eccb5d9742970a401db54b72dfc0",
|
||||
"support"
|
||||
|
@ -583760,6 +583959,10 @@
|
|||
"fd3d706d1ee4acd3fda03cd46c12f20dfb69b9b9",
|
||||
"testharness"
|
||||
],
|
||||
"css/css-text/text-align/text-align-last-wins-001.html": [
|
||||
"30f1a07864b073b1d11953be867f17c0e6ef129d",
|
||||
"reftest"
|
||||
],
|
||||
"css/css-text/text-align/text-align-start-001.html": [
|
||||
"43219cc248fcca0a20cacae5993860b7e4cd292e",
|
||||
"reftest"
|
||||
|
@ -583924,6 +584127,10 @@
|
|||
"5bf766ce7607bd21892a558f67901a564fc64994",
|
||||
"reftest"
|
||||
],
|
||||
"css/css-text/text-justify/reference/text-justify-006-ref.html": [
|
||||
"595485c5f4ea346b011f07128649da3f2c020902",
|
||||
"support"
|
||||
],
|
||||
"css/css-text/text-justify/reference/text-justify-ref-001.html": [
|
||||
"976df7f4dcee2efbb4e232cbd3a86ec4d7ac8943",
|
||||
"support"
|
||||
|
@ -583948,6 +584155,10 @@
|
|||
"afbc036cce43268a4764e3dea75190a0ed44be3c",
|
||||
"visual"
|
||||
],
|
||||
"css/css-text/text-justify/text-justify-006.html": [
|
||||
"7744f52afea63d9b1abe7c7edab4880d703be855",
|
||||
"reftest"
|
||||
],
|
||||
"css/css-text/text-transform/math/text-transform-math-auto-001.tentative-ref.html": [
|
||||
"d41d618769e85a581ceada90e020d6fc979ad7d5",
|
||||
"support"
|
||||
|
@ -584212,6 +584423,14 @@
|
|||
"b8fc5662bd83d9f29aabadbd4eb973e91621f1ed",
|
||||
"support"
|
||||
],
|
||||
"css/css-text/text-transform/reference/text-transform-fullwidth-008-ref.html": [
|
||||
"efe6508e2e61dddd9a132891e4fdd8a3e155067d",
|
||||
"support"
|
||||
],
|
||||
"css/css-text/text-transform/reference/text-transform-fullwidth-009-ref.html": [
|
||||
"915e8444f1335e920073e2c8091281241370f830",
|
||||
"support"
|
||||
],
|
||||
"css/css-text/text-transform/reference/text-transform-lowercase-001-ref.xht": [
|
||||
"3d6eb4af8ac5aeb7fd54e1b2e2aec325886ddca0",
|
||||
"support"
|
||||
|
@ -584577,11 +584796,19 @@
|
|||
"reftest"
|
||||
],
|
||||
"css/css-text/text-transform/text-transform-fullwidth-006.html": [
|
||||
"b0a509758ed56ca4051e1df079c4d758352764c3",
|
||||
"0bd0aa88400cd9e6883183c504010df611b4b928",
|
||||
"reftest"
|
||||
],
|
||||
"css/css-text/text-transform/text-transform-fullwidth-007.html": [
|
||||
"6e081544a193949b217530b49f71eadfe2800be4",
|
||||
"f1089f19ab67a4c34bea126a9dec4bc23e7de0fe",
|
||||
"reftest"
|
||||
],
|
||||
"css/css-text/text-transform/text-transform-fullwidth-008.html": [
|
||||
"d6cd9c4c9833973d2fcfa2bfedc74a64b1872ec8",
|
||||
"reftest"
|
||||
],
|
||||
"css/css-text/text-transform/text-transform-fullwidth-009.html": [
|
||||
"afcb89b0cfcc6db2ca3517b1f99e91abdca321fa",
|
||||
"reftest"
|
||||
],
|
||||
"css/css-text/text-transform/text-transform-lowercase-001.xht": [
|
||||
|
@ -585660,6 +585887,14 @@
|
|||
"52b7ce1f6ab15ac1833067cdf957b1e4c6b4af21",
|
||||
"testharness"
|
||||
],
|
||||
"css/css-text/white-space/seg-break-transformation-018.html": [
|
||||
"2faf185856baf75b4820b57cd9b4ffe4161f7a29",
|
||||
"reftest"
|
||||
],
|
||||
"css/css-text/white-space/seg-break-transformation-019.html": [
|
||||
"afbba2642524209eda0378577305b5c0e48d1232",
|
||||
"reftest"
|
||||
],
|
||||
"css/css-text/white-space/tab-stop-threshold-001.html": [
|
||||
"dae6012bf7f42bfa4154f2c88c439db6959e80cb",
|
||||
"reftest"
|
||||
|
@ -586240,6 +586475,14 @@
|
|||
"8845ea21edd09bb9a7165643ff8148a4f516bb01",
|
||||
"reftest"
|
||||
],
|
||||
"css/css-text/word-break/word-break-keep-all-007.html": [
|
||||
"e1bc9a5205319322ff103a6fc6880adba8cb3323",
|
||||
"reftest"
|
||||
],
|
||||
"css/css-text/word-break/word-break-keep-all-008.html": [
|
||||
"16529b0619ee28b905dcc6cf91a5e62ad56fdc8c",
|
||||
"reftest"
|
||||
],
|
||||
"css/css-text/word-break/word-break-normal-001.html": [
|
||||
"61ccba2465f772c46a771a8868e9036ff4a93b9d",
|
||||
"reftest"
|
||||
|
@ -595908,6 +596151,14 @@
|
|||
"ee086ef269d07bf6b0db5d1306a0f24af0ad8fab",
|
||||
"testharness"
|
||||
],
|
||||
"css/css-values/minmax-length-percent-serialize.html": [
|
||||
"f0ffd4ea2ce2e3ae3246793cc3191ccb290d0697",
|
||||
"testharness"
|
||||
],
|
||||
"css/css-values/minmax-length-serialize.html": [
|
||||
"4b30864d2344ba297f077b7e9090d25984bdb631",
|
||||
"testharness"
|
||||
],
|
||||
"css/css-values/minmax-number-computed.html": [
|
||||
"c72c276625466a193bf8829e3ddbb87d7a565dc0",
|
||||
"testharness"
|
||||
|
@ -595916,6 +596167,10 @@
|
|||
"3f34fde2f23732ed1b9bc540a098e5914ad674bf",
|
||||
"testharness"
|
||||
],
|
||||
"css/css-values/minmax-number-serialize.html": [
|
||||
"e05ccc339c90a1c8df22d6b9f46ff7c357dc36af",
|
||||
"testharness"
|
||||
],
|
||||
"css/css-values/minmax-percentage-computed.html": [
|
||||
"9f9d0a59d12c2642bfea8ca5a3e2f8528067c80e",
|
||||
"testharness"
|
||||
|
@ -595924,6 +596179,10 @@
|
|||
"48d2cdabec1bee5cde0d5d6f4c3524f463916db1",
|
||||
"testharness"
|
||||
],
|
||||
"css/css-values/minmax-percentage-serialize.html": [
|
||||
"79624be529e5ec91b847a995d497e515736f66cc",
|
||||
"testharness"
|
||||
],
|
||||
"css/css-values/minmax-time-computed.html": [
|
||||
"36bcf601eb808311732562a6c1c6a7c801f33e9d",
|
||||
"testharness"
|
||||
|
@ -625913,7 +626172,7 @@
|
|||
"reftest"
|
||||
],
|
||||
"fetch/corb/img-mime-types-coverage.tentative.sub.html": [
|
||||
"c2aa93236360de7c34ecdbddac161b381de8ac7d",
|
||||
"e2386de2f2a949a201a747e3edc9af0416b638ad",
|
||||
"testharness"
|
||||
],
|
||||
"fetch/corb/img-png-mislabeled-as-html-nosniff.tentative.sub-ref.html": [
|
||||
|
@ -625921,7 +626180,7 @@
|
|||
"support"
|
||||
],
|
||||
"fetch/corb/img-png-mislabeled-as-html-nosniff.tentative.sub.html": [
|
||||
"46403b0b18107c7943575c424773348a11e39cb2",
|
||||
"82adc47b0cf31c779637d2a55f9c3b9b532aceca",
|
||||
"reftest"
|
||||
],
|
||||
"fetch/corb/img-png-mislabeled-as-html.sub-ref.html": [
|
||||
|
@ -625933,7 +626192,7 @@
|
|||
"reftest"
|
||||
],
|
||||
"fetch/corb/preload-image-png-mislabeled-as-html-nosniff.tentative.sub.html": [
|
||||
"2fc93f8317e6bc0188ebe52e3587d37290fed18e",
|
||||
"cea80f2f89fac47e0ec8b3ac53f8b15d0ccfb76d",
|
||||
"testharness"
|
||||
],
|
||||
"fetch/corb/resources/css-mislabeled-as-html-nosniff.css": [
|
||||
|
@ -626037,7 +626296,7 @@
|
|||
"support"
|
||||
],
|
||||
"fetch/corb/script-html-correctly-labeled.tentative.sub.html": [
|
||||
"407cef9158444d4fd19bfc8c09ed73d663d55fba",
|
||||
"8f4d7679e3d749b3cd402997f607b7358fe98c28",
|
||||
"testharness"
|
||||
],
|
||||
"fetch/corb/script-html-js-polyglot.sub.html": [
|
||||
|
@ -626057,7 +626316,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"fetch/corb/script-resource-with-json-parser-breaker.tentative.sub.html": [
|
||||
"03924cdad0dbad0e5fb2bc05cdd8ac19b619fa13",
|
||||
"cabc7b09c458ca1f3852c633c9cd47680ab6e89d",
|
||||
"testharness"
|
||||
],
|
||||
"fetch/corb/script-resource-with-nonsniffable-types.tentative.sub.html": [
|
||||
|
@ -638205,7 +638464,7 @@
|
|||
"support"
|
||||
],
|
||||
"html/semantics/document-metadata/the-link-element/resources/link-style-error.js": [
|
||||
"7ebc39ba6cc5b25e6743684c1e2975049ed8fcd1",
|
||||
"d1fa5ac2d6fcb4d94561c18b2d2e22a5a2afd6e3",
|
||||
"support"
|
||||
],
|
||||
"html/semantics/document-metadata/the-link-element/resources/neutral.css": [
|
||||
|
@ -649217,7 +649476,7 @@
|
|||
"support"
|
||||
],
|
||||
"interfaces/encrypted-media.idl": [
|
||||
"61e869367a113092bd8c2ccf475da4fab9414b54",
|
||||
"26c03f6f24dc0321332c7e1d16443d350d35975a",
|
||||
"support"
|
||||
],
|
||||
"interfaces/entries-api.idl": [
|
||||
|
@ -649245,7 +649504,7 @@
|
|||
"support"
|
||||
],
|
||||
"interfaces/fullscreen.idl": [
|
||||
"491aa7af13e6703023f723cfd6ef41cc6c0e6ace",
|
||||
"6f86d5c220fd274cea8b12190ad1a4a3ee5a2ba9",
|
||||
"support"
|
||||
],
|
||||
"interfaces/gamepad.idl": [
|
||||
|
@ -649349,7 +649608,7 @@
|
|||
"support"
|
||||
],
|
||||
"interfaces/mediastream-recording.idl": [
|
||||
"0be0538d1227147930cb03c52391cce7497eb2e4",
|
||||
"2d849ba9affe476a23141c9f3976c65b2d9f7ef4",
|
||||
"support"
|
||||
],
|
||||
"interfaces/mst-content-hint.idl": [
|
||||
|
@ -649441,7 +649700,7 @@
|
|||
"support"
|
||||
],
|
||||
"interfaces/reporting.idl": [
|
||||
"ae24f7538f6ba1557f152624416b359b740a60f2",
|
||||
"05d5a42458b5cd38c4a902b5a7066af524a396fc",
|
||||
"support"
|
||||
],
|
||||
"interfaces/requestidlecallback.idl": [
|
||||
|
@ -675085,7 +675344,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"reporting/META.yml": [
|
||||
"980823f59f7e3ac4f35a31ab6df37ce16e538f54",
|
||||
"70f3136dd3c022599f81291f348e11c4c7787f44",
|
||||
"support"
|
||||
],
|
||||
"reporting/bufferSize.html": [
|
||||
|
@ -675100,7 +675359,7 @@
|
|||
"e3c2735686a05eefc9bbcfb107f76ec7275b8948",
|
||||
"testharness"
|
||||
],
|
||||
"reporting/idlharness.window.js": [
|
||||
"reporting/idlharness.any.js": [
|
||||
"17cef8183596ae1d0b307fb8ddccc7455b955966",
|
||||
"testharness"
|
||||
],
|
||||
|
@ -675925,7 +676184,7 @@
|
|||
"support"
|
||||
],
|
||||
"resources/idlharness.js": [
|
||||
"f68ad1dd7d81e54bea5f9004284eff49a713a32e",
|
||||
"ce5a8d86d2ebb4cc3ce33f5e6e7edc10d8bef33a",
|
||||
"support"
|
||||
],
|
||||
"resources/idlharness.js.headers": [
|
||||
|
@ -676021,15 +676280,19 @@
|
|||
"support"
|
||||
],
|
||||
"resources/test/tests/functional/idlharness/IdlDictionary/test_partial_interface_of.html": [
|
||||
"5bf51fed403cc8aa41ff6d90bfc3eb7fb91c94f2",
|
||||
"5ee3fe7e893f19ef328c3b5c996bf7b4751b2b7a",
|
||||
"support"
|
||||
],
|
||||
"resources/test/tests/functional/idlharness/IdlInterface/test_immutable_prototype.html": [
|
||||
"7a5b17751bfb5dc80466406ce7d8abcf112b895b",
|
||||
"support"
|
||||
],
|
||||
"resources/test/tests/functional/idlharness/IdlInterface/test_interface_mixin.html": [
|
||||
"a9a9094fe30ab5085742247078ec79acae1a0711",
|
||||
"support"
|
||||
],
|
||||
"resources/test/tests/functional/idlharness/IdlInterface/test_partial_interface_of.html": [
|
||||
"0c752bdc6cd2c50796175a383e862af0d2bd3341",
|
||||
"d0e83af966410c0a6d41511948e5262c84a47c46",
|
||||
"support"
|
||||
],
|
||||
"resources/test/tests/functional/idlharness/IdlInterface/test_primary_interface_of.html": [
|
||||
|
@ -676293,7 +676556,7 @@
|
|||
"support"
|
||||
],
|
||||
"resources/testharness.js": [
|
||||
"55de1ce252bd0349aa5bee2e69120ae44520ed02",
|
||||
"b45f3291a0419156d042a84d829033c56a815210",
|
||||
"support"
|
||||
],
|
||||
"resources/testharness.js.headers": [
|
||||
|
@ -676313,7 +676576,7 @@
|
|||
"support"
|
||||
],
|
||||
"resources/webidl2/lib/webidl2.js": [
|
||||
"c60a456c3241655d05a7e40f82b19d8735d017d4",
|
||||
"2a174c92ebe67d62bc5273556f9cca03de332d05",
|
||||
"support"
|
||||
],
|
||||
"resources/webidl2/lib/webidl2.js.headers": [
|
||||
|
@ -681756,10 +682019,6 @@
|
|||
"de1416372cd4431147ad40206c54e5ecf5273aec",
|
||||
"support"
|
||||
],
|
||||
"subresource-integrity/idlharness.window.js": [
|
||||
"d2997e562fadfd208d202ce3d60d11cd937ea779",
|
||||
"testharness"
|
||||
],
|
||||
"subresource-integrity/image.png": [
|
||||
"01c9666a8de9d5535615aff830810e5df4b2156f",
|
||||
"support"
|
||||
|
@ -686705,7 +686964,7 @@
|
|||
"support"
|
||||
],
|
||||
"tools/ci/jobs.py": [
|
||||
"31b39635a264875e04a558bb9489a3ecec549c23",
|
||||
"b7ada2a5b621236d97d4e87a8d7e0960327bc01d",
|
||||
"support"
|
||||
],
|
||||
"tools/ci/make_hosts_file.py": [
|
||||
|
@ -686717,7 +686976,7 @@
|
|||
"support"
|
||||
],
|
||||
"tools/ci/run_tc.py": [
|
||||
"ea4a1ac1a6ac4a9a2b2a0265e74c70dc5fdc957d",
|
||||
"b2826bf075e9b1e82ee3d021003134930231f556",
|
||||
"support"
|
||||
],
|
||||
"tools/ci/taskcluster-run.py": [
|
||||
|
@ -686729,7 +686988,7 @@
|
|||
"support"
|
||||
],
|
||||
"tools/ci/tests/test_jobs.py": [
|
||||
"a10e48d2f23a41b7b6762f507c3a01b9bc6a0bca",
|
||||
"94f7998770cf5d8bad36d188dd63e253f98199a8",
|
||||
"support"
|
||||
],
|
||||
"tools/ci/tests/test_run_tc.py": [
|
||||
|
@ -697908,6 +698167,10 @@
|
|||
"539f9e17f8a811c5acb4f07cf6cbd17015726632",
|
||||
"testharness"
|
||||
],
|
||||
"webgl/idlharness.any.js": [
|
||||
"d6131f4884dfb001990e9427a73f092eef9f2c9e",
|
||||
"testharness"
|
||||
],
|
||||
"webgl/texImage2D.html": [
|
||||
"2f769160dfdeaa3b0a73380e5540b30dfc971489",
|
||||
"testharness"
|
||||
|
@ -697920,14 +698183,6 @@
|
|||
"f75cbcb99724219224c63d0dc595b1c001298500",
|
||||
"testharness"
|
||||
],
|
||||
"webgl/webgl1-idlharness.any.js": [
|
||||
"2cf80395230604336daadeaa2ac4a910552215b5",
|
||||
"testharness"
|
||||
],
|
||||
"webgl/webgl2-idlharness.any.js": [
|
||||
"c8efcd031fe53a37c5db3740b82db4a1f0df647d",
|
||||
"testharness"
|
||||
],
|
||||
"webgpu/cts.html": [
|
||||
"661060fcd7b32f7cecbbbc87499c7b70d1f39694",
|
||||
"testharness"
|
||||
|
@ -704661,7 +704916,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"workers/dedicated-worker-from-blob-url.window.js": [
|
||||
"f54faf54350990a9593e7af022c9eeb769595b15",
|
||||
"8455285571a357a5e6c46a38dcf465f7bd432b55",
|
||||
"testharness"
|
||||
],
|
||||
"workers/examples/fetch_tests_from_worker.html": [
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
[line-breaking-021.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[text-align-last-wins-001.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[text-justify-006.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[text-transform-fullwidth-008.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[text-transform-fullwidth-009.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[seg-break-transformation-018.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[seg-break-transformation-019.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[word-break-keep-all-007.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[word-break-keep-all-008.html]
|
||||
expected: FAIL
|
|
@ -1,4 +1,5 @@
|
|||
[perspective-interpolation.html]
|
||||
expected: CRASH
|
||||
[ perspective interpolation]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,181 @@
|
|||
[minmax-length-percent-serialize.html]
|
||||
[e.style['margin-left'\] = "max(1pt + 1%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "min(1vw + 1%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "min(1rem + 1%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "min(1mm + 1%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "calc(max(10%) + 20px)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "max(1em, 10%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "min(1vh + 1%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "max(1em + 1%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "min(10%, 20px)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "min(1em + 1%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "max(1mm + 1%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "max(1ex + 1%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "max(1vmin + 1%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "min(1Q + 1%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "calc(10% + max(20px))" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "min(1vmin + 1%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "max(1cm + 1%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "max(1pc + 1%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "max(1px + 1%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "calc(max(1em) + 10%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "min(10%, 1em)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "calc(20px + max(10%))" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "calc(max(20px) + 10%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "min(1ch + 1%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "calc(max(20px) + min(1em) + max(10%))" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "max(1ch + 1%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "calc(min(10%) + 20px)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "calc(10% + max(1em))" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "min(1em, 10%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "min(1vmax + 1%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "calc(20px + min(10%))" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "max(20px, 10%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "min(1pc + 1%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "calc(10% + min(1em))" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "calc(min(20px) + 10%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "min(1ex + 1%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "max(10% + 2em, 5% + 1em)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "min(1in + 1%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "min(10% + 30px, 5% + 60px)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "calc(1em + max(10%))" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "max(10%, 1em)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "max(1in + 1%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "calc(min(10%) + max(1em) + min(20px))" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "calc(1em + min(10%))" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "max(10%, 20px)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "calc(max(10%) + min(1em) + max(20px))" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "max(1Q + 1%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "min(20px, 10%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "max(1vh + 1%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "max(1rem + 1%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "min(1pt + 1%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "min(1cm + 1%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "max(1vmax + 1%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "calc(min(10%) + 1em)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "calc(max(10%) + 1em)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "max(1vw + 1%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "calc(min(20px) + max(1em) + min(10%))" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "calc(10% + min(20px))" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "min(1px + 1%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "calc(min(1em) + 10%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,133 @@
|
|||
[minmax-length-serialize.html]
|
||||
[e.style['letter-spacing'\] = "min(20px, 1em, 10vw)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "calc(max(1em) + min(10vw) + max(10px))" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "max(1px)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "max(1in)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "calc(max(1em) + 10px)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "max(10px, 20px, 30px)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "calc(min(10px) + max(1em) + min(10vw))" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "min(1pc)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "max(1cm)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "max(1ex)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "min(1rem)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "min(10vw, 1em, 20px)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "calc(min(1em) + 10px)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "max(1vmax)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "max(1vw)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "min(1px)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "min(10px, 20px, 30px)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "max(10vw, 1em, 20px)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "min(1cm)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "min(1vw)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "min(1vmax)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "max(1ch)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "min(30px, 20px, 10px)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "min(1pt)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "min(1Q)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "min(1in)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "max(1vmin)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "max(1pc)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "max(1em)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "max(1rem)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "max(30px, 20px, 10px)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "min(1mm)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "max(1mm)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "max(1vh)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "min(1em)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "min(1ch)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "max(20px, 1em, 10vw)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "max(1pt)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "max(1Q)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "min(1vmin)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "min(1ex)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "min(1vh)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "calc(10px + max(1em))" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['letter-spacing'\] = "calc(10px + min(1em))" should set the property value]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
[minmax-number-serialize.html]
|
||||
[e.style['opacity'\] = "calc(min(1) + min(2))" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['opacity'\] = "max(1)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['opacity'\] = "calc(min(1) + 1)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['opacity'\] = "max(1, 2, 3)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['opacity'\] = "calc(1 + max(1))" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['opacity'\] = "min(3, 2, 1)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['opacity'\] = "calc(max(1) + max(2))" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['opacity'\] = "calc(max(1) + 1)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['opacity'\] = "max(3, 2, 1)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['opacity'\] = "min(1)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['opacity'\] = "min(1, 2, 3)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['opacity'\] = "calc(1 + min(1))" should set the property value]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
[minmax-percentage-serialize.html]
|
||||
[e.style['margin-left'\] = "max(1%, 2%, 3%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "min(1%, 2%, 3%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "calc(min(1%) + min(2%))" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "calc(max(1%) + 1%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "calc(1% + max(1%))" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "calc(min(1%) + 1%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "calc(1% + min(1%))" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "calc(max(1%) + max(2%))" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "max(3%, 2%, 1%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "max(1%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "min(1%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['margin-left'\] = "min(3%, 2%, 1%)" should set the property value]
|
||||
expected: FAIL
|
||||
|
|
@ -299,3 +299,9 @@
|
|||
[Element interface: document.createElement("div") must inherit property "scrollIntoView([object Object\],[object Object\])" with the proper type]
|
||||
expected: FAIL
|
||||
|
||||
[Partial interface MouseEvent: member names are unique]
|
||||
expected: FAIL
|
||||
|
||||
[Partial dictionary MouseEventInit: member names are unique]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
[matchMedia-display-none-iframe.html]
|
||||
expected: ERROR
|
|
@ -1,2 +0,0 @@
|
|||
[contenttype_txt.html]
|
||||
expected: CRASH
|
|
@ -315,15 +315,18 @@
|
|||
[<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: */* text/html]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/plain */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;x=" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -56,3 +56,6 @@
|
|||
[separate text/javascript x/x]
|
||||
expected: FAIL
|
||||
|
||||
[separate text/javascript;charset=windows-1252 text/javascript]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -11,6 +11,3 @@
|
|||
[X-Content-Type-Options%3A%20nosniff%0C]
|
||||
expected: FAIL
|
||||
|
||||
[X-Content-Type-Options%3A%20%22nosniFF%22]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
[traverse_the_history_2.html]
|
||||
[traverse_the_history_4.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[traverse_the_history_5.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
[creating_browsing_context_test_01.html]
|
||||
expected: TIMEOUT
|
||||
[first argument: absolute url]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1457,6 +1457,9 @@
|
|||
[SVGElement interface: attribute onslotchange]
|
||||
expected: FAIL
|
||||
|
||||
[SVGAElement includes HTMLHyperlinkElementUtils: member names are unique]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[idlharness.https.html?include=(Document|Window)]
|
||||
[Document interface: documentWithHandlers must inherit property "queryCommandEnabled(DOMString)" with the proper type]
|
||||
|
@ -1870,6 +1873,9 @@
|
|||
[Document interface: iframe.contentDocument must inherit property "onslotchange" with the proper type]
|
||||
expected: FAIL
|
||||
|
||||
[SVGAElement includes HTMLHyperlinkElementUtils: member names are unique]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[idlharness.https.html?include=HTML.*]
|
||||
[HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("hidden") with too few arguments must throw TypeError]
|
||||
|
@ -5124,3 +5130,6 @@
|
|||
[HTMLElement interface: document.createElement("noscript") must inherit property "onslotchange" with the proper type]
|
||||
expected: FAIL
|
||||
|
||||
[SVGAElement includes HTMLHyperlinkElementUtils: member names are unique]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
[DOMContentLoaded-defer.html]
|
||||
[The end: DOMContentLoaded and defer scripts]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
[promise-rejection-events-onerror.html]
|
||||
expected: TIMEOUT
|
||||
[Throwing inside an unhandledrejection handler invokes the error handler.]
|
||||
expected: TIMEOUT
|
||||
|
9060
tests/wpt/metadata/webgl/idlharness.any.js.ini
Normal file
9060
tests/wpt/metadata/webgl/idlharness.any.js.ini
Normal file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,4 @@
|
|||
[idlharness.https.window.html]
|
||||
[idl_test validation]
|
||||
expected: FAIL
|
||||
|
|
@ -230,3 +230,9 @@
|
|||
[XR interface: navigator.xr must inherit property "isSessionSupported(XRSessionMode)" with the proper type]
|
||||
expected: FAIL
|
||||
|
||||
[WebGLRenderingContext includes WebGLRenderingContextOverloads: member names are unique]
|
||||
expected: FAIL
|
||||
|
||||
[WebGLRenderingContext includes WebGLRenderingContextBase: member names are unique]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,2 +0,0 @@
|
|||
[Worker-constructor.html]
|
||||
expected: ERROR
|
|
@ -1,5 +1,4 @@
|
|||
[dedicated-worker-from-blob-url.window.html]
|
||||
expected: TIMEOUT
|
||||
[Creating a dedicated worker from a blob URL works immediately before revoking.]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
[transition_calc_implicit.html]
|
||||
expected: TIMEOUT
|
|
@ -122,6 +122,7 @@ tasks:
|
|||
$map:
|
||||
# This is the main place to define new stability checks
|
||||
- name: wpt-${browser.name}-${browser.channel}-stability
|
||||
job_name: stability
|
||||
checkout: task_head
|
||||
diff_base: base_head
|
||||
description: >-
|
||||
|
@ -129,6 +130,7 @@ tasks:
|
|||
when executed in ${browser.name}.
|
||||
extra_args: '--verify'
|
||||
- name: wpt-${browser.name}-${browser.channel}-results
|
||||
job_name: affected_tests
|
||||
checkout: task_head
|
||||
diff_base: base_head
|
||||
description: >-
|
||||
|
@ -139,6 +141,7 @@ tasks:
|
|||
--log-wptreport=../artifacts/wpt_report.json
|
||||
--log-wptscreenshot=../artifacts/wpt_screenshot.txt
|
||||
- name: wpt-${browser.name}-${browser.channel}-results-without-changes
|
||||
job_name: affected_tests
|
||||
checkout: base_head
|
||||
diff_base: task_head
|
||||
description: >-
|
||||
|
@ -194,7 +197,7 @@ tasks:
|
|||
--browser=${browser.name}
|
||||
--channel=${browser.channel}
|
||||
--xvfb
|
||||
stability
|
||||
${operation.job_name}
|
||||
./tools/ci/taskcluster-run.py
|
||||
--commit-range ${operation.diff_base}
|
||||
${browser.name}
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
def main(request, response):
|
||||
"""
|
||||
Simple handler that sets a response header based on which client hint
|
||||
request headers were received.
|
||||
"""
|
||||
|
||||
response.headers.append("Access-Control-Allow-Origin", "*")
|
||||
response.headers.append("Access-Control-Allow-Headers", "*")
|
||||
response.headers.append("Access-Control-Expose-Headers", "*")
|
||||
|
||||
client_hint_headers = [
|
||||
"sec-ch-ua",
|
||||
"sec-ch-ua-arch",
|
||||
"sec-ch-ua-platform",
|
||||
"sec-ch-ua-model",
|
||||
]
|
||||
|
||||
request_client_hints = {i:request.headers.get(i) for i in client_hint_headers}
|
||||
|
||||
for header in client_hint_headers:
|
||||
if request_client_hints[header] is not None:
|
||||
response.headers.set(header+"-recieved", request_client_hints[header])
|
||||
|
||||
headers = []
|
||||
content = ""
|
||||
return 200, headers, content
|
|
@ -0,0 +1,25 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>Tests Stale While Revalidate is not executed for fetch API</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/common/utils.js"></script>
|
||||
<script>
|
||||
promise_test(async (test) => {
|
||||
var request_token = token();
|
||||
var client_hint_headers = [
|
||||
"sec-ch-ua",
|
||||
"sec-ch-ua-arch",
|
||||
"sec-ch-ua-platform",
|
||||
"sec-ch-ua-model",
|
||||
];
|
||||
|
||||
const response = await fetch(`echo_ua_client_hints_received.py`);
|
||||
client_hint_headers.forEach(header => {
|
||||
if(response.headers.get(header+"-recieved")) {
|
||||
assert_equals(response.headers.get(header+"-recieved").slice(0,1), "\"");
|
||||
assert_equals(response.headers.get(header+"-recieved").slice(-1), "\"");
|
||||
}
|
||||
});
|
||||
}, 'User agent client hint header values are surrounded by quotes');
|
||||
</script>
|
|
@ -0,0 +1 @@
|
|||
Accept-CH: ua,arch,platform,model
|
|
@ -0,0 +1,21 @@
|
|||
<!DOCTYPE html>
|
||||
<link rel="help" href="https://compat.spec.whatwg.org/#css-gradients-webkit-radial-gradient">
|
||||
<link rel="help" href="https://www.w3.org/TR/css3-images/#radial-gradients">
|
||||
<meta name="assert" content="Negative radii values are invalid.">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script>
|
||||
test(function() {
|
||||
assert_true(CSS.supports("background-image", "-webkit-radial-gradient(1px 2px, 3% 4% red, blue)"));
|
||||
}, '-webkit-radial-gradient accepts positive radii.');
|
||||
|
||||
test(function() {
|
||||
assert_true(CSS.supports("background-image", "-webkit-radial-gradient(1px 2px, 0% 4% red, blue)"));
|
||||
}, '-webkit-radial-gradient accepts zero radii.');
|
||||
|
||||
test(function() {
|
||||
assert_false(CSS.supports("background-image", "-webkit-radial-gradient(1px 2px, -3% 4% red, blue)"));
|
||||
assert_false(CSS.supports("background-image", "-webkit-radial-gradient(1px 2px, 3% -4% red, blue)"));
|
||||
assert_false(CSS.supports("background-image", "-webkit-radial-gradient(1px 2px, -3% -4% red, blue)"));
|
||||
}, '-webkit-radial-gradient rejects negative radii.');
|
||||
</script>
|
|
@ -0,0 +1,12 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<title>Blocked frames are reported correctly</title>
|
||||
</head>
|
||||
<body>
|
||||
<iframe src="support/content-security-policy.sub.html?policy=report-uri%20../../support/report.py%3Fop=put%26reportID={{$id:uuid()}}%3B%20frame-ancestors%20'none'"></iframe>
|
||||
<script async defer src="../support/checkReport.sub.js?reportField=violated-directive&reportValue=frame-ancestors%20'none'&reportID={{$id}}"></script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,6 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<body>
|
||||
<p>This is an IFrame sending a Content Security Policy header containing "{{GET[policy]}}".</p>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1 @@
|
|||
Content-Security-Policy: {{GET[policy]}}
|
|
@ -1,4 +1,3 @@
|
|||
spec: https://drafts.csswg.org/css-speech/
|
||||
suggested_reviewers:
|
||||
- danielweck
|
||||
- musingvirtual
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
<!doctype html>
|
||||
<html lang=en>
|
||||
|
||||
<title>CSS Test: hanging-punctuation - force-end - basic cases</title>
|
||||
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
|
||||
<link rel="help" href="http://www.w3.org/TR/css-text-3/#hanging-punctuation">
|
||||
<link rel="match" href="reference/hanging-punctuation-inline-001-ref.html">
|
||||
<meta name="assert" content="hanging punctuation applies to inlines">
|
||||
<style>
|
||||
div { font-size: 2em; }
|
||||
#ref { color: blue; }
|
||||
#test {
|
||||
width: 4em;
|
||||
color: orange;
|
||||
}
|
||||
#test span {
|
||||
hanging-punctuation: last;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>Test passes if the orange and blue pieces of text are laid out identically.
|
||||
|
||||
<div id=ref>字字字字」</div>
|
||||
<div id=test>字字字字<span>」</span></div>
|
|
@ -0,0 +1,15 @@
|
|||
<!doctype html>
|
||||
<html lang=en>
|
||||
|
||||
<title>test reference</title>
|
||||
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
|
||||
<style>
|
||||
div { font-size: 2em; }
|
||||
#ref { color: blue; }
|
||||
#test { color: orange; }
|
||||
</style>
|
||||
|
||||
<p>Test passes if the orange and blue pieces of text are laid out identically.
|
||||
|
||||
<div id=ref>字字字字」</div>
|
||||
<div id=test>字字字字」</div>
|
|
@ -0,0 +1,16 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Text Test: Simple line breaking test</title>
|
||||
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-details">
|
||||
<link rel="match" href="reference/line-breaking-021-ref.html">
|
||||
<meta name=assert content="Line breaking behavior defined for the ZWJ line-breaking classes in [UAX14] must be honored.">
|
||||
<style>
|
||||
div {
|
||||
width: 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>This test passes if there the text below is on a single line.
|
||||
|
||||
<div>じ‍字‍자‍😂‍😭</div>
|
|
@ -0,0 +1,9 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>test reference</title>
|
||||
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
|
||||
</style>
|
||||
|
||||
<p>This test passes if there the text below is on a single line.
|
||||
|
||||
<div>じ‍字‍자‍😂‍😭</div>
|
|
@ -0,0 +1,16 @@
|
|||
<!doctype html>
|
||||
<html lang=en>
|
||||
<meta charset=utf-8>
|
||||
<title>test reference</title>
|
||||
<style>
|
||||
div {
|
||||
text-align: right;
|
||||
width: 300px;
|
||||
border: solid;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>Test passes if the words below are aligned to the right of the box.
|
||||
|
||||
<div>right<br>right</div>
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
<!doctype html>
|
||||
<html lang=en>
|
||||
<meta charset=utf-8>
|
||||
<title>CSS text test: text-align-last has precedence over text-align-all</title>
|
||||
<link rel=help href="https://drafts.csswg.org/css-text-3/#text-align-all-property">
|
||||
<link rel=help href="https://drafts.csswg.org/css-text-3/#text-align-last-property">
|
||||
<link rel="match" href="reference/text-align-last-wins-001-ref.html">
|
||||
<meta name=assert content="If a line is both the first and last line, text-align-last applies">
|
||||
<style>
|
||||
div {
|
||||
text-align-last: right;
|
||||
width: 300px;
|
||||
border: solid;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>Test passes if the words below are aligned to the right of the box.
|
||||
|
||||
<div>right<br>right</div>
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en" >
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>test reference</title>
|
||||
<link rel='author' title='Florian Rivoal' href='https://florian.rivoal.net'>
|
||||
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
|
||||
<style>
|
||||
div {
|
||||
font: 20px/1 Ahem;
|
||||
white-space: pre;
|
||||
}
|
||||
#ref {
|
||||
color: orange;
|
||||
}
|
||||
#test {
|
||||
color: blue;
|
||||
}
|
||||
|
||||
/* this is just filler content to have an invisible last line, as jutification does not affect the last line */
|
||||
a { color: white; }
|
||||
</style>
|
||||
|
||||
<p>Test passes if the the blue and orange boxes are aligned.
|
||||
|
||||
<div id=ref>X X X X</div>
|
||||
<div id=test>X X X X</div>
|
|
@ -0,0 +1,35 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en" >
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS text tests: text-justify applies inline</title>
|
||||
<link rel='author' title='Florian Rivoal' href='https://florian.rivoal.net'>
|
||||
<link rel='help' href='https://drafts.csswg.org/css-text-3/#text-justify-property'>
|
||||
<link rel='match' href='reference/text-justify-006-ref.html'>
|
||||
<meta name="assert" content="text-justify applies to inline elements">
|
||||
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
|
||||
<style>
|
||||
div {
|
||||
font: 20px/1 Ahem;
|
||||
width: 11ch;
|
||||
}
|
||||
#ref {
|
||||
white-space: pre;
|
||||
color: orange;
|
||||
}
|
||||
#test {
|
||||
text-align: justify;
|
||||
color: blue;
|
||||
}
|
||||
span {
|
||||
text-justify: none;
|
||||
}
|
||||
|
||||
/* this is just filler content to have an invisible last line, as jutification does not affect the last line */
|
||||
a { color: white; }
|
||||
</style>
|
||||
|
||||
<p>Test passes if the the blue and orange boxes are aligned.
|
||||
|
||||
<div id=ref>X X X X</div>
|
||||
<div id=test>X <span>X X</span> X <a>###########</a></div>
|
|
@ -0,0 +1,19 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>test reference</title>
|
||||
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
|
||||
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
|
||||
<style>
|
||||
div {
|
||||
font: 20px/1 Ahem;
|
||||
margin: 1em 0;
|
||||
white-space: pre;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>Test passes if all black boxes below have the same width and height and are aligned vertically.
|
||||
<div> x<br> x</div>
|
||||
<div> x<br> x</div>
|
||||
<div> x<br> x</div>
|
||||
<div> x<br> x</div>
|
||||
<div> x<br> x</div>
|
|
@ -0,0 +1,23 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>test reference</title>
|
||||
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
|
||||
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
|
||||
<style>
|
||||
div {
|
||||
font: 10px/1 Ahem;
|
||||
margin: 1em 0;
|
||||
white-space: pre;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>Test passes if all black boxes below have the same width and height and are aligned vertically.
|
||||
<div> x<br> x</div>
|
||||
<div> x<br> x</div>
|
||||
<div> x<br> x</div>
|
||||
<div> x<br> x</div>
|
||||
<div> x<br> x</div>
|
||||
<div> x<br> x</div>
|
||||
<div> x<br> x</div>
|
||||
<div> x<br> x</div>
|
||||
<div> x<br> x</div>
|
|
@ -9,9 +9,11 @@
|
|||
<style>
|
||||
div { font: 50px/1 Ahem; }
|
||||
#test {
|
||||
text-transform: fullwidth;
|
||||
color: green;
|
||||
}
|
||||
span {
|
||||
text-transform: full-width;
|
||||
}
|
||||
#ref {
|
||||
color: red;
|
||||
position: absolute;
|
||||
|
@ -21,4 +23,4 @@ div { font: 50px/1 Ahem; }
|
|||
|
||||
<p>Test passes if there are two green squares and no red.
|
||||
<div id=ref>x x</div>
|
||||
<div id=test>x x</div>
|
||||
<div id=test>x<span> </span>x</div>
|
||||
|
|
|
@ -9,10 +9,12 @@
|
|||
<style>
|
||||
div { font: 50px/1 Ahem; }
|
||||
#test {
|
||||
text-transform: fullwidth;
|
||||
color: green;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
span {
|
||||
text-transform: full-width;
|
||||
}
|
||||
#ref {
|
||||
color: red;
|
||||
position: absolute;
|
||||
|
@ -22,4 +24,4 @@ div { font: 50px/1 Ahem; }
|
|||
|
||||
<p>Test passes if there are two green squares and no red.
|
||||
<div id=ref>x   x</div>
|
||||
<div id=test>x x</div>
|
||||
<div id=test>x<span> </span>x</div>
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Text level 3 Test: text-transform:fullwidth and trailing spaces</title>
|
||||
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
|
||||
<link rel="help" href="https://www.w3.org/TR/css-text-3/#text-transform-property">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2">
|
||||
<link rel="match" href="reference/text-transform-fullwidth-008-ref.html">
|
||||
<meta name="assert" content="full-width does transforms U+0020 spaces to U+3000 after phase 1, but before phase 2, so that end-of-line transformed spaces get the same treatment as natural ones: hang when white-space is normal.">
|
||||
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
|
||||
<style>
|
||||
div {
|
||||
font: 20px/1 Ahem;
|
||||
margin: 1em 0;
|
||||
}
|
||||
.pre {
|
||||
white-space: pre;
|
||||
}
|
||||
#test, #ref {
|
||||
width: 2em;
|
||||
text-align: right;
|
||||
}
|
||||
span {
|
||||
text-transform: full-width;
|
||||
}
|
||||
#test2, #ref2 {
|
||||
width: min-content;
|
||||
margin-left: 1em;
|
||||
background: black;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>Test passes if all black boxes below have the same width and height and are aligned vertically.
|
||||
<div class=pre> x<br> x</div>
|
||||
<div id=ref>x x</div>
|
||||
<div id=test>x<span> </span>x</div>
|
||||
<div id=ref2>x x</div>
|
||||
<div id=test2>x<span> </span>x</div>
|
|
@ -0,0 +1,49 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Text level 3 Test: text-transform:fullwidth and trailing spaces, with pre-wrap</title>
|
||||
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
|
||||
<link rel="help" href="https://www.w3.org/TR/css-text-3/#text-transform-property">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2">
|
||||
<link rel="match" href="reference/text-transform-fullwidth-009-ref.html">
|
||||
<meta name="assert" content="full-width does transforms U+0020 spaces to U+3000 after phase 1, but before phase 2, so that end-of-line transformed spaces get the same treatment as natural ones: hang at the end of soft-wrapped lines, and conditionally hang before forced breaks when white-space is pre-wrap.">
|
||||
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
|
||||
<style>
|
||||
div {
|
||||
font: 10px/1 Ahem;
|
||||
margin: 1em 0;
|
||||
}
|
||||
.pre {
|
||||
white-space: pre;
|
||||
}
|
||||
#test, #ref,
|
||||
#test3, #ref3 {
|
||||
width: 2em;
|
||||
text-align: right;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
#test3, #ref3 {
|
||||
margin-left: 1em;
|
||||
}
|
||||
span {
|
||||
text-transform: full-width;
|
||||
}
|
||||
#test2, #ref2,
|
||||
#test4, #ref4 {
|
||||
width: min-content;
|
||||
margin-left: 1em;
|
||||
white-space: pre-wrap;
|
||||
background: black;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>Test passes if all black boxes below have the same width and height and are aligned vertically.
|
||||
<div class=pre> x<br> x</div>
|
||||
<div id=ref>x x</div>
|
||||
<div id=test>x<span> </span>x</div>
|
||||
<div id=ref2>x x</div>
|
||||
<div id=test2>x<span> </span>x</div>
|
||||
|
||||
<div id=ref3>x <br>x </div>
|
||||
<div id=test3>x<span> </span><br>x<span> </span></div>
|
||||
<div id=ref4>x <br>x </div>
|
||||
<div id=test4>x<span> </span><br>x<span> </span></div>
|
|
@ -0,0 +1,46 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Text level 3 Test: inline element boundary and segment break transformations</title>
|
||||
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-text-3/#text-encoding">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-transform">
|
||||
<link rel=match href="../../reference/ref-filled-green-100px-square.xht">
|
||||
<meta name="assert" content="intervening inline box boundaries must be ignored for segment break transformations">
|
||||
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
|
||||
<style>
|
||||
div {
|
||||
font: 20px/1 Ahem;
|
||||
color: green;
|
||||
}
|
||||
#b { border-right: solid 20px green; }
|
||||
#p { padding-right: 20px; background: green; }
|
||||
#m { margin-right: 20px; }
|
||||
#m2 { margin-right: -20px; }
|
||||
|
||||
#red {
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
background: red;
|
||||
position: absolute;
|
||||
z-index: -1;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>Test passes if there is a filled green square and <strong>no red</strong>.
|
||||
|
||||
<div id=red></div>
|
||||
|
||||
<div>aa​
|
||||
bbb</div>
|
||||
|
||||
<div>aa<span>​</span>
|
||||
bbb</div>
|
||||
|
||||
<div>aa<span id=b>​</span>
|
||||
bb</div>
|
||||
|
||||
<div>aa<span id=p>​</span>
|
||||
bb</div>
|
||||
|
||||
<div>aa<span id=m>​</span><span id=m2></span>
|
||||
bbb</div>
|
|
@ -0,0 +1,48 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Text level 3 Test: out of flow elements and segment break transformations</title>
|
||||
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-text-3/#text-encoding">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-transform">
|
||||
<link rel=match href="../../reference/ref-filled-green-100px-square.xht">
|
||||
<meta name="assert" content="Out-of-flow elements must be ignored for segment break transformations">
|
||||
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
|
||||
<style>
|
||||
div {
|
||||
font: 20px/1 Ahem;
|
||||
color: green;
|
||||
}
|
||||
aside {
|
||||
color: transparent;
|
||||
}
|
||||
#abs { position: absolute; }
|
||||
#fixed { position: fixed; }
|
||||
#float-r { float: right; }
|
||||
#float-l { float: left; margin-left: -3em; }
|
||||
#red {
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
background: red;
|
||||
position: absolute;
|
||||
z-index: -1;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>Test passes if there is a filled green square and <strong>no red</strong>.
|
||||
|
||||
<div id=red></div>
|
||||
|
||||
<div>aa​
|
||||
bbb</div>
|
||||
|
||||
<div>aa​<aside id=abs>foo</aside>
|
||||
bbb</div>
|
||||
|
||||
<div>aa​<aside id=fixed>foo</aside>
|
||||
bbb</div>
|
||||
|
||||
<div>aa​<aside id=float-r>foo</aside>
|
||||
bbb</div>
|
||||
|
||||
<div>aa​<aside id=float-l>foo</aside>
|
||||
bbb</div>
|
|
@ -0,0 +1,30 @@
|
|||
<!doctype html>
|
||||
<meta charset=utf-8>
|
||||
<title>CSS-Text test: word-break keep-all + pre-wrap does not affect U+3000</title>
|
||||
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
|
||||
<meta name=flags content="">
|
||||
<meta name=assert content="U+3000, despite being called Ideographic Space, does not belong to the ID line breaking class, or any other class whose wrapping opportunities are suppressed by word-break:keep-all. A break after it should still be allowed. white-space:pre-wrap doesn't change that.">
|
||||
<link rel="match" href="reference/word-break-keep-all-005-ref.html">
|
||||
<link rel=help href="https://drafts.csswg.org/css-text-3/#valdef-word-break-keep-all">
|
||||
<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-phase-2">
|
||||
<style>
|
||||
div {
|
||||
width: 4em;
|
||||
word-break: keep-all;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>This test passes if the four characters below are arranged in a two-by-two square.
|
||||
<div lang=ja>字字 字字</div>
|
||||
<!--
|
||||
If keep-all has no effect at all, breaks are allowed everywhere,
|
||||
and the result will be:
|
||||
字字 字
|
||||
字
|
||||
|
||||
If keep-all correctly suppresses wrapping opportunities between CJK ideographs
|
||||
but also incorrectly suppresses the wrapping opportunity after U+3000,
|
||||
no wrapping is possible, and the result will be:
|
||||
字字 字字
|
||||
-->
|
|
@ -0,0 +1,30 @@
|
|||
<!doctype html>
|
||||
<meta charset=utf-8>
|
||||
<title>CSS-Text test: word-break keep-all + break-spaces does not affect U+3000</title>
|
||||
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
|
||||
<meta name=flags content="">
|
||||
<meta name=assert content="U+3000, despite being called Ideographic Space, does not belong to the ID line breaking class, or any other class whose wrapping opportunities are suppressed by word-break:keep-all. A break after it should still be allowed. white-space:break-spaces doesn't change that.">
|
||||
<link rel="match" href="reference/word-break-keep-all-005-ref.html">
|
||||
<link rel=help href="https://drafts.csswg.org/css-text-3/#valdef-word-break-keep-all">
|
||||
<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-phase-2">
|
||||
<style>
|
||||
div {
|
||||
width: 4em;
|
||||
word-break: keep-all;
|
||||
white-space: break-spaces;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>This test passes if the four characters below are arranged in a two-by-two square.
|
||||
<div lang=ja>字字 字字</div>
|
||||
<!--
|
||||
If keep-all has no effect at all, breaks are allowed everywhere,
|
||||
and the result will be:
|
||||
字字 字
|
||||
字
|
||||
|
||||
If keep-all correctly suppresses wrapping opportunities between CJK ideographs
|
||||
but also incorrectly suppresses the wrapping opportunity after U+3000,
|
||||
no wrapping is possible, and the result will be:
|
||||
字字 字字
|
||||
-->
|
|
@ -0,0 +1,81 @@
|
|||
<!DOCTYPE html>
|
||||
<link rel="help" href="https://drafts.csswg.org/css-values-4/#comp-func">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-values-4/#mixed-percentages">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-values-4/#calc-serialize">
|
||||
<link rel="author" title="Xiaocheng Hu" href="mailto:xiaochengh@chromium.org">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="../support/parsing-testcommon.js"></script>
|
||||
<script>
|
||||
const property = 'margin-left';
|
||||
|
||||
function test_valid_length_percent(value, expected) {
|
||||
test_valid_value(property, value, expected);
|
||||
}
|
||||
|
||||
test_valid_length_percent('min(1px + 1%)', 'min(1px + 1%)');
|
||||
test_valid_length_percent('min(1cm + 1%)', 'min(1cm + 1%)');
|
||||
test_valid_length_percent('min(1mm + 1%)', 'min(1mm + 1%)');
|
||||
test_valid_length_percent('min(1Q + 1%)', 'min(1q + 1%)');
|
||||
test_valid_length_percent('min(1in + 1%)', 'min(1in + 1%)');
|
||||
test_valid_length_percent('min(1pc + 1%)', 'min(1pc + 1%)');
|
||||
test_valid_length_percent('min(1pt + 1%)', 'min(1pt + 1%)');
|
||||
test_valid_length_percent('min(1em + 1%)', 'min(1em + 1%)');
|
||||
test_valid_length_percent('min(1ex + 1%)', 'min(1ex + 1%)');
|
||||
test_valid_length_percent('min(1ch + 1%)', 'min(1ch + 1%)');
|
||||
test_valid_length_percent('min(1rem + 1%)', 'min(1rem + 1%)');
|
||||
test_valid_length_percent('min(1vh + 1%)', 'min(1vh + 1%)');
|
||||
test_valid_length_percent('min(1vw + 1%)', 'min(1vw + 1%)');
|
||||
test_valid_length_percent('min(1vmin + 1%)', 'min(1vmin + 1%)');
|
||||
test_valid_length_percent('min(1vmax + 1%)', 'min(1vmax + 1%)');
|
||||
test_valid_length_percent('max(1px + 1%)', 'max(1px + 1%)');
|
||||
test_valid_length_percent('max(1cm + 1%)', 'max(1cm + 1%)');
|
||||
test_valid_length_percent('max(1mm + 1%)', 'max(1mm + 1%)');
|
||||
test_valid_length_percent('max(1Q + 1%)', 'max(1q + 1%)');
|
||||
test_valid_length_percent('max(1in + 1%)', 'max(1in + 1%)');
|
||||
test_valid_length_percent('max(1pc + 1%)', 'max(1pc + 1%)');
|
||||
test_valid_length_percent('max(1pt + 1%)', 'max(1pt + 1%)');
|
||||
test_valid_length_percent('max(1em + 1%)', 'max(1em + 1%)');
|
||||
test_valid_length_percent('max(1ex + 1%)', 'max(1ex + 1%)');
|
||||
test_valid_length_percent('max(1ch + 1%)', 'max(1ch + 1%)');
|
||||
test_valid_length_percent('max(1rem + 1%)', 'max(1rem + 1%)');
|
||||
test_valid_length_percent('max(1vh + 1%)', 'max(1vh + 1%)');
|
||||
test_valid_length_percent('max(1vw + 1%)', 'max(1vw + 1%)');
|
||||
test_valid_length_percent('max(1vmin + 1%)', 'max(1vmin + 1%)');
|
||||
test_valid_length_percent('max(1vmax + 1%)', 'max(1vmax + 1%)');
|
||||
|
||||
test_valid_length_percent('min(20px, 10%)', 'min(20px, 10%)');
|
||||
test_valid_length_percent('min(1em, 10%)', 'min(1em, 10%)');
|
||||
test_valid_length_percent('max(20px, 10%)', 'max(20px, 10%)');
|
||||
test_valid_length_percent('max(1em, 10%)', 'max(1em, 10%)');
|
||||
test_valid_length_percent('min(10%, 20px)', 'min(10%, 20px)');
|
||||
test_valid_length_percent('min(10%, 1em)', 'min(10%, 1em)');
|
||||
test_valid_length_percent('max(10%, 20px)', 'max(10%, 20px)');
|
||||
test_valid_length_percent('max(10%, 1em)', 'max(10%, 1em)');
|
||||
|
||||
test_valid_length_percent('min(10% + 30px, 5% + 60px)', 'min(10% + 30px, 5% + 60px)')
|
||||
test_valid_length_percent('max(10% + 2em, 5% + 1em)', 'max(10% + 2em, 5% + 1em)')
|
||||
|
||||
test_valid_length_percent('calc(min(10%) + max(1em) + min(20px))', 'calc(min(10%) + max(1em) + min(20px))');
|
||||
test_valid_length_percent('calc(max(20px) + min(1em) + max(10%))', 'calc(max(20px) + min(1em) + max(10%))');
|
||||
test_valid_length_percent('calc(max(10%) + min(1em) + max(20px))', 'calc(max(10%) + min(1em) + max(20px))');
|
||||
test_valid_length_percent('calc(min(20px) + max(1em) + min(10%))', 'calc(min(20px) + max(1em) + min(10%))');
|
||||
|
||||
test_valid_length_percent('calc(20px + min(10%))', 'calc(20px + min(10%))');
|
||||
test_valid_length_percent('calc(10% + min(20px))', 'calc(10% + min(20px))');
|
||||
test_valid_length_percent('calc(1em + min(10%))', 'calc(1em + min(10%))');
|
||||
test_valid_length_percent('calc(10% + min(1em))', 'calc(10% + min(1em))');
|
||||
test_valid_length_percent('calc(min(10%) + 20px)', 'calc(20px + min(10%))');
|
||||
test_valid_length_percent('calc(min(20px) + 10%)', 'calc(10% + min(20px))');
|
||||
test_valid_length_percent('calc(min(10%) + 1em)', 'calc(1em + min(10%))');
|
||||
test_valid_length_percent('calc(min(1em) + 10%)', 'calc(10% + min(1em))');
|
||||
test_valid_length_percent('calc(20px + max(10%))', 'calc(20px + max(10%))');
|
||||
test_valid_length_percent('calc(10% + max(20px))', 'calc(10% + max(20px))');
|
||||
test_valid_length_percent('calc(1em + max(10%))', 'calc(1em + max(10%))');
|
||||
test_valid_length_percent('calc(10% + max(1em))', 'calc(10% + max(1em))');
|
||||
test_valid_length_percent('calc(max(10%) + 20px)', 'calc(20px + max(10%))');
|
||||
test_valid_length_percent('calc(max(20px) + 10%)', 'calc(10% + max(20px))');
|
||||
test_valid_length_percent('calc(max(10%) + 1em)', 'calc(1em + max(10%))');
|
||||
test_valid_length_percent('calc(max(1em) + 10%)', 'calc(10% + max(1em))');
|
||||
|
||||
</script>
|
|
@ -0,0 +1,65 @@
|
|||
<!DOCTYPE html>
|
||||
<link rel="help" href="https://drafts.csswg.org/css-values-4/#comp-func">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-values-4/#lengths">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-values-4/#calc-serialize">
|
||||
<link rel="author" title="Xiaocheng Hu" href="mailto:xiaochengh@chromium.org">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="../support/parsing-testcommon.js"></script>
|
||||
<script>
|
||||
const property = 'letter-spacing';
|
||||
|
||||
function test_valid_length(value, expected) {
|
||||
test_valid_value(property, value, expected);
|
||||
}
|
||||
|
||||
test_valid_length('min(1px)', 'min(1px)');
|
||||
test_valid_length('min(1cm)', 'min(1cm)');
|
||||
test_valid_length('min(1mm)', 'min(1mm)');
|
||||
// Values are case-insensitive and serialize as lower case, for example 1Q
|
||||
// serializes as 1q.
|
||||
test_valid_length('min(1Q)', 'min(1q)');
|
||||
test_valid_length('min(1in)', 'min(1in)');
|
||||
test_valid_length('min(1pc)', 'min(1pc)');
|
||||
test_valid_length('min(1pt)', 'min(1pt)');
|
||||
test_valid_length('min(1em)', 'min(1em)');
|
||||
test_valid_length('min(1ex)', 'min(1ex)');
|
||||
test_valid_length('min(1ch)', 'min(1ch)');
|
||||
test_valid_length('min(1rem)', 'min(1rem)');
|
||||
test_valid_length('min(1vh)', 'min(1vh)');
|
||||
test_valid_length('min(1vw)', 'min(1vw)');
|
||||
test_valid_length('min(1vmin)', 'min(1vmin)');
|
||||
test_valid_length('min(1vmax)', 'min(1vmax)');
|
||||
test_valid_length('max(1px)', 'max(1px)');
|
||||
test_valid_length('max(1cm)', 'max(1cm)');
|
||||
test_valid_length('max(1mm)', 'max(1mm)');
|
||||
test_valid_length('max(1Q)', 'max(1q)');
|
||||
test_valid_length('max(1in)', 'max(1in)');
|
||||
test_valid_length('max(1pc)', 'max(1pc)');
|
||||
test_valid_length('max(1pt)', 'max(1pt)');
|
||||
test_valid_length('max(1em)', 'max(1em)');
|
||||
test_valid_length('max(1ex)', 'max(1ex)');
|
||||
test_valid_length('max(1ch)', 'max(1ch)');
|
||||
test_valid_length('max(1rem)', 'max(1rem)');
|
||||
test_valid_length('max(1vh)', 'max(1vh)');
|
||||
test_valid_length('max(1vw)', 'max(1vw)');
|
||||
test_valid_length('max(1vmin)', 'max(1vmin)');
|
||||
test_valid_length('max(1vmax)', 'max(1vmax)');
|
||||
|
||||
test_valid_length('min(10px, 20px, 30px)', 'min(10px, 20px, 30px)');
|
||||
test_valid_length('min(30px, 20px, 10px)', 'min(30px, 20px, 10px)');
|
||||
test_valid_length('min(20px, 1em, 10vw)', 'min(20px, 1em, 10vw)');
|
||||
test_valid_length('min(10vw, 1em, 20px)', 'min(10vw, 1em, 20px)');
|
||||
test_valid_length('max(10px, 20px, 30px)', 'max(10px, 20px, 30px)');
|
||||
test_valid_length('max(30px, 20px, 10px)', 'max(30px, 20px, 10px)');
|
||||
test_valid_length('max(20px, 1em, 10vw)', 'max(20px, 1em, 10vw)');
|
||||
test_valid_length('max(10vw, 1em, 20px)', 'max(10vw, 1em, 20px)');
|
||||
|
||||
test_valid_length('calc(min(10px) + max(1em) + min(10vw))', 'calc(min(10px) + max(1em) + min(10vw))');
|
||||
test_valid_length('calc(max(1em) + min(10vw) + max(10px))', 'calc(max(1em) + min(10vw) + max(10px))');
|
||||
test_valid_length('calc(10px + min(1em))', 'calc(10px + min(1em))');
|
||||
test_valid_length('calc(min(1em) + 10px)', 'calc(10px + min(1em))');
|
||||
test_valid_length('calc(10px + max(1em))', 'calc(10px + max(1em))');
|
||||
test_valid_length('calc(max(1em) + 10px)', 'calc(10px + max(1em))');
|
||||
|
||||
</script>
|
|
@ -0,0 +1,29 @@
|
|||
<!DOCTYPE html>
|
||||
<link rel="help" href="https://drafts.csswg.org/css-values-4/#comp-func">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-values-4/#numbers">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-values-4/#calc-serialize">
|
||||
<link rel="author" title="Xiaocheng Hu" href="mailto:xiaochengh@chromium.org">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="../support/parsing-testcommon.js"></script>
|
||||
<script>
|
||||
function test_valid_number(value, expected) {
|
||||
test_valid_value('opacity', value, expected);
|
||||
}
|
||||
|
||||
test_valid_number('min(1)', 'min(1)');
|
||||
test_valid_number('max(1)', 'max(1)');
|
||||
|
||||
test_valid_number('min(1, 2, 3)', 'min(1, 2, 3)');
|
||||
test_valid_number('min(3, 2, 1)', 'min(3, 2, 1)');
|
||||
test_valid_number('max(1, 2, 3)', 'max(1, 2, 3)');
|
||||
test_valid_number('max(3, 2, 1)', 'max(3, 2, 1)');
|
||||
|
||||
test_valid_number('calc(min(1) + min(2))', 'calc(min(1) + min(2))');
|
||||
test_valid_number('calc(max(1) + max(2))', 'calc(max(1) + max(2))');
|
||||
test_valid_number('calc(1 + min(1))', 'calc(1 + min(1))');
|
||||
test_valid_number('calc(min(1) + 1)', 'calc(1 + min(1))');
|
||||
test_valid_number('calc(1 + max(1))', 'calc(1 + max(1))');
|
||||
test_valid_number('calc(max(1) + 1)', 'calc(1 + max(1))');
|
||||
|
||||
</script>
|
|
@ -0,0 +1,29 @@
|
|||
<!DOCTYPE html>
|
||||
<link rel="help" href="https://drafts.csswg.org/css-values-4/#comp-func">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-values-4/#percentages">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-values-4/#calc-serialize">
|
||||
<link rel="author" title="Xiaocheng Hu" href="mailto:xiaochengh@chromium.org">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="../support/parsing-testcommon.js"></script>
|
||||
<script>
|
||||
function test_valid_percentage(value, expected) {
|
||||
test_valid_value('margin-left', value, expected);
|
||||
}
|
||||
|
||||
test_valid_percentage('min(1%)', 'min(1%)');
|
||||
test_valid_percentage('max(1%)', 'max(1%)');
|
||||
|
||||
test_valid_percentage('min(1%, 2%, 3%)', 'min(1%, 2%, 3%)');
|
||||
test_valid_percentage('min(3%, 2%, 1%)', 'min(3%, 2%, 1%)');
|
||||
test_valid_percentage('max(1%, 2%, 3%)', 'max(1%, 2%, 3%)');
|
||||
test_valid_percentage('max(3%, 2%, 1%)', 'max(3%, 2%, 1%)');
|
||||
|
||||
test_valid_percentage('calc(min(1%) + min(2%))', 'calc(min(1%) + min(2%))');
|
||||
test_valid_percentage('calc(max(1%) + max(2%))', 'calc(max(1%) + max(2%))');
|
||||
test_valid_percentage('calc(1% + min(1%))', 'calc(1% + min(1%))');
|
||||
test_valid_percentage('calc(min(1%) + 1%)', 'calc(1% + min(1%))');
|
||||
test_valid_percentage('calc(1% + max(1%))', 'calc(1% + max(1%))');
|
||||
test_valid_percentage('calc(max(1%) + 1%)', 'calc(1% + max(1%))');
|
||||
|
||||
</script>
|
|
@ -53,12 +53,7 @@
|
|||
|
||||
const get_url = (mime) => {
|
||||
// www1 is cross-origin, so the HTTP response is CORB-eligible -->
|
||||
//
|
||||
// TODO(lukasza@chromium.org): Once https://crbug.com/888079 and
|
||||
// https://crbug.com/891872 are fixed, we should use a cross-*origin*
|
||||
// rather than cross-*site* URL below (e.g. s/hosts[alt]/domains/g).
|
||||
// See also https://crbug.com/918660 for more context.
|
||||
url = "http://{{hosts[alt][www1]}}:{{ports[http][0]}}"
|
||||
url = "http://{{domains[www1]}}:{{ports[http][0]}}"
|
||||
url = url + "/fetch/nosniff/resources/image.py"
|
||||
if (mime != null) {
|
||||
url += "?type=" + encodeURIComponent(mime)
|
||||
|
|
|
@ -7,11 +7,5 @@
|
|||
<meta charset="utf-8">
|
||||
<!-- Reference page uses same-origin resources, which are not CORB-eligible. -->
|
||||
<link rel="match" href="img-png-mislabeled-as-html-nosniff.tentative.sub-ref.html">
|
||||
<!-- www1 is cross-origin, so the HTTP response is CORB-eligible
|
||||
|
||||
TODO(lukasza@chromium.org): Once https://crbug.com/888079 and
|
||||
https://crbug.com/891872 are fixed, we should use a cross-*origin*
|
||||
rather than cross-*site* URL below (e.g. s/hosts[alt]/domains/g).
|
||||
See also https://crbug.com/918660 for more context.
|
||||
-->
|
||||
<img src="http://{{hosts[alt][www1]}}:{{ports[http][0]}}/fetch/corb/resources/png-mislabeled-as-html-nosniff.png">
|
||||
<!-- 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">
|
||||
|
|
|
@ -17,14 +17,8 @@ async_test(function(t) {
|
|||
});
|
||||
</script>
|
||||
|
||||
<!-- www1 is cross-origin, so the HTTP response is CORB-eligible
|
||||
|
||||
TODO(lukasza@chromium.org): Once https://crbug.com/888079 and
|
||||
https://crbug.com/891872 are fixed, we should use a cross-*origin*
|
||||
rather than cross-*site* URL below (e.g. s/hosts[alt]/domains/g).
|
||||
See also https://crbug.com/918660 for more context.
|
||||
-->
|
||||
<!-- www1 is cross-origin, so the HTTP response is CORB-eligible -->
|
||||
<link rel="preload" as="image"
|
||||
onerror="window.preloadErrorEvent()"
|
||||
onload="window.preloadLoadEvent()"
|
||||
href="http://{{hosts[alt][www1]}}:{{ports[http][0]}}/fetch/corb/resources/png-mislabeled-as-html-nosniff.png">
|
||||
href="http://{{domains[www1]}}:{{ports[http][0]}}/fetch/corb/resources/png-mislabeled-as-html-nosniff.png">
|
||||
|
|
|
@ -24,12 +24,7 @@ async_test(function(t) {
|
|||
});
|
||||
|
||||
// www1 is cross-origin, so the HTTP response is CORB-eligible.
|
||||
//
|
||||
// TODO(lukasza@chromium.org): Once https://crbug.com/888079 and
|
||||
// https://crbug.com/891872 are fixed, we should use a cross-*origin*
|
||||
// rather than cross-*site* URL below (e.g. s/hosts[alt]/domains/g).
|
||||
// See also https://crbug.com/918660 for more context.
|
||||
script.src = 'http://{{hosts[alt][www1]}}:{{ports[http][0]}}/fetch/corb/resources/html-correctly-labeled.html';
|
||||
script.src = 'http://{{domains[www1]}}:{{ports[http][0]}}/fetch/corb/resources/html-correctly-labeled.html';
|
||||
document.body.appendChild(script)
|
||||
}, "CORB-blocked script has no syntax errors");
|
||||
</script>
|
||||
|
|
|
@ -68,12 +68,7 @@ function test(mime_type, body) {
|
|||
});
|
||||
|
||||
// www1 is cross-origin, so the HTTP response is CORB-eligible.
|
||||
//
|
||||
// TODO(lukasza@chromium.org): Once https://crbug.com/888079 and
|
||||
// https://crbug.com/891872 are fixed, we should use a cross-*origin*
|
||||
// rather than cross-*site* URL below (e.g. s/hosts[alt]/domains/g).
|
||||
// See also https://crbug.com/918660 for more context.
|
||||
var src_prefix = "http://{{hosts[alt][www1]}}:{{ports[http][0]}}/fetch/corb/resources/sniffable-resource.py";
|
||||
var src_prefix = "http://{{domains[www1]}}:{{ports[http][0]}}/fetch/corb/resources/sniffable-resource.py";
|
||||
script.src = src_prefix + "?type=" + mime_type + "&body=" + encodeURIComponent(body);
|
||||
document.body.appendChild(script)
|
||||
}, "CORB-blocks '" + mime_type + "' that starts with the following JSON parser breaker: " + body);
|
||||
|
|
|
@ -1,13 +1,7 @@
|
|||
["<link>", "@import"].forEach(linkType => {
|
||||
[
|
||||
["same-origin", "resources/css.py"],
|
||||
|
||||
// TODO(lukasza@chromium.org): Once https://crbug.com/888079 and
|
||||
// https://crbug.com/891872 are fixed, we should use a cross-*origin* rather
|
||||
// than cross-*site* URL below (e.g. s/ HTTP_NOTSAMESITE_ORIGIN /
|
||||
// HTTP_REMOTE_ORIGIN /g). See also https://crbug.com/918660 for more
|
||||
// context.
|
||||
["cross-origin", get_host_info().HTTP_NOTSAMESITE_ORIGIN + "/html/semantics/document-metadata/the-link-element/resources/css.py"]
|
||||
["cross-origin", get_host_info().HTTP_REMOTE_ORIGIN + "/html/semantics/document-metadata/the-link-element/resources/css.py"]
|
||||
].forEach(originType => {
|
||||
["no Content-Type", "wrong Content-Type", "broken Content-Type"].forEach(contentType => {
|
||||
["no nosniff", "nosniff"].forEach(nosniff => {
|
||||
|
|
|
@ -5,8 +5,7 @@
|
|||
|
||||
[Exposed=Window]
|
||||
partial interface Navigator {
|
||||
[SecureContext] Promise<MediaKeySystemAccess> requestMediaKeySystemAccess(DOMString keySystem,
|
||||
sequence<MediaKeySystemConfiguration> supportedConfigurations);
|
||||
[SecureContext] Promise<MediaKeySystemAccess> requestMediaKeySystemAccess (DOMString keySystem, sequence<MediaKeySystemConfiguration> supportedConfigurations);
|
||||
};
|
||||
|
||||
enum MediaKeysRequirement {
|
||||
|
@ -30,9 +29,7 @@ dictionary MediaKeySystemMediaCapability {
|
|||
DOMString robustness = "";
|
||||
};
|
||||
|
||||
[Exposed=Window,
|
||||
SecureContext]
|
||||
interface MediaKeySystemAccess {
|
||||
[Exposed=Window, SecureContext] interface MediaKeySystemAccess {
|
||||
readonly attribute DOMString keySystem;
|
||||
MediaKeySystemConfiguration getConfiguration ();
|
||||
Promise<MediaKeys> createMediaKeys ();
|
||||
|
@ -43,33 +40,26 @@ enum MediaKeySessionType {
|
|||
"persistent-license"
|
||||
};
|
||||
|
||||
[Exposed=Window,
|
||||
SecureContext]
|
||||
interface MediaKeys {
|
||||
[Exposed=Window, SecureContext] interface MediaKeys {
|
||||
MediaKeySession createSession (optional MediaKeySessionType sessionType = "temporary");
|
||||
Promise<boolean> setServerCertificate (BufferSource serverCertificate);
|
||||
};
|
||||
|
||||
[Exposed=Window,
|
||||
SecureContext]
|
||||
interface MediaKeySession : EventTarget {
|
||||
[Exposed=Window, SecureContext] interface MediaKeySession : EventTarget {
|
||||
readonly attribute DOMString sessionId;
|
||||
readonly attribute unrestricted double expiration;
|
||||
readonly attribute Promise<void> closed;
|
||||
readonly attribute MediaKeyStatusMap keyStatuses;
|
||||
attribute EventHandler onkeystatuseschange;
|
||||
attribute EventHandler onmessage;
|
||||
Promise<void> generateRequest(DOMString initDataType,
|
||||
BufferSource initData);
|
||||
Promise<void> generateRequest (DOMString initDataType, BufferSource initData);
|
||||
Promise<boolean> load (DOMString sessionId);
|
||||
Promise<void> update (BufferSource response);
|
||||
Promise<void> close ();
|
||||
Promise<void> remove ();
|
||||
};
|
||||
|
||||
[Exposed=Window,
|
||||
SecureContext]
|
||||
interface MediaKeyStatusMap {
|
||||
[Exposed=Window, SecureContext] interface MediaKeyStatusMap {
|
||||
iterable<BufferSource,MediaKeyStatus>;
|
||||
readonly attribute unsigned long size;
|
||||
boolean has (BufferSource keyId);
|
||||
|
@ -93,10 +83,9 @@ enum MediaKeyMessageType {
|
|||
"individualization-request"
|
||||
};
|
||||
|
||||
[Exposed=Window,
|
||||
SecureContext,
|
||||
Constructor(DOMString type, MediaKeyMessageEventInit eventInitDict)]
|
||||
[Exposed=Window, SecureContext]
|
||||
interface MediaKeyMessageEvent : Event {
|
||||
constructor(DOMString type, MediaKeyMessageEventInit eventInitDict);
|
||||
readonly attribute MediaKeyMessageType messageType;
|
||||
readonly attribute ArrayBuffer message;
|
||||
};
|
||||
|
@ -106,18 +95,16 @@ dictionary MediaKeyMessageEventInit : EventInit {
|
|||
required ArrayBuffer message;
|
||||
};
|
||||
|
||||
[Exposed=Window]
|
||||
partial interface HTMLMediaElement {
|
||||
[SecureContext]
|
||||
readonly attribute MediaKeys? mediaKeys;
|
||||
[Exposed=Window] partial interface HTMLMediaElement {
|
||||
[SecureContext] readonly attribute MediaKeys? mediaKeys;
|
||||
attribute EventHandler onencrypted;
|
||||
attribute EventHandler onwaitingforkey;
|
||||
[SecureContext] Promise<void> setMediaKeys (MediaKeys? mediaKeys);
|
||||
};
|
||||
|
||||
[Exposed=Window,
|
||||
Constructor(DOMString type, optional MediaEncryptedEventInit eventInitDict)]
|
||||
[Exposed=Window]
|
||||
interface MediaEncryptedEvent : Event {
|
||||
constructor(DOMString type, optional MediaEncryptedEventInit eventInitDict = {});
|
||||
readonly attribute DOMString initDataType;
|
||||
readonly attribute ArrayBuffer? initData;
|
||||
};
|
||||
|
|
|
@ -14,7 +14,7 @@ dictionary FullscreenOptions {
|
|||
};
|
||||
|
||||
partial interface Element {
|
||||
Promise<void> requestFullscreen(optional FullscreenOptions options);
|
||||
Promise<void> requestFullscreen(optional FullscreenOptions options = {});
|
||||
|
||||
attribute EventHandler onfullscreenchange;
|
||||
attribute EventHandler onfullscreenerror;
|
||||
|
|
|
@ -28,7 +28,7 @@ interface MediaRecorder : EventTarget {
|
|||
};
|
||||
|
||||
dictionary MediaRecorderOptions {
|
||||
DOMString mimeType;
|
||||
DOMString mimeType = "";
|
||||
unsigned long audioBitsPerSecond;
|
||||
unsigned long videoBitsPerSecond;
|
||||
unsigned long bitsPerSecond;
|
||||
|
|
|
@ -3,18 +3,18 @@
|
|||
// (https://github.com/tidoust/reffy-reports)
|
||||
// Source: Reporting API 1 (https://w3c.github.io/reporting/)
|
||||
|
||||
[Exposed=Window]
|
||||
[Exposed=(Window,Worker)]
|
||||
interface ReportBody {
|
||||
};
|
||||
|
||||
[Exposed=Window]
|
||||
[Exposed=(Window,Worker)]
|
||||
interface Report {
|
||||
readonly attribute DOMString type;
|
||||
readonly attribute DOMString url;
|
||||
readonly attribute ReportBody? body;
|
||||
};
|
||||
|
||||
[Exposed=Window]
|
||||
[Exposed=(Window,Worker)]
|
||||
interface ReportingObserver {
|
||||
constructor(ReportingObserverCallback callback, optional ReportingObserverOptions options = {});
|
||||
void observe();
|
||||
|
@ -31,7 +31,7 @@ dictionary ReportingObserverOptions {
|
|||
|
||||
typedef sequence<Report> ReportList;
|
||||
|
||||
[Exposed=Window]
|
||||
[Exposed=(Window,Worker)]
|
||||
interface DeprecationReportBody : ReportBody {
|
||||
readonly attribute DOMString id;
|
||||
readonly attribute Date? anticipatedRemoval;
|
||||
|
@ -41,7 +41,7 @@ interface DeprecationReportBody : ReportBody {
|
|||
readonly attribute unsigned long? columnNumber;
|
||||
};
|
||||
|
||||
[Exposed=Window]
|
||||
[Exposed=(Window,Worker)]
|
||||
interface InterventionReportBody : ReportBody {
|
||||
readonly attribute DOMString id;
|
||||
readonly attribute DOMString message;
|
||||
|
@ -50,7 +50,7 @@ interface InterventionReportBody : ReportBody {
|
|||
readonly attribute unsigned long? columnNumber;
|
||||
};
|
||||
|
||||
[Exposed=Window]
|
||||
[Exposed=(Window,Worker)]
|
||||
interface CrashReportBody : ReportBody {
|
||||
readonly attribute DOMString? reason;
|
||||
};
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
spec: https://w3c.github.io/reporting/
|
||||
suggested_reviewers:
|
||||
- clelland
|
||||
- dcreager
|
||||
- igrigorik
|
||||
- paulmeyer90
|
||||
|
|
|
@ -236,7 +236,11 @@ IdlArray.prototype.is_excluded_by_options = function (name, options)
|
|||
|
||||
IdlArray.prototype.add_dependency_idls = function(raw_idls, options)
|
||||
{
|
||||
const parsed_idls = WebIDL2.parse(raw_idls);
|
||||
return this.internal_add_dependency_idls(WebIDL2.parse(raw_idls), options);
|
||||
};
|
||||
|
||||
IdlArray.prototype.internal_add_dependency_idls = function(parsed_idls, options)
|
||||
{
|
||||
const new_options = { only: [] }
|
||||
|
||||
const all_deps = new Set();
|
||||
|
@ -804,10 +808,19 @@ IdlArray.prototype.test = function()
|
|||
if (!(this.members[lhs] instanceof IdlInterface)) throw errStr + lhs + " is not an interface.";
|
||||
if (!(rhs in this.members)) throw errStr + rhs + " is undefined.";
|
||||
if (!(this.members[rhs] instanceof IdlInterface)) throw errStr + rhs + " is not an interface.";
|
||||
this.members[rhs].members.forEach(function(member)
|
||||
{
|
||||
|
||||
if (this.members[rhs].members.length) {
|
||||
test(function () {
|
||||
this.members[rhs].members.forEach(function(member) {
|
||||
assert_false(
|
||||
this.members[lhs].members.some(function (m) {
|
||||
return m.name === member.name
|
||||
}),
|
||||
"member " + member.name + " is already defined");
|
||||
this.members[lhs].members.push(new IdlInterfaceMember(member));
|
||||
}.bind(this));
|
||||
}.bind(this), lhs + " implements " + rhs + ": member names are unique");
|
||||
}
|
||||
}.bind(this));
|
||||
}
|
||||
this["implements"] = {};
|
||||
|
@ -821,10 +834,17 @@ IdlArray.prototype.test = function()
|
|||
if (!(this.members[lhs] instanceof IdlInterface)) throw errStr + lhs + " is not an interface.";
|
||||
if (!(rhs in this.members)) throw errStr + rhs + " is undefined.";
|
||||
if (!(this.members[rhs] instanceof IdlInterface)) throw errStr + rhs + " is not an interface.";
|
||||
this.members[rhs].members.forEach(function(member)
|
||||
{
|
||||
|
||||
if (this.members[rhs].members.length) {
|
||||
test(function () {
|
||||
this.members[rhs].members.forEach(function(member) {
|
||||
assert_true(
|
||||
this.members[lhs].members.every(m => !this.are_duplicate_members(m, member)),
|
||||
"member " + member.name + " is unique");
|
||||
this.members[lhs].members.push(new IdlInterfaceMember(member));
|
||||
}.bind(this));
|
||||
}.bind(this), lhs + " includes " + rhs + ": member names are unique");
|
||||
}
|
||||
}.bind(this));
|
||||
}
|
||||
this["includes"] = {};
|
||||
|
@ -886,9 +906,8 @@ IdlArray.prototype.collapse_partials = function()
|
|||
|| this.members[parsed_idl.name] instanceof IdlDictionary
|
||||
|| this.members[parsed_idl.name] instanceof IdlNamespace);
|
||||
|
||||
let partialTestName = parsed_idl.name;
|
||||
if (!parsed_idl.untested) {
|
||||
// Ensure unique test name in case of multiple partials.
|
||||
let partialTestName = parsed_idl.name;
|
||||
let partialTestCount = 1;
|
||||
if (testedPartials.has(parsed_idl.name)) {
|
||||
partialTestCount += testedPartials.get(parsed_idl.name);
|
||||
|
@ -896,14 +915,18 @@ IdlArray.prototype.collapse_partials = function()
|
|||
}
|
||||
testedPartials.set(parsed_idl.name, partialTestCount);
|
||||
|
||||
if (!parsed_idl.untested) {
|
||||
test(function () {
|
||||
assert_true(originalExists, `Original ${parsed_idl.type} should be defined`);
|
||||
|
||||
var expected = IdlInterface;
|
||||
var expected;
|
||||
switch (parsed_idl.type) {
|
||||
case 'interface': expected = IdlInterface; break;
|
||||
case 'dictionary': expected = IdlDictionary; break;
|
||||
case 'namespace': expected = IdlNamespace; break;
|
||||
case 'interface':
|
||||
case 'interface mixin':
|
||||
default:
|
||||
expected = IdlInterface; break;
|
||||
}
|
||||
assert_true(
|
||||
expected.prototype.isPrototypeOf(this.members[parsed_idl.name]),
|
||||
|
@ -949,14 +972,33 @@ IdlArray.prototype.collapse_partials = function()
|
|||
this.members[parsed_idl.name].extAttrs.push(extAttr);
|
||||
}.bind(this));
|
||||
}
|
||||
if (parsed_idl.members.length) {
|
||||
test(function () {
|
||||
parsed_idl.members.forEach(function(member)
|
||||
{
|
||||
assert_true(
|
||||
this.members[parsed_idl.name].members.every(m => !this.are_duplicate_members(m, member)),
|
||||
"member " + member.name + " is unique");
|
||||
this.members[parsed_idl.name].members.push(new IdlInterfaceMember(member));
|
||||
}.bind(this));
|
||||
}.bind(this), `Partial ${parsed_idl.type} ${partialTestName}: member names are unique`);
|
||||
}
|
||||
}.bind(this));
|
||||
this.partials = [];
|
||||
}
|
||||
|
||||
IdlArray.prototype.are_duplicate_members = function(m1, m2) {
|
||||
if (m1.name !== m2.name) {
|
||||
return false;
|
||||
}
|
||||
if (m1.type === 'operation' && m2.type === 'operation'
|
||||
&& m1.arguments.length !== m2.arguments.length) {
|
||||
// Method overload. TODO: Deep comparison of arguments.
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
IdlArray.prototype.assert_type_is = function(value, type)
|
||||
{
|
||||
if (type.idlType in this.members
|
||||
|
@ -3297,16 +3339,30 @@ function idl_test(srcs, deps, idl_setup_func) {
|
|||
srcs = (srcs instanceof Array) ? srcs : [srcs] || [];
|
||||
deps = (deps instanceof Array) ? deps : [deps] || [];
|
||||
var setup_error = null;
|
||||
const validationIgnored = [
|
||||
"constructor-member",
|
||||
"dict-arg-default",
|
||||
"require-exposed"
|
||||
];
|
||||
return Promise.all(
|
||||
srcs.concat(deps).map(function(spec) {
|
||||
return fetch_spec(spec);
|
||||
}))
|
||||
.then(function(idls) {
|
||||
srcs.concat(deps).map(fetch_spec))
|
||||
.then(function(results) {
|
||||
const astArray = results.map(result =>
|
||||
WebIDL2.parse(result.idl, { sourceName: result.spec })
|
||||
);
|
||||
test(() => {
|
||||
const validations = WebIDL2.validate(astArray)
|
||||
.filter(v => !validationIgnored.includes(v.ruleName));
|
||||
if (validations.length) {
|
||||
const message = validations.map(v => v.message).join("\n\n");
|
||||
throw new Error(message);
|
||||
}
|
||||
}, "idl_test validation");
|
||||
for (var i = 0; i < srcs.length; i++) {
|
||||
idl_array.add_idls(idls[i]);
|
||||
idl_array.internal_add_idls(astArray[i]);
|
||||
}
|
||||
for (var i = srcs.length; i < srcs.length + deps.length; i++) {
|
||||
idl_array.add_dependency_idls(idls[i]);
|
||||
idl_array.internal_add_dependency_idls(astArray[i]);
|
||||
}
|
||||
})
|
||||
.then(function() {
|
||||
|
@ -3341,6 +3397,6 @@ function fetch_spec(spec) {
|
|||
throw new IdlHarnessError("Error fetching " + url + ".");
|
||||
}
|
||||
return r.text();
|
||||
});
|
||||
}).then(idl => ({ spec, idl }));
|
||||
}
|
||||
// vim: set expandtab shiftwidth=4 tabstop=4 foldmarker=@{,@} foldmethod=marker:
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="variant" content="">
|
||||
<meta name="variant" content="?keep-promise">
|
||||
<title>idlharness: Partial dictionary</title>
|
||||
<script src="/resources/test/variants.js"></script>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
|
@ -58,12 +57,6 @@
|
|||
"properties": {},
|
||||
"message": "assert_true: Original dictionary should be defined expected true got false"
|
||||
},
|
||||
{
|
||||
"name": "Partial dictionary B: original dictionary defined",
|
||||
"status_string": "PASS",
|
||||
"properties": {},
|
||||
"message": null
|
||||
},
|
||||
{
|
||||
"name": "Partial dictionary B[2]: original dictionary defined",
|
||||
"status_string": "PASS",
|
||||
|
@ -76,6 +69,12 @@
|
|||
"properties": {},
|
||||
"message": null
|
||||
},
|
||||
{
|
||||
"name": "Partial dictionary B[4]: original dictionary defined",
|
||||
"status_string": "PASS",
|
||||
"properties": {},
|
||||
"message": null
|
||||
},
|
||||
{
|
||||
"name": "Partial dictionary C: original dictionary defined",
|
||||
"status_string": "FAIL",
|
||||
|
|
|
@ -0,0 +1,83 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="variant" content="">
|
||||
<title>idlharness: interface mixins</title>
|
||||
<script src="/resources/test/variants.js"></script>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/resources/WebIDLParser.js"></script>
|
||||
<script src="/resources/idlharness.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<p>Verify the series of sub-tests that are executed for "interface mixin" objects.</p>
|
||||
<script>
|
||||
"use strict";
|
||||
|
||||
// No original existence
|
||||
(() => {
|
||||
const idlArray = new IdlArray();
|
||||
idlArray.add_idls('partial interface mixin A {};');
|
||||
idlArray.test();
|
||||
})();
|
||||
|
||||
// Name clash (partials)
|
||||
(() => {
|
||||
const idlArray = new IdlArray();
|
||||
idlArray.add_idls(`
|
||||
interface mixin B { attribute any F; };
|
||||
partial interface mixin B { attribute any F; };`);
|
||||
idlArray.collapse_partials();
|
||||
})();
|
||||
|
||||
// Name clash (different mixins)
|
||||
(() => {
|
||||
const idlArray = new IdlArray();
|
||||
idlArray.add_untested_idls(`
|
||||
interface mixin C { attribute any F; };
|
||||
interface D { attribute any F; };
|
||||
D includes C;`);
|
||||
idlArray.test();
|
||||
})();
|
||||
</script>
|
||||
<script type="text/json" id="expected">
|
||||
{
|
||||
"summarized_status": {
|
||||
"status_string": "OK",
|
||||
"message": null
|
||||
},
|
||||
"summarized_tests": [
|
||||
{
|
||||
"name": "Partial interface mixin A: original interface mixin defined",
|
||||
"status_string": "FAIL",
|
||||
"properties": {},
|
||||
"message": "assert_true: Original interface mixin should be defined expected true got false"
|
||||
},
|
||||
{
|
||||
"name": "Partial interface mixin B: original interface mixin defined",
|
||||
"status_string": "PASS",
|
||||
"properties": {},
|
||||
"message": null
|
||||
},
|
||||
{
|
||||
"name": "Partial interface mixin B: member names are unique",
|
||||
"status_string": "FAIL",
|
||||
"properties": {},
|
||||
"message": "assert_true: member F is unique expected true got false"
|
||||
},
|
||||
{
|
||||
"name": "D includes C: member names are unique",
|
||||
"status_string": "FAIL",
|
||||
"properties": {},
|
||||
"message": "assert_true: member F is unique expected true got false"
|
||||
}
|
||||
],
|
||||
"type": "complete"
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
|
@ -4,8 +4,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="variant" content="">
|
||||
<meta name="variant" content="?keep-promise">
|
||||
<title>idlharness: Partail interface</title>
|
||||
<title>idlharness: Partial interface</title>
|
||||
<script src="/resources/test/variants.js"></script>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
|
@ -94,6 +93,15 @@
|
|||
assert_false('L' in idlArray.members, 'L should be picked up');
|
||||
}, 'partial mixin dep implications');
|
||||
})();
|
||||
|
||||
// Name clash (partials)
|
||||
(() => {
|
||||
const idlArray = new IdlArray();
|
||||
idlArray.add_idls(`
|
||||
interface M { attribute any A; };
|
||||
partial interface M { attribute any A; };`);
|
||||
idlArray.collapse_partials();
|
||||
})();
|
||||
</script>
|
||||
<script type="text/json" id="expected">
|
||||
{
|
||||
|
@ -155,6 +163,18 @@
|
|||
"status_string": "PASS",
|
||||
"properties": {},
|
||||
"message": null
|
||||
},
|
||||
{
|
||||
"name": "Partial interface M: original interface defined",
|
||||
"status_string": "PASS",
|
||||
"properties": {},
|
||||
"message": null
|
||||
},
|
||||
{
|
||||
"name": "Partial interface M: member names are unique",
|
||||
"status_string": "FAIL",
|
||||
"properties": {},
|
||||
"message": "assert_true: member A is unique expected true got false"
|
||||
}
|
||||
],
|
||||
"type": "complete"
|
||||
|
|
|
@ -2491,6 +2491,7 @@ policies and contribution forms [3].
|
|||
this.status.status = this.status.ERROR;
|
||||
this.status.message = String(e);
|
||||
this.status.stack = e.stack ? e.stack : null;
|
||||
this.complete();
|
||||
}
|
||||
}
|
||||
this.set_timeout();
|
||||
|
|
|
@ -524,7 +524,7 @@ function lastLine(text) {
|
|||
* @param {"Syntax" | "Validation"} kind error type
|
||||
* @param {WebIDL2ErrorOptions} [options]
|
||||
*/
|
||||
function error(source, position, current, message, kind, { level = "error", autofix } = {}) {
|
||||
function error(source, position, current, message, kind, { level = "error", autofix, ruleName } = {}) {
|
||||
/**
|
||||
* @param {number} count
|
||||
*/
|
||||
|
@ -574,6 +574,7 @@ function error(source, position, current, message, kind, { level = "error", auto
|
|||
line,
|
||||
sourceName: source.name,
|
||||
level,
|
||||
ruleName,
|
||||
autofix,
|
||||
input: subsequentText,
|
||||
tokens: subsequentTokens
|
||||
|
@ -591,8 +592,9 @@ function syntaxError(source, position, current, message) {
|
|||
* @param {string} message error message
|
||||
* @param {WebIDL2ErrorOptions} [options]
|
||||
*/
|
||||
function validationError(source, token, current, message, options) {
|
||||
return error(source, token.index, current, message, "Validation", options);
|
||||
function validationError(token, current, ruleName, message, options = {}) {
|
||||
options.ruleName = ruleName;
|
||||
return error(current.source, token.index, current, message, "Validation", options);
|
||||
}
|
||||
|
||||
|
||||
|
@ -612,7 +614,10 @@ __webpack_require__.r(__webpack_exports__);
|
|||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "type_with_extended_attributes", function() { return type_with_extended_attributes; });
|
||||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "return_type", function() { return return_type; });
|
||||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "stringifier", function() { return stringifier; });
|
||||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLastIndentation", function() { return getLastIndentation; });
|
||||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getMemberIndentation", function() { return getMemberIndentation; });
|
||||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "autofixAddExposedWindow", function() { return autofixAddExposedWindow; });
|
||||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getFirstToken", function() { return getFirstToken; });
|
||||
/* harmony import */ var _type_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5);
|
||||
/* harmony import */ var _argument_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8);
|
||||
/* harmony import */ var _token_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(12);
|
||||
|
@ -789,6 +794,30 @@ function stringifier(tokeniser) {
|
|||
return member;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} str
|
||||
*/
|
||||
function getLastIndentation(str) {
|
||||
const lines = str.split("\n");
|
||||
// the first line visually binds to the preceding token
|
||||
if (lines.length) {
|
||||
const match = lines[lines.length - 1].match(/^\s+/);
|
||||
if (match) {
|
||||
return match[0];
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} parentTrivia
|
||||
*/
|
||||
function getMemberIndentation(parentTrivia) {
|
||||
const indentation = getLastIndentation(parentTrivia);
|
||||
const indentCh = indentation.includes("\t") ? "\t" : " ";
|
||||
return indentation + indentCh;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {object} def
|
||||
* @param {import("./extended-attributes.js").ExtendedAttributes} def.extAttrs
|
||||
|
@ -806,12 +835,28 @@ function autofixAddExposedWindow(def) {
|
|||
def.extAttrs.unshift(exposed);
|
||||
} else {
|
||||
def.extAttrs = _extended_attributes_js__WEBPACK_IMPORTED_MODULE_3__["ExtendedAttributes"].parse(new _tokeniser_js__WEBPACK_IMPORTED_MODULE_6__["Tokeniser"]("[Exposed=Window]"));
|
||||
def.extAttrs.tokens.open.trivia = def.tokens.base.trivia;
|
||||
def.tokens.base.trivia = " ";
|
||||
const trivia = def.tokens.base.trivia;
|
||||
def.extAttrs.tokens.open.trivia = trivia;
|
||||
def.tokens.base.trivia = `\n${getLastIndentation(trivia)}`;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the first syntax token for the given IDL object.
|
||||
* @param {*} data
|
||||
*/
|
||||
function getFirstToken(data) {
|
||||
if (data.extAttrs.length) {
|
||||
return data.extAttrs.tokens.open;
|
||||
}
|
||||
if (data.type === "operation") {
|
||||
return getFirstToken(data.idlType);
|
||||
}
|
||||
const tokens = Object.values(data.tokens).sort((x, y) => x.index - y.index);
|
||||
return tokens[0];
|
||||
}
|
||||
|
||||
|
||||
/***/ }),
|
||||
/* 5 */
|
||||
|
@ -989,7 +1034,7 @@ class Type extends _base_js__WEBPACK_IMPORTED_MODULE_0__["Base"] {
|
|||
if (reference) {
|
||||
const targetToken = (this.union ? reference : this).tokens.base;
|
||||
const message = `Nullable union cannot include a dictionary type`;
|
||||
yield Object(_error_js__WEBPACK_IMPORTED_MODULE_3__["validationError"])(this.source, targetToken, this, message);
|
||||
yield Object(_error_js__WEBPACK_IMPORTED_MODULE_3__["validationError"])(targetToken, this, "no-nullable-union-dict", message);
|
||||
}
|
||||
} else {
|
||||
// allow some dictionary
|
||||
|
@ -1148,10 +1193,10 @@ class Argument extends _base_js__WEBPACK_IMPORTED_MODULE_0__["Base"] {
|
|||
if (Object(_validators_helpers_js__WEBPACK_IMPORTED_MODULE_6__["idlTypeIncludesDictionary"])(this.idlType, defs, { useNullableInner: true })) {
|
||||
if (this.idlType.nullable) {
|
||||
const message = `Dictionary arguments cannot be nullable.`;
|
||||
yield Object(_error_js__WEBPACK_IMPORTED_MODULE_5__["validationError"])(this.source, this.tokens.name, this, message);
|
||||
yield Object(_error_js__WEBPACK_IMPORTED_MODULE_5__["validationError"])(this.tokens.name, this, "no-nullable-dict-arg", message);
|
||||
} else if (this.optional && !this.default) {
|
||||
const message = `Optional dictionary arguments must have a default value of \`{}\`.`;
|
||||
yield Object(_error_js__WEBPACK_IMPORTED_MODULE_5__["validationError"])(this.source, this.tokens.name, this, message, {
|
||||
yield Object(_error_js__WEBPACK_IMPORTED_MODULE_5__["validationError"])(this.tokens.name, this, "dict-arg-default", message, {
|
||||
autofix: autofixOptionalDictionaryDefaultValue(this)
|
||||
});
|
||||
}
|
||||
|
@ -1315,7 +1360,7 @@ class SimpleExtendedAttribute extends _base_js__WEBPACK_IMPORTED_MODULE_0__["Bas
|
|||
undesirable feature that may be removed from Web IDL in the future. Refer to the \
|
||||
[relevant upstream PR](https://github.com/heycam/webidl/pull/609) for more \
|
||||
information.`;
|
||||
yield Object(_error_js__WEBPACK_IMPORTED_MODULE_3__["validationError"])(this.source, this.tokens.name, this, message, { level: "warning" });
|
||||
yield Object(_error_js__WEBPACK_IMPORTED_MODULE_3__["validationError"])(this.tokens.name, this, "no-nointerfaceobject", message, { level: "warning" });
|
||||
}
|
||||
for (const arg of this.arguments) {
|
||||
yield* arg.validate(defs);
|
||||
|
@ -1464,7 +1509,7 @@ class Operation extends _base_js__WEBPACK_IMPORTED_MODULE_0__["Base"] {
|
|||
*validate(defs) {
|
||||
if (!this.name && ["", "static"].includes(this.special)) {
|
||||
const message = `Regular or static operations must have both a return type and an identifier.`;
|
||||
yield Object(_error_js__WEBPACK_IMPORTED_MODULE_2__["validationError"])(this.source, this.tokens.open, this, message);
|
||||
yield Object(_error_js__WEBPACK_IMPORTED_MODULE_2__["validationError"])(this.tokens.open, this, "incomplete-op", message);
|
||||
}
|
||||
if (this.idlType) {
|
||||
yield* this.idlType.validate(defs);
|
||||
|
@ -1760,6 +1805,8 @@ __webpack_require__.r(__webpack_exports__);
|
|||
/* harmony import */ var _error_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(3);
|
||||
/* harmony import */ var _validators_interface_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(23);
|
||||
/* harmony import */ var _constructor_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(24);
|
||||
/* harmony import */ var _tokeniser_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(2);
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -1819,10 +1866,20 @@ To fix, add, for example, \`[Exposed=Window]\`. Please also consider carefully \
|
|||
if your interface should also be exposed in a Worker scope. Refer to the \
|
||||
[WebIDL spec section on Exposed](https://heycam.github.io/webidl/#Exposed) \
|
||||
for more information.`;
|
||||
yield Object(_error_js__WEBPACK_IMPORTED_MODULE_6__["validationError"])(this.source, this.tokens.name, this, message, {
|
||||
yield Object(_error_js__WEBPACK_IMPORTED_MODULE_6__["validationError"])(this.tokens.name, this, "require-exposed", message, {
|
||||
autofix: Object(_helpers_js__WEBPACK_IMPORTED_MODULE_5__["autofixAddExposedWindow"])(this)
|
||||
});
|
||||
}
|
||||
const constructors = this.extAttrs.filter(extAttr => extAttr.name === "Constructor");
|
||||
for (const constructor of constructors) {
|
||||
const message = `Constructors should now be represented as a \`constructor()\` operation on the interface \
|
||||
instead of \`[Constructor]\` extended attribute. Refer to the \
|
||||
[WebIDL spec section on constructor operations](https://heycam.github.io/webidl/#idl-constructors) \
|
||||
for more information.`;
|
||||
yield Object(_error_js__WEBPACK_IMPORTED_MODULE_6__["validationError"])(constructor.tokens.name, this, "constructor-member", message, {
|
||||
autofix: autofixConstructor(this, constructor)
|
||||
});
|
||||
}
|
||||
|
||||
yield* super.validate(defs);
|
||||
if (!this.partial) {
|
||||
|
@ -1831,6 +1888,37 @@ for more information.`;
|
|||
}
|
||||
}
|
||||
|
||||
function autofixConstructor(interfaceDef, constructorExtAttr) {
|
||||
return () => {
|
||||
const indentation = Object(_helpers_js__WEBPACK_IMPORTED_MODULE_5__["getLastIndentation"])(interfaceDef.extAttrs.tokens.open.trivia);
|
||||
const memberIndent = interfaceDef.members.length ?
|
||||
Object(_helpers_js__WEBPACK_IMPORTED_MODULE_5__["getLastIndentation"])(Object(_helpers_js__WEBPACK_IMPORTED_MODULE_5__["getFirstToken"])(interfaceDef.members[0]).trivia) :
|
||||
Object(_helpers_js__WEBPACK_IMPORTED_MODULE_5__["getMemberIndentation"])(indentation);
|
||||
const constructorOp = _constructor_js__WEBPACK_IMPORTED_MODULE_8__["Constructor"].parse(new _tokeniser_js__WEBPACK_IMPORTED_MODULE_9__["Tokeniser"](`\n${memberIndent}constructor();`));
|
||||
constructorOp.extAttrs = [];
|
||||
constructorOp.arguments = constructorExtAttr.arguments;
|
||||
|
||||
const existingIndex = interfaceDef.members.findIndex(m => m.type === "constructor");
|
||||
interfaceDef.members.splice(existingIndex + 1, 0, constructorOp);
|
||||
|
||||
const { close } = interfaceDef.tokens;
|
||||
if (!close.trivia.includes("\n")) {
|
||||
close.trivia += `\n${indentation}`;
|
||||
}
|
||||
|
||||
const { extAttrs } = interfaceDef;
|
||||
const index = extAttrs.indexOf(constructorExtAttr);
|
||||
const removed = extAttrs.splice(index, 1);
|
||||
if (!extAttrs.length) {
|
||||
extAttrs.tokens.open = extAttrs.tokens.close = undefined;
|
||||
} else if (extAttrs.length === index) {
|
||||
extAttrs[index - 1].tokens.separator = undefined;
|
||||
} else if (!extAttrs[index].tokens.name.trivia.trim()) {
|
||||
extAttrs[index].tokens.name.trivia = removed[0].tokens.name.trivia;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
/***/ }),
|
||||
/* 20 */
|
||||
|
@ -2066,7 +2154,7 @@ function* checkInterfaceMemberDuplication(defs, i) {
|
|||
const { name } = addition;
|
||||
if (name && existings.has(name)) {
|
||||
const message = `The operation "${name}" has already been defined for the base interface "${base.name}" either in itself or in a mixin`;
|
||||
yield Object(_error_js__WEBPACK_IMPORTED_MODULE_0__["validationError"])(ext.source, addition.tokens.name, ext, message);
|
||||
yield Object(_error_js__WEBPACK_IMPORTED_MODULE_0__["validationError"])(addition.tokens.name, ext, "no-cross-overload", message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2112,6 +2200,15 @@ class Constructor extends _base_js__WEBPACK_IMPORTED_MODULE_0__["Base"] {
|
|||
get type() {
|
||||
return "constructor";
|
||||
}
|
||||
|
||||
*validate(defs) {
|
||||
if (this.idlType) {
|
||||
yield* this.idlType.validate(defs);
|
||||
}
|
||||
for (const argument of this.arguments) {
|
||||
yield* argument.validate(defs);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -2294,7 +2391,7 @@ To fix, add, for example, [Exposed=Window]. Please also consider carefully \
|
|||
if your namespace should also be exposed in a Worker scope. Refer to the \
|
||||
[WebIDL spec section on Exposed](https://heycam.github.io/webidl/#Exposed) \
|
||||
for more information.`;
|
||||
yield Object(_error_js__WEBPACK_IMPORTED_MODULE_3__["validationError"])(this.source, this.tokens.name, this, message, {
|
||||
yield Object(_error_js__WEBPACK_IMPORTED_MODULE_3__["validationError"])(this.tokens.name, this, "require-exposed", message, {
|
||||
autofix: Object(_helpers_js__WEBPACK_IMPORTED_MODULE_4__["autofixAddExposedWindow"])(this)
|
||||
});
|
||||
}
|
||||
|
@ -2650,7 +2747,6 @@ function write(ast, { templates: ts = templates } = {}) {
|
|||
enum: enum_,
|
||||
"enum-value": enum_value,
|
||||
iterable: iterable_like,
|
||||
legacyiterable: iterable_like,
|
||||
maplike: iterable_like,
|
||||
setlike: iterable_like,
|
||||
"callback interface": container,
|
||||
|
@ -2741,7 +2837,7 @@ function* checkDuplicatedNames({ unique, duplicates }) {
|
|||
for (const dup of duplicates) {
|
||||
const { name } = dup;
|
||||
const message = `The name "${name}" of type "${unique.get(name).type}" was already seen`;
|
||||
yield Object(_error_js__WEBPACK_IMPORTED_MODULE_0__["validationError"])(dup.source, dup.tokens.name, dup, message);
|
||||
yield Object(_error_js__WEBPACK_IMPORTED_MODULE_0__["validationError"])(dup.tokens.name, dup, "no-duplicate", message);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,17 +0,0 @@
|
|||
// META: script=/resources/WebIDLParser.js
|
||||
// META: script=/resources/idlharness.js
|
||||
|
||||
// https://w3c.github.io/webappsec-subresource-integrity/
|
||||
|
||||
'use strict';
|
||||
|
||||
idl_test(
|
||||
['SRI'],
|
||||
['html', 'cssom', 'dom'],
|
||||
idl_array => {
|
||||
idl_array.add_objects({
|
||||
HTMLScriptElement: ['document.createElement("script")'],
|
||||
HTMLLinkElement: ['document.createElement("link")'],
|
||||
});
|
||||
}
|
||||
);
|
|
@ -8,19 +8,24 @@ from six import iteritems
|
|||
|
||||
wpt_root = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir, os.pardir))
|
||||
|
||||
# Rules are just regex on the path, with a leading ! indicating a regex that must not
|
||||
# match for the job
|
||||
job_path_map = {
|
||||
"stability": [".*/.*",
|
||||
# Common exclusions between affected_tests and stability jobs.
|
||||
# Files in these dirs would trigger the execution of too many tests.
|
||||
EXCLUDES = [
|
||||
"!tools/",
|
||||
"!docs/",
|
||||
"!resources/*",
|
||||
"!conformance-checkers/",
|
||||
"!.*/OWNERS",
|
||||
"!.*/META.yml",
|
||||
"!.*/tools/",
|
||||
"!.*/README",
|
||||
"!css/[^/]*$"],
|
||||
"!css/[^/]*$"
|
||||
]
|
||||
|
||||
# Rules are just regex on the path, with a leading ! indicating a regex that must not
|
||||
# match for the job
|
||||
job_path_map = {
|
||||
"affected_tests": [".*/.*", "!resources/(?!idlharness.js)"] + EXCLUDES,
|
||||
"stability": [".*/.*", "!resources/.*"] + EXCLUDES,
|
||||
"lint": [".*"],
|
||||
"manifest_upload": [".*"],
|
||||
"resources_unittest": ["resources/", "tools/"],
|
||||
|
|
|
@ -124,8 +124,12 @@ def checkout_revision(rev):
|
|||
|
||||
|
||||
def install_chrome(channel):
|
||||
deb_prefix = "https://dl.google.com/linux/direct/"
|
||||
if channel in ("experimental", "dev", "nightly"):
|
||||
deb_archive = "google-chrome-unstable_current_amd64.deb"
|
||||
# Pinned to 78 as 79 consistently fails reftests. TODO(foolip).
|
||||
# See https://github.com/web-platform-tests/wpt/issues/19297.
|
||||
deb_archive = "google-chrome-unstable_78.0.3904.17-1_amd64.deb"
|
||||
deb_prefix = "https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-unstable/"
|
||||
elif channel == "beta":
|
||||
deb_archive = "google-chrome-beta_current_amd64.deb"
|
||||
elif channel == "stable":
|
||||
|
@ -134,7 +138,7 @@ def install_chrome(channel):
|
|||
raise ValueError("Unrecognized release channel: %s" % channel)
|
||||
|
||||
dest = os.path.join("/tmp", deb_archive)
|
||||
resp = urlopen("https://dl.google.com/linux/direct/%s" % deb_archive)
|
||||
resp = urlopen(deb_prefix + deb_archive)
|
||||
with open(dest, "w") as f:
|
||||
f.write(resp.read())
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ all_jobs = {
|
|||
"lint",
|
||||
"manifest_upload",
|
||||
"resources_unittest",
|
||||
"affected_tests",
|
||||
"stability",
|
||||
"tools_unittest",
|
||||
"update_built",
|
||||
|
@ -60,6 +61,32 @@ def test_stability():
|
|||
"css/CSS21/test-001.html"],
|
||||
includes=["stability"]) == {"stability"}
|
||||
|
||||
def test_affected_tests():
|
||||
assert jobs.get_jobs(["dom/historical.html"],
|
||||
includes=["affected_tests"]) == {"affected_tests"}
|
||||
assert jobs.get_jobs(["tools/pytest.ini"],
|
||||
includes=["affected_tests"]) == set()
|
||||
assert jobs.get_jobs(["serve"],
|
||||
includes=["affected_tests"]) == set()
|
||||
assert jobs.get_jobs(["resources/testharness.js"],
|
||||
includes=["affected_tests"]) == set()
|
||||
assert jobs.get_jobs(["docs/.gitignore"],
|
||||
includes=["affected_tests"]) == set()
|
||||
assert jobs.get_jobs(["dom/tools/example.py"],
|
||||
includes=["affected_tests"]) == set()
|
||||
assert jobs.get_jobs(["conformance-checkers/test.html"],
|
||||
includes=["affected_tests"]) == set()
|
||||
assert jobs.get_jobs(["dom/README.md"],
|
||||
includes=["affected_tests"]) == set()
|
||||
assert jobs.get_jobs(["css/build-css-testsuite.sh"],
|
||||
includes=["affected_tests"]) == set()
|
||||
assert jobs.get_jobs(["css/CSS21/test-001.html"],
|
||||
includes=["affected_tests"]) == {"affected_tests"}
|
||||
assert jobs.get_jobs(["css/build-css-testsuite.sh",
|
||||
"css/CSS21/test-001.html"],
|
||||
includes=["affected_tests"]) == {"affected_tests"}
|
||||
assert jobs.get_jobs(["resources/idlharness.js"],
|
||||
includes=["affected_tests"]) == {"affected_tests"}
|
||||
|
||||
def test_tools_unittest():
|
||||
assert jobs.get_jobs(["tools/ci/test/test_jobs.py"],
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
'use strict';
|
||||
|
||||
idl_test(
|
||||
['webgl1'],
|
||||
['webgl1', 'webgl2'],
|
||||
['dom'],
|
||||
idl_array => {
|
||||
// TODO: objects
|
|
@ -1,15 +0,0 @@
|
|||
// META: script=/resources/WebIDLParser.js
|
||||
// META: script=/resources/idlharness.js
|
||||
// META: timeout=long
|
||||
|
||||
// https://www.khronos.org/registry/webgl/specs/latest/1.0/
|
||||
|
||||
'use strict';
|
||||
|
||||
idl_test(
|
||||
['webgl2'],
|
||||
['webgl1', 'dom'],
|
||||
idl_array => {
|
||||
// TODO: objects
|
||||
}
|
||||
);
|
|
@ -1,6 +1,7 @@
|
|||
function message_from_port(port) {
|
||||
return new Promise(resolve => {
|
||||
return new Promise((resolve, reject) => {
|
||||
port.onmessage = e => resolve(e.data);
|
||||
port.onerror = e => reject(e);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue