mirror of
https://github.com/servo/servo.git
synced 2025-08-03 12:40:06 +01:00
Auto merge of #27665 - servo-wpt-sync:wpt_update_24-09-2020, r=servo-wpt-sync
Sync WPT with upstream (24-09-2020) Automated downstream sync of changes from upstream as of 24-09-2020. [no-wpt-sync] r? @servo-wpt-sync
This commit is contained in:
commit
12f5411aad
105 changed files with 1097 additions and 543 deletions
|
@ -1,8 +0,0 @@
|
|||
[url-charset.window.html]
|
||||
expected: TIMEOUT
|
||||
[Blob charset should override any auto-detected charset.]
|
||||
expected: TIMEOUT
|
||||
|
||||
[Blob charset should override <meta charset>.]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[hit-test-floats-003.html]
|
||||
[Miss float below something else]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[hit-test-floats-004.html]
|
||||
[Miss float below something else]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
[math-script-level-001.tentative.html]
|
||||
[Inherited values of math-depth]
|
||||
expected: FAIL
|
||||
|
||||
[Specified math-depth: add(<integer>)]
|
||||
expected: FAIL
|
||||
|
||||
[Specified math-depth: <integer>]
|
||||
expected: FAIL
|
||||
|
||||
[Specified math-depth: auto-add]
|
||||
expected: FAIL
|
||||
|
||||
[Initial value of math-depth]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
[trailing-space-in-inline-box.html]
|
||||
[Preserved trailing spaces in inline boxes should hang]
|
||||
expected: FAIL
|
||||
|
||||
[Preserved trailing spaces in inline boxes should hang 2]
|
||||
expected: FAIL
|
||||
|
||||
[Preserved trailing spaces in inline boxes should hang 1]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
[offsetTopLeft-border-box.html]
|
||||
[container: 1]
|
||||
expected: FAIL
|
||||
|
||||
[container: 0]
|
||||
expected: FAIL
|
||||
|
|
@ -315,21 +315,12 @@
|
|||
[<iframe>: separate response Content-Type: text/html */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
|
||||
[<iframe>: separate response Content-Type: text/html;" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
|
||||
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;x=" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined 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;" \\" text/plain]
|
||||
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -53,9 +53,6 @@
|
|||
[combined text/javascript ]
|
||||
expected: FAIL
|
||||
|
||||
[separate text/javascript;charset=windows-1252 error text/javascript]
|
||||
expected: FAIL
|
||||
|
||||
[separate text/javascript x/x]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[traverse_the_history_3.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -1,8 +1,4 @@
|
|||
[embedded-opener-remove-frame.html]
|
||||
expected: CRASH
|
||||
[opener of discarded nested browsing context]
|
||||
expected: FAIL
|
||||
|
||||
[opener of discarded auxiliary browsing context]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[iframe_sandbox_popups_escaping-2.html]
|
||||
expected: CRASH
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
[iframe_sandbox_popups_nonescaping-1.html]
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: NOTRUN
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[iframe_sandbox_popups_nonescaping-2.html]
|
||||
expected: TIMEOUT
|
||||
expected: CRASH
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: NOTRUN
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
[iframe_sandbox_popups_nonescaping-3.html]
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: NOTRUN
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
[form-double-submit-3.html]
|
||||
[<button> should have the same double-submit protection as <input type=submit>]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[DOMContentLoaded-defer.html]
|
||||
[The end: DOMContentLoaded and defer scripts]
|
||||
expected: FAIL
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
[ignore-opens-during-unload.window.html]
|
||||
expected: TIMEOUT
|
||||
expected: CRASH
|
||||
[document.open should bail out when ignore-opens-during-unload is greater than 0 during visibilitychange event (open(parent) while unloading parent and child)]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
[018.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, javascript:]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
[url-charset.window.html]
|
||||
expected: TIMEOUT
|
||||
[Blob charset should override any auto-detected charset.]
|
||||
expected: TIMEOUT
|
||||
|
||||
[Blob charset should override <meta charset>.]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -24611,6 +24611,23 @@
|
|||
]
|
||||
}
|
||||
},
|
||||
"replaced-elements": {
|
||||
"images": {
|
||||
"revoked-blob-print.html": [
|
||||
"fd5c2c575457aa33f25d54175822b463f41e75d5",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/html/rendering/replaced-elements/images/revoked-blob-print-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
"the-details-element": {
|
||||
"details-page-break-after-1-print.html": [
|
||||
"cb7fc466d09226fd7833a4d8066fb64fae755392",
|
||||
|
@ -135314,7 +135331,7 @@
|
|||
]
|
||||
],
|
||||
"flex-aspect-ratio-img-row-008.html": [
|
||||
"59ec6fc68e09be5aa807a241d2b5fbd26460f3e5",
|
||||
"58dee77510fa96383dea0b88386a13033b68157f",
|
||||
[
|
||||
null,
|
||||
[
|
||||
|
@ -135327,7 +135344,7 @@
|
|||
]
|
||||
],
|
||||
"flex-aspect-ratio-img-row-009.html": [
|
||||
"fab5f0bfdaf54f46ae3f2cabc8228b6de0c3799a",
|
||||
"e7dc55d2711d90e96f60ca0a7fadfeafcb9b2bec",
|
||||
[
|
||||
null,
|
||||
[
|
||||
|
@ -136109,7 +136126,7 @@
|
|||
]
|
||||
],
|
||||
"flex-minimum-height-flex-items-005.xht": [
|
||||
"795dda5713b4f3358846a9f725c8653182c20fee",
|
||||
"b180d8d47ae3973b84440ed9db1e750fde83977a",
|
||||
[
|
||||
null,
|
||||
[
|
||||
|
@ -136382,7 +136399,7 @@
|
|||
]
|
||||
],
|
||||
"flex-minimum-width-flex-items-005.xht": [
|
||||
"109cc96865b8749acced0393e098af5b199e9ecc",
|
||||
"486b6959974c251331dd5c75b1b834fd301ecd00",
|
||||
[
|
||||
null,
|
||||
[
|
||||
|
@ -142845,8 +142862,21 @@
|
|||
]
|
||||
},
|
||||
"math-script-level-and-math-style": {
|
||||
"math-script-level-003.tentative.html": [
|
||||
"9a4130c395252aabfce105f8a80e32484e33e937",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/css-fonts/math-script-level-and-math-style/math-script-level-003.tentative-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"math-script-level-auto-and-math-style-001.tentative.html": [
|
||||
"9ae2107ad23d7653cf779d44a175c4b3f9d1ae03",
|
||||
"bb59dfdd17857197e26d13cbe011540c90f97afb",
|
||||
[
|
||||
null,
|
||||
[
|
||||
|
@ -142859,7 +142889,7 @@
|
|||
]
|
||||
],
|
||||
"math-script-level-auto-and-math-style-002.tentative.html": [
|
||||
"6f1073235b4d5e13cb078b532c76ea712760998d",
|
||||
"21c912528ab03ccff1895960cd09ee2bd3785239",
|
||||
[
|
||||
null,
|
||||
[
|
||||
|
@ -142872,7 +142902,7 @@
|
|||
]
|
||||
],
|
||||
"math-script-level-auto-and-math-style-003.tentative.html": [
|
||||
"9d83627fa0178a7a4633d94423cdf9b1ad05b3e9",
|
||||
"5739a12bb56eacc30f2433f701110d5fc7b44009",
|
||||
[
|
||||
null,
|
||||
[
|
||||
|
@ -142885,7 +142915,7 @@
|
|||
]
|
||||
],
|
||||
"math-script-level-auto-and-math-style-004.tentative.html": [
|
||||
"e12734a88cf86a89a341155c64227f0c64841f1d",
|
||||
"aed3bf9142c94d9ce699d635798137cdcd467341",
|
||||
[
|
||||
null,
|
||||
[
|
||||
|
@ -142898,7 +142928,7 @@
|
|||
]
|
||||
],
|
||||
"math-script-level-auto-and-math-style-005.tentative.html": [
|
||||
"18b2af9e4b6f43d7cf9df43bf8a2d88ade7f62cf",
|
||||
"01b876b515adf88ed4dafbb05b78b0277488ede5",
|
||||
[
|
||||
null,
|
||||
[
|
||||
|
@ -142911,7 +142941,7 @@
|
|||
]
|
||||
],
|
||||
"math-script-level-font-size-clamping-001.tentative.html": [
|
||||
"8570954641d81dfd02db05fde19a2d0e474ac376",
|
||||
"36b477aa328cb9e1a3d3f65a041106366a0557a1",
|
||||
[
|
||||
null,
|
||||
[
|
||||
|
@ -244046,7 +244076,7 @@
|
|||
]
|
||||
},
|
||||
"presentational-hints-001.html": [
|
||||
"701dbef8613361d6fd12c4bfe2b417ae85f5deec",
|
||||
"c304a0dbbfff426c48338142322bc3ed972aa1d9",
|
||||
[
|
||||
null,
|
||||
[
|
||||
|
@ -246721,7 +246751,7 @@
|
|||
],
|
||||
"reftests": {
|
||||
"disabled-shapes-01.svg": [
|
||||
"65364dc08ff5ec3ee7d7853d10a6a348b2db999b",
|
||||
"49572fe71e7f92f6c52a18aec3115a5bc4a63593",
|
||||
[
|
||||
null,
|
||||
[
|
||||
|
@ -246771,6 +246801,19 @@
|
|||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"polygon-with-filtered-marker.html": [
|
||||
"def8adc6852efd36e91060e120c4f127be10b7bc",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/svg/struct/reftests/reference/green-100x100.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
|
@ -298478,6 +298521,10 @@
|
|||
]
|
||||
},
|
||||
"math-script-level-and-math-style": {
|
||||
"math-script-level-003.tentative-ref.html": [
|
||||
"d73e71f41c90154f7d72e63c86aa268bd3424c9a",
|
||||
[]
|
||||
],
|
||||
"math-script-level-auto-and-math-style-001.tentative-ref.html": [
|
||||
"8540de41942ffa37f8457dcee3e198bb9b06b208",
|
||||
[]
|
||||
|
@ -327718,7 +327765,7 @@
|
|||
[]
|
||||
],
|
||||
"onencrypted.js": [
|
||||
"dbeb99d5d44cd4a02c76912489b82f92701bee3d",
|
||||
"acf0ffacc0cb4c3256e70b8473a40801e25fd2dd",
|
||||
[]
|
||||
],
|
||||
"playback-destroy-persistent-license.js": [
|
||||
|
@ -327802,7 +327849,7 @@
|
|||
[]
|
||||
],
|
||||
"reset-src-after-setmediakeys.js": [
|
||||
"acddd8dd5f451e567728c3a379da60f13ee32348",
|
||||
"0ccce3275ecb7077bd600bb1ded1290ac76be71d",
|
||||
[]
|
||||
],
|
||||
"setmediakeys-again-after-playback.js": [
|
||||
|
@ -329380,7 +329427,7 @@
|
|||
[]
|
||||
],
|
||||
"focus-restoration-in-different-site-iframes-outer.sub.html": [
|
||||
"ecc1af286d9477d1ced8e38f890685c3ad043666",
|
||||
"fa32c67173db76be29bd26dc37338b9999597b0f",
|
||||
[]
|
||||
]
|
||||
}
|
||||
|
@ -330305,7 +330352,7 @@
|
|||
[]
|
||||
],
|
||||
"generic-sensor-feature-policy-test.sub.js": [
|
||||
"da1af4132486c38af45dfbb44d0c902a6fc4ea6c",
|
||||
"9bc46ae9364be41fdb4dc2cf47d8a231b04f6081",
|
||||
[]
|
||||
],
|
||||
"generic-sensor-iframe-tests.sub.js": [
|
||||
|
@ -337683,7 +337730,7 @@
|
|||
[]
|
||||
],
|
||||
"iframe-domain-failure.sub.html": [
|
||||
"cf795c23805889f6e036873264444b631862d204",
|
||||
"9fea70380547e12492cb472612cab379d5bbd560",
|
||||
[]
|
||||
],
|
||||
"iframe-domain-failure.sub.html.headers": [
|
||||
|
@ -338485,6 +338532,10 @@
|
|||
"f37d8a3ec94834673a75749a28a42638f9c2a0db",
|
||||
[]
|
||||
],
|
||||
"revoked-blob-print-ref.html": [
|
||||
"6b2f0bb60654721f0793e526db405fb5b28429e3",
|
||||
[]
|
||||
],
|
||||
"space-ref.html": [
|
||||
"0cf272e16211098b6020d5d15d0d71336ba88a59",
|
||||
[]
|
||||
|
@ -343189,7 +343240,7 @@
|
|||
[]
|
||||
],
|
||||
"WebCryptoAPI.idl": [
|
||||
"9e0aed0f4b0ebd18e18ffdbc16ad680e3554cf5f",
|
||||
"246c1547bb97ea88675d0223340be85060242f34",
|
||||
[]
|
||||
],
|
||||
"WebIDL.idl": [
|
||||
|
@ -343308,10 +343359,6 @@
|
|||
"8866b008ccbf7dbca9d8e631da3f26013915bf00",
|
||||
[]
|
||||
],
|
||||
"css-layout-api.idl": [
|
||||
"f6ac4c17e27fa7df237229eb2fcec770dba22324",
|
||||
[]
|
||||
],
|
||||
"css-masking.idl": [
|
||||
"72fbd9aa1ffb576802102a82bf97259e3bf60078",
|
||||
[]
|
||||
|
@ -343597,7 +343644,7 @@
|
|||
[]
|
||||
],
|
||||
"payment-request.idl": [
|
||||
"91aab8f112be0991dc229de99158dd146ca2c6b7",
|
||||
"9b6537c97ec6f476bd941ff929582bb90e04bb9b",
|
||||
[]
|
||||
],
|
||||
"performance-timeline.idl": [
|
||||
|
@ -343685,7 +343732,7 @@
|
|||
[]
|
||||
],
|
||||
"scroll-animations.idl": [
|
||||
"df35313b48a4305f9249d9faa183081bb83dd5e0",
|
||||
"3ef9f5452906509e5c9bc88bdaf31fbf2b3ff8a8",
|
||||
[]
|
||||
],
|
||||
"scroll-to-text-fragment.idl": [
|
||||
|
@ -344627,7 +344674,7 @@
|
|||
]
|
||||
},
|
||||
"presentational-hints-001-ref.html": [
|
||||
"af27310fb592aade8b81e2df4bcb5a239c84d291",
|
||||
"3d71d72fb34f35074962afc50fc7909bc55d3975",
|
||||
[]
|
||||
],
|
||||
"presentational-hints-002-ref.html": [
|
||||
|
@ -345052,6 +345099,16 @@
|
|||
"d1252f5af1b6718b54e4efbfb1f740e53b154561",
|
||||
[]
|
||||
],
|
||||
"dedicated-worker": {
|
||||
"mediasource-worker-objecturl.js": [
|
||||
"db47da0c0a658f456b9c0cb682db2fee2859931d",
|
||||
[]
|
||||
],
|
||||
"mediasource-worker-util.js": [
|
||||
"e0c4bdc0e10bb5707f7af75bf6cafa293a6f7b9b",
|
||||
[]
|
||||
]
|
||||
},
|
||||
"generate-config-change-tests.py": [
|
||||
"6ab2c8bf46b8cc2b8633663e2b815cb3b24d2ec3",
|
||||
[]
|
||||
|
@ -345355,6 +345412,12 @@
|
|||
]
|
||||
}
|
||||
},
|
||||
"merchant-validation": {
|
||||
"META.yml": [
|
||||
"20ab3ff9ef350d009bea344ccb05a454ecde5c21",
|
||||
[]
|
||||
]
|
||||
},
|
||||
"mimesniff": {
|
||||
"META.yml": [
|
||||
"fd41c87fad8ebd7d86c6f5d8be47eaa61953a777",
|
||||
|
@ -346158,6 +346221,10 @@
|
|||
"ea3f6b335c7620acf59f546fd48484bf624ccb38",
|
||||
[]
|
||||
],
|
||||
"document-domain.sub.https.html.headers": [
|
||||
"ea3f6b335c7620acf59f546fd48484bf624ccb38",
|
||||
[]
|
||||
],
|
||||
"getter-special-cases": {
|
||||
"csp-sandbox-no.https.html.headers": [
|
||||
"4705ce9dedeeabf8208bf602176511c0cbe2cb76",
|
||||
|
@ -346271,6 +346338,14 @@
|
|||
"9292fe3894e4a82f77a8877b76faa19fe6dfdb47",
|
||||
[]
|
||||
],
|
||||
"frame.html": [
|
||||
"8f35d2703e72eb316b1e46f602ae6fc1d5894285",
|
||||
[]
|
||||
],
|
||||
"frame.html.headers": [
|
||||
"ea3f6b335c7620acf59f546fd48484bf624ccb38",
|
||||
[]
|
||||
],
|
||||
"helpers.mjs": [
|
||||
"8bd1c8e9250071257ca1abda991e173d449fe0da",
|
||||
[]
|
||||
|
@ -346333,7 +346408,7 @@
|
|||
"features": {
|
||||
"resources": {
|
||||
"helper.mjs": [
|
||||
"7ced355e645c7bafd96aa55ef175cb995311aff9",
|
||||
"0ea3b01101494ad244a75c7d29ec3e8bdacc9832",
|
||||
[]
|
||||
],
|
||||
"no-camera-no-geolocation.mjs": [
|
||||
|
@ -346360,7 +346435,7 @@
|
|||
[]
|
||||
],
|
||||
"op10 cspfp-valid.json": [
|
||||
"0fc1d163f2b61951813eae9ca84f2d4fe7f59703",
|
||||
"c3bea5c7bcc2bed5d0c1ec362f01748611f40fc2",
|
||||
[]
|
||||
],
|
||||
"op100 manifest-mimetype.json": [
|
||||
|
@ -346392,7 +346467,7 @@
|
|||
[]
|
||||
],
|
||||
"op2 cspfp-double-top-level.json": [
|
||||
"26d798b585d96fd29994dc39544a15bd2f6a639d",
|
||||
"59c34190fd903f7a609c062576a6485eff7474cf",
|
||||
[]
|
||||
],
|
||||
"op3 cspfp-double-second-level.json": [
|
||||
|
@ -346404,11 +346479,11 @@
|
|||
[]
|
||||
],
|
||||
"op5 cspfp-non-object.json": [
|
||||
"7488f9bfef297e069d10845c2048f1ea261850da",
|
||||
"1e404608b59308dae34b560e7d3accd6a65cda51",
|
||||
[]
|
||||
],
|
||||
"op6 cspfp-non-string.json": [
|
||||
"5c6941bf8fd18928e6c1d4cea381f625f9923ee5",
|
||||
"231e7d4326f48100abac9d5269d51f58d1e6a4c5",
|
||||
[]
|
||||
],
|
||||
"op7 csp-noimg-report-only.json": [
|
||||
|
@ -351953,7 +352028,7 @@
|
|||
[]
|
||||
],
|
||||
"registration-tests-script.js": [
|
||||
"4d08efd21f873f689880904e86aff2c12fad99a5",
|
||||
"f400bb91af93eb0f1ba9dca587d6ac8f53a63370",
|
||||
[]
|
||||
],
|
||||
"registration-tests-security-error.js": [
|
||||
|
@ -367261,8 +367336,12 @@
|
|||
"1e01b0a52b586b00cbbb28b2352959f7fa150e39",
|
||||
[]
|
||||
],
|
||||
"Worker-run-forever-during-dynamic-import.js": [
|
||||
"62840bd5b4ffad5e9b122a9971f271c1d9604abe",
|
||||
[]
|
||||
],
|
||||
"Worker-run-forever-during-importScripts.js": [
|
||||
"3a0fb4bb06321c74cc2a8a32b6f1ed752c89b054",
|
||||
"6a3083f382158dbe9bbfa744f7afe25e19bccca6",
|
||||
[]
|
||||
],
|
||||
"Worker-run-forever-during-nested-importScripts.js": [
|
||||
|
@ -367270,7 +367349,7 @@
|
|||
[]
|
||||
],
|
||||
"Worker-run-forever.js": [
|
||||
"679f908c202584e931f655803603ea387cba5731",
|
||||
"2d822d407f4c83fe7321cbd4cb1168626de05eea",
|
||||
[]
|
||||
],
|
||||
"Worker-structure-message.js": [
|
||||
|
@ -397346,15 +397425,22 @@
|
|||
]
|
||||
],
|
||||
"math-script-level-and-math-style": {
|
||||
"math-script-level-001.tentative.html": [
|
||||
"f2ae5bf35bd24413bfd3feeee1215c74218dc753",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"math-script-level-002.tentative.html": [
|
||||
"e6de63dbe90ae8d712b3269829cbc3ed89b80b3e",
|
||||
"ab0f8fa9553f053e006c346d5f12f4119bc58193",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"math-script-level-004.tentative.html": [
|
||||
"b534b6a7712af62d3184c4a71f48b7a56a1e146b",
|
||||
"a46c478596ba82548da9361257e20f0a3d838b34",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -409409,6 +409495,13 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"trailing-space-in-inline-box.html": [
|
||||
"fee51018799c6bb9923fa92754c89d5fe8aa7394",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"trailing-space-position-001.html": [
|
||||
"648ae23dccbeb5d79a30fd14506a6f4164b2f26f",
|
||||
[
|
||||
|
@ -443889,7 +443982,7 @@
|
|||
]
|
||||
],
|
||||
"clear-window-name.https.html": [
|
||||
"1ddbb7f31119d1987d0ec151988a70427d527465",
|
||||
"39798f1e232f2ba109d64afdcf5031b06620207b",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -461209,7 +461302,7 @@
|
|||
]
|
||||
],
|
||||
"cross-origin-isolated-permission.https.html": [
|
||||
"da3a632a3c3707a164e1f3fd3f961bf3ed5aac22",
|
||||
"aec1b858542bd95dce04bf0773af8138854acc69",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -463456,7 +463549,7 @@
|
|||
]
|
||||
],
|
||||
"window-domain-failure.https.sub.html": [
|
||||
"1175b56fb0463449a4a589ed86cb26d27533d0a5",
|
||||
"2deff50d8dd91642f337ae19a3df733837fe8c83",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -483219,7 +483312,7 @@
|
|||
]
|
||||
],
|
||||
"attribute-mapping-002.html": [
|
||||
"904ed0343fc3015e1fafe5b9c564d17ea906d9ea",
|
||||
"e4532321e4a5b20944ff4181b2ad9b967ee31213",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -483919,6 +484012,22 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"dedicated-worker": {
|
||||
"mediasource-worker-attach.html": [
|
||||
"b09f05c248531029b9b787597af1ae84e0b65ccd",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"mediasource-worker-objecturl.html": [
|
||||
"382a9a4f3632a53cd2a94dab121fe34a07d9238d",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
]
|
||||
},
|
||||
"idlharness.window.js": [
|
||||
"9300f67fe04f21454a96bb14f6f0b8a059d8e00d",
|
||||
[
|
||||
|
@ -485093,6 +485202,29 @@
|
|||
]
|
||||
]
|
||||
},
|
||||
"merchant-validation": {
|
||||
"complete-method.tentative.https.html": [
|
||||
"36bfdb2160a7c7f71a64ecec07024b700bb1de60",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"constructor.tentative.https.html": [
|
||||
"9fdf78ddb3dea4de72e48d1ae5288c0a9f161d68",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"constructortentative..http.html": [
|
||||
"8368c79a3b1dea2df26bbc804208002ec97fbf09",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
]
|
||||
},
|
||||
"mimesniff": {
|
||||
"mime-types": {
|
||||
"charset-parameter.window.js": [
|
||||
|
@ -490237,6 +490369,13 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"document-domain.sub.https.html": [
|
||||
"6910b022052b403f6c9f15d6dc12e797065e16ce",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"getter-special-cases": {
|
||||
"csp-sandbox-no.https.html": [
|
||||
"16ecb45192950d29329c6bd54a6b561f281b07a2",
|
||||
|
@ -490608,21 +490747,21 @@
|
|||
]
|
||||
],
|
||||
"non-object.https.html": [
|
||||
"2bd4b67e600c9bbb655461f161e1ad6da6619663",
|
||||
"d1be8e89377ff832f4f67eff62e79bb95d759eee",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"non-string.https.html": [
|
||||
"190d224a4cfe05bb1a4ea57b104f7d31d862fdcc",
|
||||
"99645fc6d9dd062ba4184d666074f43012c530e4",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"valid-with-semicolon.https.html": [
|
||||
"8d2d0f4495ff7f401991accc044f21fef115ad75",
|
||||
"53ea7a94019664eb798aabfe36e3d0b4ecc8c9f0",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -491486,29 +491625,6 @@
|
|||
]
|
||||
},
|
||||
"payment-request": {
|
||||
"MerchantValidationEvent": {
|
||||
"complete-method.https.html": [
|
||||
"36bfdb2160a7c7f71a64ecec07024b700bb1de60",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"constructor.http.html": [
|
||||
"8368c79a3b1dea2df26bbc804208002ec97fbf09",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"constructor.https.html": [
|
||||
"9fdf78ddb3dea4de72e48d1ae5288c0a9f161d68",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
]
|
||||
},
|
||||
"PaymentMethodChangeEvent": {
|
||||
"methodDetails-attribute.https.html": [
|
||||
"feaaef66adf8a433868d33bcf722525af6c0d2ba",
|
||||
|
@ -505664,7 +505780,7 @@
|
|||
]
|
||||
],
|
||||
"getdisplaymedia.https.html": [
|
||||
"4b433d717df3127b815fdf8608d12ac2d2806174",
|
||||
"aae81d2f823944d5a718b6419e5267119f66fefc",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -505855,7 +505971,7 @@
|
|||
]
|
||||
],
|
||||
"wakelock-enabled-by-feature-policy.https.sub.html": [
|
||||
"f908717ff410d736ccb42e89c3e95c4852e82696",
|
||||
"53e92f55167f68c0e902dc017833b6a2c04b0bad",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -505982,7 +506098,7 @@
|
|||
},
|
||||
"screen_enumeration": {
|
||||
"getScreens.tentative.https.window.js": [
|
||||
"ad982b219cbe2baa540e37f27e4096d274ac09a2",
|
||||
"acd38bb03b20cb4e087dcaf1ce17b9cb0b504048",
|
||||
[
|
||||
"screen_enumeration/getScreens.tentative.https.window.html",
|
||||
{
|
||||
|
@ -506011,7 +506127,7 @@
|
|||
]
|
||||
],
|
||||
"isMultiScreen.tentative.https.window.js": [
|
||||
"515731cc04fc7b0026f5972d9a5b96e649d8bc9e",
|
||||
"ac32dd05169e0a9cebeab0ff05a32fe36167362e",
|
||||
[
|
||||
"screen_enumeration/isMultiScreen.tentative.https.window.html",
|
||||
{
|
||||
|
@ -508669,6 +508785,13 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"registration-script-module.https.html": [
|
||||
"9e39a1f75b27de492d5eb3842aaa254d2f662687",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"registration-script-url.https.html": [
|
||||
"bda61adb00271ffe78b3e38e055427eb203313d5",
|
||||
[
|
||||
|
@ -508677,7 +508800,7 @@
|
|||
]
|
||||
],
|
||||
"registration-script.https.html": [
|
||||
"f70b9e676260637c5d10bb8b36e6bacb6f5b3b6b",
|
||||
"f1e51fd265e21271537769343e0e3e05032e76b7",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -527390,7 +527513,7 @@
|
|||
]
|
||||
],
|
||||
"share-url-invalid.https.html": [
|
||||
"d7ffd3b11ce3a60beb8c3466d8156f6ca55a4204",
|
||||
"cb76458c24c5632f4a97d3f8f5a744fc46d7b6a0",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -536154,7 +536277,7 @@
|
|||
]
|
||||
],
|
||||
"usb-allowed-by-feature-policy.https.sub.html": [
|
||||
"9ec25eadba301d4617766157b09112f475f6160d",
|
||||
"831cb42cab614b62e261e227c5423f6d7a70746a",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -538452,7 +538575,7 @@
|
|||
]
|
||||
],
|
||||
"Worker-terminate-forever-during-evaluation.html": [
|
||||
"a45a4cd210516abc709d15fc0b55ec331bd2576c",
|
||||
"4513c5b53790d11b4e26b0fd38a4e9bee9f1c9ad",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[hit-test-floats-003.html]
|
||||
[Miss float below something else]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[hit-test-floats-004.html]
|
||||
[Miss float below something else]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
[math-script-level-001.tentative.html]
|
||||
[Inherited values of math-depth]
|
||||
expected: FAIL
|
||||
|
||||
[Specified math-depth: add(<integer>)]
|
||||
expected: FAIL
|
||||
|
||||
[Specified math-depth: <integer>]
|
||||
expected: FAIL
|
||||
|
||||
[Specified math-depth: auto-add]
|
||||
expected: FAIL
|
||||
|
||||
[Initial value of math-depth]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
[trailing-space-in-inline-box.html]
|
||||
[Preserved trailing spaces in inline boxes should hang]
|
||||
expected: FAIL
|
||||
|
||||
[Preserved trailing spaces in inline boxes should hang 2]
|
||||
expected: FAIL
|
||||
|
||||
[Preserved trailing spaces in inline boxes should hang 1]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
[offsetTopLeft-border-box.html]
|
||||
[container: 1]
|
||||
expected: FAIL
|
||||
|
||||
[container: 0]
|
||||
expected: FAIL
|
||||
|
|
@ -315,21 +315,12 @@
|
|||
[<iframe>: separate response Content-Type: text/html */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
|
||||
[<iframe>: separate response Content-Type: text/html;" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
|
||||
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;x=" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined 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;" \\" text/plain]
|
||||
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -53,9 +53,6 @@
|
|||
[combined text/javascript ]
|
||||
expected: FAIL
|
||||
|
||||
[separate text/javascript;charset=windows-1252 error text/javascript]
|
||||
expected: FAIL
|
||||
|
||||
[separate text/javascript x/x]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[traverse_the_history_3.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -1,11 +1,7 @@
|
|||
[embedded-opener-remove-frame.html]
|
||||
expected: CRASH
|
||||
[opener and "removed" embedded documents]
|
||||
expected: FAIL
|
||||
|
||||
[opener of discarded nested browsing context]
|
||||
expected: FAIL
|
||||
|
||||
[opener of discarded auxiliary browsing context]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[iframe_sandbox_popups_escaping-2.html]
|
||||
expected: CRASH
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
[iframe_sandbox_popups_nonescaping-1.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: NOTRUN
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[iframe_sandbox_popups_nonescaping-2.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
expected: CRASH
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: NOTRUN
|
||||
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
[iframe_sandbox_popups_nonescaping-3.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: NOTRUN
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
[form-double-submit-3.html]
|
||||
[<button> should have the same double-submit protection as <input type=submit>]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[DOMContentLoaded-defer.html]
|
||||
[The end: DOMContentLoaded and defer scripts]
|
||||
expected: FAIL
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
[ignore-opens-during-unload.window.html]
|
||||
expected: TIMEOUT
|
||||
expected: CRASH
|
||||
[ignore-opens-during-unload]
|
||||
expected: FAIL
|
||||
|
||||
|
|
5
tests/wpt/metadata/webmessaging/with-ports/018.html.ini
Normal file
5
tests/wpt/metadata/webmessaging/with-ports/018.html.ini
Normal file
|
@ -0,0 +1,5 @@
|
|||
[018.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, javascript:]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -8,5 +8,5 @@
|
|||
<p>Test passes if there is a filled green square.</p>
|
||||
|
||||
<div style="display: flex; width: 100px;">
|
||||
<img src="data:image/svg+xml,%3Csvg viewBox='0 0 200 400' width='50px' xmlns='http://www.w3.org/2000/svg' %3E%3Crect width='100%' fill='green' /%3E%3C/svg%3E" style="border-left: 50px solid green; min-width: 0px;">
|
||||
<img src="data:image/svg+xml,%3Csvg viewBox='0 0 200 400' width='50px' xmlns='http://www.w3.org/2000/svg' %3E%3Crect width='100%' height='100%' fill='green' /%3E%3C/svg%3E" style="border-left: 50px solid green; min-width: 0px;">
|
||||
</div>
|
||||
|
|
|
@ -22,5 +22,5 @@
|
|||
<div id=reference-overlapped-red></div>
|
||||
|
||||
<div style="display: flex; width: 50px;">
|
||||
<img src="data:image/svg+xml,%3Csvg viewBox='0 0 200 400' width='50px' xmlns='http://www.w3.org/2000/svg' %3E%3Crect width='100%' fill='green' /%3E%3C/svg%3E" style="border-left: 50px solid green;">
|
||||
<img src="data:image/svg+xml,%3Csvg viewBox='0 0 200 400' width='50px' xmlns='http://www.w3.org/2000/svg' %3E%3Crect width='100%' height='100%' fill='green' /%3E%3C/svg%3E" style="border-left: 50px solid green;">
|
||||
</div>
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com" />
|
||||
<link rel="help" href="http://www.w3.org/TR/css-flexbox-1/#min-size-auto" title="4.5. Implied Minimum Size of Flex Items" />
|
||||
<link rel="match" href="../reference/ref-filled-green-100px-square.xht" />
|
||||
<meta name="assert" content="Checks that minimum height for flex items is the specified size, as the min-content size of the image corresponds to that." />
|
||||
<meta name="assert" content="Checks that automatic minimum height for flex items is the specified size suggestion, when that is the smallest of the available suggestions." />
|
||||
<style type="text/css"><![CDATA[
|
||||
#reference-overlapped-red {
|
||||
position: absolute;
|
||||
|
@ -32,7 +32,7 @@
|
|||
|
||||
<div id="reference-overlapped-red"></div>
|
||||
<div id="constrained-flex">
|
||||
<img id="test-flex-item-overlapping-green" src="support/60x60-green.png" />
|
||||
<img id="test-flex-item-overlapping-green" src="support/200x200-green.png" />
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com" />
|
||||
<link rel="help" href="http://www.w3.org/TR/css-flexbox-1/#min-size-auto" title="4.5. Implied Minimum Size of Flex Items" />
|
||||
<link rel="match" href="../reference/ref-filled-green-100px-square.xht" />
|
||||
<meta name="assert" content="Checks that minimum width for flex items is the specified size, as the min-content size of the image corresponds to that." />
|
||||
<meta name="assert" content="Checks that automatic minimum width for flex items is the specified size suggestion, when that is the smallest of the available suggestions." />
|
||||
<style type="text/css"><![CDATA[
|
||||
#reference-overlapped-red {
|
||||
position: absolute;
|
||||
|
@ -30,7 +30,7 @@
|
|||
|
||||
<div id="reference-overlapped-red"></div>
|
||||
<div id="constrained-flex">
|
||||
<img id="test-flex-item-overlapping-green" src="support/60x60-green.png" />
|
||||
<img id="test-flex-item-overlapping-green" src="support/200x200-green.png" />
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -0,0 +1,64 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>math-depth</title>
|
||||
<meta charset="utf-8">
|
||||
<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-math-script-level-property">
|
||||
<meta name="assert" content="Check the computed value of math-depth">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script>
|
||||
function mathDepth(id) {
|
||||
return window.getComputedStyle(document.getElementById(id)).
|
||||
getPropertyValue("math-depth");
|
||||
}
|
||||
setup({ explicit_done: true });
|
||||
window.addEventListener("load", function() {
|
||||
test(function() {
|
||||
assert_equals(mathDepth("initial"), "0");
|
||||
assert_equals(mathDepth("initialFrom11"), "0");
|
||||
}, "Initial value of math-depth");
|
||||
test(function() {
|
||||
assert_equals(mathDepth("inherited11"), "11");
|
||||
assert_equals(mathDepth("inherited-7"), "-7");
|
||||
}, "Inherited values of math-depth");
|
||||
test(function() {
|
||||
assert_equals(mathDepth("inherited9specifiedAutoInline"), "10");
|
||||
assert_equals(mathDepth("inherited9specifiedAutoDisplay"), "9");
|
||||
}, "Specified math-depth: auto-add");
|
||||
test(function() {
|
||||
assert_equals(mathDepth("specified11"), "11");
|
||||
assert_equals(mathDepth("specified-7"), "-7");
|
||||
}, "Specified math-depth: <integer>");
|
||||
test(function() {
|
||||
assert_equals(mathDepth("specifiedAdd10From5"), "15");
|
||||
assert_equals(mathDepth("specifiedAdd-15From5"), "-10");
|
||||
}, "Specified math-depth: add(<integer>)");
|
||||
done();
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="log"></div>
|
||||
<div id="initial"></div>
|
||||
<div id="specified11" style="math-depth: 11">
|
||||
<div id="initialFrom11" style="math-depth: initial"></div>
|
||||
<div id="inherited11"></div>
|
||||
</div>
|
||||
<div id="specified-7" style="math-depth: -7">
|
||||
<div id="inherited-7"></div>
|
||||
</div>
|
||||
<div style="math-depth: 9">
|
||||
<div style="math-style: compact">
|
||||
<div id="inherited9specifiedAutoInline" style="math-depth: auto-add" ></div>
|
||||
</div>
|
||||
<div style="math-style: normal">
|
||||
<div id="inherited9specifiedAutoDisplay" style="math-depth: auto-add" ></div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="math-depth: 5">
|
||||
<div id="specifiedAdd10From5" style="math-depth: add(10)"></div>
|
||||
<div id="specifiedAdd-15From5" style="math-depth: add(-15)"></div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -6,7 +6,7 @@
|
|||
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3746">
|
||||
<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-math-script-level-property">
|
||||
<link rel="help" href="https://www.w3.org/TR/cssom-1/#serialize-a-css-component-value">
|
||||
<meta name="assert" content="Verify effect of font-size: scriptlevel(auto) | scriptlevel(add(<integer>)) | scriptlevel(<integer>), starting from different values of math-script-level.">
|
||||
<meta name="assert" content="Verify effect of math-depth: auto-add | add(<integer) | (<integer>, starting from different values of math-depth.">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
|
||||
|
@ -81,111 +81,111 @@
|
|||
<div class="container">
|
||||
<div>
|
||||
<div style="font-size: 200px; math-style: normal">
|
||||
<div id="autoDisplay" style="font-size: scriptlevel(auto)"></div>
|
||||
<div id="autoDisplay" style="font-size: math; math-depth: auto-add"></div>
|
||||
</div>
|
||||
<div style="font-size: 500px; math-style: compact">
|
||||
<div id="autoInline" style="font-size: scriptlevel(auto)"></div>
|
||||
<div id="autoInline" style="font-size: math; math-depth: auto-add"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="font-size: 2000px;">
|
||||
<div style="math-style: normal; font-size: scriptlevel(7)">
|
||||
<div id="autoDisplayFrom7" style="font-size: scriptlevel(auto)"></div>
|
||||
<div style="math-style: normal; font-size: math; math-depth: 7">
|
||||
<div id="autoDisplayFrom7" style="font-size: math; math-depth: auto-add"></div>
|
||||
</div>
|
||||
<div style="math-style: compact; font-size: scriptlevel(7)">
|
||||
<div id="autoInlineFrom7" style="font-size: scriptlevel(auto)"></div>
|
||||
<div style="math-style: compact; font-size: math; math-depth: 7">
|
||||
<div id="autoInlineFrom7" style="font-size: math; math-depth: auto-add"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div style="font-size: 200px">
|
||||
<div id="add0" style="font-size: scriptlevel(add(0))"></div>
|
||||
<div id="add0" style="font-size: math; math-depth: add(0)"></div>
|
||||
</div>
|
||||
<div style="font-size: 71px">
|
||||
<div id="add-1" style="font-size: scriptlevel(add(-1))"></div>
|
||||
<div id="add-1" style="font-size: math; math-depth: add(-1)"></div>
|
||||
</div>
|
||||
<div style="font-size: 500px">
|
||||
<div id="add1" style="font-size: scriptlevel(add(1))"></div>
|
||||
<div id="add1" style="font-size: math; math-depth: add(1)"></div>
|
||||
</div>
|
||||
<div style="font-size: 200px">
|
||||
<div id="add-2" style="font-size: scriptlevel(add(-2))"></div>
|
||||
<div id="add-2" style="font-size: math; math-depth: add(-2)"></div>
|
||||
</div>
|
||||
<div style="font-size: 1000px">
|
||||
<div id="add2" style="font-size: scriptlevel(add(2))"></div>
|
||||
<div id="add2" style="font-size: math; math-depth: add(2)"></div>
|
||||
</div>
|
||||
<div style="font-size: 30px">
|
||||
<div id="add-9" style="font-size: scriptlevel(add(-9))"></div>
|
||||
<div id="add-9" style="font-size: math; math-depth: add(-9)"></div>
|
||||
</div>
|
||||
<div style="font-size: 2000px">
|
||||
<div id="add9" style="font-size: scriptlevel(add(9))"></div>
|
||||
<div id="add9" style="font-size: math; math-depth: add(9)"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="font-size: scriptlevel(3);">
|
||||
<div style="math-depth: 3;">
|
||||
<div style="font-size: 200px;">
|
||||
<div id="add0from3" style="font-size: scriptlevel(add(0))"></div>
|
||||
<div id="add0from3" style="font-size: math; math-depth: add(0)"></div>
|
||||
</div>
|
||||
<div style="font-size: 71px;">
|
||||
<div id="add-1from3" style="font-size: scriptlevel(add(-1))"></div>
|
||||
<div id="add-1from3" style="font-size: math; math-depth: add(-1)"></div>
|
||||
</div>
|
||||
<div style="font-size: 500px;">
|
||||
<div id="add1from3" style="font-size: scriptlevel(add(1))"></div>
|
||||
<div id="add1from3" style="font-size: math; math-depth: add(1)"></div>
|
||||
</div>
|
||||
<div style="font-size: 200px;">
|
||||
<div id="add-2from3" style="font-size: scriptlevel(add(-2))"></div>
|
||||
<div id="add-2from3" style="font-size: math; math-depth: add(-2)"></div>
|
||||
</div>
|
||||
<div style="font-size: 1000px;">
|
||||
<div id="add2from3" style="font-size: scriptlevel(add(2))"></div>
|
||||
<div id="add2from3" style="font-size: math; math-depth: add(2)"></div>
|
||||
</div>
|
||||
<div style="font-size: 30px;">
|
||||
<div id="add-9from3" style="font-size: scriptlevel(add(-9))"></div>
|
||||
<div id="add-9from3" style="font-size: math; math-depth: add(-9)"></div>
|
||||
</div>
|
||||
<div style="font-size: 2000px;">
|
||||
<div id="add9from3" style="font-size: scriptlevel(add(9))"></div>
|
||||
<div id="add9from3" style="font-size: math; math-depth: add(9)"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div style="font-size: 200px">
|
||||
<div id="set0" style="font-size: scriptlevel(0)"></div>
|
||||
<div id="set0" style="font-size: math; math-depth: 0"></div>
|
||||
</div>
|
||||
<div style="font-size: 71px">
|
||||
<div id="set-1" style="font-size: scriptlevel(-1)"></div>
|
||||
<div id="set-1" style="font-size: math; math-depth: -1"></div>
|
||||
</div>
|
||||
<div style="font-size: 500px">
|
||||
<div id="set1" style="font-size: scriptlevel(1)"></div>
|
||||
<div id="set1" style="font-size: math; math-depth: 1"></div>
|
||||
</div>
|
||||
<div style="font-size: 200px">
|
||||
<div id="set-2" style="font-size: scriptlevel(-2)"></div>
|
||||
<div id="set-2" style="font-size: math; math-depth: -2"></div>
|
||||
</div>
|
||||
<div style="font-size: 1000px">
|
||||
<div id="set2" style="font-size: scriptlevel(2)"></div>
|
||||
<div id="set2" style="font-size: math; math-depth: 2"></div>
|
||||
</div>
|
||||
<div style="font-size: 30px">
|
||||
<div id="set-9" style="font-size: scriptlevel(-9)"></div>
|
||||
<div id="set-9" style="font-size: math; math-depth: -9"></div>
|
||||
</div>
|
||||
<div style="font-size: 2000px">
|
||||
<div id="set9" style="font-size: scriptlevel(9)"></div>
|
||||
<div id="set9" style="font-size: math; math-depth: 9"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="font-size: scriptlevel(50)">
|
||||
<div style="math-depth: 50">
|
||||
<div style="font-size: 200px;">
|
||||
<div id="set50" style="font-size: scriptlevel(50)"></div>
|
||||
<div id="set50" style="font-size: math; math-depth: 50"></div>
|
||||
</div>
|
||||
<div style="font-size: 71px;">
|
||||
<div id="set49" style="font-size: scriptlevel(49)"></div>
|
||||
<div id="set49" style="font-size: math; math-depth: 49"></div>
|
||||
</div>
|
||||
<div style="font-size: 500px;">
|
||||
<div id="set51" style="font-size: scriptlevel(51)"></div>
|
||||
<div id="set51" style="font-size: math; math-depth: 51"></div>
|
||||
</div>
|
||||
<div style="font-size: 200px;">
|
||||
<div id="set48" style="font-size: scriptlevel(48)"></div>
|
||||
<div id="set48" style="font-size: math; math-depth: 48"></div>
|
||||
</div>
|
||||
<div style="font-size: 1000px;">
|
||||
<div id="set52" style="font-size: scriptlevel(52)"></div>
|
||||
<div id="set52" style="font-size: math; math-depth: 52"></div>
|
||||
</div>
|
||||
<div style="font-size: 30px;">
|
||||
<div id="set41" style="font-size: scriptlevel(41)"></div>
|
||||
<div id="set41" style="font-size: math; math-depth: 41"></div>
|
||||
</div>
|
||||
<div style="font-size: 2000px;">
|
||||
<div id="set59" style="font-size: scriptlevel(59)"></div>
|
||||
<div id="set59" style="font-size: math; math-depth: 59"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>math-depth</title>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
|
||||
<style>
|
||||
.container {
|
||||
/* Ahem font does not have a MATH table so the font-size scale factor
|
||||
is always 0.71^{computed - inherited math script level} */
|
||||
font: 100px/1 Ahem;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<p>Test passes if you see two squares of side 100px.</p>
|
||||
<div class="container">
|
||||
<div>X</div>
|
||||
</div>
|
||||
<br/>
|
||||
<div class="container">
|
||||
<div>X</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,29 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>math-depth</title>
|
||||
<meta charset="utf-8">
|
||||
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3746">
|
||||
<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-math-script-level-property">
|
||||
<meta name="assert" content="If specified font-size is not 'math' then math-depth does not affect the computed value of font-size.">
|
||||
<link rel="match" href="math-script-level-003.tentative-ref.html">
|
||||
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
|
||||
<style>
|
||||
.container {
|
||||
/* Ahem font does not have a MATH table so the font-size scale factor
|
||||
is always 0.71^{computed - inherited math script level} */
|
||||
font: 100px/1 Ahem;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<p>Test passes if you see two squares of side 100px.</p>
|
||||
<div class="container" style="math-script-level: 3;">
|
||||
<div style="math-level: 9; font-size: 100px;">X</div>
|
||||
</div>
|
||||
<br/>
|
||||
<div class="container" style="math-script-level: 3;">
|
||||
<div style="math-level: 9;">X</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -37,13 +37,13 @@
|
|||
}
|
||||
.big { font-size: 3000px; }
|
||||
.small { font-size: 150px; }
|
||||
.level-3 { font-size: scriptlevel(-3); }
|
||||
.level-1 { font-size: scriptlevel(-1); }
|
||||
.level0 { font-size: scriptlevel(0); }
|
||||
.level1 { font-size: scriptlevel(1); }
|
||||
.level2 { font-size: scriptlevel(2); }
|
||||
.level3 { font-size: scriptlevel(3); }
|
||||
.level5 { font-size: scriptlevel(5); }
|
||||
.level-3 { font-size: math; math-depth: -3; }
|
||||
.level-1 { font-size: math; math-depth: -1; }
|
||||
.level0 { font-size: math; math-depth: 0; }
|
||||
.level1 { font-size: math; math-depth: 1; }
|
||||
.level2 { font-size: math; math-depth: 2; }
|
||||
.level3 { font-size: math; math-depth: 3; }
|
||||
.level5 { font-size: math; math-depth: 5; }
|
||||
</style>
|
||||
<script>
|
||||
const big = 3000;
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3746">
|
||||
<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-math-script-level-property">
|
||||
<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-math-style-property">
|
||||
<meta name="assert" content="If font-size is scriptlevel('auto') and the inherited value of math-style is 'display' then the internal scriptlevel is the one of its parent.">
|
||||
<meta name="assert" content="If specified font-size is math and specified math-depth is 'auto-add' and the inherited value of math-style is 'normal' then the computed math-depth is the one of its parent.">
|
||||
<link rel="match" href="math-script-level-auto-and-math-style-001.tentative-ref.html">
|
||||
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
|
||||
<style>
|
||||
|
@ -20,7 +20,7 @@
|
|||
<body>
|
||||
<p>Test passes if you see a square of side 100 × 0.71^(0 − 0) = 100px.</p>
|
||||
<div class="container" style="math-style: normal;">
|
||||
<div style="font-size: scriptlevel(auto)">X</div>
|
||||
<div style="font-size: math; math-depth: auto-add">X</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3746">
|
||||
<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-math-script-level-property">
|
||||
<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-math-style-property">
|
||||
<meta name="assert" content="If font-size is scriptlevel('auto') and the inherited value of math-style is 'inline' then the internal scriptlevel is the one of its parent.">
|
||||
<meta name="assert" content="If the specified font-size is 'math' and specified math-depth is 'auto-add' and the inherited value of math-style is 'compact' then the computed math-depth is the one of its parent.">
|
||||
<link rel="match" href="math-script-level-auto-and-math-style-002.tentative-ref.html">
|
||||
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
|
||||
<style>
|
||||
|
@ -20,7 +20,7 @@
|
|||
<body>
|
||||
<p>Test passes if you see a square of side 500 × 0.71^(1 − 0) = 355px.</p>
|
||||
<div class="container" style="math-style: compact;">
|
||||
<div style="font-size: scriptlevel(auto)">X</div>
|
||||
<div style="font-size: math; math-depth: auto-add">X</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
<body>
|
||||
<p>Test passes if you see a square of side 500px.</p>
|
||||
<div class="container">
|
||||
<div style="font-size: scriptlevel(auto)">X</div>
|
||||
<div style="font-size: math; math-depth: auto-add">X</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
<div class="container">
|
||||
<div style="math-style: compact">
|
||||
<div style="math-style: initial">
|
||||
<div style="font-size: scriptlevel(auto)">X</div>
|
||||
<div style="font-size: math; math-depth: auto-add">X</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
<div style="math-style: normal;">
|
||||
<div>
|
||||
<div>
|
||||
<div style="font-size: scriptlevel(auto)">X</div>
|
||||
<div style="font-size: math; math-depth: auto-add">X</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -19,8 +19,8 @@
|
|||
<body>
|
||||
<p>Test passes if you see a square of side 12px.</p>
|
||||
<div class="container"><!-- Initial size is 12px. -->
|
||||
<div style="font-size: scriptlevel(add(8));"><!-- Size is 12*.71^8 = 0.7749042374949131 < 1px. -->
|
||||
<div style="font-size: scriptlevel(add(-8));">X</div><!-- back to 12px. -->
|
||||
<div style="font-size: math; math-depth: add(8);"><!-- Size is 12*.71^8 = 0.7749042374949131 < 1px. -->
|
||||
<div style="font-size: math; math-depth: add(-8);">X</div><!-- back to 12px. -->
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
<!DOCTYPE html>
|
||||
<title>Preserved trailing spaces in inline boxes should hang</title>
|
||||
<link rel="help" href="https://drafts.csswg.org/css-text-3/#propdef-white-space">
|
||||
<link rel="help" href="http://crbug.com/1130310">
|
||||
<link rel="author" title="Koji Ishii" href="mailto:kojii@chromium.org">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<style>
|
||||
.target {
|
||||
font-family: Consolas, 'Courier New', Courier, monospace;
|
||||
font-size: 20px;
|
||||
width: 5ch;
|
||||
white-space: pre-wrap;
|
||||
overflow: auto visible;
|
||||
border: 1px solid blue;
|
||||
}
|
||||
.not-culled span {
|
||||
background: orange;
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<div class="target">12345 678</div>
|
||||
<div class="target"><span>12345 678</span></div>
|
||||
<div class="target not-culled"><span>12345 678</span></div>
|
||||
<script>
|
||||
for (let target of document.getElementsByClassName('target')) {
|
||||
test(() => {
|
||||
let width = target.offsetWidth;
|
||||
let scroll_width = target.scrollWidth;
|
||||
assert_less_than_equal(scroll_width, width);
|
||||
});
|
||||
}
|
||||
</script>
|
||||
</body>
|
|
@ -25,7 +25,7 @@ function runTest(config) {
|
|||
};
|
||||
|
||||
waitForEventAndRunStep('encrypted', video, onEncrypted, test);
|
||||
return testmediasource(config).then(function (source) {
|
||||
testmediasource(config).then(function (source) {
|
||||
mediaSource = source;
|
||||
config.video.src = URL.createObjectURL(mediaSource);
|
||||
return source.done;
|
||||
|
|
|
@ -39,7 +39,7 @@ function runTest(config)
|
|||
};
|
||||
|
||||
// Create a MediaKeys object and assign it to video.
|
||||
return navigator.requestMediaKeySystemAccess(keysystem, [configuration]).then(test.step_func(function (access) {
|
||||
navigator.requestMediaKeySystemAccess(keysystem, [configuration]).then(test.step_func(function (access) {
|
||||
assert_equals(access.keySystem, keysystem);
|
||||
return access.createMediaKeys();
|
||||
})).then(test.step_func(function (result) {
|
||||
|
|
|
@ -18,7 +18,7 @@ window.onmessage = function(e) {
|
|||
} else {
|
||||
opener.step_timeout(function() {
|
||||
opener.postMessage(getLog() + e.data, "*");
|
||||
}, 1000);
|
||||
}, 1500);
|
||||
}
|
||||
};
|
||||
window.onload = function() {
|
||||
|
|
|
@ -72,13 +72,16 @@ function run_fp_tests_enabled(sensorName) {
|
|||
);
|
||||
}, `${sensorName}: ${header} allows same-origin iframes.`);
|
||||
|
||||
// Set allow="feature;feature;..." on iframe element to delegate features
|
||||
// under test to cross origin subframe.
|
||||
async_test(t => {
|
||||
assert_implements(sensorName in self, `${sensorName} is not supported.`);
|
||||
test_feature_availability(
|
||||
desc,
|
||||
t,
|
||||
cross_origin_src + sensorName,
|
||||
expect_feature_available_default
|
||||
expect_feature_available_default,
|
||||
feature_policies[sensorName].join(";")
|
||||
);
|
||||
}, `${sensorName}: ${header} allows cross-origin iframes.`);
|
||||
}
|
||||
|
|
|
@ -18,60 +18,51 @@ function anchorClick(n) {
|
|||
hyperlink.click();
|
||||
}
|
||||
|
||||
function pollResultAndCheck(t, id, expected) {
|
||||
return new Promise(resolve => {
|
||||
const stashURL = new URL("resources/window-name-stash.py", location);
|
||||
stashURL.searchParams.set('id', id);
|
||||
async function pollResultAndCheck(t, id, expected) {
|
||||
const stashURL = new URL("resources/window-name-stash.py", location);
|
||||
stashURL.searchParams.set('id', id);
|
||||
|
||||
let checkResult = t.step_func(async () => {
|
||||
let response = await fetch(stashURL);
|
||||
let res = await response.text();
|
||||
let res = "NONE";
|
||||
while (res == "NONE") {
|
||||
await new Promise(resolve => { t.step_timeout(resolve, 100); });
|
||||
|
||||
|
||||
if (res !== "NONE") {
|
||||
if (res !== expected) {
|
||||
t.step(() => assert_unreached('Stash result does not equal expected result.'));
|
||||
}
|
||||
t.done();
|
||||
resolve();
|
||||
} else {
|
||||
t.step_timeout(checkResult, 100);
|
||||
}
|
||||
});
|
||||
|
||||
t.step_timeout(checkResult, 100);
|
||||
});
|
||||
const response = await fetch(stashURL);
|
||||
res = await response.text();
|
||||
}
|
||||
if (res !== expected) {
|
||||
assert_unreached('Stash result does not equal expected result.')
|
||||
}
|
||||
}
|
||||
|
||||
async_test(async t => {
|
||||
promise_test(async t => {
|
||||
const id = token();
|
||||
|
||||
window.open(`resources/window-name.sub.html?report=${id}|close`, id);
|
||||
await pollResultAndCheck(t, id, id);;
|
||||
}, "Window.name is not reset when there is an opener around");
|
||||
|
||||
async_test(async t => {
|
||||
promise_test(async t => {
|
||||
const id = token();
|
||||
|
||||
window.open(`resources/window-name.sub.html?cross|same|report=${id}|close`, id);
|
||||
await pollResultAndCheck(t, id, id);
|
||||
}, "Window.name is not reset when there is an opener around (cross-origin)");
|
||||
|
||||
async_test(async t => {
|
||||
promise_test(async t => {
|
||||
const id = token();
|
||||
|
||||
window.open(`resources/window-name.sub.html?report=${id}|close`, id, "noopener");
|
||||
await pollResultAndCheck(t, id, id);
|
||||
}, "Window.name is not reset at the first navigation away from initial about:blank with noopener");
|
||||
|
||||
async_test(async t => {
|
||||
promise_test(async t => {
|
||||
const id = token();
|
||||
|
||||
window.open(`resources/window-name.sub.html?cross|same|report=${id}|close`, id, "noopener");
|
||||
await pollResultAndCheck(t, id, "");
|
||||
}, "Window.name is reset at the first cross-origin navigation with noopener");
|
||||
|
||||
async_test(async t => {
|
||||
promise_test(async t => {
|
||||
const id = token();
|
||||
|
||||
let win = window.open(`resources/window-name.sub.html?report=${id}|close`, id);
|
||||
|
@ -79,7 +70,7 @@ async_test(async t => {
|
|||
await pollResultAndCheck(t, id, id);
|
||||
}, "Window.name is not reset at the first navigation away from initial about:blank with window.opener set to null");
|
||||
|
||||
async_test(async t => {
|
||||
promise_test(async t => {
|
||||
const id = token();
|
||||
|
||||
let win = window.open(`resources/window-name.sub.html?same|report=${id}|close`, id);
|
||||
|
@ -87,7 +78,7 @@ async_test(async t => {
|
|||
await pollResultAndCheck(t, id, id);
|
||||
}, "Window.name is not reset at the same-origin navigation with window.opener set to null");
|
||||
|
||||
async_test(async t => {
|
||||
promise_test(async t => {
|
||||
const id = token();
|
||||
|
||||
let win = window.open(`resources/window-name.sub.html?cross|same|report=${id}|close`, id);
|
||||
|
@ -95,14 +86,14 @@ async_test(async t => {
|
|||
await pollResultAndCheck(t, id, "");
|
||||
}, "Window.name is reset at the first first cross-origin navigation with window.opener set to null");
|
||||
|
||||
async_test(async t => {
|
||||
promise_test(async t => {
|
||||
const id = token();
|
||||
|
||||
anchorClick(`resources/window-name.sub.html?set=${id}|report=${id}|close`);
|
||||
await pollResultAndCheck(t, id, id);
|
||||
}, "Window.name is set by the window");
|
||||
|
||||
async_test(async t => {
|
||||
promise_test(async t => {
|
||||
const id = token();
|
||||
|
||||
anchorClick(`resources/window-name.sub.html?set=${id}|cross|same|report=${id}|close`);
|
||||
|
|
|
@ -13,12 +13,23 @@ const PIPE =
|
|||
'|header(cross-origin-embedder-policy,require-corp)' +
|
||||
'|header(cross-origin-resource-policy,cross-origin)';
|
||||
|
||||
async function getCrossOriginIsolatedFor(t, url) {
|
||||
const frame = document.createElement('iframe');
|
||||
t.add_cleanup(() => frame.remove());
|
||||
frame.src = url;
|
||||
document.body.append(frame);
|
||||
async function getCrossOriginIsolatedFor(t, origin, value) {
|
||||
const parentFrame = document.createElement('iframe');
|
||||
t.add_cleanup(() => parentFrame.remove());
|
||||
let pipe = PIPE;
|
||||
if (value !== undefined) {
|
||||
pipe += `|header(permissions-policy,cross-origin-isolated=${value})`;
|
||||
}
|
||||
parentFrame.src = `${PATH}${pipe}`;
|
||||
document.body.append(parentFrame);
|
||||
|
||||
await new Promise((resolve) => {
|
||||
parentFrame.addEventListener('load', resolve);
|
||||
});
|
||||
|
||||
const frame = parentFrame.contentDocument.createElement('iframe');
|
||||
frame.src = `${origin}${PATH}${PIPE}`;
|
||||
parentFrame.contentDocument.body.append(frame);
|
||||
frame.addEventListener('error', t.unreached_func('frame.error'));
|
||||
await new Promise((resolve) => {
|
||||
frame.addEventListener('load', resolve);
|
||||
|
@ -35,27 +46,26 @@ async function getCrossOriginIsolatedFor(t, url) {
|
|||
}
|
||||
|
||||
function generateTest(origin, value, expectation) {
|
||||
async function run(t) {
|
||||
assert_equals(
|
||||
await getCrossOriginIsolatedFor(t, origin, value), expectation);
|
||||
}
|
||||
// We use async_test, not promise_test here to run tests in parallel.
|
||||
async_test((t) => {
|
||||
let pipe = PIPE;
|
||||
if (value !== undefined) {
|
||||
pipe += `|header(permissions-policy,cross-origin-isolated=${value})`
|
||||
}
|
||||
const url = `${origin}${PATH}${pipe}`;
|
||||
(async () => {
|
||||
assert_equals(await getCrossOriginIsolatedFor(t, url), expectation);
|
||||
})().then(() => t.done(), (e) => t.step(() => {throw e;}));
|
||||
run(t).then(() => t.done(), (e) => t.step(() => {throw e;}));
|
||||
}, `origin = ${origin}, value = ${value}`);
|
||||
}
|
||||
|
||||
generateTest(ORIGIN, undefined, true);
|
||||
generateTest(ORIGIN, '*', true);
|
||||
generateTest(ORIGIN, "'self'", true);
|
||||
generateTest(ORIGIN, "'none'", false);
|
||||
generateTest(ORIGIN, "self", true);
|
||||
// We need the backslash to escape the close parenthesis in a wpt pipe.
|
||||
generateTest(ORIGIN, "(\\)", false);
|
||||
generateTest(HTTPS_REMOTE_ORIGIN, undefined, false);
|
||||
generateTest(HTTPS_REMOTE_ORIGIN, '*', true);
|
||||
generateTest(HTTPS_REMOTE_ORIGIN, "'self'", false);
|
||||
generateTest(HTTPS_REMOTE_ORIGIN, "'none'", false);
|
||||
generateTest(HTTPS_REMOTE_ORIGIN, "self", false);
|
||||
// We need the backslash to escape the close parenthesis in a wpt pipe.
|
||||
generateTest(HTTPS_REMOTE_ORIGIN, "(\\)", false);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -6,5 +6,8 @@
|
|||
"use strict";
|
||||
|
||||
document.domain = "{{host}}";
|
||||
parent.postMessage({name: "domain", value: document.domain}, "*");
|
||||
parent.postMessage(
|
||||
{name: "crossOriginIsolated", value: self.crossOriginIsolated}, "*");
|
||||
parent.postMessage(new SharedArrayBuffer(10), "*");
|
||||
</script>
|
||||
|
|
|
@ -16,8 +16,27 @@ async_test(t => {
|
|||
const iframe = document.createElement("iframe");
|
||||
t.add_cleanup(() => iframe.remove());
|
||||
iframe.src = "//{{domains[www1]}}:{{location[port]}}/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/iframe-domain-failure.sub.html";
|
||||
window.onmessage = t.unreached_func("Got a message event, expected a messageerror event");
|
||||
window.onmessageerror = t.step_func_done();
|
||||
let domain = null;
|
||||
let childCrossOriginIsolated = null;
|
||||
window.onmessage = t.step_func((e) => {
|
||||
if (e.data.name === "domain") {
|
||||
domain = e.data.value;
|
||||
return;
|
||||
}
|
||||
if (e.data.name === "crossOriginIsolated") {
|
||||
childCrossOriginIsolated = e.data.value;
|
||||
return;
|
||||
}
|
||||
assert_unreached("Got a message event, expected a messageerror event");
|
||||
});
|
||||
window.onmessageerror = t.step_func_done(() => {
|
||||
// crossOriginIsolated is false in the nested frame because the frame is
|
||||
// cross-origin and hence the cross-origin isolated capability is false.
|
||||
assert_equals(childCrossOriginIsolated, false);
|
||||
// But document.domain mutation is no-op because the surrounding agent
|
||||
// cluster's cross-origin isolated is true.
|
||||
assert_equals(domain, "{{domains[www1]}}");
|
||||
});
|
||||
document.body.append(iframe);
|
||||
}, "SharedArrayBuffer and a same-origin-domain (but not same-origin) iframe");
|
||||
</script>
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
<!doctype html>
|
||||
<title>Test reference</title>
|
||||
<img width=100 height=50 src="/images/black-rectangle.png">
|
|
@ -0,0 +1,24 @@
|
|||
<!doctype html>
|
||||
<html class="test-wait">
|
||||
<title>Printing an image with src="revoked-blob"</title>
|
||||
<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez">
|
||||
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1665343">
|
||||
<link rel="match" href="revoked-blob-print-ref.html">
|
||||
<img width=100 height=50>
|
||||
<script>
|
||||
let canvas = document.createElement("canvas");
|
||||
canvas.width = 100;
|
||||
canvas.height = 50;
|
||||
let ctx = canvas.getContext("2d");
|
||||
ctx.fillRect(0, 0, 100, 50);
|
||||
canvas.toBlob(function(blob) {
|
||||
let img = document.querySelector("img");
|
||||
let url = URL.createObjectURL(blob);
|
||||
img.onload = function() {
|
||||
URL.revokeObjectURL(url);
|
||||
document.documentElement.className = "";
|
||||
};
|
||||
img.src = url;
|
||||
});
|
||||
</script>
|
||||
</html>
|
|
@ -1,7 +1,7 @@
|
|||
// GENERATED CONTENT - DO NOT EDIT
|
||||
// Content was automatically extracted by Reffy into webref
|
||||
// (https://github.com/w3c/webref)
|
||||
// Source: Web Cryptography API (http://w3c.github.io/webcrypto/)
|
||||
// Source: Web Cryptography API (https://w3c.github.io/webcrypto/)
|
||||
|
||||
partial interface mixin WindowOrWorkerGlobalScope {
|
||||
[SameObject] readonly attribute Crypto crypto;
|
||||
|
|
|
@ -1,146 +0,0 @@
|
|||
// GENERATED CONTENT - DO NOT EDIT
|
||||
// Content was automatically extracted by Reffy into webref
|
||||
// (https://github.com/w3c/webref)
|
||||
// Source: CSS Layout API Level 1 (https://drafts.css-houdini.org/css-layout-api-1/)
|
||||
|
||||
partial namespace CSS {
|
||||
[SameObject] readonly attribute Worklet layoutWorklet;
|
||||
};
|
||||
|
||||
[Global=(Worklet,LayoutWorklet),Exposed=LayoutWorklet]
|
||||
interface LayoutWorkletGlobalScope : WorkletGlobalScope {
|
||||
void registerLayout(DOMString name, VoidFunction layoutCtor);
|
||||
};
|
||||
|
||||
[Exposed=LayoutWorklet]
|
||||
dictionary LayoutOptions {
|
||||
ChildDisplayType childDisplay = "block";
|
||||
LayoutSizingMode sizing = "block-like";
|
||||
};
|
||||
|
||||
[Exposed=LayoutWorklet]
|
||||
enum ChildDisplayType {
|
||||
"block", // default - "blockifies" the child boxes.
|
||||
"normal",
|
||||
};
|
||||
|
||||
[Exposed=LayoutWorklet]
|
||||
enum LayoutSizingMode {
|
||||
"block-like", // default - Sizing behaves like block containers.
|
||||
"manual", // Sizing is specified by the web developer.
|
||||
};
|
||||
|
||||
[Exposed=LayoutWorklet]
|
||||
interface LayoutChild {
|
||||
readonly attribute StylePropertyMapReadOnly styleMap;
|
||||
|
||||
Promise<IntrinsicSizes> intrinsicSizes();
|
||||
Promise<LayoutFragment> layoutNextFragment(LayoutConstraintsOptions constraints, ChildBreakToken breakToken);
|
||||
};
|
||||
|
||||
[Exposed=LayoutWorklet]
|
||||
interface LayoutFragment {
|
||||
readonly attribute double inlineSize;
|
||||
readonly attribute double blockSize;
|
||||
|
||||
attribute double inlineOffset;
|
||||
attribute double blockOffset;
|
||||
|
||||
readonly attribute any data;
|
||||
|
||||
readonly attribute ChildBreakToken? breakToken;
|
||||
};
|
||||
|
||||
[Exposed=LayoutWorklet]
|
||||
interface IntrinsicSizes {
|
||||
readonly attribute double minContentSize;
|
||||
readonly attribute double maxContentSize;
|
||||
};
|
||||
|
||||
[Exposed=LayoutWorklet]
|
||||
interface LayoutConstraints {
|
||||
readonly attribute double availableInlineSize;
|
||||
readonly attribute double availableBlockSize;
|
||||
|
||||
readonly attribute double? fixedInlineSize;
|
||||
readonly attribute double? fixedBlockSize;
|
||||
|
||||
readonly attribute double percentageInlineSize;
|
||||
readonly attribute double percentageBlockSize;
|
||||
|
||||
readonly attribute double? blockFragmentationOffset;
|
||||
readonly attribute BlockFragmentationType blockFragmentationType;
|
||||
|
||||
readonly attribute any data;
|
||||
};
|
||||
|
||||
enum BlockFragmentationType { "none", "page", "column", "region" };
|
||||
|
||||
dictionary LayoutConstraintsOptions {
|
||||
double availableInlineSize;
|
||||
double availableBlockSize;
|
||||
|
||||
double fixedInlineSize;
|
||||
double fixedBlockSize;
|
||||
|
||||
double percentageInlineSize;
|
||||
double percentageBlockSize;
|
||||
|
||||
double blockFragmentationOffset;
|
||||
BlockFragmentationType blockFragmentationType = "none";
|
||||
|
||||
any data;
|
||||
};
|
||||
|
||||
[Exposed=LayoutWorklet]
|
||||
interface ChildBreakToken {
|
||||
readonly attribute BreakType breakType;
|
||||
readonly attribute LayoutChild child;
|
||||
};
|
||||
|
||||
[Exposed=LayoutWorklet]
|
||||
interface BreakToken {
|
||||
readonly attribute FrozenArray<ChildBreakToken> childBreakTokens;
|
||||
readonly attribute any data;
|
||||
};
|
||||
|
||||
dictionary BreakTokenOptions {
|
||||
sequence<ChildBreakToken> childBreakTokens;
|
||||
any data = null;
|
||||
};
|
||||
|
||||
enum BreakType { "none", "line", "column", "page", "region" };
|
||||
|
||||
[Exposed=LayoutWorklet]
|
||||
interface LayoutEdges {
|
||||
readonly attribute double inlineStart;
|
||||
readonly attribute double inlineEnd;
|
||||
|
||||
readonly attribute double blockStart;
|
||||
readonly attribute double blockEnd;
|
||||
|
||||
// Convenience attributes for the sum in one direction.
|
||||
readonly attribute double inline;
|
||||
readonly attribute double block;
|
||||
};
|
||||
|
||||
// This is the final return value from the author defined layout() method.
|
||||
dictionary FragmentResultOptions {
|
||||
double inlineSize = 0;
|
||||
double blockSize = 0;
|
||||
double autoBlockSize = 0;
|
||||
sequence<LayoutFragment> childFragments = [];
|
||||
any data = null;
|
||||
BreakTokenOptions breakToken = null;
|
||||
};
|
||||
|
||||
[Constructor(optional FragmentResultOptions options)]
|
||||
interface FragmentResult {
|
||||
readonly attribute double inlineSize;
|
||||
readonly attribute double blockSize;
|
||||
};
|
||||
|
||||
dictionary IntrinsicSizesResultOptions {
|
||||
double maxContentSize;
|
||||
double minContentSize;
|
||||
};
|
|
@ -24,7 +24,6 @@ interface PaymentRequest : EventTarget {
|
|||
readonly attribute DOMString? shippingOption;
|
||||
readonly attribute PaymentShippingType? shippingType;
|
||||
|
||||
attribute EventHandler onmerchantvalidation;
|
||||
attribute EventHandler onshippingaddresschange;
|
||||
attribute EventHandler onshippingoptionchange;
|
||||
attribute EventHandler onpaymentmethodchange;
|
||||
|
@ -175,19 +174,6 @@ dictionary PayerErrors {
|
|||
DOMString phone;
|
||||
};
|
||||
|
||||
[SecureContext, Exposed=Window]
|
||||
interface MerchantValidationEvent : Event {
|
||||
constructor(DOMString type, optional MerchantValidationEventInit eventInitDict = {});
|
||||
readonly attribute DOMString methodName;
|
||||
readonly attribute USVString validationURL;
|
||||
undefined complete(Promise<any> merchantSessionPromise);
|
||||
};
|
||||
|
||||
dictionary MerchantValidationEventInit : EventInit {
|
||||
DOMString methodName = "";
|
||||
USVString validationURL = "";
|
||||
};
|
||||
|
||||
[SecureContext, Exposed=Window]
|
||||
interface PaymentMethodChangeEvent : PaymentRequestUpdateEvent {
|
||||
constructor(DOMString type, optional PaymentMethodChangeEventInit eventInitDict = {});
|
||||
|
|
|
@ -12,21 +12,24 @@ enum ScrollDirection {
|
|||
|
||||
enum ScrollTimelineAutoKeyword { "auto" };
|
||||
|
||||
typedef (CSSNumericValue or CSSKeywordish) ContainerBasedOffset;
|
||||
typedef (ContainerBasedOffset or ElementBasedOffset) ScrollTimelineOffset;
|
||||
|
||||
dictionary ScrollTimelineOptions {
|
||||
Element? source = null;
|
||||
ScrollDirection orientation = "block";
|
||||
(DOMString or ElementBasedOffset) start = "auto";
|
||||
(DOMString or ElementBasedOffset) end = "auto";
|
||||
ScrollTimelineOffset start = "auto";
|
||||
ScrollTimelineOffset end = "auto";
|
||||
(double or ScrollTimelineAutoKeyword) timeRange = "auto";
|
||||
};
|
||||
|
||||
[Exposed=Window]
|
||||
interface ScrollTimeline : AnimationTimeline {
|
||||
constructor(optional ScrollTimelineOptions options = {});
|
||||
readonly attribute Element source;
|
||||
readonly attribute Element? source;
|
||||
readonly attribute ScrollDirection orientation;
|
||||
readonly attribute DOMString start;
|
||||
readonly attribute DOMString end;
|
||||
readonly attribute ScrollTimelineOffset start;
|
||||
readonly attribute ScrollTimelineOffset end;
|
||||
readonly attribute (double or ScrollTimelineAutoKeyword) timeRange;
|
||||
};
|
||||
|
||||
|
@ -37,3 +40,13 @@ dictionary ElementBasedOffset {
|
|||
Edge edge = "start";
|
||||
double threshold = 0.0;
|
||||
};
|
||||
|
||||
[Exposed=Window]
|
||||
interface CSSScrollTimelineRule : CSSRule {
|
||||
readonly attribute CSSOMString name;
|
||||
readonly attribute CSSOMString source;
|
||||
readonly attribute CSSOMString orientation;
|
||||
readonly attribute CSSOMString start;
|
||||
readonly attribute CSSOMString end;
|
||||
readonly attribute CSSOMString timeRange;
|
||||
};
|
||||
|
|
|
@ -43,30 +43,26 @@
|
|||
}, `mathvariant on the ${tag} element is mapped to CSS text-transform`)
|
||||
|
||||
test(function() {
|
||||
var epsilon = .1
|
||||
var fontSizeAtScriptLevelZero = fontSize(window.getComputedStyle(container));
|
||||
var inheritedSize = fontSize(window.getComputedStyle(element.parentNode));
|
||||
|
||||
// none and mprescripts appear as scripts
|
||||
assert_approx_equals(fontSize(style), tag === "none" || tag === "mprescripts" ? inheritedSize * .71 : inheritedSize, epsilon, "no attribute");
|
||||
assert_equals(style.getPropertyValue("math-depth"), tag === "none" || tag === "mprescripts" ? 1 : 0, "no attribute");
|
||||
|
||||
var absoluteScriptlevel = 2;
|
||||
element.setAttribute("scriptlevel", absoluteScriptlevel);
|
||||
assert_approx_equals(fontSize(style), fontSizeAtScriptLevelZero * Math.pow(.71, absoluteScriptlevel), epsilon, "attribute specified (<U>)");
|
||||
assert_equals(style.getPropertyValue("math-depth"), absoluteScriptlevel, "attribute specified (<U>)");
|
||||
|
||||
var positiveScriptlevelDelta = 1;
|
||||
element.setAttribute("scriptlevel", `+${positiveScriptlevelDelta}`);
|
||||
assert_approx_equals(fontSize(style), inheritedSize * Math.pow(.71, positiveScriptlevelDelta), epsilon, "attribute specified (+<U>)");
|
||||
assert_equals(style.getPropertyValue("math-depth"), positiveScriptlevelDelta, epsilon, "attribute specified (+<U>)");
|
||||
|
||||
var negativeScriptlevelDelta = -3;
|
||||
element.setAttribute("scriptlevel", negativeScriptlevelDelta);
|
||||
assert_approx_equals(fontSize(style), inheritedSize * Math.pow(.71, negativeScriptlevelDelta), epsilon, "attribute specified (-<U>)");
|
||||
assert_approx_equals(style.getPropertyValue("math-depth"), negativeScriptlevelDelta, "attribute specified (-<U>)");
|
||||
|
||||
element.setAttribute("scriptlevel", absoluteScriptlevel);
|
||||
element.setAttribute("mathsize", "42px");
|
||||
assert_approx_equals(fontSize(style), 42, epsilon, "mathsize wins over scriptlevel");
|
||||
|
||||
}, `scriptlevel on the ${tag} element is mapped to font-size: scriptlevel(...)`);
|
||||
}, `scriptlevel on the ${tag} element is mapped to math-depth(...)`);
|
||||
|
||||
test(function() {
|
||||
assert_equals(style.getPropertyValue("math-style"), "compact", "no attribute");
|
||||
|
|
|
@ -55,7 +55,7 @@
|
|||
</p>
|
||||
<p>scriptlevel:
|
||||
<math>
|
||||
<mtext style="font-size: scriptlevel(0);">X</mtext>
|
||||
<mtext style="math-depth: 0;">X</mtext>
|
||||
</math>
|
||||
</p>
|
||||
</body>
|
||||
|
|
|
@ -65,7 +65,7 @@
|
|||
</p>
|
||||
<p>scriptlevel:
|
||||
<math>
|
||||
<mtext scriptlevel="1" style="font-size: scriptlevel(0);">X</mtext>
|
||||
<mtext scriptlevel="1" style="math-depth: 0;">X</mtext>
|
||||
</math>
|
||||
</p>
|
||||
</body>
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<title>Test attachment to dedicated worker MediaSource</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<body>
|
||||
<script>
|
||||
|
||||
async_test((t) => {
|
||||
const video = document.createElement('video');
|
||||
document.body.appendChild(video);
|
||||
|
||||
// TODO(https://crbug.com/878133): Enable attachment success by
|
||||
// completing the CrossThreadAttachment implementation. Currently,
|
||||
// a custom Chromium MediaError.message is confirmed.
|
||||
video.onerror = t.step_func(() => {
|
||||
assert_not_equals(video.error, null);
|
||||
assert_equals(video.error.message, "MEDIA_ELEMENT_ERROR: Unable to attach MediaSource");
|
||||
t.done();
|
||||
});
|
||||
|
||||
let worker = new Worker("mediasource-worker-util.js");
|
||||
worker.onerror = t.unreached_func("worker error");
|
||||
worker.onmessage = t.step_func((e) => {
|
||||
if (e.data.substr(0,6) == "Error:") {
|
||||
assert_unreached("Worker error: " + e.data);
|
||||
} else {
|
||||
const url = e.data;
|
||||
assert_true(url.match(/^blob:.+/) != null);
|
||||
video.src = url;
|
||||
}
|
||||
});
|
||||
}, "Test worker MediaSource attachment (currently should fail to attach)");
|
||||
|
||||
// TODO(https://crbug.com/878133): Test multiple attachments to same worker
|
||||
// MediaSource racing each other: precisely one should win the race.
|
||||
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,27 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<title>Test MediaSource object and objectUrl creation and revocation, with MediaSource in dedicated worker</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script>
|
||||
|
||||
async_test((t) => {
|
||||
let worker = new Worker("mediasource-worker-util.js");
|
||||
worker.onmessage = t.step_func((e) => {
|
||||
if (e.data.substr(0,6) == "Error:") {
|
||||
assert_unreached("Worker error: " + e.data);
|
||||
} else {
|
||||
const url = e.data;
|
||||
assert_true(url.match(/^blob:.+/) != null);
|
||||
URL.revokeObjectURL(url);
|
||||
t.done();
|
||||
}
|
||||
});
|
||||
}, "Test main context revocation of worker MediaSource object URL");
|
||||
|
||||
// Run some tests directly in another dedicated worker and get their results
|
||||
// merged into those from this page.
|
||||
fetch_tests_from_worker(new Worker("mediasource-worker-objecturl.js"));
|
||||
|
||||
</script>
|
||||
</html>
|
|
@ -0,0 +1,23 @@
|
|||
importScripts("/resources/testharness.js");
|
||||
|
||||
test((t) => {
|
||||
const ms = new MediaSource();
|
||||
assert_equals(ms.readyState, "closed");
|
||||
}, "MediaSource construction succeeds with initial closed readyState in dedicated worker");
|
||||
|
||||
test((t) => {
|
||||
const ms = new MediaSource();
|
||||
const url = URL.createObjectURL(ms);
|
||||
assert_true(url != null);
|
||||
assert_true(url.match(/^blob:.+/) != null);
|
||||
}, "URL.createObjectURL(mediaSource) in dedicated worker returns a Blob URI");
|
||||
|
||||
test((t) => {
|
||||
const ms = new MediaSource();
|
||||
const url1 = URL.createObjectURL(ms);
|
||||
const url2 = URL.createObjectURL(ms);
|
||||
URL.revokeObjectURL(url1);
|
||||
URL.revokeObjectURL(url2);
|
||||
}, "URL.revokeObjectURL(mediaSource) in dedicated worker with two url for same MediaSource");
|
||||
|
||||
done();
|
|
@ -0,0 +1,78 @@
|
|||
if (!this.MediaSource)
|
||||
postMessage("Error: MediaSource API missing from Worker");
|
||||
|
||||
let mediaSource = new MediaSource();
|
||||
let mediaSourceObjectUrl = URL.createObjectURL(mediaSource);
|
||||
postMessage(mediaSourceObjectUrl);
|
||||
|
||||
let sourceBuffer;
|
||||
let foundSupportedMedia = false;
|
||||
let mediaMetadata;
|
||||
let mediaLoad;
|
||||
|
||||
// Find supported test media, if any.
|
||||
let MEDIA_LIST = [
|
||||
{
|
||||
url: 'mp4/test.mp4',
|
||||
type: 'video/mp4; codecs="mp4a.40.2,avc1.4d400d"',
|
||||
},
|
||||
{
|
||||
url: 'webm/test.webm',
|
||||
type: 'video/webm; codecs="vp8, vorbis"',
|
||||
},
|
||||
];
|
||||
for (let i = 0; i < MEDIA_LIST.length; ++i) {
|
||||
mediaMetadata = MEDIA_LIST[i];
|
||||
if (this.MediaSource && MediaSource.isTypeSupported(mediaMetadata.type)) {
|
||||
foundSupportedMedia = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
function loadBinaryAsync(url) {
|
||||
return new Promise((resolve, reject) => {
|
||||
let request = new XMLHttpRequest();
|
||||
request.open("GET", url, true);
|
||||
request.responseType = 'arraybuffer';
|
||||
request.onerror = (event) => { reject(event); };
|
||||
request.onload = () => {
|
||||
if (request.status != 200) {
|
||||
reject("Unexpected loadData_ status code : " + request.status);
|
||||
}
|
||||
let response = new Uint8Array(request.response);
|
||||
resolve(response);
|
||||
};
|
||||
request.send();
|
||||
});
|
||||
}
|
||||
|
||||
if (foundSupportedMedia) {
|
||||
mediaLoad = loadBinaryAsync(mediaMetadata.url);
|
||||
} else {
|
||||
postMessage("Error: No supported test media");
|
||||
}
|
||||
|
||||
onmessage = function(evt) {
|
||||
postMessage("Error: No message expected by Worker");
|
||||
};
|
||||
|
||||
// TODO(https://crbug.com/878133): Enable this path by completing the
|
||||
// CrossThreadMediaSourceAttachment implementation such that attachment can
|
||||
// actually succeed and 'sourceopen' be dispatched.
|
||||
mediaSource.addEventListener("sourceopen", () => {
|
||||
URL.revokeObjectURL(mediaSourceObjectUrl);
|
||||
sourceBuffer = mediaSource.addSourceBuffer(mediaMetadata.type);
|
||||
sourceBuffer.onerror = (err) => {
|
||||
postMessage("Error: " + err);
|
||||
};
|
||||
sourceBuffer.onupdateend = () => {
|
||||
// Shorten the buffered media and test playback duration to avoid timeouts.
|
||||
sourceBuffer.remove(0.5, Infinity);
|
||||
sourceBuffer.onupdateend = () => {
|
||||
sourceBuffer.duration = 0.5;
|
||||
mediaSource.endOfStream();
|
||||
};
|
||||
};
|
||||
mediaLoad.then( (mediaData) => { sourceBuffer.appendBuffer(mediaData); },
|
||||
(err) => { postMessage("Error: " + err) } );
|
||||
}, { once : true });
|
|
@ -0,0 +1,3 @@
|
|||
spec: https://w3c.github.io/merchant-validation/
|
||||
suggested_reviewers:
|
||||
- marcoscaceres
|
|
@ -0,0 +1,38 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>Setting document.domain does not change same-originness</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
|
||||
<!--
|
||||
Other tests check that using document.domain doesn't allow cross-origin
|
||||
access. This test ensures a different, more subtle property: that origin
|
||||
isolation makes document.domain into a no-op in other ways.
|
||||
-->
|
||||
|
||||
<iframe src="resources/frame.html"></iframe>
|
||||
|
||||
<script type="module">
|
||||
setup({ explicit_done: true });
|
||||
|
||||
window.onload = () => {
|
||||
test(() => {
|
||||
// Normally, setting document.domain to itself would change the domain
|
||||
// component of the origin. Since the iframe does *not* set document.domain,
|
||||
// the two would then be considered cross-origin.
|
||||
document.domain = document.domain;
|
||||
|
||||
// However, because we're using origin isolation, this shouldn't have any
|
||||
// impact. The test fails if this throws, and passes if it succeeds.
|
||||
frames[0].document;
|
||||
}, "Setting document.domain must not change same-originness");
|
||||
|
||||
test(() => {
|
||||
assert_throws_dom("SecurityError", () => {
|
||||
document.domain = "{{hosts[][nonexistent]}}";
|
||||
});
|
||||
}, "The registrable domain suffix check must happen before the bail-out");
|
||||
|
||||
done();
|
||||
};
|
||||
</script>
|
|
@ -0,0 +1 @@
|
|||
Origin-Isolation: ?1
|
|
@ -0,0 +1,3 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>A frame included by a test page</title>
|
|
@ -0,0 +1 @@
|
|||
Origin-Isolation: ?1
|
|
@ -11,6 +11,6 @@
|
|||
"use strict";
|
||||
runTestsInSubframe({
|
||||
hostname: "op5",
|
||||
testJS: "resources/no-camera-no-geolocation.mjs"
|
||||
testJS: "resources/yes-camera-yes-geolocation.mjs"
|
||||
});
|
||||
</script>
|
||||
|
|
|
@ -11,6 +11,6 @@
|
|||
"use strict";
|
||||
runTestsInSubframe({
|
||||
hostname: "op6",
|
||||
testJS: "resources/no-camera-no-geolocation.mjs"
|
||||
testJS: "resources/yes-camera-yes-geolocation.mjs"
|
||||
});
|
||||
</script>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
export function runFPTest({ camera, geolocation }) {
|
||||
test(() => {
|
||||
assert_equals(document.featurePolicy.allowsFeature('camera', 'https://example.com/'), camera, 'camera');
|
||||
assert_equals(document.featurePolicy.allowsFeature('geolocation', 'https://example.com/'), geolocation, 'geolocation');
|
||||
assert_equals(document.featurePolicy.allowsFeature('camera'), camera, 'camera');
|
||||
assert_equals(document.featurePolicy.allowsFeature('geolocation'), geolocation, 'geolocation');
|
||||
});
|
||||
}
|
||||
|
|
|
@ -11,6 +11,6 @@
|
|||
"use strict";
|
||||
runTestsInSubframe({
|
||||
hostname: "op10",
|
||||
testJS: "resources/yes-camera-yes-geolocation.mjs"
|
||||
testJS: "resources/no-camera-yes-geolocation.mjs"
|
||||
});
|
||||
</script>
|
||||
|
|
|
@ -8,6 +8,6 @@
|
|||
]
|
||||
},
|
||||
"features": {
|
||||
"policy": "camera 'self' https://example.com/; geolocation 'self' https://example.com/"
|
||||
"policy": "camera 'none'; geolocation 'self' https://example.com/"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,9 +13,9 @@
|
|||
]
|
||||
},
|
||||
"features": {
|
||||
"policy": "camera 'self' https://example.com/"
|
||||
"policy": "geolocation 'none'"
|
||||
},
|
||||
"features": {
|
||||
"policy": "geolocation 'self' https://example.com/"
|
||||
"policy": "camera 'none'"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,5 +5,5 @@
|
|||
"content_security": [
|
||||
"script-src 'self' 'unsafe-inline'"
|
||||
],
|
||||
"features": "camera 'self' https://example.com/"
|
||||
"features": "camera 'none'"
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
},
|
||||
"features": {
|
||||
"policy": [
|
||||
"camera 'self' https://example.com/"
|
||||
"camera 'none'"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -80,15 +80,15 @@ promise_test(async t => {
|
|||
}, `getDisplayMedia(${j(constraints)}) must succeed with video maybe audio`));
|
||||
|
||||
[
|
||||
{video: {width: {max: 360}}},
|
||||
{video: {height: {max: 240}}},
|
||||
{video: {width: {max: 360}, height: {max: 240}}},
|
||||
{video: {frameRate: {max: 4}}},
|
||||
{video: {frameRate: {max: 4}, width: {max: 360}}},
|
||||
{video: {frameRate: {max: 4}, height: {max: 240}}},
|
||||
{video: {frameRate: {max: 4}, width: {max: 360}, height: {max: 240}}},
|
||||
{width: {max: 360}},
|
||||
{height: {max: 240}},
|
||||
{width: {max: 360}, height: {max: 240}},
|
||||
{frameRate: {max: 4}},
|
||||
{frameRate: {max: 4}, width: {max: 360}},
|
||||
{frameRate: {max: 4}, height: {max: 240}},
|
||||
{frameRate: {max: 4}, width: {max: 360}, height: {max: 240}},
|
||||
].forEach(constraints => promise_test(async t => {
|
||||
const stream = await getDisplayMedia(constraints);
|
||||
const stream = await getDisplayMedia({video: constraints});
|
||||
t.add_cleanup(() => stopTracks(stream));
|
||||
const {width, height, frameRate} = stream.getTracks()[0].getSettings();
|
||||
assert_greater_than_equal(width, 1);
|
||||
|
@ -103,7 +103,46 @@ promise_test(async t => {
|
|||
if (constraints.frameRate) {
|
||||
assert_less_than_equal(frameRate, constraints.frameRate.max);
|
||||
}
|
||||
}, `getDisplayMedia(${j(constraints)}) must be constrained`));
|
||||
}, `getDisplayMedia({video: ${j(constraints)}}) must be constrained`));
|
||||
|
||||
const someSizes = [
|
||||
{width: 160},
|
||||
{height: 120},
|
||||
{width: 80},
|
||||
{height: 60},
|
||||
{width: 158},
|
||||
{height: 118},
|
||||
];
|
||||
|
||||
someSizes.forEach(constraints => promise_test(async t => {
|
||||
const stream = await getDisplayMedia({video: constraints});
|
||||
t.add_cleanup(() => stopTracks(stream));
|
||||
const {width, height, frameRate} = stream.getTracks()[0].getSettings();
|
||||
if (constraints.width) {
|
||||
assert_equals(width, constraints.width);
|
||||
} else {
|
||||
assert_equals(height, constraints.height);
|
||||
}
|
||||
assert_greater_than_equal(frameRate, 1);
|
||||
}, `getDisplayMedia({video: ${j(constraints)}}) must be downscaled precisely`));
|
||||
|
||||
promise_test(async t => {
|
||||
const video = {height: 240};
|
||||
const stream = await getDisplayMedia({video});
|
||||
t.add_cleanup(() => stopTracks(stream));
|
||||
const [track] = stream.getVideoTracks();
|
||||
const {height} = track.getSettings();
|
||||
assert_equals(height, video.height);
|
||||
for (const constraints of someSizes) {
|
||||
await track.applyConstraints(constraints);
|
||||
const {width, height} = track.getSettings();
|
||||
if (constraints.width) {
|
||||
assert_equals(width, constraints.width);
|
||||
} else {
|
||||
assert_equals(height, constraints.height);
|
||||
}
|
||||
}
|
||||
}, `applyConstraints(width or height) must downscale precisely`);
|
||||
|
||||
[
|
||||
{video: {width: {max: 0}}},
|
||||
|
|
|
@ -28,12 +28,15 @@
|
|||
);
|
||||
}, 'Feature-Policy header {"screen-wake-lock" : ["*"]} allows same-origin iframes.');
|
||||
|
||||
// Set allow="screen-wake-lock" on iframe element to delegate
|
||||
// 'screen-wake-lock' to cross origin subframe.
|
||||
async_test(t => {
|
||||
test_feature_availability(
|
||||
'navigator.wakeLock.request("screen")',
|
||||
t,
|
||||
cross_origin_src,
|
||||
expect_feature_available_default
|
||||
expect_feature_available_default,
|
||||
'screen-wake-lock'
|
||||
);
|
||||
}, 'Feature-Policy header {"screen-wake-lock" : ["*"]} allows cross-origin iframes.');
|
||||
|
||||
|
|
|
@ -39,25 +39,26 @@ promise_test(async t => {
|
|||
await promise_rejects_dom(t, 'NotAllowedError', self.getScreens());
|
||||
}, 'getScreens() rejects the promise with permission denied');
|
||||
|
||||
async_test(async t => {
|
||||
promise_test(async t => {
|
||||
await test_driver.set_permission({name: 'window-placement'}, 'granted');
|
||||
let iframe = document.body.appendChild(document.createElement('iframe'));
|
||||
assert_greater_than((await iframe.contentWindow.getScreens()).length, 0);
|
||||
|
||||
iframe.contentWindow.onunload = t.step_func(async () => {
|
||||
// TODO(crbug.com/1106132): This should reject or resolve; not hang.
|
||||
// assert_greater_than((await iframe.contentWindow.getScreens()).length, 0);
|
||||
|
||||
let iframeGetScreens = iframe.contentWindow.getScreens;
|
||||
let constructor = iframe.contentWindow.DOMException;
|
||||
assert_not_equals(iframeGetScreens, undefined);
|
||||
assert_not_equals(constructor, undefined);
|
||||
|
||||
await t.step_wait(() => !iframe.contentWindow, "execution context invalid");
|
||||
assert_equals(iframe.contentWindow, null);
|
||||
await promise_rejects_dom(t, 'InvalidStateError', constructor, iframeGetScreens());
|
||||
t.done();
|
||||
let iframeGetScreens;
|
||||
let constructor;
|
||||
await new Promise(resolve => {
|
||||
iframe.contentWindow.onunload = () => {
|
||||
// Grab these before the contentWindow is removed.
|
||||
iframeGetScreens = iframe.contentWindow.getScreens;
|
||||
constructor = iframe.contentWindow.DOMException;
|
||||
resolve();
|
||||
};
|
||||
document.body.removeChild(iframe);
|
||||
});
|
||||
assert_not_equals(iframeGetScreens, undefined);
|
||||
assert_not_equals(constructor, undefined);
|
||||
|
||||
document.body.removeChild(iframe);
|
||||
await t.step_wait(() => !iframe.contentWindow, "execution context invalid");
|
||||
assert_equals(iframe.contentWindow, null);
|
||||
await promise_rejects_dom(t, 'InvalidStateError', constructor, iframeGetScreens());
|
||||
}, "getScreens() resolves for attached iframe; rejects for detached iframe");
|
||||
|
|
|
@ -17,24 +17,29 @@ promise_test(async t => {
|
|||
assert_equals(typeof await self.isMultiScreen(), 'boolean');
|
||||
}, 'isMultiScreen() returns a boolean value with permission denied');
|
||||
|
||||
async_test(async t => {
|
||||
promise_test(async t => {
|
||||
let iframe = document.body.appendChild(document.createElement('iframe'));
|
||||
assert_equals(typeof await iframe.contentWindow.isMultiScreen(), 'boolean');
|
||||
|
||||
iframe.contentWindow.onunload = t.step_func(async () => {
|
||||
// TODO(crbug.com/1106132): This should reject or resolve; not hang.
|
||||
// assert_equals(typeof await iframe.contentWindow.isMultiScreen(), 'boolean');
|
||||
|
||||
let iframeIsMultiScreen = iframe.contentWindow.isMultiScreen;
|
||||
let constructor = iframe.contentWindow.DOMException;
|
||||
assert_not_equals(iframeIsMultiScreen, undefined);
|
||||
assert_not_equals(constructor, undefined);
|
||||
|
||||
await t.step_wait(() => !iframe.contentWindow, "execution context invalid");
|
||||
assert_equals(iframe.contentWindow, null);
|
||||
await promise_rejects_dom(t, 'InvalidStateError', constructor, iframeIsMultiScreen());
|
||||
t.done();
|
||||
let iframeIsMultiScreen;
|
||||
let constructor;
|
||||
await new Promise(resolve => {
|
||||
iframe.contentWindow.onunload = () => {
|
||||
// Grab these before the contentWindow is removed.
|
||||
iframeIsMultiScreen = iframe.contentWindow.isMultiScreen;
|
||||
constructor = iframe.contentWindow.DOMException;
|
||||
resolve();
|
||||
};
|
||||
document.body.removeChild(iframe);
|
||||
});
|
||||
|
||||
document.body.removeChild(iframe);
|
||||
|
||||
// TODO(crbug.com/1106132): This should reject or resolve; not hang.
|
||||
// assert_equals(typeof await iframe.contentWindow.isMultiScreen(), 'boolean');
|
||||
assert_not_equals(iframeIsMultiScreen, undefined);
|
||||
assert_not_equals(constructor, undefined);
|
||||
|
||||
await t.step_wait(() => !iframe.contentWindow, "execution context invalid");
|
||||
assert_equals(iframe.contentWindow, null);
|
||||
await promise_rejects_dom(t, 'InvalidStateError', constructor, iframeIsMultiScreen());
|
||||
}, "isMultiScreen() resolves for attached iframe; rejects for detached iframe");
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
<!DOCTYPE html>
|
||||
<title>Service Worker: Registration (module script)</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="resources/test-helpers.sub.js"></script>
|
||||
<script src="resources/registration-tests-script.js"></script>
|
||||
<script>
|
||||
registration_tests_script(
|
||||
(script, options) => navigator.serviceWorker.register(
|
||||
script,
|
||||
Object.assign({type: 'module'}, options)),
|
||||
'module');
|
||||
</script>
|
|
@ -5,5 +5,8 @@
|
|||
<script src="resources/test-helpers.sub.js"></script>
|
||||
<script src="resources/registration-tests-script.js"></script>
|
||||
<script>
|
||||
registration_tests_script((script, options) => navigator.serviceWorker.register(script, options));
|
||||
registration_tests_script(
|
||||
(script, options) => navigator.serviceWorker.register(script, options),
|
||||
'classic'
|
||||
);
|
||||
</script>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// Registration tests that mostly exercise the service worker script contents or
|
||||
// response.
|
||||
function registration_tests_script(register_method) {
|
||||
function registration_tests_script(register_method, type) {
|
||||
promise_test(function(t) {
|
||||
var script = 'resources/invalid-chunked-encoding.py';
|
||||
var scope = 'resources/scope/invalid-chunked-encoding/';
|
||||
|
@ -46,14 +46,16 @@ function registration_tests_script(register_method) {
|
|||
'Registration of script including uncaught exception should fail.');
|
||||
}, 'Registering script including uncaught exception');
|
||||
|
||||
promise_test(function(t) {
|
||||
var script = 'resources/malformed-worker.py?import-malformed-script';
|
||||
var scope = 'resources/scope/import-malformed-script';
|
||||
return promise_rejects_js(t,
|
||||
TypeError,
|
||||
register_method(script, {scope: scope}),
|
||||
'Registration of script importing malformed script should fail.');
|
||||
}, 'Registering script importing malformed script');
|
||||
if (type === 'classic') {
|
||||
promise_test(function(t) {
|
||||
var script = 'resources/malformed-worker.py?import-malformed-script';
|
||||
var scope = 'resources/scope/import-malformed-script';
|
||||
return promise_rejects_js(t,
|
||||
TypeError,
|
||||
register_method(script, {scope: scope}),
|
||||
'Registration of script importing malformed script should fail.');
|
||||
}, 'Registering script importing malformed script');
|
||||
}
|
||||
|
||||
promise_test(function(t) {
|
||||
var script = 'resources/no-such-worker.js';
|
||||
|
@ -64,14 +66,16 @@ function registration_tests_script(register_method) {
|
|||
'Registration of non-existent script should fail.');
|
||||
}, 'Registering non-existent script');
|
||||
|
||||
promise_test(function(t) {
|
||||
var script = 'resources/malformed-worker.py?import-no-such-script';
|
||||
var scope = 'resources/scope/import-no-such-script';
|
||||
return promise_rejects_js(t,
|
||||
TypeError,
|
||||
register_method(script, {scope: scope}),
|
||||
'Registration of script importing non-existent script should fail.');
|
||||
}, 'Registering script importing non-existent script');
|
||||
if (type === 'classic') {
|
||||
promise_test(function(t) {
|
||||
var script = 'resources/malformed-worker.py?import-no-such-script';
|
||||
var scope = 'resources/scope/import-no-such-script';
|
||||
return promise_rejects_js(t,
|
||||
TypeError,
|
||||
register_method(script, {scope: scope}),
|
||||
'Registration of script importing non-existent script should fail.');
|
||||
}, 'Registering script importing non-existent script');
|
||||
}
|
||||
|
||||
promise_test(function(t) {
|
||||
var script = 'resources/malformed-worker.py?caught-exception';
|
||||
|
|
|
@ -9,15 +9,25 @@
|
|||
<g stroke="red" stroke-width="100">
|
||||
<g transform="translate(50, 50)">
|
||||
<rect/>
|
||||
<rect width="10"/>
|
||||
<rect height="10"/>
|
||||
<rect width="10%"/>
|
||||
<rect height="10%"/>
|
||||
<rect width="0" height="10"/>
|
||||
<rect width="-10" height="10"/>
|
||||
<rect height="0" width="10"/>
|
||||
<rect height="-10" width="10"/>
|
||||
<rect style="width: 0"/>
|
||||
<rect style="width: 10px"/>
|
||||
<rect style="width: 10%"/>
|
||||
<rect style="width: calc(10%+10px)"/>
|
||||
<rect style="width: 0" height="10"/>
|
||||
<rect style="width: -10px"/>
|
||||
<rect style="width: -10px" height="10"/>
|
||||
<rect style="height: 0"/>
|
||||
<rect style="height: 10px"/>
|
||||
<rect style="height: 10%"/>
|
||||
<rect style="height: calc(10%+10px)"/>
|
||||
<rect style="height: 0" width="10"/>
|
||||
<rect style="height: -10px"/>
|
||||
<rect style="height: -10px" width="10"/>
|
||||
|
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 2 KiB |
|
@ -0,0 +1,10 @@
|
|||
<!doctype html>
|
||||
<title>Filtered <marker> with <clipPath> ancestor on <polygon></title>
|
||||
<link rel="match" href="../../struct/reftests/reference/green-100x100.html">
|
||||
<svg>
|
||||
<clipPath>
|
||||
<marker id="m" filter="url(#f)"/>
|
||||
<filter id="f"/>
|
||||
</clipPath>
|
||||
<polygon points="0,0 100,0 100,100 0,100" fill="green" marker-start="url(#m)"/>
|
||||
</svg>
|
|
@ -40,6 +40,12 @@
|
|||
return promise_rejects_js(t, TypeError, promise);
|
||||
}, "share() rejects chrome: URLs");
|
||||
|
||||
promise_test(async t => {
|
||||
await test_driver.bless();
|
||||
const promise = navigator.share({ url: "javascript:window.alert('error')" });
|
||||
return promise_rejects_js(t, TypeError, promise);
|
||||
}, "share() rejects javascript: URLs");
|
||||
|
||||
promise_test(async t => {
|
||||
await test_driver.bless();
|
||||
const file = new File([], "text/plain");
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue