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] [Hit test intersecting scaled box]
expected: FAIL 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] [<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
expected: FAIL 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] [<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
expected: FAIL 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!] [X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
expected: FAIL 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] [embedded-opener-remove-frame.html]
expected: CRASH
[opener of discarded nested browsing context] [opener of discarded nested browsing context]
expected: FAIL expected: FAIL

View file

@ -1,5 +1,4 @@
[iframe_sandbox_popups_escaping-3.html] [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] [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] [iframe_sandbox_popups_nonescaping-3.html]
expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox] [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] [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)] [textarea: selectionDirection a second time (must not fire select)]
expected: FAIL 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)] [input type tel: setSelectionRange out of range a second time (must not fire select)]
expected: FAIL expected: FAIL
@ -38,33 +17,66 @@
[input type url: selectionStart out of range a second time (must not fire select)] [input type url: selectionStart out of range a second time (must not fire select)]
expected: FAIL 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)] [textarea: selectionStart out of range a second time (must not fire select)]
expected: FAIL 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)] [input type url: selectionStart a second time (must not fire select)]
expected: FAIL expected: FAIL
[input type search: selectionStart a second time (must not fire select)] [input type search: selectionStart a second time (must not fire select)]
expected: FAIL 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 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] [realtimeanalyser-fft-scaling.html]
expected: TIMEOUT
[X 2048-point FFT peak position is not equal to 64. Got 0.] [X 2048-point FFT peak position is not equal to 64. Got 0.]
expected: FAIL 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] [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 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": [ "out-of-flow-in-multicolumn-013.html": [
"3bf06dfc1a779e3034122987a456fb33b2feb36e", "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": [ "grid-aspect-ratio-001.html": [
"ce91fe4e4e8b2bb7f610fb230a292f59188ff95b", "ce91fe4e4e8b2bb7f610fb230a292f59188ff95b",
[ [
@ -314759,7 +314798,7 @@
}, },
"support": { "support": {
"grid-child-utils.js": [ "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": [ "is-module-goal.mjs": [
"b533fc2e906b4b9a0a912044b19ee523ae5eef7a", "b533fc2e906b4b9a0a912044b19ee523ae5eef7a",
[] []
@ -360540,6 +360601,10 @@
"ff333bd97da4c6949a3142ac8789cb2e45d41b86", "ff333bd97da4c6949a3142ac8789cb2e45d41b86",
[] []
], ],
"create-blob-url-worker.js": [
"57e4882c24f7273e3469b9b60649ffa4b4f39617",
[]
],
"echo-content.py": [ "echo-content.py": [
"70ae4b60254cf7971cdd92dc2b1e382ef1a6196b", "70ae4b60254cf7971cdd92dc2b1e382ef1a6196b",
[] []
@ -361124,10 +361189,22 @@
"8539b40066dd91bbfaf7ef240b8104dcb2ab3b27", "8539b40066dd91bbfaf7ef240b8104dcb2ab3b27",
[] []
], ],
"nested-blob-url-worker-created-from-worker.html": [
"fc048e288e903e6c558c5518d133f2c2ec96223e",
[]
],
"nested-blob-url-workers.html": [
"f0eafcd3e01c3f1857eee7fced78a3a494a8afb4",
[]
],
"nested-iframe-parent.html": [ "nested-iframe-parent.html": [
"115ab26e1221024b30313569f484942b10f6dba0", "115ab26e1221024b30313569f484942b10f6dba0",
[] []
], ],
"nested-worker-created-from-blob-url-worker.html": [
"3fad2c9228ceb1573a09a18cba480fdd6747cdc4",
[]
],
"nested_load_worker.js": [ "nested_load_worker.js": [
"ef0ed8fc704ceaa81f1eef8d4ed75fd041baae6d", "ef0ed8fc704ceaa81f1eef8d4ed75fd041baae6d",
[] []
@ -361268,6 +361345,10 @@
"f088ad127804297cf981e61acb1c33ea7b0620c4", "f088ad127804297cf981e61acb1c33ea7b0620c4",
[] []
], ],
"postmessage-fetched-text.js": [
"9fc67171d05dd28d6317e9e2ab986b0b68a7fc15",
[]
],
"postmessage-msgport-to-client-worker.js": [ "postmessage-msgport-to-client-worker.js": [
"7af935f4f8fc01756980e46dcce5018ddc620e67", "7af935f4f8fc01756980e46dcce5018ddc620e67",
[] []
@ -363349,7 +363430,7 @@
[] []
], ],
"safari-technology-preview.rb": [ "safari-technology-preview.rb": [
"c78bcef5c454c0e023c411f09753aedb1b90df0b", "628c5f60914cffa26da7d26d2d9a0502e1be735f",
[] []
], ],
"system_info.yml": [ "system_info.yml": [
@ -363840,11 +363921,11 @@
[] []
], ],
"log.py": [ "log.py": [
"9e2ad74081e4a1b38b9c3c3ba61d49be2e8151fd", "6551c2b5f7cc0f61a85ef5ffb4bbc466a585b1ab",
[] []
], ],
"manifest.py": [ "manifest.py": [
"14d3844d461cd7e0d7a071dd957ad2829885a3c6", "1b4f407b9626be61fca132cd7d0124b4b3d69d7e",
[] []
], ],
"sourcefile.py": [ "sourcefile.py": [
@ -363886,7 +363967,7 @@
[] []
], ],
"update.py": [ "update.py": [
"296533a6babf176e4514bcf3f29e163fdf9a9fdf", "a86ef7c8aa28f1f209f10b7254d1ca07cb17df51",
[] []
], ],
"utils.py": [ "utils.py": [
@ -406491,6 +406572,13 @@
{} {}
] ]
], ],
"content-visibility-080.html": [
"d3cea5fb83767ddfc236850097387644e0f74c8e",
[
null,
{}
]
],
"inheritance.html": [ "inheritance.html": [
"e1ae8164de00467a450511da9ca4bf7f138e9c71", "e1ae8164de00467a450511da9ca4bf7f138e9c71",
[ [
@ -430078,7 +430166,7 @@
], ],
"parser": { "parser": {
"parser-constructs-custom-element-in-document-write.html": [ "parser-constructs-custom-element-in-document-write.html": [
"3b5256677d0d08f2dac9240df06abc334f577f7c", "14c830b9ba961e701ea39656f42a73cd638e65df",
[ [
null, null,
{} {}
@ -460931,6 +461019,13 @@
{} {}
] ]
], ],
"sandbox-inherited-from-required-csp.html": [
"d1bc4d1e04d01177943b91893156d715ec2ed15a",
[
null,
{}
]
],
"sandbox-initial-empty-document-toward-same-origin.html": [ "sandbox-initial-empty-document-toward-same-origin.html": [
"d1306c970322682f3979c497a5decd78218ba845", "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": { "json-module": {
"invalid-content-type.tentative.html": [ "invalid-content-type.tentative.html": [
"e6da2db7ebc03ac7753b19dce4e9c3fc38a30014", "e6da2db7ebc03ac7753b19dce4e9c3fc38a30014",
@ -499600,6 +499718,13 @@
{} {}
] ]
], ],
"same-document-with-document-root.html": [
"15cb7c4cbc278079b15da8af6bfa11a2d6ad3ddc",
[
null,
{}
]
],
"same-document-zero-size-target.html": [ "same-document-zero-size-target.html": [
"20bd11d4beb1e8bdd623eaad96f11788747f0d15", "20bd11d4beb1e8bdd623eaad96f11788747f0d15",
[ [
@ -512440,7 +512565,7 @@
] ]
], ],
"pointerevent_auxclick_is_a_pointerevent.html": [ "pointerevent_auxclick_is_a_pointerevent.html": [
"000d0df764e53f8d1cfa629ebfcccfb768a7a4bf", "aac73db9eb7c5f5a7c71207e52eab30bf53f3526",
[ [
null, null,
{ {
@ -512503,7 +512628,7 @@
] ]
], ],
"pointerevent_click_is_a_pointerevent.html": [ "pointerevent_click_is_a_pointerevent.html": [
"dfea148898e4eed29f25e9bf04067a6e7e251b25", "2f5dfd4dbfdd81e45868517632a41998aed8f21d",
[ [
null, null,
{ {
@ -530641,6 +530766,13 @@
{} {}
] ]
], ],
"nested-blob-url-workers.https.html": [
"7269cbb701fabc2faa746f6ed47fba8fa9d423c8",
[
null,
{}
]
],
"next-hop-protocol.https.html": [ "next-hop-protocol.https.html": [
"7a907438d5d9f0b3ba1e198e048ea0b2e86a2415", "7a907438d5d9f0b3ba1e198e048ea0b2e86a2415",
[ [
@ -540914,7 +541046,7 @@
] ]
], ],
"SVGAnimatedEnumeration-SVGFECompositeElement.html": [ "SVGAnimatedEnumeration-SVGFECompositeElement.html": [
"e6315b434504e754872dd460988187957efbfb07", "0e99f5fe9cb3335f54591d75e75bffdc0262d0d2",
[ [
null, null,
{} {}
@ -565379,7 +565511,7 @@
] ]
], ],
"event-timeout.any.js": [ "event-timeout.any.js": [
"da8ca11bb8ea1a8ef673be20ae2de8715a4d1130", "c73cd1a48540511a5f527b49668aac18e5330169",
[ [
"xhr/event-timeout.any.html", "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] [Hit test intersecting scaled box]
expected: FAIL 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] [<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
expected: FAIL 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] [<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
expected: FAIL 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!] [X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
expected: FAIL 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] [embedded-opener-remove-frame.html]
expected: CRASH
[opener and "removed" embedded documents] [opener and "removed" embedded documents]
expected: FAIL expected: FAIL

View file

@ -1,6 +1,5 @@
[iframe_sandbox_popups_escaping-3.html] [iframe_sandbox_popups_escaping-3.html]
type: testharness type: testharness
expected: TIMEOUT
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] [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] [iframe_sandbox_popups_nonescaping-3.html]
expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox] [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] [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)] [textarea: selectionDirection a second time (must not fire select)]
expected: FAIL 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)] [input type tel: setSelectionRange out of range a second time (must not fire select)]
expected: FAIL expected: FAIL
@ -38,33 +17,66 @@
[input type url: selectionStart out of range a second time (must not fire select)] [input type url: selectionStart out of range a second time (must not fire select)]
expected: FAIL 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)] [textarea: selectionStart out of range a second time (must not fire select)]
expected: FAIL 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)] [input type url: selectionStart a second time (must not fire select)]
expected: FAIL expected: FAIL
[input type search: selectionStart a second time (must not fire select)] [input type search: selectionStart a second time (must not fire select)]
expected: FAIL 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 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] [realtimeanalyser-fft-scaling.html]
expected: TIMEOUT
[X 2048-point FFT peak position is not equal to 64. Got 0.] [X 2048-point FFT peak position is not equal to 64. Got 0.]
expected: FAIL 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] [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 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"; const gridChildHelperCol = "col";
// Helper for building testcases for grid-template-* with a child div in // 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, // gridChildHelperCol, to select testing grid rows or grid columns,
// respectively. // respectively.
// The child div is found by the id of 'child'. // 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> <div id="log"></div>
<script> <script>
class MyCustomElement extends HTMLElement { } var numberOfChildNodesInConnectedCallback = 0;
class MyCustomElement extends HTMLElement {
connectedCallback() {
numberOfChildNodesInConnectedCallback = this.childNodes.length;
}
}
customElements.define('my-custom-element', MyCustomElement); 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 () { test(function () {
var instance = document.querySelector('my-custom-element'); var instance = document.querySelector('my-custom-element');
@ -27,6 +33,11 @@ test(function () {
}, 'HTML parser must instantiate custom elements inside document.write'); }, '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> </script>
</body> </body>
</html> </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){ function run_test(pointerType){
promise_test((test) => new Promise((resolve, reject) => { promise_test((test) => new Promise((resolve, reject) => {
const testPointer = "TestPointer"; const testPointer = pointerType + "TestPointer";
let auxclickFunc = testFunction(test); let auxclickFunc = testFunction(test);
test.add_cleanup(() => { test.add_cleanup(() => {
target.removeEventListener("auxclick", auxclickFunc); target.removeEventListener("auxclick", auxclickFunc);

View file

@ -31,7 +31,7 @@ function testFunction(test){
function run_test(pointerType){ function run_test(pointerType){
promise_test((test) => new Promise((resolve, reject) => { promise_test((test) => new Promise((resolve, reject) => {
const testPointer = "TestPointer"; const testPointer = pointerType + "TestPointer";
let clickFunc = testFunction(test); let clickFunc = testFunction(test);
test.add_cleanup(() => { test.add_cleanup(() => {
target.removeEventListener("click", clickFunc); 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.operator.baseVal, SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_XOR);
assert_equals(feCompositeElement.getAttribute('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'. // Switch to 'arithmetic'.
feCompositeElement.operator.baseVal = SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_ARITHMETIC; feCompositeElement.operator.baseVal = SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_ARITHMETIC;
assert_equals(feCompositeElement.operator.baseVal, SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_ARITHMETIC); assert_equals(feCompositeElement.operator.baseVal, SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_ARITHMETIC);
assert_equals(feCompositeElement.getAttribute('operator'), "arithmetic"); assert_equals(feCompositeElement.getAttribute('operator'), "arithmetic");
// Try setting invalid values. // 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.operator.baseVal, SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_ARITHMETIC);
assert_equals(feCompositeElement.getAttribute('operator'), "arithmetic"); assert_equals(feCompositeElement.getAttribute('operator'), "arithmetic");
@ -56,10 +61,5 @@ test(function() {
feCompositeElement.operator.baseVal = SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER; feCompositeElement.operator.baseVal = SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER;
assert_equals(feCompositeElement.operator.baseVal, SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER); assert_equals(feCompositeElement.operator.baseVal, SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER);
assert_equals(feCompositeElement.getAttribute('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> </script>

View file

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

View file

@ -1,15 +1,10 @@
import logging import logging
import sys
logger = logging.getLogger("manifest") logger = logging.getLogger("manifest")
def setup(): def enable_debug_logging():
# type: () -> None # type: () -> None
logger.setLevel(logging.DEBUG) 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(): def get_logger():
# type: () -> logging.Logger # type: () -> logging.Logger

View file

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

View file

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

View file

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