Update web-platform-tests to revision 313f99aafa6620894b8d7a7acc6e015b9548e179

This commit is contained in:
WPT Sync Bot 2021-01-07 08:21:05 +00:00
parent 7840614814
commit 54c2e735e6
77 changed files with 1067 additions and 217 deletions

View file

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

View file

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

View file

@ -1,4 +0,0 @@
[hit-test-anonymous-block.html]
[Hit test beside line of text inside anonymous block]
expected: FAIL

View file

@ -2,6 +2,3 @@
[Hit test intersecting scaled box]
expected: FAIL
[Hit test within unscaled box]
expected: FAIL

View file

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

View file

@ -11,9 +11,3 @@
[X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
expected: FAIL
[X-Content-Type-Options%3A%20%2Cnosniff]
expected: FAIL
[Content-Type-Options%3A%20nosniff]
expected: FAIL

View file

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

View file

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

View file

@ -0,0 +1,19 @@
[sandbox-inherited-from-required-csp.html]
[initial empty document]
expected: FAIL
[same-origin]
expected: FAIL
[blob URL]
expected: FAIL
[cross-origin]
expected: FAIL
[about:blank]
expected: FAIL
[srcdoc]
expected: FAIL

View file

@ -1,4 +1,5 @@
[embedded-opener-remove-frame.html]
expected: CRASH
[opener of discarded nested browsing context]
expected: FAIL

View file

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

View file

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

View file

@ -1,4 +0,0 @@
[form-double-submit-2.html]
[preventDefault should allow onclick submit() to succeed]
expected: FAIL

View file

@ -1,4 +0,0 @@
[form-double-submit.html]
[default submit action should supersede onclick submit()]
expected: FAIL

View file

@ -1,28 +1,7 @@
[select-event.html]
[input type url: setSelectionRange() a second time (must not fire select)]
expected: FAIL
[input type tel: select() a second time (must not fire select)]
expected: FAIL
[input type password: selectionDirection a second time (must not fire select)]
expected: FAIL
[input type url: select() a second time (must not fire select)]
expected: FAIL
[input type text: setRangeText() a second time (must not fire select)]
expected: FAIL
[input type password: select() a second time (must not fire select)]
expected: FAIL
[textarea: selectionDirection a second time (must not fire select)]
expected: FAIL
[input type password: selectionEnd out of range a second time (must not fire select)]
expected: FAIL
[input type tel: setSelectionRange out of range a second time (must not fire select)]
expected: FAIL
@ -38,33 +17,66 @@
[input type url: selectionStart out of range a second time (must not fire select)]
expected: FAIL
[textarea: setRangeText() a second time (must not fire select)]
expected: FAIL
[input type tel: setSelectionRange() a second time (must not fire select)]
expected: FAIL
[input type url: selectionDirection a second time (must not fire select)]
expected: FAIL
[input type tel: selectionEnd a second time (must not fire select)]
expected: FAIL
[textarea: selectionStart out of range a second time (must not fire select)]
expected: FAIL
[input type text: selectionStart out of range a second time (must not fire select)]
expected: FAIL
[input type text: selectionStart a second time (must not fire select)]
expected: FAIL
[input type url: selectionStart a second time (must not fire select)]
expected: FAIL
[input type search: selectionStart a second time (must not fire select)]
expected: FAIL
[input type url: setSelectionRange out of range a second time (must not fire select)]
[textarea: selectionEnd a second time (must not fire select)]
expected: FAIL
[input type tel: selectionEnd out of range a second time (must not fire select)]
expected: FAIL
[input type text: selectionEnd a second time (must not fire select)]
expected: FAIL
[input type tel: setRangeText() a second time (must not fire select)]
expected: FAIL
[input type url: selectionEnd a second time (must not fire select)]
expected: FAIL
[input type password: setSelectionRange() a second time (must not fire select)]
expected: FAIL
[input type text: setSelectionRange() a second time (must not fire select)]
expected: FAIL
[input type text: setSelectionRange out of range a second time (must not fire select)]
expected: FAIL
[input type text: selectionEnd out of range a second time (must not fire select)]
expected: FAIL
[input type tel: selectionDirection a second time (must not fire select)]
expected: FAIL
[input type search: selectionEnd a second time (must not fire select)]
expected: FAIL
[input type password: selectionEnd a second time (must not fire select)]
expected: FAIL
[input type text: selectionDirection a second time (must not fire select)]
expected: FAIL
[textarea: setSelectionRange out of range a second time (must not fire select)]
expected: FAIL
[input type url: setRangeText() a second time (must not fire select)]
expected: FAIL
[input type password: selectionStart out of range a second time (must not fire select)]
expected: FAIL
[textarea: selectionEnd out of range a second time (must not fire select)]
expected: FAIL
[input type tel: selectionStart a second time (must not fire select)]
expected: FAIL

View file

@ -0,0 +1,4 @@
[activation-behavior.window.html]
[<a> that is not connected should be followed]
expected: FAIL

View file

@ -0,0 +1,5 @@
[empty-assertion-clause.html]
expected: ERROR
[Test that no error occurs when an empty import assertion clause is provided.]
expected: FAIL

View file

@ -0,0 +1,4 @@
[invalid-type-assertion-error.html]
[Test that invalid module type assertion leads to TypeError on window.]
expected: FAIL

View file

@ -0,0 +1,5 @@
[unsupported-assertion.html]
expected: ERROR
[Test that no error occurs when an unsupported import assertion is provided.]
expected: FAIL

View file

@ -1,4 +1,5 @@
[realtimeanalyser-fft-scaling.html]
expected: TIMEOUT
[X 2048-point FFT peak position is not equal to 64. Got 0.]
expected: FAIL

View file

@ -494,3 +494,6 @@
[X Stitched sine-wave buffers at sample rate 43800 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.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[28696\]\t-6.5086735184939384e+23\t9.3139332532882690e-1\t6.5086735184939384e+23\t6.9881041032756614e+23\t3.8985999999999999e-3\n\t[28697\]\t7.0477002859115601e-1\t9.0675884485244751e-1\t2.0198881626129150e-1\t2.2275913536212616e-1\t3.8985999999999999e-3\n\tMax AbsError of 6.5086735184939384e+23 at index of 28696.\n\tMax RelError of 6.9881041032756614e+23 at index of 28696.\n]
expected: FAIL
[X Stitched sine-wave buffers at sample rate 43800 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.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[28696\]\t1.1426107475823564e-22\t9.3139332532882690e-1\t9.3139332532882690e-1\t1.0000000000000000e+0\t3.8985999999999999e-3\n\t[28697\]\t7.0477002859115601e-1\t9.0675884485244751e-1\t2.0198881626129150e-1\t2.2275913536212616e-1\t3.8985999999999999e-3\n\tMax AbsError of 9.3139332532882690e-1 at index of 28696.\n\tMax RelError of 1.0000000000000000e+0 at index of 28696.\n]
expected: FAIL

View file

@ -1,5 +0,0 @@
[017.html]
expected: TIMEOUT
[origin of the script that invoked the method, about:blank]
expected: TIMEOUT

View file

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

View file

@ -128635,6 +128635,19 @@
{}
]
],
"out-of-flow-in-multicolumn-012.html": [
"349d059b7a77f9b70046d99bc4a5e26c7c298bad",
[
null,
[
[
"/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
],
"out-of-flow-in-multicolumn-013.html": [
"3bf06dfc1a779e3034122987a456fb33b2feb36e",
[
@ -179457,6 +179470,32 @@
{}
]
],
"flex-aspect-ratio-025.html": [
"fa9ce8ebce69f02e6b13d9d2233d1e3b46c7f1ab",
[
null,
[
[
"/css/reference/ref-filled-green-200px-square.html",
"=="
]
],
{}
]
],
"flex-aspect-ratio-026.html": [
"1df14468632baa8ffd03d690f7ddaa618acd7bf6",
[
null,
[
[
"/css/reference/ref-filled-green-200px-square.html",
"=="
]
],
{}
]
],
"grid-aspect-ratio-001.html": [
"ce91fe4e4e8b2bb7f610fb230a292f59188ff95b",
[
@ -314759,7 +314798,7 @@
},
"support": {
"grid-child-utils.js": [
"d75ad6eb7061349e5453c204235a172778528f6a",
"5e0c5caad12a879e68637b7ba058e44a89eafa01",
[]
]
},
@ -349117,6 +349156,28 @@
[]
]
},
"import-assertions": {
"empty-assertion-clause.js": [
"6913dd61dffe682063eb887a08c90242ca1b5f42",
[]
],
"empty-type-assertion.js": [
"5bb9b1ddb8e648c7165a3b29ab425fc97cb81037",
[]
],
"hello.js": [
"2f348444606435700656725dbcd9a08e8e10775f",
[]
],
"invalid-type-assertion.js": [
"e28c0176d5c3e444051f7b21070ac62a86f0ff0f",
[]
],
"unsupported-assertion.js": [
"45f6d60c9dae25f26640d6b79b08fc9a009fc06b",
[]
]
},
"is-module-goal.mjs": [
"b533fc2e906b4b9a0a912044b19ee523ae5eef7a",
[]
@ -360540,6 +360601,10 @@
"ff333bd97da4c6949a3142ac8789cb2e45d41b86",
[]
],
"create-blob-url-worker.js": [
"57e4882c24f7273e3469b9b60649ffa4b4f39617",
[]
],
"echo-content.py": [
"70ae4b60254cf7971cdd92dc2b1e382ef1a6196b",
[]
@ -361124,10 +361189,22 @@
"8539b40066dd91bbfaf7ef240b8104dcb2ab3b27",
[]
],
"nested-blob-url-worker-created-from-worker.html": [
"fc048e288e903e6c558c5518d133f2c2ec96223e",
[]
],
"nested-blob-url-workers.html": [
"f0eafcd3e01c3f1857eee7fced78a3a494a8afb4",
[]
],
"nested-iframe-parent.html": [
"115ab26e1221024b30313569f484942b10f6dba0",
[]
],
"nested-worker-created-from-blob-url-worker.html": [
"3fad2c9228ceb1573a09a18cba480fdd6747cdc4",
[]
],
"nested_load_worker.js": [
"ef0ed8fc704ceaa81f1eef8d4ed75fd041baae6d",
[]
@ -361268,6 +361345,10 @@
"f088ad127804297cf981e61acb1c33ea7b0620c4",
[]
],
"postmessage-fetched-text.js": [
"9fc67171d05dd28d6317e9e2ab986b0b68a7fc15",
[]
],
"postmessage-msgport-to-client-worker.js": [
"7af935f4f8fc01756980e46dcce5018ddc620e67",
[]
@ -363349,7 +363430,7 @@
[]
],
"safari-technology-preview.rb": [
"c78bcef5c454c0e023c411f09753aedb1b90df0b",
"628c5f60914cffa26da7d26d2d9a0502e1be735f",
[]
],
"system_info.yml": [
@ -363840,11 +363921,11 @@
[]
],
"log.py": [
"9e2ad74081e4a1b38b9c3c3ba61d49be2e8151fd",
"6551c2b5f7cc0f61a85ef5ffb4bbc466a585b1ab",
[]
],
"manifest.py": [
"14d3844d461cd7e0d7a071dd957ad2829885a3c6",
"1b4f407b9626be61fca132cd7d0124b4b3d69d7e",
[]
],
"sourcefile.py": [
@ -363886,7 +363967,7 @@
[]
],
"update.py": [
"296533a6babf176e4514bcf3f29e163fdf9a9fdf",
"a86ef7c8aa28f1f209f10b7254d1ca07cb17df51",
[]
],
"utils.py": [
@ -406491,6 +406572,13 @@
{}
]
],
"content-visibility-080.html": [
"d3cea5fb83767ddfc236850097387644e0f74c8e",
[
null,
{}
]
],
"inheritance.html": [
"e1ae8164de00467a450511da9ca4bf7f138e9c71",
[
@ -430078,7 +430166,7 @@
],
"parser": {
"parser-constructs-custom-element-in-document-write.html": [
"3b5256677d0d08f2dac9240df06abc334f577f7c",
"14c830b9ba961e701ea39656f42a73cd638e65df",
[
null,
{}
@ -460931,6 +461019,13 @@
{}
]
],
"sandbox-inherited-from-required-csp.html": [
"d1bc4d1e04d01177943b91893156d715ec2ed15a",
[
null,
{}
]
],
"sandbox-initial-empty-document-toward-same-origin.html": [
"d1306c970322682f3979c497a5decd78218ba845",
[
@ -491903,6 +491998,29 @@
{}
]
],
"import-assertions": {
"empty-assertion-clause.html": [
"3a7c371189c9e847327ac14f49d4ee5153f35295",
[
null,
{}
]
],
"invalid-type-assertion-error.html": [
"d3399f085cede5afa124523b43ac6a301b6cb080",
[
null,
{}
]
],
"unsupported-assertion.html": [
"edda2d737a3cfa4c39f717f527ed6ad6da6b338d",
[
null,
{}
]
]
},
"json-module": {
"invalid-content-type.tentative.html": [
"e6da2db7ebc03ac7753b19dce4e9c3fc38a30014",
@ -499600,6 +499718,13 @@
{}
]
],
"same-document-with-document-root.html": [
"15cb7c4cbc278079b15da8af6bfa11a2d6ad3ddc",
[
null,
{}
]
],
"same-document-zero-size-target.html": [
"20bd11d4beb1e8bdd623eaad96f11788747f0d15",
[
@ -512440,7 +512565,7 @@
]
],
"pointerevent_auxclick_is_a_pointerevent.html": [
"000d0df764e53f8d1cfa629ebfcccfb768a7a4bf",
"aac73db9eb7c5f5a7c71207e52eab30bf53f3526",
[
null,
{
@ -512503,7 +512628,7 @@
]
],
"pointerevent_click_is_a_pointerevent.html": [
"dfea148898e4eed29f25e9bf04067a6e7e251b25",
"2f5dfd4dbfdd81e45868517632a41998aed8f21d",
[
null,
{
@ -530641,6 +530766,13 @@
{}
]
],
"nested-blob-url-workers.https.html": [
"7269cbb701fabc2faa746f6ed47fba8fa9d423c8",
[
null,
{}
]
],
"next-hop-protocol.https.html": [
"7a907438d5d9f0b3ba1e198e048ea0b2e86a2415",
[
@ -540914,7 +541046,7 @@
]
],
"SVGAnimatedEnumeration-SVGFECompositeElement.html": [
"e6315b434504e754872dd460988187957efbfb07",
"0e99f5fe9cb3335f54591d75e75bffdc0262d0d2",
[
null,
{}
@ -565379,7 +565511,7 @@
]
],
"event-timeout.any.js": [
"da8ca11bb8ea1a8ef673be20ae2de8715a4d1130",
"c73cd1a48540511a5f527b49668aac18e5330169",
[
"xhr/event-timeout.any.html",
{

View file

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

View file

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

View file

@ -1,4 +0,0 @@
[hit-test-anonymous-block.html]
[Hit test beside line of text inside anonymous block]
expected: FAIL

View file

@ -2,6 +2,3 @@
[Hit test intersecting scaled box]
expected: FAIL
[Hit test within unscaled box]
expected: FAIL

View file

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

View file

@ -11,9 +11,3 @@
[X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
expected: FAIL
[X-Content-Type-Options%3A%20%2Cnosniff]
expected: FAIL
[Content-Type-Options%3A%20nosniff]
expected: FAIL

View file

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

View file

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

View file

@ -0,0 +1,19 @@
[sandbox-inherited-from-required-csp.html]
[initial empty document]
expected: FAIL
[same-origin]
expected: FAIL
[blob URL]
expected: FAIL
[cross-origin]
expected: FAIL
[about:blank]
expected: FAIL
[srcdoc]
expected: FAIL

View file

@ -1,4 +1,5 @@
[embedded-opener-remove-frame.html]
expected: CRASH
[opener and "removed" embedded documents]
expected: FAIL

View file

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

View file

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

View file

@ -1,4 +0,0 @@
[form-double-submit-2.html]
[preventDefault should allow onclick submit() to succeed]
expected: FAIL

View file

@ -1,4 +0,0 @@
[form-double-submit.html]
[default submit action should supersede onclick submit()]
expected: FAIL

View file

@ -1,28 +1,7 @@
[select-event.html]
[input type url: setSelectionRange() a second time (must not fire select)]
expected: FAIL
[input type tel: select() a second time (must not fire select)]
expected: FAIL
[input type password: selectionDirection a second time (must not fire select)]
expected: FAIL
[input type url: select() a second time (must not fire select)]
expected: FAIL
[input type text: setRangeText() a second time (must not fire select)]
expected: FAIL
[input type password: select() a second time (must not fire select)]
expected: FAIL
[textarea: selectionDirection a second time (must not fire select)]
expected: FAIL
[input type password: selectionEnd out of range a second time (must not fire select)]
expected: FAIL
[input type tel: setSelectionRange out of range a second time (must not fire select)]
expected: FAIL
@ -38,33 +17,66 @@
[input type url: selectionStart out of range a second time (must not fire select)]
expected: FAIL
[textarea: setRangeText() a second time (must not fire select)]
expected: FAIL
[input type tel: setSelectionRange() a second time (must not fire select)]
expected: FAIL
[input type url: selectionDirection a second time (must not fire select)]
expected: FAIL
[input type tel: selectionEnd a second time (must not fire select)]
expected: FAIL
[textarea: selectionStart out of range a second time (must not fire select)]
expected: FAIL
[input type text: selectionStart out of range a second time (must not fire select)]
expected: FAIL
[input type text: selectionStart a second time (must not fire select)]
expected: FAIL
[input type url: selectionStart a second time (must not fire select)]
expected: FAIL
[input type search: selectionStart a second time (must not fire select)]
expected: FAIL
[input type url: setSelectionRange out of range a second time (must not fire select)]
[textarea: selectionEnd a second time (must not fire select)]
expected: FAIL
[input type tel: selectionEnd out of range a second time (must not fire select)]
expected: FAIL
[input type text: selectionEnd a second time (must not fire select)]
expected: FAIL
[input type tel: setRangeText() a second time (must not fire select)]
expected: FAIL
[input type url: selectionEnd a second time (must not fire select)]
expected: FAIL
[input type password: setSelectionRange() a second time (must not fire select)]
expected: FAIL
[input type text: setSelectionRange() a second time (must not fire select)]
expected: FAIL
[input type text: setSelectionRange out of range a second time (must not fire select)]
expected: FAIL
[input type text: selectionEnd out of range a second time (must not fire select)]
expected: FAIL
[input type tel: selectionDirection a second time (must not fire select)]
expected: FAIL
[input type search: selectionEnd a second time (must not fire select)]
expected: FAIL
[input type password: selectionEnd a second time (must not fire select)]
expected: FAIL
[input type text: selectionDirection a second time (must not fire select)]
expected: FAIL
[textarea: setSelectionRange out of range a second time (must not fire select)]
expected: FAIL
[input type url: setRangeText() a second time (must not fire select)]
expected: FAIL
[input type password: selectionStart out of range a second time (must not fire select)]
expected: FAIL
[textarea: selectionEnd out of range a second time (must not fire select)]
expected: FAIL
[input type tel: selectionStart a second time (must not fire select)]
expected: FAIL

View file

@ -0,0 +1,4 @@
[activation-behavior.window.html]
[<a> that is not connected should be followed]
expected: FAIL

View file

@ -0,0 +1,5 @@
[empty-assertion-clause.html]
expected: ERROR
[Test that no error occurs when an empty import assertion clause is provided.]
expected: FAIL

View file

@ -0,0 +1,4 @@
[invalid-type-assertion-error.html]
[Test that invalid module type assertion leads to TypeError on window.]
expected: FAIL

View file

@ -0,0 +1,5 @@
[unsupported-assertion.html]
expected: ERROR
[Test that no error occurs when an unsupported import assertion is provided.]
expected: FAIL

View file

@ -1,4 +1,5 @@
[realtimeanalyser-fft-scaling.html]
expected: TIMEOUT
[X 2048-point FFT peak position is not equal to 64. Got 0.]
expected: FAIL

View file

@ -722,3 +722,6 @@
[X Stitched sine-wave buffers at sample rate 43800 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.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[28696\]\t-6.5086735184939384e+23\t9.3139332532882690e-1\t6.5086735184939384e+23\t6.9881041032756614e+23\t3.8985999999999999e-3\n\t[28697\]\t7.0477002859115601e-1\t9.0675884485244751e-1\t2.0198881626129150e-1\t2.2275913536212616e-1\t3.8985999999999999e-3\n\tMax AbsError of 6.5086735184939384e+23 at index of 28696.\n\tMax RelError of 6.9881041032756614e+23 at index of 28696.\n]
expected: FAIL
[X Stitched sine-wave buffers at sample rate 43800 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.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[28696\]\t1.1426107475823564e-22\t9.3139332532882690e-1\t9.3139332532882690e-1\t1.0000000000000000e+0\t3.8985999999999999e-3\n\t[28697\]\t7.0477002859115601e-1\t9.0675884485244751e-1\t2.0198881626129150e-1\t2.2275913536212616e-1\t3.8985999999999999e-3\n\tMax AbsError of 9.3139332532882690e-1 at index of 28696.\n\tMax RelError of 1.0000000000000000e+0 at index of 28696.\n]
expected: FAIL

View file

@ -1,5 +0,0 @@
[017.html]
expected: TIMEOUT
[origin of the script that invoked the method, about:blank]
expected: TIMEOUT

View file

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

View file

@ -0,0 +1,39 @@
<!DOCTYPE html>
<link rel="help" href="href=https://www.w3.org/TR/css-position-3/#abspos-breaking">
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
<!-- Fragmented OOF with `height: auto`, positioned with the bottom property and
the second child fragment has a 'break-inside: avoid'. The abspos fragment
should still encompass its children completely despite the break. -->
<style>
#multicol {
column-count: 2;
width: 100px;
height: 100px;
column-fill: auto;
column-gap: 0px;
background-color: red;
}
.rel {
position: relative;
height: 190px;
width: 50px;
}
.abs {
position: absolute;
bottom: 0;
width: 50px;
background-color: green;
}
</style>
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div id="multicol">
<div class="rel">
<!-- The abspos computed height is 190px, but because it has to encompass
all its children, it will be 200px. -->
<div class="abs">
<div style="height: 90px;"></div>
<div style="height: 50px; break-inside: avoid;"></div>
<div style="height: 50px;"></div>
</div>
</div>
</div>

View file

@ -0,0 +1,31 @@
<!doctype HTML>
<html id=html>
<meta charset="utf8">
<title>Content Visibility: caret position with html hidden</title>
<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css-contain/#content-visibility">
<meta name="assert" content="caretRangeFromPoint works even if html has content-visibility hidden">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<meter></meter>
<iframe></iframe>
<style>
* {
all: initial;
content-visibility: hidden;
}
</style>
<script>
test(() => {
const range = document.caretRangeFromPoint();
assert_not_equals(range, null, "range exists");
assert_equals(range.startContainer, html, "startContainer is html");
assert_equals(range.startOffset, 0, "startOffset is zero");
assert_equals(range.endContainer, html, "endContainer is html");
assert_equals(range.endOffset, 0, "endOffset is zero");
}, "Caret range from point");
</script>
</html>

View file

@ -5,7 +5,7 @@ const gridChildHelperRow = "row";
const gridChildHelperCol = "col";
// Helper for building testcases for grid-template-* with a child div in
// multiple positions. Prop is expected ot be one of gridChildHelperRow or
// multiple positions. Prop is expected to be one of gridChildHelperRow or
// gridChildHelperCol, to select testing grid rows or grid columns,
// respectively.
// The child div is found by the id of 'child'.

View file

@ -0,0 +1,73 @@
<!DOCTYPE html>
<html>
<title>CSS aspect-ratio: Test flex item's resolved width/min-width with border-box box-sizing in a row flex container</title>
<link rel="author" title="Ting-Yu Lin" href="mailto:tlin@mozilla.com">
<link rel="author" title="Mozilla" href="https://www.mozilla.org/">
<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#aspect-ratio">
<link rel="match" href="../../reference/ref-filled-green-200px-square.html" />
<style>
.flexContainer {
display: flex;
flex-direction: row;
width: 1px;
}
.item {
background: green;
padding-top: 15px;
box-sizing: border-box;
}
</style>
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<!-- In the following four flex containers, the aspect-ratio works with border-box. -->
<div class="flexContainer" style="width: auto;">
<!-- The border-box height 25px is transferred to the main axis,
yielding a resolved flex base size of 200px. -->
<div class="item" style="min-width:0; height: 25px; aspect-ratio: 8/1;"></div>
</div>
<div class="flexContainer">
<!-- The border-box height 25px is transferred to the main axis,
yielding a resolved min-width:auto of 200px. -->
<div class="item" style="height: 25px; aspect-ratio: 8/1;"></div>
</div>
<div class="flexContainer">
<!-- The border-box min-height 25px is transferred to the main axis,
yielding a resolved min-width:auto of 200px. -->
<div class="item" style="min-height: 25px; aspect-ratio: 8/1;"></div>
</div>
<div class="flexContainer">
<!-- The border-box height 25px (clamped by max-height) is transferred to the main axis,
yielding a resolved min-width:auto of 200px. -->
<div class="item" style="max-height: 25px; height: 100px; aspect-ratio: 8/1;"></div>
</div>
<!-- In the following four flex containers, the aspect-ratio works with content-box
because its value contains 'auto'. -->
<div class="flexContainer" style="width: auto;">
<!-- The content-box height 10px is transferred to the main axis,
yielding a resolved flex base size of 200px. -->
<div class="item" style="min-width:0; height: 25px; aspect-ratio: auto 20/1;"></div>
</div>
<div class="flexContainer">
<!-- The content-box height 10px is transferred to the main axis,
yielding a resolved min-width:auto of 200px. -->
<div class="item" style="height: 25px; aspect-ratio: auto 20/1;"></div>
</div>
<div class="flexContainer">
<!-- The content-box min-height 10px is transferred to the main axis,
yielding a resolved min-width:auto of 200px. -->
<div class="item" style="min-height: 25px; aspect-ratio: auto 20/1;"></div>
</div>
<div class="flexContainer">
<!-- The content-box height 10px (clamped by max-height) is transferred
to the main axis, yielding a resolved min-width:auto of 200px. -->
<div class="item" style="max-height: 25px; height: 100px; aspect-ratio: auto 20/1;"></div>
</div>
</html>

View file

@ -0,0 +1,77 @@
<!DOCTYPE html>
<html>
<title>CSS aspect-ratio: Test flex item's resolved height/min-height with border-box box-sizing in a column flex container</title>
<link rel="author" title="Ting-Yu Lin" href="mailto:tlin@mozilla.com">
<link rel="author" title="Mozilla" href="https://www.mozilla.org/">
<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#aspect-ratio">
<link rel="match" href="../../reference/ref-filled-green-200px-square.html" />
<style>
.flexContainer {
display: flex;
flex-direction: column;
float: left;
height: 1px;
}
.item {
background: green;
padding-left: 15px;
box-sizing: border-box;
}
.item > div {
height: 500px; /* Set a large content size suggestion for flex item. */
}
</style>
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<!-- In the following four flex containers, the aspect-ratio works with border-box. -->
<div class="flexContainer" style="height: auto;">
<!-- The border-box width 25px is transferred to the main axis,
yielding a resolved flex base size of 200px. -->
<div class="item" style="min-height:0; width: 25px; aspect-ratio: 1/8;"><div></div></div>
</div>
<div class="flexContainer">
<!-- The border-box width 25px is transferred to the main axis,
yielding a resolved min-height:auto of 200px. -->
<div class="item" style="width: 25px; aspect-ratio: 1/8;"><div></div></div>
</div>
<div class="flexContainer">
<!-- The border-box min-width 25px is transferred to the main axis,
yielding a resolved min-height:auto of 200px. -->
<div class="item" style="min-width: 25px; aspect-ratio: 1/8;"><div></div></div>
</div>
<div class="flexContainer">
<!-- The border-box width 25px (clamped by max-width) is transferred to the main axis,
yielding a resolved min-height:auto of 200px. -->
<div class="item" style="max-width: 25px; width: 100px; aspect-ratio: 1/8;"><div></div></div>
</div>
<!-- In the following four flex containers, the aspect-ratio works with content-box
because its value contains 'auto'. -->
<div class="flexContainer" style="height: auto;">
<!-- The content-box width 10px is transferred to the main axis,
yielding a resolved flex base size of 200px. -->
<div class="item" style="min-height:0; width: 25px; aspect-ratio: auto 1/20;"><div></div></div>
</div>
<div class="flexContainer">
<!-- The content-box width 10px is transferred to the main axis,
yielding a resolved min-height:auto of 200px. -->
<div class="item" style="width: 25px; aspect-ratio: auto 1/20;"><div></div></div>
</div>
<div class="flexContainer">
<!-- The content-box min-width 10px is transferred to the main axis,
yielding a resolved min-height:auto of 200px. -->
<div class="item" style="min-width: 25px; aspect-ratio: auto 1/20;"><div></div></div>
</div>
<div class="flexContainer">
<!-- The content-box width 10px (clamped by max-width) is transferred to the main axis,
yielding a resolved min-height:auto of 200px. -->
<div class="item" style="max-width: 25px; width: 100px; aspect-ratio: auto 1/20;"><div></div></div>
</div>
</html>

View file

@ -14,10 +14,16 @@
<div id="log"></div>
<script>
class MyCustomElement extends HTMLElement { }
var numberOfChildNodesInConnectedCallback = 0;
class MyCustomElement extends HTMLElement {
connectedCallback() {
numberOfChildNodesInConnectedCallback = this.childNodes.length;
}
}
customElements.define('my-custom-element', MyCustomElement);
document.write('<my-custom-element></my-custom-element>');
document.write('<my-custom-element>hello <b>world</b></my-custom-element>');
test(function () {
var instance = document.querySelector('my-custom-element');
@ -27,6 +33,11 @@ test(function () {
}, 'HTML parser must instantiate custom elements inside document.write');
test(function () {
assert_equals(numberOfChildNodesInConnectedCallback, 0);
}, 'HTML parser should call connectedCallback before appending child nodes inside document.write');
</script>
</body>
</html>

View file

@ -0,0 +1,141 @@
<!DOCTYPE html>
<meta charset=utf-8>
<title>Inherit sandbox from CSP embedded enforcement</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/get-host-info.sub.js"></script>
<body>
<script>
// Check sandbox flags are properly defined when its parent requires them and
// the child allows it.
const same_origin = get_host_info().HTTPS_ORIGIN;
const cross_origin = get_host_info().HTTPS_REMOTE_ORIGIN;
const check_sandbox_url =
"/html/browsers/sandboxing/resources/check-sandbox-flags.html?pipe=";
const allow_csp_from_star = "|header(Allow-CSP-From,*)";
// Return a promise, resolving when |element| triggers |event_name| event.
const future = (element, event_name) => {
return new Promise(resolve => {
element.addEventListener(event_name, event => resolve(event))
});
};
const check_sandbox_script = `
try {
document.domain = document.domain;
parent.postMessage("document-domain-is-allowed", "*");
} catch (exception) {
parent.postMessage("document-domain-is-disallowed", "*");
}
`;
const sandbox_policy = "sandbox allow-scripts allow-same-origin";
promise_test(async test => {
const iframe = document.createElement("iframe");
iframe.csp = sandbox_policy;
// The <iframe> immediately hosts the initial empty document after being
// appended into the DOM. It will, as long as its 'src' isn't loaded. That's
// why a page do not load is being used.
iframe.src = "/fetch/api/resources/infinite-slow-response.py";
document.body.appendChild(iframe);
const iframe_reply = future(window, "message");
iframe.contentWindow.location =
`javascript:${encodeURI(check_sandbox_script)}`;
const result = await iframe_reply;
iframe.remove();
assert_equals(result.data, "document-domain-is-not-allowed");
}, "initial empty document");
promise_test(async test => {
const iframe = document.createElement("iframe");
iframe.src = "data:text/html,dummy";
const iframe_load_1 = future(iframe, "load");
document.body.appendChild(iframe);
await iframe_load_1;
const iframe_load_2 = future(iframe, "load");
iframe.csp = sandbox_policy;
iframe.src = "about:blank";
await iframe_load_2;
const iframe_reply = future(window, "message");
iframe.contentWindow.location =
`javascript:${encodeURI(check_sandbox_script)}`;
const result = await iframe_reply;
assert_equals(result.data, "document-domain-is-not-allowed");
}, "about:blank");
promise_test(async test => {
const iframe = document.createElement("iframe");
iframe.csp = sandbox_policy;
iframe.src =
`data:text/html,<script>${encodeURI(check_sandbox_script)}</scr`+`ipt>`;
const iframe_reply = future(window, "message");
document.body.appendChild(iframe);
const result = await iframe_reply;
assert_equals(result.data, "document-domain-is-disallowed");
}, "data-url");
promise_test(async test => {
const iframe = document.createElement("iframe");
iframe.csp = sandbox_policy;
iframe.srcdoc = `<script>${check_sandbox_script}</scr`+`ipt>`;
const iframe_reply = future(window, "message");
document.body.appendChild(iframe);
const result = await iframe_reply;
assert_equals(result.data, "document-domain-is-not-allowed");
}, "srcdoc");
promise_test(async test => {
const iframe = document.createElement("iframe");
iframe.csp = sandbox_policy;
const blob = new Blob(
[ `<script>${check_sandbox_script}</scr`+`ipt>` ], { type: "text/html" });
iframe.src = URL.createObjectURL(blob);
const iframe_reply = future(window, "message");
document.body.appendChild(iframe);
const result = await iframe_reply;
assert_equals(result.data, "document-domain-is-disallowed");
}, "blob URL");
promise_test(async test => {
const iframe = document.createElement("iframe");
iframe.csp = sandbox_policy;
iframe.src = same_origin + check_sandbox_url + allow_csp_from_star;
const iframe_reply = future(window, "message");
document.body.appendChild(iframe);
const result = await iframe_reply;
assert_equals(result.data, "document-domain-is-disallowed");
}, "same-origin");
promise_test(async test => {
const iframe = document.createElement("iframe");
iframe.csp = sandbox_policy;
iframe.src = cross_origin + check_sandbox_url + allow_csp_from_star;
const iframe_reply = future(window, "message");
document.body.appendChild(iframe);
const result = await iframe_reply;
assert_equals(result.data, "document-domain-is-disallowed");
}, "cross-origin");
</script>

View file

@ -0,0 +1,19 @@
<!DOCTYPE html>
<title>Handling of empty import assertion clause</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
window.log = [];
window.addEventListener("error", ev => log.push(ev.error));
const test_load = async_test(
"Test that no error occurs when an empty import assertion clause is provided.");
window.addEventListener("load", test_load.step_func_done(ev => {
assert_array_equals(window.log, ["hello", "empty-assertion-clause"]);
}));
function unreachable() { log.push("unexpected"); }
</script>
<script type="module" src="./empty-assertion-clause.js" onerror="unreachable()"></script>

View file

@ -0,0 +1,2 @@
import "./hello.js" assert { };
log.push("empty-assertion-clause");

View file

@ -0,0 +1,2 @@
import "./hello.js#2" assert { type: "" };
log.push("empty-type-assertion");

View file

@ -0,0 +1,24 @@
<!DOCTYPE html>
<title>Handling of invalid module type import assertions</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
setup({allow_uncaught_exception: true});
window.log = [];
window.addEventListener("error", ev => log.push(ev.error));
const test_load = async_test(
"Test that invalid module type assertion leads to TypeError on window.");
window.addEventListener("load", test_load.step_func_done(ev => {
assert_equals(log.length, 2);
assert_equals(log[0].constructor, TypeError);
assert_equals(log[1].constructor, TypeError);
}));
function unreachable() { log.push("unexpected"); }
</script>
<script type="module" src="./invalid-type-assertion.js" onerror="unreachable()"></script>
<script type="module" src="./empty-type-assertion.js" onerror="unreachable()"></script>

View file

@ -0,0 +1,2 @@
import "./hello.js#1" assert { type: "notARealType" };
log.push("invalid-type-assertion");

View file

@ -0,0 +1,19 @@
<!DOCTYPE html>
<title>Handling of unsupported assertion</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
window.log = [];
window.addEventListener("error", ev => log.push(ev.error));
const test_load = async_test(
"Test that no error occurs when an unsupported import assertion is provided.");
window.addEventListener("load", test_load.step_func_done(ev => {
assert_array_equals(window.log, ["hello", "unsupported-assertion"]);
}));
function unreachable() { log.push("unexpected"); }
</script>
<script type="module" src="./unsupported-assertion.js" onerror="unreachable()"></script>

View file

@ -0,0 +1,2 @@
import "./hello.js" assert { unsupportedAssertionKey: "unsupportedAssertionValue" };
log.push("unsupported-assertion");

View file

@ -0,0 +1,60 @@
<!DOCTYPE html>
<meta name="viewport" content="width=device-width,initial-scale=1">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="./resources/intersection-observer-test-utils.js"></script>
<style>
pre,
#log {
position: absolute;
top: 0;
left: 200px;
}
.spacer {
height: calc(100vh + 100px);
}
#target {
width: 100px;
height: 100px;
background-color: green;
}
</style>
<div class="spacer"></div>
<div id="target"></div>
<div class="spacer"></div>
<script>
var vw = document.documentElement.clientWidth;
var vh = document.documentElement.clientHeight;
var entries = [];
var target;
runTestCycle(function () {
target = document.getElementById("target");
assert_true(!!target, "target exists");
var observer = new IntersectionObserver(function (changes) {
entries = entries.concat(changes)
}, {root: document});
observer.observe(target);
entries = entries.concat(observer.takeRecords());
assert_equals(entries.length, 0, "No initial notifications.");
runTestCycle(step0, "First rAF.");
}, "IntersectionObserver in a single document using document as root.");
function step0() {
document.scrollingElement.scrollTop = 300;
runTestCycle(step1, "document.scrollingElement.scrollTop = 300");
checkLastEntry(entries, 0, [8, 108, vh + 108, vh + 208, 0, 0, 0, 0, 0, vw, 0, vh, false]);
}
function step1() {
document.scrollingElement.scrollTop = 0;
checkLastEntry(entries, 1, [8, 108, vh - 192, vh - 92, 8, 108, vh - 192, vh - 92, 0, vw, 0, vh, true]);
}
</script>

View file

@ -31,7 +31,7 @@ function testFunction(test){
function run_test(pointerType){
promise_test((test) => new Promise((resolve, reject) => {
const testPointer = "TestPointer";
const testPointer = pointerType + "TestPointer";
let auxclickFunc = testFunction(test);
test.add_cleanup(() => {
target.removeEventListener("auxclick", auxclickFunc);

View file

@ -31,7 +31,7 @@ function testFunction(test){
function run_test(pointerType){
promise_test((test) => new Promise((resolve, reject) => {
const testPointer = "TestPointer";
const testPointer = pointerType + "TestPointer";
let clickFunc = testFunction(test);
test.add_cleanup(() => {
target.removeEventListener("click", clickFunc);

View file

@ -0,0 +1,42 @@
<!doctype html>
<meta charset=utf-8>
<title>Service Worker: nested blob URL worker clients</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/test-helpers.sub.js"></script>
<body>
<script>
const SCRIPT = 'resources/simple-intercept-worker.js';
const SCOPE = 'resources/';
const RESOURCE = 'resources/simple.txt';
promise_test((t) => {
return runTest(t, 'resources/nested-blob-url-workers.html');
}, 'Nested blob URL workers should be intercepted by a service worker.');
promise_test((t) => {
return runTest(t, 'resources/nested-worker-created-from-blob-url-worker.html');
}, 'Nested worker created from a blob URL worker should be intercepted by a service worker.');
promise_test((t) => {
return runTest(t, 'resources/nested-blob-url-worker-created-from-worker.html');
}, 'Nested blob URL worker created from a worker should be intercepted by a service worker.');
async function runTest(t, iframe_url) {
const reg = await service_worker_unregister_and_register(t, SCRIPT, SCOPE);
t.add_cleanup(_ => reg.unregister());
await wait_for_state(t, reg.installing, 'activated');
const frame = await with_iframe(iframe_url);
t.add_cleanup(_ => frame.remove());
assert_not_equals(frame.contentWindow.navigator.serviceWorker.controller,
null, 'frame should be controlled');
const response_text = await frame.contentWindow.fetch_in_worker(RESOURCE);
assert_equals(response_text, 'intercepted by service worker',
'fetch() should be intercepted.');
}
</script>
</body>

View file

@ -0,0 +1,22 @@
const childWorkerScript = `
self.onmessage = async (e) => {
const response = await fetch(e.data);
const text = await response.text();
self.postMessage(text);
};
`;
const blob = new Blob([childWorkerScript], { type: 'text/javascript' });
const blobUrl = URL.createObjectURL(blob);
const childWorker = new Worker(blobUrl);
// When a message comes from the parent frame, sends a resource url to the child
// worker.
self.onmessage = (e) => {
childWorker.postMessage(e.data);
};
// When a message comes from the child worker, sends a content of fetch() to the
// parent frame.
childWorker.onmessage = (e) => {
self.postMessage(e.data);
};

View file

@ -0,0 +1,16 @@
<!doctype html>
<script>
const baseLocation = window.location;
const workerUrl = new URL('create-blob-url-worker.js', baseLocation).href;
const worker = new Worker(workerUrl);
function fetch_in_worker(url) {
const resourceUrl = new URL(url, baseLocation).href;
return new Promise((resolve) => {
worker.onmessage = (event) => {
resolve(event.data);
};
worker.postMessage(resourceUrl);
});
}
</script>

View file

@ -0,0 +1,38 @@
<!doctype html>
<script>
const baseLocation = window.location;
const parentWorkerScript = `
const childWorkerScript = 'self.onmessage = async (e) => {' +
' const response = await fetch(e.data);' +
' const text = await response.text();' +
' self.postMessage(text);' +
'};';
const blob = new Blob([childWorkerScript], { type: 'text/javascript' });
const blobUrl = URL.createObjectURL(blob);
const childWorker = new Worker(blobUrl);
// When a message comes from the parent frame, sends a resource url to the
// child worker.
self.onmessage = (e) => {
childWorker.postMessage(e.data);
};
// When a message comes from the child worker, sends a content of fetch() to
// the parent frame.
childWorker.onmessage = (e) => {
self.postMessage(e.data);
};
`;
const blob = new Blob([parentWorkerScript], { type: 'text/javascript' });
const blobUrl = URL.createObjectURL(blob);
const worker = new Worker(blobUrl);
function fetch_in_worker(url) {
const resourceUrl = new URL(url, baseLocation).href;
return new Promise((resolve) => {
worker.onmessage = (event) => {
resolve(event.data);
};
worker.postMessage(resourceUrl);
});
}
</script>

View file

@ -0,0 +1,33 @@
<!doctype html>
<script>
const baseLocation = window.location;
const parentWorkerScript = `
const workerUrl =
new URL('postmessage-fetched-text.js', '${baseLocation}').href;
const childWorker = new Worker(workerUrl);
// When a message comes from the parent frame, sends a resource url to the
// child worker.
self.onmessage = (e) => {
childWorker.postMessage(e.data);
};
// When a message comes from the child worker, sends a content of fetch() to
// the parent frame.
childWorker.onmessage = (e) => {
self.postMessage(e.data);
};
`;
const blob = new Blob([parentWorkerScript], { type: 'text/javascript' });
const blobUrl = URL.createObjectURL(blob);
const worker = new Worker(blobUrl);
function fetch_in_worker(url) {
const resourceUrl = new URL(url, baseLocation).href;
return new Promise((resolve) => {
worker.onmessage = (event) => {
resolve(event.data);
};
worker.postMessage(resourceUrl);
});
}
</script>

View file

@ -0,0 +1,5 @@
self.onmessage = async (e) => {
const response = await fetch(e.data);
const text = await response.text();
self.postMessage(text);
};

View file

@ -34,13 +34,18 @@ test(function() {
assert_equals(feCompositeElement.operator.baseVal, SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_XOR);
assert_equals(feCompositeElement.getAttribute('operator'), "xor");
// Switch to 'lighter'.
feCompositeElement.operator.baseVal = SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_LIGHTER;
assert_equals(feCompositeElement.operator.baseVal, SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_LIGHTER);
assert_equals(feCompositeElement.getAttribute('operator'), "lighter");
// Switch to 'arithmetic'.
feCompositeElement.operator.baseVal = SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_ARITHMETIC;
assert_equals(feCompositeElement.operator.baseVal, SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_ARITHMETIC);
assert_equals(feCompositeElement.getAttribute('operator'), "arithmetic");
// Try setting invalid values.
assert_throws_js(TypeError, function() { feCompositeElement.operator.baseVal = 7; });
assert_throws_js(TypeError, function() { feCompositeElement.operator.baseVal = 8; });
assert_equals(feCompositeElement.operator.baseVal, SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_ARITHMETIC);
assert_equals(feCompositeElement.getAttribute('operator'), "arithmetic");
@ -56,10 +61,5 @@ test(function() {
feCompositeElement.operator.baseVal = SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER;
assert_equals(feCompositeElement.operator.baseVal, SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER);
assert_equals(feCompositeElement.getAttribute('operator'), "over");
// Switch to 'lighter'.
assert_equals(SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_LIGHTER, undefined);
feCompositeElement.setAttribute("operator", "lighter");
assert_equals(feCompositeElement.operator.baseVal, SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_UNKNOWN);
});
</script>

View file

@ -1,10 +1,10 @@
cask "safari-technology-preview" do
if MacOS.version <= :catalina
version "117,001-86197-20201209-2fd0fe89-0c37-412d-99e2-4e288519e886"
sha256 "739630b43a8f021cc246b2c8f610b759e82a6336830d34dac1f388763e7cceea"
version "118,001-92142-20210105-a1c7713a-1f38-411e-85e3-c650a62d5c06"
sha256 "8ffd7f83166106992cfc65a9760efe61578b55e1d8a1c960d56867f2048bd953"
else
version "117,001-86222-20201209-8021be92-32b3-403f-b9a7-630ab8e91afb"
sha256 "2dc42342e1e3fdd95086dfbd3a8588f1e2d181fbd4f8bb279994be0c2e57ff6f"
version "118,001-92171-20210105-8d3c22a7-e518-4758-8df4-fe87c4fa078a"
sha256 "98c60037f4dace62ca78d5bc3ab6974c9ca078f60fe2a82062bbc8e3cbcfc55a"
end
url "https://secure-appldnld.apple.com/STP/#{version.after_comma}/SafariTechnologyPreview.dmg"

View file

@ -1,15 +1,10 @@
import logging
import sys
logger = logging.getLogger("manifest")
def setup():
def enable_debug_logging():
# type: () -> None
logger.setLevel(logging.DEBUG)
handler = logging.StreamHandler(sys.stdout)
formatter = logging.Formatter(logging.BASIC_FORMAT, None)
handler.setFormatter(formatter)
logger.addHandler(handler)
def get_logger():
# type: () -> logging.Logger

View file

@ -1,6 +1,7 @@
import io
import itertools
import os
import sys
from atomicwrites import atomic_write
from copy import deepcopy
from multiprocessing import Pool, cpu_count
@ -173,6 +174,8 @@ class Manifest(object):
constructed in the case we are not updating a path, but the absence of an item from
the iterator may be used to remove defunct entries from the manifest."""
logger = get_logger()
changed = False
# Create local variable references to these dicts so we avoid the
@ -221,20 +224,33 @@ class Manifest(object):
to_update.append(source_file)
if to_update:
logger.debug("Computing manifest update for %s items" % len(to_update))
changed = True
# 25 items was derived experimentally (2020-01) to be approximately the
# point at which it is quicker to create a Pool and parallelize update.
if parallel and len(to_update) > 25 and cpu_count() > 1:
# 25 derived experimentally (2020-01) to be approximately
# the point at which it is quicker to create Pool and
# parallelize this
pool = Pool()
# On Python 3 on Windows, using >= MAXIMUM_WAIT_OBJECTS processes
# causes a crash in the multiprocessing module. Whilst this enum
# can technically have any value, it is usually 64. For safety,
# restrict manifest regeneration to 48 processes on Windows.
#
# See https://bugs.python.org/issue26903 and https://bugs.python.org/issue40263
processes = cpu_count()
if sys.platform == "win32" and processes > 48:
processes = 48
pool = Pool(processes)
# chunksize set > 1 when more than 10000 tests, because
# chunking is a net-gain once we get to very large numbers
# of items (again, experimentally, 2020-01)
chunksize = max(1, len(to_update) // 10000)
logger.debug("Doing a multiprocessed update. CPU count: %s, "
"processes: %s, chunksize: %s" % (cpu_count(), processes, chunksize))
results = pool.imap_unordered(compute_manifest_items,
to_update,
chunksize=max(1, len(to_update) // 10000)
chunksize=chunksize
) # type: Iterator[Tuple[Tuple[Text, ...], Text, Set[ManifestItem], Text]]
elif PY3:
results = map(compute_manifest_items, to_update)
@ -444,6 +460,7 @@ def _load_and_update(tests_root, # type: Text
update = True
if rebuild or update:
logger.info("Updating manifest")
for retry in range(2):
try:
tree = vcs.get_tree(tests_root, manifest, manifest_path, cache_root,

View file

@ -4,7 +4,7 @@ import os
from . import manifest
from . import vcs
from .log import get_logger
from .log import get_logger, enable_debug_logging
from .download import download_from_github
here = os.path.dirname(__file__)
@ -64,6 +64,9 @@ def abs_path(path):
def create_parser():
# type: () -> argparse.ArgumentParser
parser = argparse.ArgumentParser()
parser.add_argument(
"-v", "--verbose", dest="verbose", action="store_true", default=False,
help="Turn on verbose logging")
parser.add_argument(
"-p", "--path", type=abs_path, help="Path to manifest file.")
parser.add_argument(
@ -90,6 +93,8 @@ def run(*args, **kwargs):
# type: (*Any, **Any) -> None
if kwargs["path"] is None:
kwargs["path"] = os.path.join(kwargs["tests_root"], "MANIFEST.json")
if kwargs["verbose"]:
enable_debug_logging()
update_from_cli(**kwargs)

View file

@ -14,5 +14,5 @@ test.step(function () {
client.send(null);
test.step_timeout(() => {
assert_unreached("ontimeout not called.");
}, 10);
}, 1000);
});