Auto merge of #26156 - servo-wpt-sync:wpt_update_09-04-2020, r=servo-wpt-sync

Sync WPT with upstream (09-04-2020)

Automated downstream sync of changes from upstream as of 09-04-2020.
[no-wpt-sync]
r? @servo-wpt-sync
This commit is contained in:
bors-servo 2020-04-09 09:55:07 -04:00 committed by GitHub
commit 5db25836a4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
108 changed files with 2614 additions and 114 deletions

View file

@ -1,4 +0,0 @@
[hit-test-floats-002.html]
[Hit test float]
expected: FAIL

View file

@ -1,4 +1,4 @@
[hit-test-floats-004.html]
[hit-test-floats-003.html]
[Miss float below something else]
expected: FAIL

View file

@ -0,0 +1,4 @@
[hit-test-floats-005.html]
[Miss clipped float]
expected: FAIL

View file

@ -0,0 +1,4 @@
[abspos-descendent-001.html]
[.flexbox 1]
expected: FAIL

View file

@ -0,0 +1,2 @@
[flex-minimum-height-flex-items-022.html]
expected: FAIL

View file

@ -0,0 +1,4 @@
[orthogonal-writing-modes-and-intrinsic-sizing.html]
[.flexbox 2]
expected: FAIL

View file

@ -0,0 +1,4 @@
[percentage-size.html]
[.flexbox 8]
expected: FAIL

View file

@ -0,0 +1,4 @@
[position-relative-percentage-top-001.html]
[.border 1]
expected: FAIL

View file

@ -17,3 +17,6 @@
[test the top of layer]
expected: FAIL
[test some point of the element: top left corner]
expected: FAIL

View file

@ -0,0 +1,2 @@
[effect-reference-displacement-negative-scale-001.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[effect-reference-merge-no-inputs.tentative.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[effect-reference-obb-dimensions.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[effect-reference-on-span.html]
expected: FAIL

View file

@ -318,15 +318,18 @@
[<iframe>: combined response Content-Type: text/html;" text/plain]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;" text/plain]
expected: FAIL
[<iframe>: separate response Content-Type: text/html */*]
expected: FAIL
[<iframe>: separate response Content-Type: text/plain */*]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;" \\" text/plain]
expected: FAIL
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
expected: FAIL

View file

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

View file

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

View file

@ -1,5 +1,5 @@
[iframe_sandbox_popups_escaping-3.html]
expected: TIMEOUT
expected: CRASH
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
expected: TIMEOUT

View file

@ -1,4 +1,5 @@
[iframe_sandbox_popups_nonescaping-3.html]
expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox]
expected: FAIL
expected: NOTRUN

View file

@ -0,0 +1,7 @@
[natural-size-orientation.html]
[naturalWidth and naturalHeight return re-oriented values for an image with orientation metadata even with image-orientation:none]
expected: FAIL
[naturalWidth and naturalHeight return re-oriented values for an image with orientation metadata]
expected: FAIL

View file

@ -0,0 +1,70 @@
[clicking-interactive-content.html]
[interactive content <details></details> as second child under <label>]
expected: FAIL
[interactive content <input> as first child of <label>]
expected: FAIL
[interactive content <select></select> as second child under <label>]
expected: FAIL
[interactive content <iframe></iframe> as second child under <label>]
expected: FAIL
[interactive content <select></select> as first child of <label>]
expected: FAIL
[interactive content <video tabindex=""></video> as second child under <label>]
expected: FAIL
[interactive content <a tabindex=""></a> as second child under <label>]
expected: FAIL
[interactive content <object tabindex=""></object> as second child under <label>]
expected: FAIL
[interactive content <input> deeply nested under <label>]
expected: FAIL
[interactive content <embed> as second child under <label>]
expected: FAIL
[interactive content <object usemap=""></object> as second child under <label>]
expected: FAIL
[interactive content <select></select> deeply nested under <label>]
expected: FAIL
[interactive content <textarea></textarea> as first child of <label>]
expected: FAIL
[interactive content <img usemap=""> as second child under <label>]
expected: FAIL
[interactive content <audio controls=""></audio> as second child under <label>]
expected: FAIL
[interactive content <input type="hidden" tabindex=""> as second child under <label>]
expected: FAIL
[interactive content <video controls=""></video> as second child under <label>]
expected: FAIL
[interactive content <audio tabindex=""></audio> as second child under <label>]
expected: FAIL
[interactive content <div tabindex=""></div> as second child under <label>]
expected: FAIL
[interactive content <input> as second child under <label>]
expected: FAIL
[interactive content <textarea></textarea> deeply nested under <label>]
expected: FAIL
[interactive content <img tabindex=""> as second child under <label>]
expected: FAIL
[interactive content <textarea></textarea> as second child under <label>]
expected: FAIL

View file

@ -59,3 +59,6 @@
[X Rendered audio for channel 5 does not equal [0,0.0626220703125,0.125030517578125,0.18695068359375,0.24810791015625,0.308319091796875,0.3673095703125,0.42486572265625,0.480743408203125,0.53472900390625,0.58660888671875,0.636199951171875,0.68328857421875,0.727691650390625,0.76922607421875,0.8077392578125...\] with an element-wise tolerance of {"absoluteThreshold":0.000030517578125,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[1\]\t3.6732959747314453e-1\t6.2622070312500000e-2\t3.0470752716064453e-1\t4.8658168859649127e+0\t3.0517578125000000e-5\n\t[2\]\t6.8329977989196777e-1\t1.2503051757812500e-1\t5.5826926231384277e-1\t4.4650639949963384e+0\t3.0517578125000000e-5\n\t[3\]\t9.0373212099075317e-1\t1.8695068359375000e-1\t7.1678143739700317e-1\t3.8340669508039502e+0\t3.0517578125000000e-5\n\t[4\]\t9.9780619144439697e-1\t2.4810791015625000e-1\t7.4969828128814697e-1\t3.0216621502152523e+0\t3.0517578125000000e-5\n\t[5\]\t9.5236867666244507e-1\t3.0831909179687500e-1\t6.4404958486557007e-1\t2.0889059484187866e+0\t3.0517578125000000e-5\n\t...and 42303 more errors.\n\tMax AbsError of 1.9999977350234985e+0 at index of 10361.\n\t[10361\]\t9.9999773502349854e-1\t-1.0000000000000000e+0\t1.9999977350234985e+0\t1.9999977350234985e+0\t3.0517578125000000e-5\n\tMax RelError of Infinity at index of 7056.\n\t[7056\]\t5.8778524398803711e-1\t0.0000000000000000e+0\t5.8778524398803711e-1\tInfinity\t3.0517578125000000e-5\n]
expected: FAIL
[X Rendered audio for channel 5 does not equal [0,0.0626220703125,0.125030517578125,0.18695068359375,0.24810791015625,0.308319091796875,0.3673095703125,0.42486572265625,0.480743408203125,0.53472900390625,0.58660888671875,0.636199951171875,0.68328857421875,0.727691650390625,0.76922607421875,0.8077392578125...\] with an element-wise tolerance of {"absoluteThreshold":0.000030517578125,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[1\]\t3.6732959747314453e-1\t6.2622070312500000e-2\t3.0470752716064453e-1\t4.8658168859649127e+0\t3.0517578125000000e-5\n\t[2\]\t6.8329977989196777e-1\t1.2503051757812500e-1\t5.5826926231384277e-1\t4.4650639949963384e+0\t3.0517578125000000e-5\n\t[3\]\t9.0373212099075317e-1\t1.8695068359375000e-1\t7.1678143739700317e-1\t3.8340669508039502e+0\t3.0517578125000000e-5\n\t[4\]\t9.9780619144439697e-1\t2.4810791015625000e-1\t7.4969828128814697e-1\t3.0216621502152523e+0\t3.0517578125000000e-5\n\t[5\]\t9.5236867666244507e-1\t3.0831909179687500e-1\t6.4404958486557007e-1\t2.0889059484187866e+0\t3.0517578125000000e-5\n\t...and 44063 more errors.\n\tMax AbsError of 1.9999977350234985e+0 at index of 36821.\n\t[36821\]\t9.9999773502349854e-1\t-1.0000000000000000e+0\t1.9999977350234985e+0\t1.9999977350234985e+0\t3.0517578125000000e-5\n\tMax RelError of Infinity at index of 12348.\n\t[12348\]\t9.5105654001235962e-1\t0.0000000000000000e+0\t9.5105654001235962e-1\tInfinity\t3.0517578125000000e-5\n]
expected: FAIL

View file

@ -95,3 +95,9 @@
[X Stitched sine-wave buffers at sample rate 44100 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.000090957,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[31080\]\t-2.4090957641601563e+0\t5.6332010030746460e-1\t2.9724158644676208e+0\t5.2766018163478501e+0\t9.0957000000000003e-5\n\t[31081\]\t4.5659909161559839e-41\t6.1397600173950195e-1\t6.1397600173950195e-1\t1.0000000000000000e+0\t9.0957000000000003e-5\n\tMax AbsError of 2.9724158644676208e+0 at index of 31080.\n\tMax RelError of 5.2766018163478501e+0 at index of 31080.\n]
expected: FAIL
[X SNR (45.01863889546189 dB) is not greater than or equal to 85.58. Got 45.01863889546189.]
expected: FAIL
[X Stitched sine-wave buffers at sample rate 44100 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.000090957,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[31080\]\t-8.5582718212587339e-15\t5.6332010030746460e-1\t5.6332010030747315e-1\t1.0000000000000151e+0\t9.0957000000000003e-5\n\t[31081\]\t4.5672520847738763e-41\t6.1397600173950195e-1\t6.1397600173950195e-1\t1.0000000000000000e+0\t9.0957000000000003e-5\n\tMax AbsError of 6.1397600173950195e-1 at index of 31081.\n\tMax RelError of 1.0000000000000151e+0 at index of 31080.\n]
expected: FAIL

View file

@ -127129,6 +127129,19 @@
{}
]
],
"contain-size-063.html": [
"31a6015cac35faa04b8f77d4388e429e2266ffdd",
[
null,
[
[
"/css/css-contain/reference/contain-size-063-ref.html",
"=="
]
],
{}
]
],
"contain-size-baseline-001.html": [
"0ffed1b3b6a08831792b0a5ac40d1340c142c48d",
[
@ -133062,6 +133075,19 @@
{}
]
],
"flex-minimum-height-flex-items-022.html": [
"943ac525fb570adcf62d7ff0edfc88cdd5727a85",
[
null,
[
[
"/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
],
"flex-minimum-width-flex-items-001.xht": [
"cd18483ba414160c46e30bc282dec0c2fcd2f418",
[
@ -133583,7 +133609,7 @@
]
],
"flexbox-with-multi-column-property.html": [
"5b11b0f9fd245a451e289229c4ed3e6e183dd40b",
"56b56ca0935bc8869a4b19e0d70e2cf7cdb0a0b8",
[
null,
[
@ -157041,6 +157067,19 @@
]
},
"css-pseudo": {
"active-selection-063.html": [
"1d9a1c1ecd81008d4d3d5891b717d6bdadb3efe9",
[
null,
[
[
"/css/css-pseudo/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
],
"before-dynamic-display-none.html": [
"d8844f9c961e94b2fd353628cb2c6e3e12123054",
[
@ -202900,7 +202939,7 @@
]
],
"background-image-blur-repaint.html": [
"7b3df263081ecceb6517e056e60cfaa35b9981a0",
"4a3c00c7ad334a67312346ce57aa81ac96d024d2",
[
null,
[
@ -203263,6 +203302,32 @@
{}
]
],
"effect-reference-delete.html": [
"314c9a7d123bd65b04483956513337116f7e0382",
[
null,
[
[
"/css/filter-effects/reference/effect-reference-delete-ref.html",
"=="
]
],
{}
]
],
"effect-reference-displacement-negative-scale-001.html": [
"282ea100508948125f3a834af9dd37e0be210a10",
[
null,
[
[
"/css/filter-effects/reference/effect-reference-displacement-negative-scale-001-ref.html",
"=="
]
],
{}
]
],
"effect-reference-lighting-no-light.tentative.html": [
"beefd47a544d5c82b4b1d468ce99938e6d9924d9",
[
@ -203276,6 +203341,71 @@
{}
]
],
"effect-reference-merge-no-inputs.tentative.html": [
"4fb67db643dd5aebdbff53a0773035747c18836c",
[
null,
[
[
"/css/filter-effects/reference/effect-reference-merge-no-inputs.tentative-ref.html",
"=="
]
],
{}
]
],
"effect-reference-obb-dimensions.html": [
"2bb424d90cd6b03145c481eb8be6b96c9d52d715",
[
null,
[
[
"/css/filter-effects/reference/effect-reference-obb-dimensions-ref.html",
"=="
]
],
{}
]
],
"effect-reference-on-span.html": [
"66bd8fa886a86e5f5738d8373e2611c39cc1c8e3",
[
null,
[
[
"/css/filter-effects/reference/effect-reference-on-span-ref.html",
"=="
]
],
{}
]
],
"effect-reference-rename-001.html": [
"6c8374536f4cf748784b7a58fc158d230ea3557f",
[
null,
[
[
"/css/filter-effects/reference/effect-reference-rename-001-ref.html",
"=="
]
],
{}
]
],
"effect-reference-rename-002.html": [
"86528819bc7a0459a3d9c506284fc7d614049a00",
[
null,
[
[
"/css/filter-effects/reference/effect-reference-rename-002-ref.html",
"=="
]
],
{}
]
],
"empty-element-with-filter.html": [
"3e8fc7e164cde54a8ff81a241909c2f729f32afb",
[
@ -203510,6 +203640,32 @@
{}
]
],
"filter-region-negative-positioned-child-001.html": [
"8f302ab52abe2f1008ca60d46fbc77d8ce35c22a",
[
null,
[
[
"/css/filter-effects/reference/filter-region-negative-positioned-child-001-ref.html",
"=="
]
],
{}
]
],
"filter-region-transformed-child-001.html": [
"cd097faf706a1d15f4ce5616f7e67fbf234dc50c",
[
null,
[
[
"/css/filter-effects/reference/filter-region-transformed-child-001-ref.html",
"=="
]
],
{}
]
],
"filter-saturate-001-test.html": [
"52182deb3fed8985bc810dd1e5af95e3095979ae",
[
@ -203757,6 +203913,32 @@
{}
]
],
"reference-filter-update-on-attribute-change-001.html": [
"cc5ac7c65d720804953df11f2b2cab268e383610",
[
null,
[
[
"/css/filter-effects/reference/reference-filter-update-on-attribute-change-001-ref.html",
"=="
]
],
{}
]
],
"root-element-with-opacity-filter-001.html": [
"577e2bd4c032799a159c1c7542812e66081bfcea",
[
null,
[
[
"/css/filter-effects/reference/root-element-with-opacity-filter-001-ref.html",
"=="
]
],
{}
]
],
"svg-feflood-001.html": [
"4588cf93f6ca52386ce8af1dbe6e0462572bb559",
[
@ -203796,13 +203978,26 @@
{}
]
],
"svg-relative-urls-0001.html": [
"3edf7447b8f7fa0cf55f87a6ba051797bdd6f914",
"svg-relative-urls-001.html": [
"5dd382c6dfd2271449627e956f7723e810662cee",
[
null,
[
[
"/css/filter-effects/reference/svg-relative-urls-0001-ref.html",
"/css/filter-effects/reference/svg-relative-urls-001-ref.html",
"=="
]
],
{}
]
],
"svg-relative-urls-002.html": [
"278ea1645437f7afa797091b2562b9ad3430e458",
[
null,
[
[
"/css/filter-effects/reference/svg-relative-urls-002-ref.html",
"=="
]
],
@ -242786,6 +242981,10 @@
"6805c323df5a975231648b830e33ce183c3cbbd3",
[]
],
"rendering-utils.js": [
"46283bd5d078a14922e24160053017b6e8cb072c",
[]
],
"sab.js": [
"c7fd1a742e64f66744b416584952effe29fda208",
[]
@ -261285,6 +261484,18 @@
[]
]
},
"content-index": {
"resources": {
"sw.js": [
"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
[]
]
},
"resources.js": [
"1a758abe27e0b31dd22d2b8c04a7943271dea95c",
[]
]
},
"content-security-policy": {
"META.yml": [
"ee8f1ea7e07b94711ddc65e43a6c32dbc5983612",
@ -284314,6 +284525,10 @@
"dbfa77f6ac0dfdc03d2f8a8b0407a704617c73a7",
[]
],
"contain-size-063-ref.html": [
"9544ebcac23af0c2caaa279154878c10349990ae",
[]
],
"contain-size-breaks-001-ref.html": [
"b807ea5a1160a4d29e46b91ca283c45b3c2fdeb5",
[]
@ -296875,6 +297090,12 @@
"92ae71d83fcbea52e4120ed28af5438dd54d4509",
[]
],
"reference": {
"ref-filled-green-100px-square.xht": [
"05a13794482a94f6c10bd9d4c98704e63ef60331",
[]
]
},
"selection-text-shadow-016-ref.html": [
"5e3eabc976e2bc75b6a290f2b740b54d8cdbf99a",
[]
@ -307460,14 +307681,50 @@
"45192b13451fdfe2f00c17dbc84d30a770426e86",
[]
],
"effect-reference-delete-ref.html": [
"918715265fa4c1b95ec46d04014ea82e73cbcd40",
[]
],
"effect-reference-displacement-negative-scale-001-ref.html": [
"f718ea6abfbab54333ba674ff0dcd320d8672bcd",
[]
],
"effect-reference-lighting-no-light.tentative-ref.html": [
"e863a6703b2acebbdb10a5eef342cbbd1b6b5bc9",
[]
],
"effect-reference-merge-no-inputs.tentative-ref.html": [
"5743e0c3de96ba4fbdf814bf5ec997e0c93e65da",
[]
],
"effect-reference-obb-dimensions-ref.html": [
"f460c439aa8d6e56a8ad5a0826d6e0c0daf5df11",
[]
],
"effect-reference-on-span-ref.html": [
"76a7953831720fbe9556afdc4800879c5cdd2634",
[]
],
"effect-reference-rename-001-ref.html": [
"fe3beae2d4997a7603153c5c885f01c7ca656bcd",
[]
],
"effect-reference-rename-002-ref.html": [
"d8719aa43a43ebbfebe6caa43b961eeee10b99c5",
[]
],
"empty-element-with-filter-ref.html": [
"cf2c997f6c0d60cac9896c0b0014189cea7790bc",
[]
],
"filter-region-negative-positioned-child-001-ref.html": [
"c9da47b1b434303f0111e8d1f03d5518e8f573fc",
[]
],
"filter-region-transformed-child-001-ref.html": [
"bcf649411930d5cc839dca2a5098e12c0c49fda8",
[]
],
"filter-url-to-non-existent-filter-001-ref.html": [
"c1aeed8c441e6f72c6faa893d64ae30bdacbec06",
[]
@ -307496,6 +307753,14 @@
"01546f115d112aa27495b3fd45347b22e30fe7ee",
[]
],
"reference-filter-update-on-attribute-change-001-ref.html": [
"91326ef585e6910cd499ad2d6650f18fca486921",
[]
],
"root-element-with-opacity-filter-001-ref.html": [
"cd16e54c8e5b73b02585c606d0133bb36c821b31",
[]
],
"svg-feflood-ref.html": [
"5623b08ecd71b292e698ee249a79b59d0046300f",
[]
@ -307508,9 +307773,13 @@
"5623b08ecd71b292e698ee249a79b59d0046300f",
[]
],
"svg-relative-urls-0001-ref.html": [
"svg-relative-urls-001-ref.html": [
"82f301f5f6ff95f743f2488093fe63ac766a84bf",
[]
],
"svg-relative-urls-002-ref.html": [
"344ee53e032e1bd588e971e16af2af5d0a6bcf41",
[]
]
},
"support": {
@ -307582,6 +307851,10 @@
"0d5fc65c6fdfe2b4f507326fb379e468dbe85d46",
[]
],
"filter-from-external-url.css": [
"2940461016cad90f9218db1c7355434d9ca54e1c",
[]
],
"filtersubregion00.png": [
"b6c4bccb63cd850f473a59d9e3c0cf26c699db13",
[]
@ -327090,6 +327363,10 @@
"e96e6471e6a8df81c462c47be588ffbbcac5ecfb",
[]
],
"arrow-oriented-upright.jpg": [
"cebc99af14b6050a416031cf219f8cd7a72ee458",
[]
],
"background.png": [
"6db6c6b1b9d851c7a85b93ddc9e5ddf368ac0a7e",
[]
@ -328027,7 +328304,7 @@
[]
],
"css-typed-om.idl": [
"df9669e5637f18de89792facba8fabe234d658f8",
"00d3f49bfe653ce4782e13e6c0d46c65783874cc",
[]
],
"cssom-view.idl": [
@ -328251,7 +328528,7 @@
[]
],
"permissions.idl": [
"9cde372a127188ef1081ad390d5301d2d8b198f8",
"d45c7f93cac7683a76e89d0e7f429f5f3cb695d9",
[]
],
"picture-in-picture.idl": [
@ -328479,7 +328756,7 @@
[]
],
"worklets.idl": [
"16187664b3b4124758c84d054b02b8ddbf585508",
"f89eacd50bd58c02860c84b6e4c486ab978a5018",
[]
],
"xhr.idl": [
@ -338033,7 +338310,7 @@
[]
],
"safari-technology-preview.rb": [
"5f8d6806107d8abd7418ae022e59a1af9da1632f",
"d58664c5b6c67e32c63f1d122625a56211371511",
[]
],
"system_info.yml": [
@ -338513,7 +338790,7 @@
[]
],
"test_manifest.py": [
"6f11eb5974060c91c7ce849de2e54b6b30e78926",
"6d329ad38f969106c28e73de81dcbf1c468f9adf",
[]
],
"test_sourcefile.py": [
@ -343644,7 +343921,7 @@
[]
],
"safari.py": [
"dba8432b5a75faf402cf74042b7a59c4b66f814a",
"cb2b175d4dfbc3166e4ad5a6afe174ffdbc6ff8a",
[]
],
"sauce.py": [
@ -343910,7 +344187,7 @@
[]
],
"test_formatters.py": [
"72f3a591ad7f90532671ccb897dfcb161bc8f45d",
"60b1b0a5a878cda9c500eaae25f3fe89eadf819c",
[]
],
"test_manifestexpected.py": [
@ -343922,7 +344199,7 @@
[]
],
"test_stability.py": [
"77cb23a71e13a6889d21d1ff47aa3dacf08a7425",
"9a8fccf935a136c6050e852f9a5704138b0d3f41",
[]
],
"test_testloader.py": [
@ -344433,6 +344710,14 @@
]
}
},
"trust-tokens": {
"end-to-end": {
"README.txt": [
"a86468df9d6b21dfc361d178eb3afc4b3c865fea",
[]
]
}
},
"trusted-types": {
"META.yml": [
"d0743949b6a122d8bd0adf7b1ed0181f0c51429d",
@ -373348,6 +373633,26 @@
]
]
},
"content-index": {
"content-index.https.window.js": [
"082ebc3b9ec599da21351d4be1f21a79810ec65d",
[
"content-index/content-index.https.window.html",
{
"script_metadata": [
[
"script",
"/service-workers/service-worker/resources/test-helpers.sub.js"
],
[
"script",
"resources.js"
]
]
}
]
]
},
"content-security-policy": {
"base-uri": {
"base-uri-allow.sub.html": [
@ -377254,7 +377559,7 @@
]
],
"cookieStore_get_arguments.tentative.https.any.js": [
"79fc0d37488ef6dfed1f0bc210e2116111acc776",
"34f7dbcd948fd5e590b0e9f715ad878f4de9694d",
[
"cookie-store/cookieStore_get_arguments.tentative.https.any.html",
{
@ -377406,6 +377711,13 @@
{}
]
],
"cookieStore_opaque_origin.tentative.https.html": [
"bbf0dbd9864c574fadbd2b464618766ff1919a19",
[
null,
{}
]
],
"cookieStore_set_arguments.tentative.https.any.js": [
"b9074c827d2a1ffa9b3ee1a0a28714396c4ae0d8",
[
@ -382064,6 +382376,13 @@
]
},
"css-flexbox": {
"abspos-descendent-001.html": [
"1aebb0f319f566db19070e7bad66e622a4ab8d3f",
[
null,
{}
]
],
"align-content-wrap-001.html": [
"1e0ce42c75f462aea952113582e743bf8bda4dd8",
[
@ -382964,6 +383283,13 @@
{}
]
],
"orthogonal-writing-modes-and-intrinsic-sizing.html": [
"032cd47df5d6ae928bf766aad248ccf120bd033a",
[
null,
{}
]
],
"overflow-auto-002.html": [
"2bb04a2604076d0883c1322e60015316f6f34b10",
[
@ -383246,6 +383572,13 @@
{}
]
],
"percentage-size.html": [
"44c298672f2e39716d21d36220b270f0387aac2f",
[
null,
{}
]
],
"position-absolute-001.html": [
"f60174084652a3373c6b1873e02da373575c53cd",
[
@ -383274,6 +383607,13 @@
{}
]
],
"position-relative-percentage-top-001.html": [
"3ec47c1d42d69330c616a87f0b22208f8d6196a6",
[
null,
{}
]
],
"quirks-auto-block-size-with-percentage-item.html": [
"966f39f173952f01268dcd26a9a5892bf4a689a9",
[
@ -404532,6 +404872,26 @@
}
]
],
"scrollend-event-fired-for-programmatic-scroll.html": [
"79b5f5f0186871b7c139c551faf5cf1ef15f77b9",
[
null,
{
"testdriver": true,
"timeout": "long"
}
]
],
"scrollend-event-fired-for-scrollIntoView.html": [
"63e1c3e22eaafcb84b98f542778787b7ae397ca4",
[
null,
{
"testdriver": true,
"timeout": "long"
}
]
],
"scrollend-event-fired-to-document.html": [
"a35508e2c557a9280802ab3d0d937fce03628e44",
[
@ -436088,6 +436448,13 @@
{}
]
],
"natural-size-orientation.html": [
"662dc0804fa32bff539467166fab134ce8ab22ff",
[
null,
{}
]
],
"non-active-document.html": [
"6072138cb387d98e3bc8ae86971e424fe7061194",
[
@ -437647,6 +438014,27 @@
]
},
"the-label-element": {
"clicking-interactive-content.html": [
"60a80fad9d2aebf284e252949fba7b2bb15af134",
[
null,
{}
]
],
"clicking-noninteractive-labelable-content.html": [
"5563ef1e3c7472e8e831ee8d00c412dbcc0ef45a",
[
null,
{}
]
],
"clicking-noninteractive-unlabelable-content.html": [
"233168f5664cf972ad579ae4ccba7f674c965d25",
[
null,
{}
]
],
"forward-focus-to-associated-element.html": [
"86e3f652af0fb2b21d65d79da0c81a3e1daefdaa",
[
@ -482100,7 +482488,7 @@
]
],
"slots-imperative-slot-api.tentative.html": [
"56dd71b1156cc3ac146a794e28e3b4b2bd58d143",
"6d3997b085c99b5163f1f1a747b792a5dbca9dea",
[
null,
{}
@ -491828,6 +492216,22 @@
]
},
"trust-tokens": {
"end-to-end": {
"has-trust-token-with-no-top-frame.tentative.https.html": [
"4788cd9907331f07abc2374b4e4b48091877fc1c",
[
null,
{}
]
],
"has-trust-token.tentative.https.html": [
"17e037f739391c5adcab67fc54dd8d4f0cb7764f",
[
null,
{}
]
]
},
"trust-token-parameter-validation-xhr.tentative.https.html": [
"4a6c30c6d32424c9b1d3dce883d3f44862c6e3b6",
[

View file

@ -1,4 +0,0 @@
[hit-test-floats-002.html]
[Hit test float]
expected: FAIL

View file

@ -1,4 +1,4 @@
[hit-test-floats-004.html]
[hit-test-floats-003.html]
[Miss float below something else]
expected: FAIL

View file

@ -0,0 +1,4 @@
[hit-test-floats-005.html]
[Miss clipped float]
expected: FAIL

View file

@ -0,0 +1,4 @@
[abspos-descendent-001.html]
[.flexbox 1]
expected: FAIL

View file

@ -0,0 +1,2 @@
[flex-minimum-height-flex-items-022.html]
expected: FAIL

View file

@ -0,0 +1,4 @@
[orthogonal-writing-modes-and-intrinsic-sizing.html]
[.flexbox 2]
expected: FAIL

View file

@ -0,0 +1,4 @@
[percentage-size.html]
[.flexbox 8]
expected: FAIL

View file

@ -0,0 +1,4 @@
[position-relative-percentage-top-001.html]
[.border 1]
expected: FAIL

View file

@ -21,3 +21,6 @@
[test the top of layer]
expected: FAIL
[test some point of the element: top left corner]
expected: FAIL

View file

@ -0,0 +1,2 @@
[effect-reference-displacement-negative-scale-001.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[effect-reference-merge-no-inputs.tentative.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[effect-reference-obb-dimensions.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[effect-reference-on-span.html]
expected: FAIL

View file

@ -318,15 +318,18 @@
[<iframe>: combined response Content-Type: text/html;" text/plain]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;" text/plain]
expected: FAIL
[<iframe>: separate response Content-Type: text/html */*]
expected: FAIL
[<iframe>: separate response Content-Type: text/plain */*]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;" \\" text/plain]
expected: FAIL
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
expected: FAIL

View file

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

View file

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

View file

@ -1,6 +1,6 @@
[iframe_sandbox_popups_escaping-3.html]
type: testharness
expected: TIMEOUT
expected: CRASH
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
expected: TIMEOUT

View file

@ -1,5 +1,6 @@
[iframe_sandbox_popups_nonescaping-3.html]
type: testharness
expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox]
expected: FAIL
expected: NOTRUN

View file

@ -0,0 +1,7 @@
[natural-size-orientation.html]
[naturalWidth and naturalHeight return re-oriented values for an image with orientation metadata even with image-orientation:none]
expected: FAIL
[naturalWidth and naturalHeight return re-oriented values for an image with orientation metadata]
expected: FAIL

View file

@ -0,0 +1,70 @@
[clicking-interactive-content.html]
[interactive content <details></details> as second child under <label>]
expected: FAIL
[interactive content <input> as first child of <label>]
expected: FAIL
[interactive content <select></select> as second child under <label>]
expected: FAIL
[interactive content <iframe></iframe> as second child under <label>]
expected: FAIL
[interactive content <select></select> as first child of <label>]
expected: FAIL
[interactive content <video tabindex=""></video> as second child under <label>]
expected: FAIL
[interactive content <a tabindex=""></a> as second child under <label>]
expected: FAIL
[interactive content <object tabindex=""></object> as second child under <label>]
expected: FAIL
[interactive content <input> deeply nested under <label>]
expected: FAIL
[interactive content <embed> as second child under <label>]
expected: FAIL
[interactive content <object usemap=""></object> as second child under <label>]
expected: FAIL
[interactive content <select></select> deeply nested under <label>]
expected: FAIL
[interactive content <textarea></textarea> as first child of <label>]
expected: FAIL
[interactive content <img usemap=""> as second child under <label>]
expected: FAIL
[interactive content <audio controls=""></audio> as second child under <label>]
expected: FAIL
[interactive content <input type="hidden" tabindex=""> as second child under <label>]
expected: FAIL
[interactive content <video controls=""></video> as second child under <label>]
expected: FAIL
[interactive content <audio tabindex=""></audio> as second child under <label>]
expected: FAIL
[interactive content <div tabindex=""></div> as second child under <label>]
expected: FAIL
[interactive content <input> as second child under <label>]
expected: FAIL
[interactive content <textarea></textarea> deeply nested under <label>]
expected: FAIL
[interactive content <img tabindex=""> as second child under <label>]
expected: FAIL
[interactive content <textarea></textarea> as second child under <label>]
expected: FAIL

View file

@ -128,3 +128,6 @@
[X Rendered audio for channel 5 does not equal [0,0.0626220703125,0.125030517578125,0.18695068359375,0.24810791015625,0.308319091796875,0.3673095703125,0.42486572265625,0.480743408203125,0.53472900390625,0.58660888671875,0.636199951171875,0.68328857421875,0.727691650390625,0.76922607421875,0.8077392578125...\] with an element-wise tolerance of {"absoluteThreshold":0.000030517578125,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[1\]\t3.6732959747314453e-1\t6.2622070312500000e-2\t3.0470752716064453e-1\t4.8658168859649127e+0\t3.0517578125000000e-5\n\t[2\]\t6.8329977989196777e-1\t1.2503051757812500e-1\t5.5826926231384277e-1\t4.4650639949963384e+0\t3.0517578125000000e-5\n\t[3\]\t9.0373212099075317e-1\t1.8695068359375000e-1\t7.1678143739700317e-1\t3.8340669508039502e+0\t3.0517578125000000e-5\n\t[4\]\t9.9780619144439697e-1\t2.4810791015625000e-1\t7.4969828128814697e-1\t3.0216621502152523e+0\t3.0517578125000000e-5\n\t[5\]\t9.5236867666244507e-1\t3.0831909179687500e-1\t6.4404958486557007e-1\t2.0889059484187866e+0\t3.0517578125000000e-5\n\t...and 42303 more errors.\n\tMax AbsError of 1.9999977350234985e+0 at index of 10361.\n\t[10361\]\t9.9999773502349854e-1\t-1.0000000000000000e+0\t1.9999977350234985e+0\t1.9999977350234985e+0\t3.0517578125000000e-5\n\tMax RelError of Infinity at index of 7056.\n\t[7056\]\t5.8778524398803711e-1\t0.0000000000000000e+0\t5.8778524398803711e-1\tInfinity\t3.0517578125000000e-5\n]
expected: FAIL
[X Rendered audio for channel 5 does not equal [0,0.0626220703125,0.125030517578125,0.18695068359375,0.24810791015625,0.308319091796875,0.3673095703125,0.42486572265625,0.480743408203125,0.53472900390625,0.58660888671875,0.636199951171875,0.68328857421875,0.727691650390625,0.76922607421875,0.8077392578125...\] with an element-wise tolerance of {"absoluteThreshold":0.000030517578125,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[1\]\t3.6732959747314453e-1\t6.2622070312500000e-2\t3.0470752716064453e-1\t4.8658168859649127e+0\t3.0517578125000000e-5\n\t[2\]\t6.8329977989196777e-1\t1.2503051757812500e-1\t5.5826926231384277e-1\t4.4650639949963384e+0\t3.0517578125000000e-5\n\t[3\]\t9.0373212099075317e-1\t1.8695068359375000e-1\t7.1678143739700317e-1\t3.8340669508039502e+0\t3.0517578125000000e-5\n\t[4\]\t9.9780619144439697e-1\t2.4810791015625000e-1\t7.4969828128814697e-1\t3.0216621502152523e+0\t3.0517578125000000e-5\n\t[5\]\t9.5236867666244507e-1\t3.0831909179687500e-1\t6.4404958486557007e-1\t2.0889059484187866e+0\t3.0517578125000000e-5\n\t...and 44063 more errors.\n\tMax AbsError of 1.9999977350234985e+0 at index of 36821.\n\t[36821\]\t9.9999773502349854e-1\t-1.0000000000000000e+0\t1.9999977350234985e+0\t1.9999977350234985e+0\t3.0517578125000000e-5\n\tMax RelError of Infinity at index of 12348.\n\t[12348\]\t9.5105654001235962e-1\t0.0000000000000000e+0\t9.5105654001235962e-1\tInfinity\t3.0517578125000000e-5\n]
expected: FAIL

View file

@ -326,3 +326,9 @@
[X Stitched sine-wave buffers at sample rate 44100 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.000090957,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[31080\]\t-2.4090957641601563e+0\t5.6332010030746460e-1\t2.9724158644676208e+0\t5.2766018163478501e+0\t9.0957000000000003e-5\n\t[31081\]\t4.5659909161559839e-41\t6.1397600173950195e-1\t6.1397600173950195e-1\t1.0000000000000000e+0\t9.0957000000000003e-5\n\tMax AbsError of 2.9724158644676208e+0 at index of 31080.\n\tMax RelError of 5.2766018163478501e+0 at index of 31080.\n]
expected: FAIL
[X SNR (45.01863889546189 dB) is not greater than or equal to 85.58. Got 45.01863889546189.]
expected: FAIL
[X Stitched sine-wave buffers at sample rate 44100 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.000090957,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[31080\]\t-8.5582718212587339e-15\t5.6332010030746460e-1\t5.6332010030747315e-1\t1.0000000000000151e+0\t9.0957000000000003e-5\n\t[31081\]\t4.5672520847738763e-41\t6.1397600173950195e-1\t6.1397600173950195e-1\t1.0000000000000000e+0\t9.0957000000000003e-5\n\tMax AbsError of 6.1397600173950195e-1 at index of 31081.\n\tMax RelError of 1.0000000000000151e+0 at index of 31080.\n]
expected: FAIL

View file

@ -0,0 +1,19 @@
"use strict";
/**
* Waits until we have at least one frame rendered, regardless of the engine.
*
* @returns {Promise}
*/
function waitForAtLeastOneFrame() {
return new Promise(resolve => {
// Different web engines work slightly different on this area but waiting
// for two requestAnimationFrames() to happen, one after another, should be
// sufficient to ensure at least one frame has been generated anywhere.
window.requestAnimationFrame(() => {
window.requestAnimationFrame(() => {
resolve();
});
});
});
}

View file

@ -0,0 +1,88 @@
// META: script=/service-workers/service-worker/resources/test-helpers.sub.js
// META: script=resources.js
'use strict';
contentIndexTest(async (t, index) => {
// Exposure of the interface and method.
assert_own_property(window, 'ContentIndex');
assert_own_property(ContentIndex.prototype, 'add');
assert_idl_attribute(index, 'add');
assert_idl_attribute(index, 'delete');
assert_idl_attribute(index, 'getAll');
}, 'The Content Index API is exposed');
contentIndexTest(async (t, index) => {
await expectTypeError(
index.add(createDescription({category: 'fake-category'})));
await expectTypeError(
index.add(createDescription({iconUrl: 'file://some-local-file.png'})));
await expectTypeError(index.add(createDescription({iconUrl: '/non-existent-icon.png'})));
await expectTypeError(index.add(createDescription({iconUrl: '/images/broken.png'})));
await expectTypeError(index.add(createDescription({launchUrl: 'https://other-domain.com/'})));
await expectTypeError(index.add(createDescription({launchUrl: '/different-scope'})));
await index.add(createDescription({}));
}, 'index.add parameters are validated.');
contentIndexTest(async (t, index) => {
const description = createDescription({});
// Initially there are no descriptions.
assert_array_equals(await index.getAll(), []);
await index.add(description);
const descriptions = await index.getAll();
assert_equals(descriptions.length, 1);
assert_object_equals(descriptions[0], description);
}, 'index.getAll returns the same objects provided.');
contentIndexTest(async (t, index) => {
const description1 = createDescription({title: 'title1'});
const description2 = createDescription({title: 'title2'});
await index.add(description1);
await index.add(description2);
// There should be one description.
const descriptions = await index.getAll();
assert_equals(descriptions.length, 1);
assert_object_equals(descriptions[0], description2);
}, 'index.add with same ID overwrites existing entry.');
contentIndexTest(async (t, index) => {
const description1 = createDescription({id: 'id1'});
const description2 = createDescription({id: 'id2'});
await index.add(description1);
await index.add(description2);
// There should be two descriptions.
assert_equals((await index.getAll()).length, 2);
await index.delete('id1');
// There should be one description.
const descriptions = await index.getAll();
assert_equals(descriptions.length, 1);
assert_object_equals(descriptions[0], description2);
}, 'index.delete removes entry.');
contentIndexTest(async (t, index) => {
const descriptions = await index.getAll();
assert_equals(descriptions.length, 0);
await index.delete('id');
}, 'index.delete works on invalid ID.');

View file

@ -0,0 +1,40 @@
'use strict';
const swUrl = 'resources/sw.js';
const scope = 'resources/';
async function expectTypeError(promise) {
try {
await promise;
assert_unreached('Promise should have rejected');
} catch (e) {
assert_equals(e.name, 'TypeError');
}
}
function createDescription({id = 'id', title = 'title', description = 'description',
category = 'homepage', iconUrl = '/images/green-256x256.png',
launchUrl = scope, includeIcons = true}) {
return {id, title, description, category, icons: includeIcons ? [{src: iconUrl}] : [], launchUrl};
}
// Creates a Promise test for |func| given the |description|. The |func| will be
// executed with the `index` object of an activated Service Worker Registration.
function contentIndexTest(func, description) {
promise_test(async t => {
const registration = await service_worker_unregister_and_register(t, swUrl, scope);
await wait_for_state(t, registration.installing, 'activated');
return func(t, registration.index);
}, description);
}
async function waitForMessageFromServiceWorker() {
return await new Promise(resolve => {
const listener = event => {
navigator.serviceWorker.removeEventListener('message', listener);
resolve(event.data);
};
navigator.serviceWorker.addEventListener('message', listener);
});
}

View file

@ -139,11 +139,6 @@ promise_test(async testCase => {
}, 'cookieStore.get with relative url in options');
promise_test(async testCase => {
await cookieStore.set('cookie-name', 'cookie-value');
testCase.add_cleanup(async () => {
await cookieStore.delete('cookie-name');
});
const invalid_url =
`${self.location.protocol}//${self.location.host}/different/path`;
await promise_rejects_js(testCase, TypeError, cookieStore.get(
@ -151,11 +146,6 @@ promise_test(async testCase => {
}, 'cookieStore.get with invalid url path in options');
promise_test(async testCase => {
await cookieStore.set('cookie-name', 'cookie-value');
testCase.add_cleanup(async () => {
await cookieStore.delete('cookie-name');
});
const invalid_url =
`${self.location.protocol}//www.example.com${self.location.pathname}`;
await promise_rejects_js(testCase, TypeError, cookieStore.get(

View file

@ -0,0 +1,73 @@
<!DOCTYPE html>
<meta charset=utf-8>
<title>Cookie Store API: Opaque origins for cookieStore</title>
<link rel=help href="https://wicg.github.io/cookie-store/">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
const apiCalls = {
'get': 'cookieStore.get()',
'getAll': 'cookieStore.getAll()',
'set': 'cookieStore.set("cookie-name", "cookie-value")',
'delete': 'cookieStore.delete("cookie-name")'
};
const script = `
<script>
"use strict";
window.onmessage = async () => {
try {
await %s;
window.parent.postMessage({result: "no exception"}, "*");
} catch (ex) {
window.parent.postMessage({result: ex.name}, "*");
};
};
<\/script>
`;
function load_iframe(apiCall, sandbox) {
return new Promise(resolve => {
const iframe = document.createElement('iframe');
iframe.onload = () => { resolve(iframe); };
if (sandbox)
iframe.sandbox = sandbox;
iframe.srcdoc = script.replace("%s", apiCalls[apiCall]);
iframe.style.display = 'none';
document.documentElement.appendChild(iframe);
});
}
function wait_for_message(iframe) {
return new Promise(resolve => {
self.addEventListener('message', function listener(e) {
if (e.source === iframe.contentWindow) {
resolve(e.data);
self.removeEventListener('message', listener);
}
});
});
}
promise_test(async t => {
for (apiCall in apiCalls) {
const iframe = await load_iframe(apiCall);
iframe.contentWindow.postMessage({}, '*');
const message = await wait_for_message(iframe);
assert_equals(message.result, 'no exception',
'cookieStore ${apiCall} should not throw');
}
}, 'cookieStore in non-sandboxed iframe should not throw');
promise_test(async t => {
for (apiCall in apiCalls) {
const iframe = await load_iframe(apiCall, 'allow-scripts');
iframe.contentWindow.postMessage({}, '*');
const message = await wait_for_message(iframe);
assert_equals(message.result, 'SecurityError',
'cookieStore ${apiCall} should throw SecurityError');
}
}, 'cookieStore in sandboxed iframe should throw SecurityError');
</script>

View file

@ -0,0 +1,62 @@
<!DOCTYPE html>
<meta charset="UTF-8">
<title>CSS Containment Test: 'contain: size' affects intrinsic size</title>
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
<link rel="help" href="https://www.w3.org/TR/css-contain-1/#containment-size">
<link rel="match" href="reference/contain-size-063-ref.html">
<meta name="flags" content="">
<meta name="asserts" content="the intrinsic size of a size-contained element is treated as 0 in various scenarios involving intrinsic sizing.">
<style>
.red {
background: red;
}
.abs {
position: absolute;
}
.float {
float: left;
}
.zero {
width: 0;
}
.contained {
contain: size;
color: transparent;
}
.grid {
display: grid;
grid: max-content auto / min-content auto;
}
table {
border-collapse: collapse;
}
td {
padding: 0;
}
</style>
<p>Test passes if there is no red below.
<!-- max content sized-->
<div class="red abs"><div class="contained">Arbitrary content content<br>that takes up size.<br>Block Layout</div></div>
<!-- max content sized-->
<div class="red float"><div class="contained">Arbitrary content content<br>that takes up size.<br>Float</div></div>
<!-- min content sized-->
<div class=zero><div class="red float"><div class="contained">Arbitrary content content<br>that takes up size.<br>Float in narrow wrapper</div></div></div>
<div class="grid red">
<div class="red"></div>
<div class="contained">Arbitrary content content<br>that takes up size.<br>Grid item giving the first row it's height</div>
<div class="contained">Arbitrary content content<br>that takes up size.<br>Grid item giving the first column its width</div>
</div>
<table class=red>
<tr>
<td class=red>
<td><div class="contained">Arbitrary content content<br>that takes up size.<br>content of a table cell giving the fist row it's height</div>
<tr>
<td><div class="contained">Arbitrary content content<br>that takes up size.<br>content of a table cell giving the first column it's width</div>
</div>

View file

@ -0,0 +1,6 @@
<!DOCTYPE html>
<meta charset="UTF-8">
<title>Test reference</title>
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
<p>Test passes if there is no red below.

View file

@ -0,0 +1,32 @@
<!DOCTYPE html>
<html>
<head>
<title>CSS Flexbox: removing abspos descendents</title>
<link rel="help" href="https://drafts.csswg.org/css-flexbox/#flex-containers">
<link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
<link rel="issue" href="https://bugs.chromium.org/p/chromium/issues/detail?id=167566">
<meta name="assert" content="This test ensures that flex item's padding doesn't disappear when an abspos descendent is removed.">
<link href="support/flexbox.css" rel="stylesheet">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/check-layout-th.js"></script>
<script>
window.onload = function() {
document.body.offsetHeight;
document.getElementById('to-hide').style.display = "none";
checkLayout(".flexbox");
};
</script>
</head>
<body>
<div id=log></div>
<div class="flexbox" style="height: 100px;" data-expected-height="100">
<div style="width: 100%; overflow: auto; padding-bottom: 100px; background-color: red;" data-expected-height="100">
<div style="position: relative; height: 100px; background-color: green;" data-expected-height="100">
<div id="to-hide" style="position: absolute;" data-expected-height="0"></div>
</div>
</div>
</div>
</body>
</html>

View file

@ -0,0 +1,14 @@
<!DOCTYPE html>
<title>Minimum height of a replaced element with borders</title>
<link rel="author" title="Google LLC" href="https://www.google.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" />
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div style="height: 100px; overflow: hidden;">
<div style="display: flex; flex-direction: column; height: 0; width: 100px;">
<img src="support/1x1-green.png" style="border-bottom: 99px solid green;">
<div style="background-color: red; min-height: 100px;"></div>
</div>
</div>

View file

@ -10,6 +10,7 @@
column-count: 2;
column-gap: 100px;
width: 20em;
font-kerning: none;
}
</style>
<div class="flexbox">

View file

@ -0,0 +1,36 @@
<!DOCTYPE html>
<html>
<title>CSS Flexbox: main size on orthogonal flex item.</title>
<link rel="stylesheet" href="support/flexbox.css" >
<link rel="help" href="https://drafts.csswg.org/css-flexbox/#flex-base-size">
<link rel="issue" href="https://codereview.chromium.org/1052363002">
<meta name="assert" content="This test ensure the correct main sizes are used when flex item is orthogonal to the flex container."/>
<style>
.flexbox {
background-color: gray;
}
.vertical {
writing-mode: vertical-lr;
width: min-content;
background-color: blue;
}
</style>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/check-layout-th.js"></script>
<body onload="checkLayout('.flexbox')">
<div id=log></div>
<div class="flexbox" data-expected-height="20">
<div class="vertical" data-expected-width="50" data-expected-height="20">
<div style="width: 50px; height: 20px; background-color: blue;" data-expected-width="50" data-expected-height="20"></div>
</div>
</div>
<div class="flexbox column" data-expected-height="20">
<div class="vertical" data-expected-width="50" data-expected-height="20">
<div style="width: 50px; height: 20px; background-color: blue;" data-expected-width="50" data-expected-height="20"></div>
</div>
</div>

View file

@ -0,0 +1,108 @@
<!DOCTYPE html>
<title>CSS Flexbox: Percentage size in flexbox children</title>
<link rel="help" href="https://drafts.csswg.org/css-flexbox/#flex-containers">
<link rel="help" href="https://drafts.csswg.org/css-sizing-3/#percentage-sizing">
<link rel="help" href="https://bugs.webkit.org/show_bug.cgi?id=81809">
<meta name="assert" content="This test checks that percentage height/width values are correctly resolved in flexbox children.">
<style>
.flexbox {
display: flex;
}
.column, .column .fixed {
height: 50px;
}
.row, .row .fixed {
width: 50px;
}
.container > div {
outline: 2px solid blue;
}
.row > div > div {
height: 20px;
}
.flexbox > div {
flex: 0 0 auto;
}
.column > .flexbox {
flex-direction: column;
}
.container > div > :nth-child(1) {
background-color: orange;
}
.container > div > :nth-child(2) {
background-color: yellow;
}
.container > div > :nth-child(3) {
background-color: salmon;
}
.container > div > :nth-child(4) {
background-color: purple;
}
</style>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/check-layout-th.js"></script>
<body onload="checkLayout('.flexbox')">
<div id=log></div>
<div class="container row">
<div class="flexbox">
<div style='width: 10px; min-width: 50%;' data-expected-width=25></div>
<div style='width: 50%;' data-expected-width=25></div>
<div style='width: 10px; max-width: 50%;' data-expected-width=10></div>
<div style='min-width: 10px; width: 100px; max-width: 50%;' data-expected-width=25></div>
</div>
</div>
<div class="container row" style='width: 100px'>
<div class="flexbox fixed">
<div style='width: 10px; min-width: 50%;' data-expected-width=25></div>
<div style='width: 50%;' data-expected-width=25></div>
<div style='width: 10px; max-width: 50%;' data-expected-width=10></div>
<div style='min-width: 10px; width: 100px; max-width: 50%;' data-expected-width=25></div>
</div>
</div>
<div class="container column" style='margin-bottom: 100px'>
<div class="flexbox" style="height: auto">
<div style='height: 10px; min-height: 50%;' data-expected-height=10></div>
<div style='height: 50%;' data-expected-height=0></div>
<div style='height: 10px; max-height: 50%;' data-expected-height=10></div>
<div style='min-height: 10px; height: 100px; max-height: 50%;' data-expected-height=100></div>
</div>
</div>
<div class="container column">
<div class="flexbox fixed">
<div style='height: 10px; min-height: 50%;' data-expected-height=25></div>
<div style='height: 50%;' data-expected-height=25></div>
<div style='height: 10px; max-height: 50%;' data-expected-height=10></div>
<div style='min-height: 10px; height: 100px; max-height: 50%;' data-expected-height=25></div>
</div>
</div>
<div class="container row">
<div class="flexbox">
<div style="flex: 0 0 50%" data-expected-width=25></div>
</div>
</div>
<div class="container column">
<div class="flexbox">
<div style="flex: 0 0 50%" data-expected-height=0></div>
</div>
</div>
<div class="container row">
<div class="flexbox fixed">
<div style="flex: 0 0 50%" data-expected-width=25></div>
</div>
</div>
<div class="container column">
<div class="flexbox fixed">
<div style="flex: 0 0 50%" data-expected-height=25></div>
</div>
</div>
</body>

View file

@ -0,0 +1,43 @@
<!DOCTYPE html>
<title>CSS Flexbox: Relative position with a percentage top</title>
<link rel="help" href="https://drafts.csswg.org/css-flexbox/#valdef-align-items-stretch">
<meta name="assert" content="This test ensures that a flexbox with 'flex-flow: row wrap' properly centers a grandchild with 'position: relative' and 'top: 50%'.">
<style>
html, body {
margin: 0;
}
.border {
border:1px solid #000;
}
.width-50 {
width: 50%;
}
.flex {
display: flex;
flex-flow: row wrap;
}
.tall {
height: 300px;
}
.top-50 {
position: relative;
top: 50%;
}
</style>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/check-layout-th.js"></script>
<body onload="checkLayout('.border')">
<div class="border">
<div class="flex">
<div class="width-50">
<label class="top-50" data-offset-y="151">This should be in the center of the container</label>
</div>
<div class="width-50">
<div class="tall">
This is tall
</div>
</div>
</div>
</div>

View file

@ -0,0 +1,59 @@
<!DOCTYPE html>
<meta charset="UTF-8">
<title>CSS Pseudo-Elements Test: active selection and consecutive preserved &amp;Tab;</title>
<link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/">
<link rel="help" href="https://www.w3.org/TR/css-pseudo-4/#highlight-selectors">
<link rel="help" href="https://www.w3.org/TR/css-text-3/#tab-size-property">
<link rel="match" href="reference/ref-filled-green-100px-square.xht">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css">
<meta content="" name="flags">
<meta name="assert" content="In this test, tab characters are preserved and converted into 4 consecutive blank spaces. The background of such blank spaces can be painted. The lines are broken after each tab character since 'white-space: pre' preserves line breaks.">
<style>
div
{
background-color: red;
color: red;
float: left; /* or display: inline-block or position: absolute or width: 4em */
font-family: Ahem;
font-size: 25px;
line-height: 1;
/* -moz-tab-size: 4; */
/*
Implement 'tab-size' (dropping the -moz- prefix)
https://bugzilla.mozilla.org/show_bug.cgi?id=737785
*/
tab-size: 4;
white-space: pre;
}
div::selection
{
background-color: green;
}
</style>
<script>
function startTest()
{
var targetRange = document.createRange();
/* We first create an empty range */
targetRange.selectNodeContents(document.getElementById("test"));
/* Then we set the range boundaries to the children of div#test */
window.getSelection().addRange(targetRange);
/* Finally, we now select such range of content */
}
</script>
<body onload="startTest();">
<p>Test passes if there is a filled green square and <strong>no red</strong>.
<div id="test">&Tab;
&Tab;
&Tab;
&Tab;</div>

View file

@ -0,0 +1,19 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>CSS Reftest Reference</title>
<link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" />
<style type="text/css"><![CDATA[
div
{
background-color: green;
height: 100px;
width: 100px;
}
]]></style>
</head>
<body>
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div></div>
</body>
</html>

View file

@ -10,6 +10,7 @@
<meta name="assert" content="An element with background-image and a filter should be rendered correctly after other elements on the page change size. You should see a 50x50 green box over a blurred background."/>
<script src="/common/reftest-wait.js"></script>
<script src="/common/rendering-utils.js"></script>
<script>
function runTest() {
function shrinkBox() {
@ -18,13 +19,9 @@ function runTest() {
box.style.height = "50px";
}
// Wait for two requestAnimationFrame() calls to make sure that at least one
// frame has been rendered before shrinking the box and taking the screenshot.
requestAnimationFrame(function() {
requestAnimationFrame(function() {
shrinkBox();
takeScreenshot();
});
waitForAtLeastOneFrame().then(function() {
shrinkBox();
takeScreenshot();
});
}
</script>

View file

@ -0,0 +1,27 @@
<!DOCTYPE html>
<html class="reftest-wait">
<title>CSS Filters: reference to deleted SVG filter</title>
<link rel="author" title="Stephen White" href="mailto:senorblanco@chromium.org">
<link rel="help" href="https://drafts.fxtf.org/filter-effects-1/#FilterProperty">
<link rel="help" href="https://bugs.webkit.org/show_bug.cgi?id=90405">
<link rel="match" href="reference/effect-reference-delete-ref.html">
<meta name="assert" content="Check that a CSS filter no longer affects its target element after having deleted the SVG element referenced from the CSS filter."/>
<script src="/common/reftest-wait.js"></script>
<script src="/common/rendering-utils.js"></script>
<svg width="0" height="0">
<defs>
<filter id="MyFilter">
<feColorMatrix type="hueRotate" values="180"/>
</filter>
</defs>
</svg>
<img style="filter: url(#MyFilter);" src="support/color-palette.png">
<script>
waitForAtLeastOneFrame().then(function() {
document.querySelector('svg').remove();
takeScreenshot();
});
</script>
</html>

View file

@ -0,0 +1,18 @@
<!DOCTYPE html>
<title>SVG Filters: feDisplacementMap filter with negative scale</title>
<link rel="author" title="Fredrik Söderquist" href="mailto:fs@opera.com">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#FilterProperty">
<link rel="help" href="https://drafts.fxtf.org/filter-effects-1/#feDisplacementMapElement">
<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=641854">
<link rel="match" href="reference/effect-reference-displacement-negative-scale-001-ref.html">
<meta name="assert" content="feDisplacementMap with a negative scale applies the displacement in the opposite direction.">
<div style="position: relative">
<div style="position: absolute; top: 20px; left: 20px; width: 100px; height: 100px; background: green; filter: url(#displacementFilter);"></div>
</div>
<svg width="0" height="0">
<filter id="displacementFilter" x="-0.2" y="-0.2" color-interpolation-filters="sRGB">
<feFlood flood-color="black"/>
<feDisplacementMap in="SourceGraphic" scale="-40" xChannelSelector="R" yChannelSelector="R"/>
</filter>
</svg>

View file

@ -0,0 +1,27 @@
<!DOCTYPE html>
<title>CSS Filters: feMerge with no input feMergeNode</title>
<link rel="author" title="Fredrik Söderquist" href="mailto:fs@opera.com">
<link rel="help" href="https://drafts.fxtf.org/filter-effects-1/#FilterProperty">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#feMergeElement">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#feCompositeElement">
<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=533457">
<link rel="match" href="reference/effect-reference-merge-no-inputs.tentative-ref.html">
<meta name="assert" content="Check that the result of an feMerge with no feMergeNode children is transparent black."/>
<style>
#target {
width: 100px;
height: 100px;
background-color: blue;
filter: url(#emptyMerge);
}
</style>
<div id="target"></div>
<svg height="0">
<filter id="emptyMerge">
<feColorMatrix values="0 0 0 0 0, 0 0 1 0 0, 0 0 0 0 0, 0 0 0 1 0" result="lime"/>
<feColorMatrix values="0 1 0 0 0, 0 0 0 0 0, 0 0 0 0 0, 0 0 0 1 0" result="red"/>
<feMerge/>
<feComposite in2="lime"/>
</filter>
</svg>

View file

@ -0,0 +1,28 @@
<!DOCTYPE html>
<title>CSS Filters: objectBoundingBox type of primitiveUnits in SVG filters</title>
<link rel="author" title="Fredrik Söderquist" href="mailto:fs@opera.com">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#InterfaceSVGFilterElement">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#attr-valuedef-primitiveunits-objectboundingbox">
<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=532938">
<link rel="match" href="reference/effect-reference-obb-dimensions-ref.html">
<meta name="assert" content="Check that primitiveUnits of type objectBoundingBox get properly applied in SVG filter primitives."/>
<style>
body {
margin: 0;
padding: 0;
}
#target {
position: absolute;
width: 100px;
height: 100px;
background-color: green;
filter: url('#bboxOffset');
}
</style>
<div id="target"></div>
<svg height="0">
<filter id="bboxOffset" primitiveUnits="objectBoundingBox" x="0" y="0" width="1.25" height="1.25">
<feOffset dx="0.2" dy="0.2"/>
</filter>
</svg>

View file

@ -0,0 +1,19 @@
<!DOCTYPE html>
<html>
<title>CSS Filters: filters on <span> elements</title>
<link rel="author" title="Stephen White" href="mailto:senorblanco@chromium.org">
<link rel="help" href="https://drafts.fxtf.org/filter-effects-1/#FilterProperty">
<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=513408">
<link rel="match" href="reference/effect-reference-on-span-ref.html">
<meta name="assert" content="Check that a CSS filter to a <span> element works as expected."/>
<body>
<svg xmlns="http://www.w3.org/2000/svg" width="0" height="0" version="1.1">
<defs>
<filter id="colormatrix" color-interpolation-filters="sRGB">
<feColorMatrix values="0 0 0 0 0, 0 0 0 0 0, 1 0 0 0 0, 0 0 0 1 0"/>
</filter>
</defs>
</svg><span style="background-color: red; filter: url(#colormatrix);">This text's background should be blue.</span>
</body>
</html>

View file

@ -0,0 +1,23 @@
<!DOCTYPE html>
<html>
<title>CSS Filters: reference to renamed SVG filter</title>
<link rel="author" title="Stephen White" href="mailto:senorblanco@chromium.org">
<link rel="help" href="https://drafts.fxtf.org/filter-effects-1/#FilterProperty">
<link rel="help" href="https://bugs.webkit.org/show_bug.cgi?id=90405">
<link rel="match" href="reference/effect-reference-rename-001-ref.html">
<meta name="assert" content="Check that a SVG filter, initially named differently than what an element expects, gets applied to such element once renamed with the expected value."/>
<body>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="0" height="0">
<defs>
<filter id="NotMyFilter">
<feColorMatrix type="hueRotate" values="180"/>
</filter>
</defs>
</svg>
<img style="filter: url(#MyFilter);" src="support/color-palette.png">
<script>
document.getElementById("NotMyFilter").id = "MyFilter";
</script>
</body>
</html>

View file

@ -0,0 +1,27 @@
<!DOCTYPE html>
<html class="reftest-wait">
<title>CSS Filters: reference to renamed SVG filter</title>
<link rel="author" title="Fredrik Söderquist" href="mailto:fs@opera.com">
<link rel="help" href="https://drafts.fxtf.org/filter-effects-1/#FilterProperty">
<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=453019">
<link rel="match" href="reference/effect-reference-rename-002-ref.html">
<meta name="assert" content="Check that a SVG filter, initially named differently than what an element expects, gets applied to such element once renamed, after rendering the first frame."/>
<script src="/common/reftest-wait.js"></script>
<script src="/common/rendering-utils.js"></script>
<body>
<svg height="0">
<filter id="NotMyFilter">
<feColorMatrix type="hueRotate" values="90"/>
</filter>
</svg>
<div style="width: 100px; height: 100px; background-color: red; filter: url(#MyFilter);"></div>
<script>
waitForAtLeastOneFrame().then(function() {
document.getElementById("NotMyFilter").id = "MyFilter";
takeScreenshot();
});
</script>
</body>
</html>

View file

@ -0,0 +1,41 @@
<!DOCTYPE html>
<title>SVG Filters: CSS reference filters with negative positioned children</title>
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#FilterProperty">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#ColorInterpolationFiltersProperty">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#feColorMatrixElement">
<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=638091">
<link rel="match" href="reference/filter-region-negative-positioned-child-001-ref.html">
<meta name="assert" content="CSS reference filters with negative positioned children"/>
<svg xmlns="http://www.w3.org/2000/svg" width="0" height="0" version="1.1">
<defs>
<filter id="f1" color-interpolation-filters="sRGB">
<feColorMatrix type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0"/>
</filter>
</defs>
</svg>
<style>
.box {
width: 100px;
height: 100px;
position: absolute;
}
.green {
background-color: green;
}
.blue {
background-color: blue;
}
.above {
top: -100px;
}
.parent {
filter: url(#f1);
background-color: white;
position: relative;
top: 100px;
}
</style>
<div class="parent">
<div class="green box"></div>
<div class="blue box above"></div>
</div>

View file

@ -0,0 +1,30 @@
<title>CSS Filter: Scale a transformed child element"></title>
<link rel="help" href="https://drafts.fxtf.org/filter-effects-1/#feComponentTransferElement">
<link rel="issue" href="https://bugs.chromium.org/p/chromium/issues/detail?id=333014">
<link rel="match" href="reference/filter-region-transformed-child-001-ref.html">
<meta name="assert" content="This test ensures that the feComponentTransfer filter scales a child with CSS scale transform.">
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="0" height="0">
<defs>
<filter id="filter" x="25%" y="0%" width="50%" height="100%">
<feComponentTransfer>
<feFuncR type="linear" intercept="0" slope="1"/>
<feFuncG type="linear" intercept="0" slope="0"/>
<feFuncB type="linear" intercept="0" slope="0"/>
<feFuncA type="linear" intercept="0" slope="1"/>
</feComponentTransfer>
</filter>
</defs>
</svg>
<style>
#parent {
display: inline-block;
filter: url(#filter);
}
#child {
background-color: gray;
width: 50px;
height: 50px;
transform: translate(25px, 25px) scale(2);
}
</style>
<div id="parent"><div id="child"></div></div>

View file

@ -0,0 +1,24 @@
<!DOCTYPE html>
<title>SVG Filters: Invalidation of SVG filter attributes on HTML</title>
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#FilterProperty">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#feColorMatrixElement">
<link rel="help" href="https://bugs.webkit.org/show_bug.cgi?id=105635">
<link rel="match" href="reference/reference-filter-update-on-attribute-change-001-ref.html">
<meta name="assert" content="Dynamically adding an attribute of a filter primitive"/>
<head>
<script>
function run() {
document.getElementById('color').setAttribute('values', '90');
}
</script>
</head>
<body onload="run()">
<svg xmlns="http://www.w3.org/2000/svg" width="0" height="0" version="1.1">
<defs>
<filter id="MyFilter">
<fecolormatrix id="color" type="hueRotate"></fecolormatrix>
</filter>
</defs>
</svg>
<div style="filter: url(#MyFilter); width:100px; height:100px; background-color:red;"></div>
</body>

View file

@ -0,0 +1,5 @@
<html>
<body>
<img src="../support/color-palette.png">
</body>
</html>

View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<div style="width: 100px; height: 100px; background-color: green"></div>

View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<div style="width: 100px; height: 100px; background-color: lime"></div>

View file

@ -0,0 +1,16 @@
<!DOCTYPE html>
<style>
body {
margin: 0;
padding: 0;
}
#target {
position: absolute;
left: 20px;
top: 20px;
width: 100px;
height: 100px;
background-color: green;
}
</style>
<div id="target"></div>

View file

@ -0,0 +1,5 @@
<html>
<body>
<span style="background-color: blue;">This text's background should be blue.</span>
</body>
</html>

View file

@ -0,0 +1,12 @@
<html>
<body>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="0" height="0">
<defs>
<filter id="MyFilter">
<feColorMatrix type="hueRotate" values="180"/>
</filter>
</defs>
</svg>
<img style="filter: url(#MyFilter);" src="../support/color-palette.png">
</body>
</html>

View file

@ -0,0 +1,7 @@
<!DOCTYPE html>
<svg height="0">
<filter id="MyFilter">
<feColorMatrix type="hueRotate" values="90"/>
</filter>
</svg>
<div style="width: 100px; height: 100px; background-color: red; filter: url(#MyFilter);"></div>

View file

@ -0,0 +1,33 @@
<!DOCTYPE html>
<svg xmlns="http://www.w3.org/2000/svg" width="0" height="0" version="1.1">
<defs>
<filter id="f1" color-interpolation-filters="sRGB">
<feColorMatrix type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0"/>
</filter>
</defs>
</svg>
<style>
.box {
width: 100px;
height: 100px;
position: absolute;
}
.green {
background-color: green;
}
.blue {
background-color: blue;
}
.below {
top: 100px;
}
.parent {
filter: url(#f1);
background-color: white;
position: relative;
}
</style>
<div class="parent">
<div class="blue box"></div>
<div class="green box below"></div>
</div>

View file

@ -0,0 +1,23 @@
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="0" height="0">
<defs>
<filter id="filter" x="25%" y="0%" width="50%" height="100%">
<feComponentTransfer>
<feFuncR type="linear" intercept="0" slope="1"/>
<feFuncG type="linear" intercept="0" slope="0"/>
<feFuncB type="linear" intercept="0" slope="0"/>
<feFuncA type="linear" intercept="0" slope="1"/>
</feComponentTransfer>
</filter>
</defs>
</svg>
<style>
div {
display: inline-block;
filter: url(#filter);
background-color: gray;
width: 50px;
height: 50px;
transform: translate(25px, 25px) scale(2);
}
</style>
<div></div>

After

Width:  |  Height:  |  Size: 667 B

View file

@ -0,0 +1,11 @@
<!DOCTYPE html>
<body>
<svg xmlns="http://www.w3.org/2000/svg" width="0" height="0" version="1.1">
<defs>
<filter id="MyFilter">
<fecolormatrix id="color" type="hueRotate" values="90"></fecolormatrix>
</filter>
</defs>
</svg>
<div style="filter: url(#MyFilter); width:100px; height:100px; background-color:red;"></div>
</body>

View file

@ -0,0 +1,4 @@
<!DOCTYPE html>
<html>
<body style="filter: opacity(0.501)">
This test ensures we properly paint the root element when an opacity filter is applied.

View file

@ -0,0 +1,7 @@
<!DOCTYPE html>
<style>
img {
margin: 10px;
}
</style>
<img style="filter: url(../support/hueRotate.svg#MyFilter)" src="../support/color-palette.png">

View file

@ -0,0 +1,9 @@
<!DOCTYPE html>
<title>Opacity Filter: root element opacity filter</title>
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#FilterProperty">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#funcdef-filter-opacity">
<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=349587">
<link rel="match" href="reference/root-element-with-opacity-filter-001-ref.html">
<meta name="assert" content="This test ensures that the root renderer has an opacity filter"/>
<html style="filter: opacity(0.501)">
This test ensures we properly paint the root element when an opacity filter is applied.

View file

@ -0,0 +1,3 @@
.hue-rotate {
filter: url('hueRotate.svg#MyFilter');
}

View file

@ -4,7 +4,7 @@
<link rel="help" href="https://drafts.fxtf.org/filter-effects-1/#FilterProperty">
<link rel="help" href="https://drafts.csswg.org/css-values-4/#relative-urls">
<link rel="help" href="https://crbug.com/405315"/>
<link rel="match" href="reference/svg-relative-urls-0001-ref.html">
<link rel="match" href="reference/svg-relative-urls-001-ref.html">
<meta name="assert" content="This test checks that relative SVG filter references in inline styles are correct after an element moves documents.">
<body onload="runTest()">

View file

@ -0,0 +1,17 @@
<!DOCTYPE html>
<title>SVG Filters: relative URLs from external stylesheets</title>
<link rel="author" title="Fredrik Söderquist" href="mailto:fs@opera.com">
<link rel="help" href="https://drafts.csswg.org/css-values-4/#relative-urls">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#FilterProperty">
<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=405315">
<link rel="match" href="reference/svg-relative-urls-002-ref.html">
<meta name="assert" content="Check that SVG filters can be referenced from external stylesheets using a relative URL">
<link rel="stylesheet" href="support/filter-from-external-url.css"
onload="document.body && document.body.offsetTop">
<style>
img {
margin: 10px;
}
</style>
<img class="hue-rotate" src="support/color-palette.png">

View file

@ -0,0 +1,134 @@
<!DOCTYPE HTML>
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-actions.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="scroll_support.js"></script>
<style>
html {
height: 3000px;
width: 3000px;
}
#targetDiv {
width: 200px;
height: 200px;
overflow: scroll;
}
#innerDiv {
width: 400px;
height: 400px;
}
</style>
<body style="margin:0" onload=runTest()>
<div id="targetDiv">
<div id="innerDiv">
</div>
</div>
</body>
<script>
var element_scrollend_arrived = false;
var document_scrollend_arrived = false;
function onElementScrollEnd(event) {
assert_false(event.cancelable);
assert_false(event.bubbles);
element_scrollend_arrived = true;
}
function onDocumentScrollEnd(event) {
assert_false(event.cancelable);
// scrollend events are bubbled when the target node is document.
assert_true(event.bubbles);
document_scrollend_arrived = true;
}
function callScrollFunction([scrollTarget, scrollFunction, args]) {
scrollTarget[scrollFunction](args);
}
function runTest() {
let root_element = document.scrollingElement;
let target_div = document.getElementById("targetDiv");
promise_test (async (t) => {
await waitForCompositorCommit();
target_div.addEventListener("scrollend", onElementScrollEnd);
document.addEventListener("scrollend", onDocumentScrollEnd);
let test_cases = [
[target_div, 200, 200, [target_div, "scrollTo", { top: 200, left: 200, behavior: "auto" }]],
[target_div, 0, 0, [target_div, "scrollTo", { top: 0, left: 0, behavior: "smooth" }]],
[root_element, 200, 200, [root_element, "scrollTo", { top: 200, left: 200, behavior: "auto" }]],
[root_element, 0, 0, [root_element, "scrollTo", { top: 0, left: 0, behavior: "smooth" }]],
[target_div, 200, 200, [target_div, "scrollBy", { top: 200, left: 200, behavior: "auto" }]],
[target_div, 0, 0, [target_div, "scrollBy", { top: -200, left: -200, behavior: "smooth" }]],
[root_element, 200, 200, [root_element, "scrollBy", { top: 200, left: 200, behavior: "auto" }]],
[root_element, 0, 0, [root_element, "scrollBy", { top: -200, left: -200, behavior: "smooth" }]]
];
for(i = 0; i < test_cases.length; i++) {
let t = test_cases[i];
let target = t[0];
let expected_x = t[1];
let expected_y = t[2];
let scroll_datas = t[3];
callScrollFunction(scroll_datas);
await waitFor(() => { return element_scrollend_arrived || document_scrollend_arrived; }, target.tagName + "." + scroll_datas[1] + " did not receive scrollend event.");
if (target == root_element)
assert_false(element_scrollend_arrived);
else
assert_false(document_scrollend_arrived);
assert_equals(target.scrollLeft, expected_x, target.tagName + "." + scroll_datas[1] + " scrollLeft");
assert_equals(target.scrollTop, expected_y, target.tagName + "." + scroll_datas[1] + " scrollTop");
element_scrollend_arrived = false;
document_scrollend_arrived = false;
}
}, "Tests scrollend event for calling scroll functions.");
promise_test(async (t) => {
await waitForCompositorCommit();
let test_cases = [
[target_div, "scrollTop"],
[target_div, "scrollLeft"],
[root_element, "scrollTop"],
[root_element, "scrollLeft"]
];
for (i = 0; i < test_cases.length; i++) {
let t = test_cases[i];
let target = t[0];
let attribute = t[1];
let position = 200;
target.style.scrollBehavior = "smooth";
target[attribute] = position;
await waitFor(() => { return element_scrollend_arrived || document_scrollend_arrived; }, target.tagName + "." + attribute + " did not receive scrollend event.");
if (target == root_element)
assert_false(element_scrollend_arrived);
else
assert_false(document_scrollend_arrived);
assert_equals(target[attribute], position, target.tagName + "." + attribute + " ");
element_scrollend_arrived = false;
document_scrollend_arrived = false;
await waitForCompositorCommit();
target.style.scrollBehavior = "auto";
target[attribute] = 0;
await waitFor(() => { return element_scrollend_arrived || document_scrollend_arrived; }, target.tagName + "." + attribute + " did not receive scrollend event.");
if (target == root_element)
assert_false(element_scrollend_arrived);
else
assert_false(document_scrollend_arrived);
assert_equals(target[attribute], 0, target.tagName + "." + attribute + " ");
element_scrollend_arrived = false;
document_scrollend_arrived = false;
}
}, "Tests scrollend event for changing scroll attributes.");
}
</script>

View file

@ -0,0 +1,123 @@
<!DOCTYPE HTML>
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-actions.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="scroll_support.js"></script>
<style>
html {
height: 3000px;
width: 3000px;
}
#targetDiv {
width: 200px;
height: 200px;
overflow: scroll;
}
#innerDiv {
width: 400px;
height: 400px;
}
</style>
<body style="margin:0" onload=runTest()>
<div id="targetDiv">
<div id="innerDiv">
</div>
</div>
</body>
<script>
var element_scrollend_arrived = false;
var document_scrollend_arrived = false;
function onElementScrollEnd(event) {
assert_false(event.cancelable);
assert_false(event.bubbles);
element_scrollend_arrived = true;
}
function onDocumentScrollEnd(event) {
assert_false(event.cancelable);
// scrollend events are bubbled when the target node is document.
assert_true(event.bubbles);
document_scrollend_arrived = true;
}
function callScrollFunction([scrollTarget, scrollFunction, args]) {
scrollTarget[scrollFunction](args);
}
function runTest() {
let root_element = document.scrollingElement;
let target_div = document.getElementById("targetDiv");
let inner_div = document.getElementById("innerDiv");
// Get expected position for root_element scrollIntoView.
root_element.scrollTo(10000, 10000);
let max_root_x = root_element.scrollLeft;
let max_root_y = root_element.scrollTop;
root_element.scrollTo(0, 0);
target_div.scrollTo(10000, 10000);
let max_element_x = target_div.scrollLeft;
let max_element_y = target_div.scrollTop;
target_div.scrollTo(0, 0);
promise_test (async (t) => {
await waitForCompositorCommit();
target_div.addEventListener("scrollend", onElementScrollEnd);
document.addEventListener("scrollend", onDocumentScrollEnd);
let test_cases = [
[target_div, max_element_x, max_element_y, [inner_div, "scrollIntoView", { inline: "end", block: "end", behavior: "auto" }]],
[target_div, 0, 0, [inner_div, "scrollIntoView", { inline: "start", block: "start", behavior: "smooth" }]],
[root_element, max_root_x, max_root_y, [root_element, "scrollIntoView", { inline: "end", block: "end", behavior: "smooth" }]],
[root_element, 0, 0, [root_element, "scrollIntoView", { inline: "start", block: "start", behavior: "smooth" }]]
];
for(i = 0; i < test_cases.length; i++) {
let t = test_cases[i];
let target = t[0];
let expected_x = t[1];
let expected_y = t[2];
let scroll_datas = t[3];
callScrollFunction(scroll_datas);
await waitFor(() => { return element_scrollend_arrived || document_scrollend_arrived; }, target.tagName + ".scrollIntoView did not receive scrollend event.");
if (target == root_element)
assert_false(element_scrollend_arrived);
else
assert_false(document_scrollend_arrived);
assert_equals(target.scrollLeft, expected_x, target.tagName + ".scrollIntoView scrollLeft");
assert_equals(target.scrollTop, expected_y, target.tagName + ".scrollIntoView scrollTop");
element_scrollend_arrived = false;
document_scrollend_arrived = false;
}
}, "Tests scrollend event for scrollIntoView.");
promise_test(async (t) => {
document.body.removeChild(target_div);
let out_div = document.createElement("div");
out_div.style = "width: 100px; height:100px; overflow:scroll; scroll-behavior:smooth;";
out_div.appendChild(target_div);
document.body.appendChild(out_div);
await waitForCompositorCommit();
element_scrollend_arrived = false;
document_scrollend_arrived = false;
inner_div.scrollIntoView({ inline: "end", block: "end", behavior: "auto" });
await waitFor(() => { return element_scrollend_arrived || document_scrollend_arrived; }, "Nested scrollIntoView did not receive scrollend event.");
assert_equals(root_element.scrollLeft, 0, "Nested scrollIntoView root_element scrollLeft");
assert_equals(root_element.scrollTop, 0, "Nested scrollIntoView root_element scrollTop");
assert_equals(out_div.scrollLeft, 100, "Nested scrollIntoView out_div scrollLeft");
assert_equals(out_div.scrollTop, 100, "Nested scrollIntoView out_div scrollTop");
assert_equals(target_div.scrollLeft, max_element_x, "Nested scrollIntoView target_div scrollLeft");
assert_equals(target_div.scrollTop, max_element_y, "Nested scrollIntoView target_div scrollTop");
assert_false(document_scrollend_arrived);
}, "Tests scrollend event for nested scrollIntoView.");
}
</script>

View file

@ -0,0 +1,45 @@
<!DOCTYPE html>
<meta charset=utf-8>
<title>naturalWidth and naturalHeight on HTMLImageElement reflect orientation metadata</title>
<link rel="author" title="Cameron McCormack" href="mailto:cam@mcc.id.au">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
.ignore-orientation { image-orientation: none; }
</style>
<body>
<script>
async_test(function(t) {
let img = document.createElement("img");
img.src = "/images/green-100x50.png";
img.onload = t.step_func_done(function() {
assert_equals(img.naturalWidth, 100);
assert_equals(img.naturalHeight, 50);
img.remove();
});
document.body.append(img);
}, "naturalWidth and naturalHeight return correct values for an image without orientation metadata");
async_test(function(t) {
let img = document.createElement("img");
img.src = "/images/arrow-oriented-upright.jpg";
img.onload = t.step_func_done(function() {
assert_equals(img.naturalWidth, 144);
assert_equals(img.naturalHeight, 240);
img.remove();
});
document.body.append(img);
}, "naturalWidth and naturalHeight return re-oriented values for an image with orientation metadata");
async_test(function(t) {
let img = document.createElement("img");
img.src = "/images/arrow-oriented-upright.jpg";
img.className = "ignore-orientation";
img.onload = t.step_func_done(function() {
assert_equals(img.naturalWidth, 144);
assert_equals(img.naturalHeight, 240);
img.remove();
});
document.body.append(img);
}, "naturalWidth and naturalHeight return re-oriented values for an image with orientation metadata even with image-orientation:none");
</script>

View file

@ -0,0 +1,123 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>Label event handling when a descendant interactive content is clicked</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body>
<label id=label></label>
<template id=interactive-content>
<a href="about:blank" onclick="event.preventDefault()"></a>
<audio controls></audio>
<button></button>
<details></details>
<embed>
<iframe></iframe>
<img usemap="">
<input>
<label>label</label>
<object usemap=""></object>
<select></select>
<textarea></textarea>
<video controls></video>
<div tabindex=""></div>
<!-- These are interesting in that even without tabindex, they could become
interactive with the addition/removal of an attribute. -->
<a tabindex=""></a>
<audio tabindex=""></audio>
<img tabindex="">
<input type=hidden tabindex="">
<object tabindex=""></object>
<video tabindex=""></video>
</template>
<script>
"use strict";
const interactiveContent = document.getElementById("interactive-content");
const interactiveElements = Array.from(interactiveContent.content.children);
const label = document.getElementById("label");
for (const srcInteractiveElement of interactiveElements) {
test(t => {
t.add_cleanup(() => {
label.innerHTML = "";
});
const interactiveElement = srcInteractiveElement.cloneNode();
label.appendChild(interactiveElement);
let clicked = 0;
interactiveElement.addEventListener("click", () => {
clicked++;
});
interactiveElement.click();
assert_equals(clicked, 1, "clicking interactive content");
clicked = 0;
const span = document.createElement("span");
interactiveElement.appendChild(span);
span.click();
assert_equals(clicked, 1, "clicking descendant of interactive content");
}, `interactive content ${srcInteractiveElement.outerHTML} as first child of <label>`);
test(t => {
t.add_cleanup(() => {
label.innerHTML = "";
});
const interactiveElement = srcInteractiveElement.cloneNode();
const div = document.createElement("div");
div.appendChild(interactiveElement);
label.appendChild(div);
let clicked = 0;
interactiveElement.addEventListener("click", () => {
clicked++;
});
interactiveElement.click();
assert_equals(clicked, 1, "clicking nested interactive content");
clicked = 0;
const span = document.createElement("span");
interactiveElement.appendChild(span);
span.click();
assert_equals(clicked, 1, "clicking descendant of nested interactive content");
}, `interactive content ${srcInteractiveElement.outerHTML} deeply nested under <label>`);
test(t => {
t.add_cleanup(() => {
label.innerHTML = "";
});
const button = document.createElement("button");
label.appendChild(button);
const interactiveElement = srcInteractiveElement.cloneNode();
label.appendChild(interactiveElement);
let buttonClicked = 0;
button.addEventListener("click", () => {
buttonClicked++;
});
let clicked = 0;
interactiveElement.addEventListener("click", () => {
clicked++;
});
interactiveElement.click();
assert_equals(clicked, 1, "clicking nested interactive content");
assert_equals(buttonClicked, 0, "clicking nested interactive content should not click button");
clicked = 0;
const span = document.createElement("span");
interactiveElement.appendChild(span);
span.click();
assert_equals(clicked, 1, "clicking descendant of nested interactive content");
assert_equals(buttonClicked, 0, "clicking descendant of nested interactive content should not click button");
}, `interactive content ${srcInteractiveElement.outerHTML} as second child under <label>`);
}
</script>
</body>

View file

@ -0,0 +1,112 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>Label event handling when a descendant labelable but not interactive element is clicked</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body>
<label id=label></label>
<template id=labelable-not-interactive-content>
<meter></meter>
<output></output>
<progress></progress>
</template>
<script>
"use strict";
const template = document.getElementById("labelable-not-interactive-content");
const labelableNotInteractiveElements = Array.from(template.content.children);
const label = document.getElementById("label");
// This part may be subject to platform-dependent operations in the spec, so we
// only check for obvious errors. (Clicking once should register at least one
// click, but less than 30 clicks.) See
// https://github.com/whatwg/html/issues/5415 for possibly tightening this up.
function checkClickCount(clicked, description) {
assert_greater_than(clicked, 0, description);
assert_less_than(clicked, 30, description);
}
for (const srcElement of labelableNotInteractiveElements) {
test(t => {
t.add_cleanup(() => {
label.innerHTML = "";
});
const element = srcElement.cloneNode();
label.appendChild(element);
let clicked = 0;
element.addEventListener("click", () => {
clicked++;
});
element.click();
checkClickCount(clicked, "clicking labelable content");
clicked = 0;
const span = document.createElement("span");
element.appendChild(span);
span.click();
checkClickCount(clicked, "clicking descendant of labelable content");
}, `labelable element ${srcElement.outerHTML} as first child of <label>`);
test(t => {
t.add_cleanup(() => {
label.innerHTML = "";
});
const element = srcElement.cloneNode();
const div = document.createElement("div");
div.appendChild(element);
label.appendChild(div);
let clicked = 0;
element.addEventListener("click", () => {
clicked++;
});
element.click();
checkClickCount(clicked, "clicking nested labelable content");
clicked = 0;
const span = document.createElement("span");
element.appendChild(span);
span.click();
checkClickCount(clicked, "clicking descendant of nested labelable content");
}, `labelable element ${srcElement.outerHTML} deeply nested under <label>`);
test(t => {
t.add_cleanup(() => {
label.innerHTML = "";
});
const button = document.createElement("button");
label.appendChild(button);
const element = srcElement.cloneNode();
label.appendChild(element);
let buttonClicked = 0;
button.addEventListener("click", () => {
buttonClicked++;
});
let clicked = 0;
element.addEventListener("click", () => {
clicked++;
});
element.click();
assert_equals(clicked, 1, "clicking nested labelable content");
assert_equals(buttonClicked, 1, "clicking nested labelable content should click button");
buttonClicked = 0;
clicked = 0;
const span = document.createElement("span");
element.appendChild(span);
span.click();
assert_equals(clicked, 1, "clicking descendant of nested labelable content");
assert_equals(buttonClicked, 1, "clicking descendant of nested labelable content should not click button");
}, `labelable element ${srcElement.outerHTML} as second child under <label>`);
}
</script>
</body>

View file

@ -0,0 +1,119 @@
<!DOCTYPE html>
<meta charset=utf-8>
<title>Label event handling when a descendant noninteractive and unlabelable content is clicked</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body>
<label id=label></label>
<template id=noninteractive-unlabelable-content>
<div></div>
<svg></svg>
<!-- These are "almost interactive": they could become interactive with the
addition/removal of a non-tabindex attribute. -->
<a></a>
<audio></audio>
<img>
<input type=hidden>
<object></object>
<video></video>
</template>
<script>
"use strict";
const template = document.getElementById("noninteractive-unlabelable-content");
{
const details = document.createElementNS("http://www.w3.org/2000/svg", "details");
template.content.appendChild(details);
}
const elements = Array.from(template.content.children);
const label = document.getElementById("label");
for (const srcElement of elements) {
test(t => {
t.add_cleanup(() => {
label.innerHTML = "";
});
const element = srcElement.cloneNode();
label.appendChild(element);
let clicked = 0;
element.addEventListener("click", () => {
clicked++;
});
element.dispatchEvent(new MouseEvent("click", { bubbles: true }));
assert_equals(clicked, 1, "clicking interactive content");
clicked = 0;
const span = document.createElement("span");
element.appendChild(span);
span.click();
assert_equals(clicked, 1, "clicking descendant of interactive content");
}, `noninteractive unlabelable content ${srcElement.outerHTML} as first child of <label>`);
test(t => {
t.add_cleanup(() => {
label.innerHTML = "";
});
const element = srcElement.cloneNode();
const div = document.createElement("div");
div.appendChild(element);
label.appendChild(div);
let clicked = 0;
element.addEventListener("click", () => {
clicked++;
});
element.dispatchEvent(new MouseEvent("click", { bubbles: true }));
assert_equals(clicked, 1, "clicking nested interactive content");
clicked = 0;
const span = document.createElement("span");
element.appendChild(span);
span.click();
assert_equals(clicked, 1, "clicking descendant of nested interactive content");
}, `noninteractive unlabelable content ${srcElement.outerHTML} deeply nested under <label>`);
test(t => {
t.add_cleanup(() => {
label.innerHTML = "";
});
const button = document.createElement("button");
label.appendChild(button);
const element = srcElement.cloneNode();
label.appendChild(element);
let buttonClicked = 0;
button.addEventListener("click", () => {
buttonClicked++;
});
let clicked = 0;
element.addEventListener("click", () => {
clicked++;
});
element.dispatchEvent(new MouseEvent("click", { bubbles: true }));
assert_equals(clicked, 1, "clicking noninteractive unlabelable content");
assert_equals(buttonClicked, 1, "clicking noninteractive unlabelable content should click button");
buttonClicked = 0;
clicked = 0;
const span = document.createElement("span");
element.appendChild(span);
span.click();
assert_equals(clicked, 1, "clicking descendant of nested noninteractive unlabelable content");
assert_equals(
buttonClicked, 1,
"clicking descendant of nested noninteractive unlabelable content should click button"
);
}, `noninteractive unlabelable content ${srcElement.outerHTML} as second child under <label>`);
}
</script>
</body>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -41,9 +41,9 @@ partial interface mixin ElementCSSInlineStyle {
[SameObject] readonly attribute StylePropertyMap attributeStyleMap;
};
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
Constructor(sequence<CSSUnparsedSegment> members)]
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSUnparsedValue : CSSStyleValue {
constructor(sequence<CSSUnparsedSegment> members);
iterable<CSSUnparsedSegment>;
readonly attribute unsigned long length;
getter CSSUnparsedSegment (unsigned long index);
@ -52,16 +52,16 @@ interface CSSUnparsedValue : CSSStyleValue {
typedef (USVString or CSSVariableReferenceValue) CSSUnparsedSegment;
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
Constructor(USVString variable, optional CSSUnparsedValue? fallback = null)]
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSVariableReferenceValue {
constructor(USVString variable, optional CSSUnparsedValue? fallback = null);
attribute USVString variable;
readonly attribute CSSUnparsedValue? fallback;
};
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
Constructor(USVString value)]
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSKeywordValue : CSSStyleValue {
constructor(USVString value);
attribute USVString value;
};
@ -108,9 +108,9 @@ interface CSSNumericValue : CSSStyleValue {
[Exposed=Window] static CSSNumericValue parse(USVString cssText);
};
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
Constructor(double value, USVString unit)]
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSUnitValue : CSSNumericValue {
constructor(double value, USVString unit);
attribute double value;
readonly attribute USVString unit;
};
@ -120,45 +120,45 @@ interface CSSMathValue : CSSNumericValue {
readonly attribute CSSMathOperator operator;
};
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
Constructor(CSSNumberish... args)]
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSMathSum : CSSMathValue {
constructor(CSSNumberish... args);
readonly attribute CSSNumericArray values;
};
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
Constructor(CSSNumberish... args)]
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSMathProduct : CSSMathValue {
constructor(CSSNumberish... args);
readonly attribute CSSNumericArray values;
};
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
Constructor(CSSNumberish arg)]
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSMathNegate : CSSMathValue {
constructor(CSSNumberish arg);
readonly attribute CSSNumericValue value;
};
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
Constructor(CSSNumberish arg)]
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSMathInvert : CSSMathValue {
constructor(CSSNumberish arg);
readonly attribute CSSNumericValue value;
};
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
Constructor(CSSNumberish... args)]
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSMathMin : CSSMathValue {
constructor(CSSNumberish... args);
readonly attribute CSSNumericArray values;
};
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
Constructor(CSSNumberish... args)]
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSMathMax : CSSMathValue {
constructor(CSSNumberish... args);
readonly attribute CSSNumericArray values;
};
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
Constructor(CSSNumberish min, CSSNumberish val, CSSNumberish max)]
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSMathClamp : CSSMathValue {
constructor(CSSNumberish min, CSSNumberish val, CSSNumberish max);
readonly attribute CSSNumericValue min;
readonly attribute CSSNumericValue val;
readonly attribute CSSNumericValue max;
@ -230,9 +230,9 @@ partial namespace CSS {
CSSUnitValue fr(double value);
};
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
Constructor(sequence<CSSTransformComponent> transforms)]
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSTransformValue : CSSStyleValue {
constructor(sequence<CSSTransformComponent> transforms);
iterable<CSSTransformComponent>;
readonly attribute unsigned long length;
getter CSSTransformComponent (unsigned long index);
@ -249,63 +249,63 @@ interface CSSTransformComponent {
DOMMatrix toMatrix();
};
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
Constructor(CSSNumericValue x, CSSNumericValue y, optional CSSNumericValue z)]
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSTranslate : CSSTransformComponent {
constructor(CSSNumericValue x, CSSNumericValue y, optional CSSNumericValue z);
attribute CSSNumericValue x;
attribute CSSNumericValue y;
attribute CSSNumericValue z;
};
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
Constructor(CSSNumericValue angle),
Constructor(CSSNumberish x, CSSNumberish y, CSSNumberish z, CSSNumericValue angle)]
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSRotate : CSSTransformComponent {
constructor(CSSNumericValue angle);
constructor(CSSNumberish x, CSSNumberish y, CSSNumberish z, CSSNumericValue angle);
attribute CSSNumberish x;
attribute CSSNumberish y;
attribute CSSNumberish z;
attribute CSSNumericValue angle;
};
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
Constructor(CSSNumberish x, CSSNumberish y, optional CSSNumberish z)]
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSScale : CSSTransformComponent {
constructor(CSSNumberish x, CSSNumberish y, optional CSSNumberish z);
attribute CSSNumberish x;
attribute CSSNumberish y;
attribute CSSNumberish z;
};
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
Constructor(CSSNumericValue ax, CSSNumericValue ay)]
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSSkew : CSSTransformComponent {
constructor(CSSNumericValue ax, CSSNumericValue ay);
attribute CSSNumericValue ax;
attribute CSSNumericValue ay;
};
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
Constructor(CSSNumericValue ax)]
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSSkewX : CSSTransformComponent {
constructor(CSSNumericValue ax);
attribute CSSNumericValue ax;
};
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
Constructor(CSSNumericValue ay)]
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSSkewY : CSSTransformComponent {
constructor(CSSNumericValue ay);
attribute CSSNumericValue ay;
};
/* Note that skew(x,y) is *not* the same as skewX(x) skewY(y),
thus the separate interfaces for all three. */
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
Constructor(CSSNumericValue length)]
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSPerspective : CSSTransformComponent {
constructor(CSSNumericValue length);
attribute CSSNumericValue length;
};
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
Constructor(DOMMatrixReadOnly matrix, optional CSSMatrixComponentOptions options = {})]
[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSMatrixComponent : CSSTransformComponent {
constructor(DOMMatrixReadOnly matrix, optional CSSMatrixComponentOptions options = {});
attribute DOMMatrix matrix;
};

View file

@ -46,6 +46,10 @@ dictionary DevicePermissionDescriptor : PermissionDescriptor {
DOMString deviceId;
};
dictionary CameraDevicePermissionDescriptor : DevicePermissionDescriptor {
boolean panTiltZoom = false;
};
dictionary PermissionSetParameters {
required PermissionDescriptor descriptor;
required PermissionState state;

View file

@ -9,7 +9,7 @@ interface WorkletGlobalScope {
[Exposed=Window]
interface Worklet {
[NewObject] Promise<void> addModule(USVString moduleURL, optional WorkletOptions options);
[NewObject] Promise<void> addModule(USVString moduleURL, optional WorkletOptions options = {});
};
dictionary WorkletOptions {

View file

@ -136,6 +136,21 @@ test(() => {
assert_equals(tTree.c3.assignedSlot, tTree.s3);
}, 'Previously assigned slotable is moved to new slot when it\'s reassigned.');
test(() => {
let tTree = createTestTree(test_assign);
tTree.s1.assign([tTree.c1]);
tTree.s2.assign([tTree.c2, tTree.c1]);
tTree.s3.assign([tTree.c1, tTree.c3]);
assert_array_equals(tTree.s1.assignedNodes(), []);
assert_array_equals(tTree.s2.assignedNodes(), [tTree.c2]);
assert_array_equals(tTree.s3.assignedNodes(), [tTree.c1, tTree.c3]);
assert_equals(tTree.c1.assignedSlot, tTree.s3);
assert_equals(tTree.c2.assignedSlot, tTree.s2);
assert_equals(tTree.c3.assignedSlot, tTree.s3);
}, 'Order and assignment of nodes are preserved during multiple assignment in a row.');
test(() => {
let tTree = createTestTree(test_assign);
@ -194,7 +209,7 @@ test(() => {
assert_array_equals(tTree.s4.assignedNodes(), []);
tTree.ns1.append(tTree.s1);
assert_array_equals(tTree.s1.assignedNodes(), [tTree.c1, tTree.c2, tTree.c3]);
assert_array_equals(tTree.s1.assignedNodes(), []);
}, 'Moving a slot\'s tree order position within a shadow host has no impact on its assigned slotables.');
test(() => {
@ -207,11 +222,41 @@ test(() => {
assert_array_equals(tTree.s1.assignedNodes(), [tTree.c2, tTree.c3]);
assert_array_equals(tTree.s4.assignedNodes(), []);
tTree.s4.assign(tTree.c1);
tTree.s4.assign([tTree.c1]);
assert_array_equals(tTree.s4.assignedNodes(), [tTree.c1]);
assert_equals(tTree.c1.assignedSlot, tTree.s4);
}, 'Appending slotable to different host, it loses slot assignment. It can be re-assigned within a new host.');
test(() => {
let tTree = createTestTree(test_assign);
tTree.s1.assign([tTree.c1]);
assert_array_equals(tTree.s1.assignedNodes(), [tTree.c1]);
tTree.shadow_root4.insertBefore(tTree.s1, tTree.s4);
assert_array_equals(tTree.s1.assignedNodes(), []);
// Don't trigger slot assignment on previous shadow root.
// assert_array_equals(tTree.s2.assignedNodes(), []);
tTree.shadow_root.insertBefore(tTree.s1, tTree.s2);
assert_array_equals(tTree.s1.assignedNodes(), []);
}, 'Previously assigned node should not be assigned if slot moved to a new shadow root. The slot remains empty when moved back, no trigger recalc.');
test(() => {
let tTree = createTestTree(test_assign);
tTree.s1.assign([tTree.c1]);
assert_array_equals(tTree.s1.assignedNodes(), [tTree.c1]);
tTree.shadow_root4.insertBefore(tTree.s1, tTree.s4);
assert_array_equals(tTree.s1.assignedNodes(), []);
// Trigger slot assignment on previous shadow root.
assert_array_equals(tTree.s2.assignedNodes(), []);
tTree.shadow_root.insertBefore(tTree.s1, tTree.s2);
assert_array_equals(tTree.s1.assignedNodes(), []);
}, 'Previously assigned node should not be assigned if slot moved to a new shadow root. The slot remains empty when moved back, trigger recalc.');
test(() => {
let tTree = createTestTree(test_assign);

Some files were not shown because too many files have changed in this diff Show more