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:
bors-servo 2019-09-27 23:30:47 -04:00 committed by GitHub
commit b0b01b86b8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
89 changed files with 11097 additions and 382 deletions

View file

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

View file

@ -0,0 +1,2 @@
[line-breaking-021.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[text-align-last-wins-001.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[text-justify-006.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[text-transform-fullwidth-008.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[text-transform-fullwidth-009.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[seg-break-transformation-018.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[seg-break-transformation-019.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[word-break-keep-all-007.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[word-break-keep-all-008.html]
expected: FAIL

View file

@ -1,4 +1,5 @@
[perspective-interpolation.html]
expected: CRASH
[ perspective interpolation]
expected: FAIL

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -0,0 +1,2 @@
[matchMedia-display-none-iframe.html]
expected: ERROR

View file

@ -1,2 +0,0 @@
[contenttype_txt.html]
expected: CRASH

View file

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

View file

@ -56,3 +56,6 @@
[separate text/javascript x/x]
expected: FAIL
[separate text/javascript;charset=windows-1252 text/javascript]
expected: FAIL

View file

@ -11,6 +11,3 @@
[X-Content-Type-Options%3A%20nosniff%0C]
expected: FAIL
[X-Content-Type-Options%3A%20%22nosniFF%22]
expected: FAIL

View file

@ -1,4 +1,4 @@
[traverse_the_history_2.html]
[traverse_the_history_4.html]
[Multiple history traversals, last would be aborted]
expected: FAIL

View file

@ -0,0 +1,4 @@
[traverse_the_history_5.html]
[Multiple history traversals, last would be aborted]
expected: FAIL

View file

@ -1,4 +1,5 @@
[creating_browsing_context_test_01.html]
expected: TIMEOUT
[first argument: absolute url]
expected: FAIL
expected: TIMEOUT

View file

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

View file

@ -1,4 +0,0 @@
[DOMContentLoaded-defer.html]
[The end: DOMContentLoaded and defer scripts]
expected: FAIL

View file

@ -0,0 +1,5 @@
[promise-rejection-events-onerror.html]
expected: TIMEOUT
[Throwing inside an unhandledrejection handler invokes the error handler.]
expected: TIMEOUT

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,4 @@
[idlharness.https.window.html]
[idl_test validation]
expected: FAIL

View file

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

View file

@ -1,2 +0,0 @@
[Worker-constructor.html]
expected: ERROR

View file

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

View file

@ -0,0 +1,2 @@
[transition_calc_implicit.html]
expected: TIMEOUT

View file

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

View file

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

View file

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

View file

@ -0,0 +1 @@
Accept-CH: ua,arch,platform,model

View file

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

View file

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

View file

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

View file

@ -0,0 +1 @@
Content-Security-Policy: {{GET[policy]}}

View file

@ -1,4 +1,3 @@
spec: https://drafts.csswg.org/css-speech/
suggested_reviewers:
- danielweck
- musingvirtual

View file

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

View file

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

View file

@ -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>&#x200D;&#x200D;&#x200D;😂&#x200D;😭</div>

View file

@ -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>&#x200D;&#x200D;&#x200D;😂&#x200D;😭</div>

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -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&#x3000;x</div>
<div id=test>x x</div>
<div id=test>x<span> </span>x</div>

View file

@ -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&#x3000;&#x3000;&#x3000;x</div>
<div id=test>x x</div>
<div id=test>x<span> </span>x</div>

View file

@ -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&#x3000;x</div>
<div id=test>x<span> </span>x</div>
<div id=ref2>x&#x3000;x</div>
<div id=test2>x<span> </span>x</div>

View file

@ -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&#x3000;x</div>
<div id=test>x<span> </span>x</div>
<div id=ref2>x&#x3000;x</div>
<div id=test2>x<span> </span>x</div>
<div id=ref3>x&#x3000;<br>x&#x3000;</div>
<div id=test3>x<span> </span><br>x<span> </span></div>
<div id=ref4>x&#x3000;<br>x&#x3000;</div>
<div id=test4>x<span> </span><br>x<span> </span></div>

View file

@ -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&#x200b;
bbb</div>
<div>aa<span>&#x200b;</span>
bbb</div>
<div>aa<span id=b>&#x200b;</span>
bb</div>
<div>aa<span id=p>&#x200b;</span>
bb</div>
<div>aa<span id=m>&#x200b;</span><span id=m2></span>
bbb</div>

View file

@ -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&#x200b;
bbb</div>
<div>aa&#x200b;<aside id=abs>foo</aside>
bbb</div>
<div>aa&#x200b;<aside id=fixed>foo</aside>
bbb</div>
<div>aa&#x200b;<aside id=float-r>foo</aside>
bbb</div>
<div>aa&#x200b;<aside id=float-l>foo</aside>
bbb</div>

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -28,7 +28,7 @@ interface MediaRecorder : EventTarget {
};
dictionary MediaRecorderOptions {
DOMString mimeType;
DOMString mimeType = "";
unsigned long audioBitsPerSecond;
unsigned long videoBitsPerSecond;
unsigned long bitsPerSecond;

View file

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

View file

@ -1,5 +1,5 @@
spec: https://w3c.github.io/reporting/
suggested_reviewers:
- clelland
- dcreager
- igrigorik
- paulmeyer90

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -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")'],
});
}
);

View file

@ -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/"],

View file

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

View file

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

View file

@ -7,7 +7,7 @@
'use strict';
idl_test(
['webgl1'],
['webgl1', 'webgl2'],
['dom'],
idl_array => {
// TODO: objects

View file

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

View file

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