mirror of
https://github.com/servo/servo.git
synced 2025-08-06 14:10:11 +01:00
Auto merge of #29604 - servo:wpt_update_08-04-2023, r=servo-wpt-sync
Sync WPT with upstream (08-04-2023) Automated downstream sync of changes from upstream as of 08-04-2023 [no-wpt-sync] r? @servo-wpt-sync
This commit is contained in:
commit
bafa68ed59
96 changed files with 1117 additions and 441 deletions
|
@ -1,3 +1,6 @@
|
|||
[block-in-inline-hittest-relpos-zindex.html]
|
||||
[position: relative; z-index: -1;]
|
||||
expected: FAIL
|
||||
|
||||
[block-in-inline-hittest-relpos-zindex]
|
||||
expected: FAIL
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
[registered-property-interpolation-003.https.html]
|
||||
expected: TIMEOUT
|
|
@ -1,3 +1,6 @@
|
|||
[transform-scale-hittest.html]
|
||||
[Hit test intersecting scaled box]
|
||||
expected: FAIL
|
||||
|
||||
[Hit test within unscaled box]
|
||||
expected: FAIL
|
||||
|
|
|
@ -56,126 +56,6 @@
|
|||
[background-position length(px) / events]
|
||||
expected: FAIL
|
||||
|
||||
[color color(rgba) / events]
|
||||
expected: FAIL
|
||||
|
||||
[font-size length(pt) / events]
|
||||
expected: FAIL
|
||||
|
||||
[font-size length(pc) / events]
|
||||
expected: FAIL
|
||||
|
||||
[font-size length(px) / events]
|
||||
expected: FAIL
|
||||
|
||||
[font-size length(em) / events]
|
||||
expected: FAIL
|
||||
|
||||
[font-size length(ex) / events]
|
||||
expected: FAIL
|
||||
|
||||
[font-size length(mm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[font-size length(cm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[font-size length(in) / events]
|
||||
expected: FAIL
|
||||
|
||||
[font-size percentage(%) / events]
|
||||
expected: FAIL
|
||||
|
||||
[font-weight font-weight(keyword) / events]
|
||||
expected: FAIL
|
||||
|
||||
[font-weight font-weight(numeric) / events]
|
||||
expected: FAIL
|
||||
|
||||
[line-height number(integer) / events]
|
||||
expected: FAIL
|
||||
|
||||
[line-height number(decimal) / events]
|
||||
expected: FAIL
|
||||
|
||||
[line-height length(pt) / events]
|
||||
expected: FAIL
|
||||
|
||||
[line-height length(pc) / events]
|
||||
expected: FAIL
|
||||
|
||||
[line-height length(px) / events]
|
||||
expected: FAIL
|
||||
|
||||
[line-height length(em) / events]
|
||||
expected: FAIL
|
||||
|
||||
[line-height length(ex) / events]
|
||||
expected: FAIL
|
||||
|
||||
[line-height length(mm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[line-height length(cm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[line-height length(in) / events]
|
||||
expected: FAIL
|
||||
|
||||
[line-height percentage(%) / events]
|
||||
expected: FAIL
|
||||
|
||||
[letter-spacing length(pt) / events]
|
||||
expected: FAIL
|
||||
|
||||
[letter-spacing length(pc) / events]
|
||||
expected: FAIL
|
||||
|
||||
[letter-spacing length(px) / events]
|
||||
expected: FAIL
|
||||
|
||||
[letter-spacing length(em) / events]
|
||||
expected: FAIL
|
||||
|
||||
[letter-spacing length(ex) / events]
|
||||
expected: FAIL
|
||||
|
||||
[letter-spacing length(mm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[letter-spacing length(cm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[letter-spacing length(in) / events]
|
||||
expected: FAIL
|
||||
|
||||
[word-spacing length(pt) / events]
|
||||
expected: FAIL
|
||||
|
||||
[word-spacing length(pc) / events]
|
||||
expected: FAIL
|
||||
|
||||
[word-spacing length(px) / events]
|
||||
expected: FAIL
|
||||
|
||||
[word-spacing length(em) / events]
|
||||
expected: FAIL
|
||||
|
||||
[word-spacing length(ex) / events]
|
||||
expected: FAIL
|
||||
|
||||
[word-spacing length(mm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[word-spacing length(cm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[word-spacing length(in) / events]
|
||||
expected: FAIL
|
||||
|
||||
[word-spacing percentage(%) / events]
|
||||
expected: FAIL
|
||||
|
||||
[text-indent length(pt) / events]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -514,3 +394,153 @@
|
|||
|
||||
[vertical-align percentage(%) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-bottom length(ex) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-bottom length(mm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-bottom length(cm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-bottom length(in) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-left length(pt) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-left length(pc) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-left length(px) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-left length(em) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-left length(ex) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-left length(mm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-left length(cm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-left length(in) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-right length(pt) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-right length(pc) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-right length(px) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-right length(em) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-right length(ex) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-right length(mm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-right length(cm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-right length(in) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-top length(pt) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-top length(pc) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-top length(px) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-top length(em) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-top length(ex) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-top length(mm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-top length(cm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-top length(in) / events]
|
||||
expected: FAIL
|
||||
|
||||
[margin-bottom length(pt) / events]
|
||||
expected: FAIL
|
||||
|
||||
[margin-bottom length(pc) / events]
|
||||
expected: FAIL
|
||||
|
||||
[margin-bottom length(px) / events]
|
||||
expected: FAIL
|
||||
|
||||
[margin-bottom length(em) / events]
|
||||
expected: FAIL
|
||||
|
||||
[margin-bottom length(ex) / events]
|
||||
expected: FAIL
|
||||
|
||||
[margin-bottom length(mm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[margin-bottom length(cm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[margin-bottom length(in) / events]
|
||||
expected: FAIL
|
||||
|
||||
[margin-left length(pt) / events]
|
||||
expected: FAIL
|
||||
|
||||
[margin-left length(pc) / events]
|
||||
expected: FAIL
|
||||
|
||||
[margin-left length(px) / events]
|
||||
expected: FAIL
|
||||
|
||||
[margin-left length(em) / events]
|
||||
expected: FAIL
|
||||
|
||||
[margin-left length(ex) / events]
|
||||
expected: FAIL
|
||||
|
||||
[margin-left length(mm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[margin-left length(cm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[margin-left length(in) / events]
|
||||
expected: FAIL
|
||||
|
||||
[margin-right length(pt) / events]
|
||||
expected: FAIL
|
||||
|
||||
[margin-right length(pc) / events]
|
||||
expected: FAIL
|
||||
|
||||
[margin-right length(px) / events]
|
||||
expected: FAIL
|
||||
|
||||
[margin-right length(em) / events]
|
||||
expected: FAIL
|
||||
|
||||
[margin-right length(ex) / events]
|
||||
expected: FAIL
|
||||
|
||||
[margin-right length(mm) / events]
|
||||
expected: FAIL
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
[vh_not_refreshing_on_chrome.html]
|
||||
expected: TIMEOUT
|
|
@ -1,3 +0,0 @@
|
|||
[elementFromPoint-001.html]
|
||||
[CSSOM View - 5 - extensions to the Document interface]
|
||||
expected: FAIL
|
|
@ -1,4 +1,4 @@
|
|||
[elementFromPoint-002.html]
|
||||
expected: CRASH
|
||||
[Checking whether dynamic changes to visibility interact correctly with\n table anonymous boxes]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
[elementFromPoint-dynamic-anon-box.html]
|
||||
[Link should be clickable after hiding a scrollbox with an anonymous table inside]
|
||||
expected: FAIL
|
|
@ -16,6 +16,3 @@
|
|||
|
||||
[test the top of layer]
|
||||
expected: FAIL
|
||||
|
||||
[test some point of the element: top left corner]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
[keepalive.any.html]
|
||||
expected: TIMEOUT
|
||||
[keepalive in onunload in nested frame in another window]
|
||||
expected: FAIL
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
[redirect-keepalive.any.html]
|
||||
expected: TIMEOUT
|
|
@ -0,0 +1,37 @@
|
|||
[iframe.tentative.https.window.html]
|
||||
expected: TIMEOUT
|
||||
[private to local: failed preflight.]
|
||||
expected: FAIL
|
||||
|
||||
[private to local: success.]
|
||||
expected: FAIL
|
||||
|
||||
[public to local: failed preflight.]
|
||||
expected: FAIL
|
||||
|
||||
[public to local: success.]
|
||||
expected: FAIL
|
||||
|
||||
[public to private: failed preflight.]
|
||||
expected: FAIL
|
||||
|
||||
[public to private: success.]
|
||||
expected: FAIL
|
||||
|
||||
[treat-as-public-address to local: failed preflight.]
|
||||
expected: FAIL
|
||||
|
||||
[treat-as-public-address to local: success.]
|
||||
expected: FAIL
|
||||
|
||||
[treat-as-public-address to private: failed preflight.]
|
||||
expected: FAIL
|
||||
|
||||
[treat-as-public-address to private: success.]
|
||||
expected: FAIL
|
||||
|
||||
[public to local, grandparent navigates: failure.]
|
||||
expected: TIMEOUT
|
||||
|
||||
[public to local, grandparent navigates: success.]
|
||||
expected: TIMEOUT
|
|
@ -183,8 +183,5 @@
|
|||
[border-image sec-fetch-user - Not sent to non-trustworthy cross-site destination]
|
||||
expected: FAIL
|
||||
|
||||
[background-image sec-fetch-site - HTTPS downgrade (header not sent)]
|
||||
expected: TIMEOUT
|
||||
|
||||
[border-image sec-fetch-site - HTTPS downgrade (header not sent)]
|
||||
expected: FAIL
|
||||
|
|
|
@ -7,6 +7,3 @@
|
|||
|
||||
[load & pageshow events do not fire on contentWindow of <iframe> element created with src='about:blank#foo']
|
||||
expected: FAIL
|
||||
|
||||
[load & pageshow events do not fire on contentWindow of <iframe> element created with src='']
|
||||
expected: FAIL
|
||||
|
|
|
@ -16,6 +16,3 @@
|
|||
|
||||
[D83D DE0D set in href="" targeting a frame and clicked]
|
||||
expected: FAIL
|
||||
|
||||
[DE0D 0041 set in href="" targeting a frame and clicked]
|
||||
expected: FAIL
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
[navigation-unload-cross-origin.sub.window.html]
|
||||
[Cross-origin navigation started from unload handler must be ignored]
|
||||
expected: FAIL
|
|
@ -0,0 +1,3 @@
|
|||
[navigation-unload-same-origin-fragment.html]
|
||||
[Tests that a fragment navigation in the unload handler will not block the initial navigation]
|
||||
expected: FAIL
|
|
@ -4,13 +4,13 @@
|
|||
expected: FAIL
|
||||
|
||||
[Host element with delegatesFocus including no focusable descendants should be skipped]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[Element with tabindex should support autofocus]
|
||||
expected: FAIL
|
||||
|
||||
[Area element should support autofocus]
|
||||
expected: NOTRUN
|
||||
expected: TIMEOUT
|
||||
|
||||
[Host element with delegatesFocus should support autofocus]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
[iframe_sandbox_popups_escaping-1.html]
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
[iframe_sandbox_popups_escaping-2.html]
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
[disabled-003.html]
|
||||
expected: CRASH
|
|
@ -1,9 +1,10 @@
|
|||
[promise-job-entry-different-function-realm.html]
|
||||
expected: TIMEOUT
|
||||
[Fulfillment handler on fulfilled promise]
|
||||
expected: FAIL
|
||||
|
||||
[Rejection handler on pending-then-rejected promise]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[Thenable resolution]
|
||||
expected: FAIL
|
||||
|
@ -12,4 +13,4 @@
|
|||
expected: FAIL
|
||||
|
||||
[Fulfillment handler on pending-then-fulfilled promise]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
[promise-job-entry.html]
|
||||
expected: TIMEOUT
|
||||
[Fulfillment handler on fulfilled promise]
|
||||
expected: FAIL
|
||||
|
||||
[Rejection handler on pending-then-rejected promise]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[Sanity check: this all works as expected with no promises involved]
|
||||
expected: FAIL
|
||||
|
@ -15,4 +16,4 @@
|
|||
expected: FAIL
|
||||
|
||||
[Fulfillment handler on pending-then-fulfilled promise]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
[018.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, javascript:]
|
||||
expected: TIMEOUT
|
|
@ -441879,7 +441879,7 @@
|
|||
[]
|
||||
],
|
||||
"helpers.js": [
|
||||
"728b098087e4ab3c67bb8cfd88126ffcf9f4315d",
|
||||
"0a89c6d7f99374d66a827033e29476e379b624af",
|
||||
[]
|
||||
],
|
||||
"resources": {
|
||||
|
@ -441888,7 +441888,7 @@
|
|||
[]
|
||||
],
|
||||
"embedded_responder.js": [
|
||||
"ab1ab30f6964130e6c4d09655c77cca3095596a4",
|
||||
"634079289b01557189b1335ba7801c4eb6f6cc9b",
|
||||
[]
|
||||
],
|
||||
"hasStorageAccess-ABA-iframe.https.html": [
|
||||
|
@ -453056,10 +453056,6 @@
|
|||
"c9907203322112ffb01a50b09541e891250c4f5e",
|
||||
[]
|
||||
],
|
||||
"requestStorageAccess-integration-iframe.https.html": [
|
||||
"f4db5cf65ec6814036d40ab165b9705725df39fa",
|
||||
[]
|
||||
],
|
||||
"requestStorageAccessFor-iframe.html": [
|
||||
"050196dfdb9e66d2309a8f2286cb0a67eb34121b",
|
||||
[]
|
||||
|
@ -454920,7 +454916,7 @@
|
|||
[]
|
||||
],
|
||||
"iframe-parent.html": [
|
||||
"021fffab68f5ae9fe2f72a6c3c0bf60a14b333c8",
|
||||
"ec63045b4a0561d4119e6890195e15bc3b6410af",
|
||||
[]
|
||||
],
|
||||
"iframe.html": [
|
||||
|
@ -454932,7 +454928,7 @@
|
|||
[]
|
||||
],
|
||||
"partitioned-parent.html": [
|
||||
"5dafce49657fbe948582cf3aead2decadad0fdc7",
|
||||
"ec19c8dbaa69bb2d3b31c8c508f65f2bece23adb",
|
||||
[]
|
||||
],
|
||||
"service-worker.js": [
|
||||
|
@ -498184,6 +498180,13 @@
|
|||
],
|
||||
"margin-trim": {
|
||||
"computed-margin-values": {
|
||||
"flexbox-column-block-end.html": [
|
||||
"ecc266378dde834b60266f5d7bdf29b2e9bf6ec0",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"flexbox-column-block-start.html": [
|
||||
"6c760bb1f0912090952ef7266bf29f682ed999b7",
|
||||
[
|
||||
|
@ -498198,6 +498201,20 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"flexbox-column-inline-start.html": [
|
||||
"681c9b859f1aab6a1de55a90c29d34d7906df83b",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"flexbox-column-multi-line-block-end.html": [
|
||||
"61f11a9b31fee08a490994428d23a0d7cc50485f",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"flexbox-column-multi-line-block-start.html": [
|
||||
"517619db49be1a7f42a7a48eea731dac1aeca008",
|
||||
[
|
||||
|
@ -498205,6 +498222,13 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"flexbox-column-multi-line-block.html": [
|
||||
"e01067fbe2ad9a241ef3afc45cd9d43cc8cc4c52",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"flexbox-column-multi-line-inline-end.html": [
|
||||
"4d3d5b5326cfcc301323226f5203bd91f440107e",
|
||||
[
|
||||
|
@ -498212,6 +498236,13 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"flexbox-column-multi-line-inline-start.html": [
|
||||
"1e4d007658af82fa6825bd696533c4e1799e76f4",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"flexbox-column-style-change-triggers-layout-block-start.html": [
|
||||
"175b5c3f2fc3736d1a2d4ce3de5d1493d9a7bb93",
|
||||
[
|
||||
|
@ -498219,6 +498250,13 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"flexbox-row-block-end.html": [
|
||||
"f5ca9854fe7e04a48b05d41338c720dab5083d0b",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"flexbox-row-block-start.html": [
|
||||
"9597c9aa10fd7ca3940d16c5d201117240a38832",
|
||||
[
|
||||
|
@ -498226,6 +498264,13 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"flexbox-row-block.html": [
|
||||
"6c35fa6ac22f5bd93a20f0e56882664f34d60c9c",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"flexbox-row-inline-end.html": [
|
||||
"2c20625ed3811c861598d1d752afdf314043612d",
|
||||
[
|
||||
|
@ -498233,6 +498278,20 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"flexbox-row-inline-start.html": [
|
||||
"24ce7f90e2d9298347a2a92e92bd358e123478de",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"flexbox-row-multi-line-block-end.html": [
|
||||
"f4c90c29f91b313b9bf8cc732a477e77ef12f95b",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"flexbox-row-multi-line-block-start.html": [
|
||||
"c3190e1a93fff9b744f7834b8e2457e330296b0a",
|
||||
[
|
||||
|
@ -498240,12 +498299,26 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"flexbox-row-multi-line-block.html": [
|
||||
"1db5680306b7814677839762bed4d8cc8755f576",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"flexbox-row-multi-line-inline-end.html": [
|
||||
"8a59bc417175d6569876ecbb135d25cede0731b0",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"flexbox-row-multi-line-inline-start.html": [
|
||||
"9b925a7b68801cfcd3c9b4698d7bf53466d5b43c",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
|
@ -565672,7 +565745,7 @@
|
|||
]
|
||||
],
|
||||
"join-leave-ad-interest-group.https.sub.window.js": [
|
||||
"9c8433219fdf8fda4ecfe05357472f666e235e1b",
|
||||
"f4615d929e52df76e649688c36d1cbff30781078",
|
||||
[
|
||||
"fledge/tentative/join-leave-ad-interest-group.https.sub.window.html",
|
||||
{
|
||||
|
@ -567437,6 +567510,17 @@
|
|||
"fs/opaque-origin.https.window.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
"root-name.https.any.js": [
|
||||
"650a7a64eef4b043df652b4cd27e1a2c120594bf",
|
||||
[
|
||||
"fs/root-name.https.any.html",
|
||||
{}
|
||||
],
|
||||
[
|
||||
"fs/root-name.https.any.worker.html",
|
||||
{}
|
||||
]
|
||||
]
|
||||
},
|
||||
"fullscreen": {
|
||||
|
@ -609502,6 +609586,13 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"disabled-003.html": [
|
||||
"de01eb57fcc6f4bc3ea94032673bdba312cc6313",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"fieldset-checkvalidity.html": [
|
||||
"eeeca1853b81e64d7720c40bde2fbeeedb4c64a0",
|
||||
[
|
||||
|
@ -668052,7 +668143,7 @@
|
|||
]
|
||||
],
|
||||
"requestStorageAccess-cross-site-sibling-iframes.sub.https.window.js": [
|
||||
"5496e89670cfcf6d4c1dfce06507ff249112e7b7",
|
||||
"c93673887c4dafe4a60f8cb00ad65c6203bd2376",
|
||||
[
|
||||
"storage-access-api/requestStorageAccess-cross-site-sibling-iframes.sub.https.window.html",
|
||||
{
|
||||
|
@ -675773,7 +675864,7 @@
|
|||
]
|
||||
],
|
||||
"requestStorageAccessFor.sub.https.window.js": [
|
||||
"c573567084d9ae434b4c6eb3c8ad2dcb474b0042",
|
||||
"e82cce699fab9b2d3cd6e8d928cc66850083658a",
|
||||
[
|
||||
"top-level-storage-access-api/tentative/requestStorageAccessFor.sub.https.window.html",
|
||||
{
|
||||
|
@ -680927,6 +681018,15 @@
|
|||
"testdriver": true
|
||||
}
|
||||
]
|
||||
],
|
||||
"synonym-roles.html": [
|
||||
"59d913a60a3719e4f24d369cd4baeda95e409537",
|
||||
[
|
||||
null,
|
||||
{
|
||||
"testdriver": true
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
|
@ -686469,7 +686569,7 @@
|
|||
]
|
||||
],
|
||||
"partitioned-web-locks.tentative.https.html": [
|
||||
"a426737f608e85ff4b1062a090d74648e5ad0933",
|
||||
"2f166e67bc13cc4976dfd10f854880b8f07a0e50",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
[hit-test-floats-002.html]
|
||||
[Hit test float]
|
||||
expected: FAIL
|
|
@ -1,3 +0,0 @@
|
|||
[hit-test-floats-003.html]
|
||||
[Miss float below something else]
|
||||
expected: FAIL
|
|
@ -1,3 +0,0 @@
|
|||
[hit-test-floats-005.html]
|
||||
[Miss clipped float]
|
||||
expected: FAIL
|
|
@ -1,6 +1,3 @@
|
|||
[block-in-inline-hittest-002.html]
|
||||
[elementsFromPoint]
|
||||
expected: FAIL
|
||||
|
||||
[elementFromPoint]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
[block-in-inline-hittest-float-001.html]
|
||||
[block-in-inline-hittest-float-001]
|
||||
expected: FAIL
|
|
@ -1,3 +1,6 @@
|
|||
[block-in-inline-hittest-relpos-zindex.html]
|
||||
[position: relative; z-index: -1;]
|
||||
expected: FAIL
|
||||
|
||||
[block-in-inline-hittest-relpos-zindex]
|
||||
expected: FAIL
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
[hit-test-anonymous-block.html]
|
||||
[Hit test beside line of text inside anonymous block]
|
||||
expected: FAIL
|
|
@ -1,3 +0,0 @@
|
|||
[inline-with-filter-and-hidden-backface.html]
|
||||
[Hit test]
|
||||
expected: FAIL
|
|
@ -1,6 +1,3 @@
|
|||
[MediaQueryList-addListener-removeListener.html]
|
||||
[listeners are called when <iframe> is resized]
|
||||
expected: FAIL
|
||||
|
||||
[listeners are called correct number of times]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
[elementFromPoint-001.html]
|
||||
[CSSOM View - 5 - extensions to the Document interface]
|
||||
expected: FAIL
|
|
@ -13,9 +13,3 @@
|
|||
|
||||
[<li>Outside 3</li>]
|
||||
expected: FAIL
|
||||
|
||||
[<li>Image Inside 2</li>]
|
||||
expected: FAIL
|
||||
|
||||
[<li>Image Inside 1</li>]
|
||||
expected: FAIL
|
||||
|
|
|
@ -17,3 +17,6 @@
|
|||
|
||||
[test some point of the element: bottom right corner]
|
||||
expected: FAIL
|
||||
|
||||
[test the top of layer]
|
||||
expected: FAIL
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
[scroll-behavior-smooth-navigation.html]
|
||||
[Instant scrolling while doing history navigation.]
|
||||
expected: FAIL
|
||||
|
||||
[Smooth scrolling while doing history navigation.]
|
||||
expected: FAIL
|
|
@ -1,4 +1,3 @@
|
|||
[keepalive.any.html]
|
||||
expected: TIMEOUT
|
||||
[keepalive in onunload in nested frame in another window]
|
||||
expected: FAIL
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
[redirect-keepalive.any.html]
|
||||
expected: TIMEOUT
|
|
@ -1,4 +1,5 @@
|
|||
[iframe.tentative.https.window.html]
|
||||
expected: TIMEOUT
|
||||
[private to local: failed preflight.]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -33,4 +34,4 @@
|
|||
expected: FAIL
|
||||
|
||||
[public to local, grandparent navigates: success.]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
|
|
@ -146,3 +146,6 @@
|
|||
|
||||
[list-style-image sec-fetch-site - HTTPS downgrade-upgrade]
|
||||
expected: FAIL
|
||||
|
||||
[background-image sec-fetch-dest - Not sent to non-trustworthy same-origin destination]
|
||||
expected: TIMEOUT
|
||||
|
|
|
@ -7,6 +7,3 @@
|
|||
|
||||
[load & pageshow events do not fire on contentWindow of <iframe> element created with src='about:blank#foo']
|
||||
expected: FAIL
|
||||
|
||||
[load & pageshow events do not fire on contentWindow of <iframe> element created with src='about:blank']
|
||||
expected: FAIL
|
||||
|
|
|
@ -10,3 +10,6 @@
|
|||
|
||||
[load event does not fire on window.open('about:blank?foo')]
|
||||
expected: FAIL
|
||||
|
||||
[load event does not fire on window.open('about:blank')]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,10 +1,6 @@
|
|||
[javascript-url-no-beforeunload.window.html]
|
||||
expected: TIMEOUT
|
||||
[Navigating an opened window with an iframe via location.href to a javascript: URL must not fire beforeunload on the iframe: string completion]
|
||||
expected: NOTRUN
|
||||
|
||||
[Navigating an opened window via location.href to a javascript: URL must not fire beforeunload: string completion]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[Navigating an opened window with an iframe via location.href to a javascript: URL must not fire beforeunload on the iframe: undefined completion]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
[navigation-unload-same-origin.window.html]
|
||||
[Same-origin navigation started from unload handler must be ignored]
|
||||
expected: FAIL
|
|
@ -1,3 +0,0 @@
|
|||
[pageload-image-in-popup.html]
|
||||
[The document for a standalone media file should have one child in the body.]
|
||||
expected: FAIL
|
|
@ -1,4 +0,0 @@
|
|||
[traverse-during-unload.html]
|
||||
expected: TIMEOUT
|
||||
[Traversing the history during unload]
|
||||
expected: TIMEOUT
|
|
@ -0,0 +1,3 @@
|
|||
[traverse_the_history_1.html]
|
||||
[Multiple history traversals from the same task]
|
||||
expected: FAIL
|
|
@ -1,3 +0,0 @@
|
|||
[traverse_the_history_4.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
|
@ -1,3 +0,0 @@
|
|||
[traverse_the_history_5.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
|
@ -0,0 +1,3 @@
|
|||
[creating_browsing_context_test_01.html]
|
||||
[first argument: absolute url]
|
||||
expected: FAIL
|
|
@ -1,7 +1,7 @@
|
|||
[autofocus-dialog.html]
|
||||
expected: TIMEOUT
|
||||
[<dialog> can contain autofocus, without stopping page autofocus content from working]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[<dialog>-contained autofocus element gets focused when the dialog is shown]
|
||||
expected: TIMEOUT
|
||||
expected: NOTRUN
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
[iframe_sandbox_popups_escaping-1.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: FAIL
|
||||
expected: TIMEOUT
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
[iframe_sandbox_popups_escaping-2.html]
|
||||
expected: CRASH
|
||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
[iframe_sandbox_popups_escaping-3.html]
|
||||
type: testharness
|
||||
expected: CRASH
|
||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
[iframe_sandbox_popups_nonescaping-1.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: FAIL
|
||||
expected: NOTRUN
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
[sandbox-top-navigation-child-special-cases.tentative.sub.window.html]
|
||||
expected: TIMEOUT
|
||||
[Allow top with user activation + user activation]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
[reparent-form-during-planned-navigation-task.html]
|
||||
expected: TIMEOUT
|
||||
[reparent-form-during-planned-navigation-task]
|
||||
expected: TIMEOUT
|
|
@ -1,3 +0,0 @@
|
|||
[historical.html]
|
||||
[<input name=isindex> should not be supported]
|
||||
expected: FAIL
|
|
@ -0,0 +1,3 @@
|
|||
[DOMContentLoaded-defer.html]
|
||||
[The end: DOMContentLoaded and defer scripts]
|
||||
expected: FAIL
|
|
@ -1,7 +1,6 @@
|
|||
[promise-rejection-events.html]
|
||||
expected: TIMEOUT
|
||||
[delayed handling: delaying handling rejected promise created from createImageBitmap will cause both events to fire]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[unhandledrejection: from createImageBitmap which is UA triggered]
|
||||
expected: FAIL
|
||||
|
|
|
@ -94,10 +94,10 @@
|
|||
expected: FAIL
|
||||
|
||||
[mime-type 16 : text/html;charset=\x0bgbk]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[mime-type 17 : text/html;charset=\x0cgbk]
|
||||
expected: NOTRUN
|
||||
expected: TIMEOUT
|
||||
|
||||
[mime-type 18 : text/html;\x0bcharset=gbk]
|
||||
expected: NOTRUN
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
[cors-preflight.any.html]
|
||||
expected: ERROR
|
||||
[PerformanceResourceTiming sizes fetch with preflight test]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
|
||||
[cors-preflight.any.worker.html]
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[cross-partition.https.tentative.html]
|
||||
expected: TIMEOUT
|
||||
expected: CRASH
|
||||
[BroadcastChannel messages aren't received from a cross-partition iframe]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
[018.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, javascript:]
|
||||
expected: TIMEOUT
|
|
@ -1,4 +0,0 @@
|
|||
[017.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, about:blank]
|
||||
expected: TIMEOUT
|
|
@ -1,4 +0,0 @@
|
|||
[018.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, javascript:]
|
||||
expected: TIMEOUT
|
|
@ -0,0 +1,2 @@
|
|||
[Worker-constructor.html]
|
||||
expected: ERROR
|
|
@ -0,0 +1,34 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<link rel="author" href="mailto:sammy.gill@apple.com">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-flex">
|
||||
<meta name="assert" content="block-end trimmed margins should be reflected in computed style">
|
||||
<style>
|
||||
flexbox {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
width: min-content;
|
||||
margin-trim: block-end;
|
||||
}
|
||||
item {
|
||||
display: block;
|
||||
background-color: green;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
margin-block-end: 10px;
|
||||
}
|
||||
</style>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/resources/check-layout-th.js"></script>
|
||||
</head>
|
||||
<body onload="checkLayout('flexbox > item')">
|
||||
<div id="target">
|
||||
<flexbox>
|
||||
<item data-expected-margin-bottom="10" data-offset-y="8"></item>
|
||||
<item data-expected-margin-bottom="0" data-offset-y="68"></item>
|
||||
</flexbox>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,43 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<link rel="author" href="mailto:sammy.gill@apple.com">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-flex">
|
||||
<meta name="assert" content="trimmed inline-start margins should be reflected in computed style">
|
||||
<style>
|
||||
flexbox {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
width: min-content;
|
||||
margin-trim: inline-start;
|
||||
}
|
||||
item {
|
||||
display: block;
|
||||
background-color: green;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
}
|
||||
item:nth-child(1) {
|
||||
margin-inline-start: 10px;
|
||||
}
|
||||
item:nth-child(2) {
|
||||
margin-inline-start: -10px;
|
||||
}
|
||||
item:nth-child(3) {
|
||||
margin-inline-start: 30%;
|
||||
}
|
||||
</style>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/resources/check-layout-th.js"></script>
|
||||
</head>
|
||||
<body onload="checkLayout('flexbox > item')">
|
||||
<div id="target">
|
||||
<flexbox>
|
||||
<item data-expected-margin-left="0" data-offset-x="8"></item>
|
||||
<item data-expected-margin-left="0" data-offset-x="8"></item>
|
||||
<item data-expected-margin-left="0" data-offset-x="8"></item>
|
||||
</flexbox>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,38 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<link rel="author" href="mailto:sammy.gill@apple.com">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-flex">
|
||||
<meta name="assert" content="block-end trimmed margins should be reflected in computed style">
|
||||
<style>
|
||||
flexbox {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex-wrap: wrap;
|
||||
width: 100px;
|
||||
height: 110px;
|
||||
margin-trim: block-end;
|
||||
}
|
||||
item {
|
||||
display: block;
|
||||
background-color: green;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
margin-block-end: 10px;
|
||||
}
|
||||
</style>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/resources/check-layout-th.js"></script>
|
||||
</head>
|
||||
<body onload="checkLayout('flexbox > item')">
|
||||
<div id="target">
|
||||
<flexbox>
|
||||
<item data-offset-y="8" data-expected-margin-bottom="10"></item>
|
||||
<item data-offset-y="68" data-expected-margin-bottom="0"></item>
|
||||
<item data-offset-y="8" data-expected-margin-bottom="10"></item>
|
||||
<item data-offset-y="68" data-expected-margin-top="0"></item>
|
||||
</flexbox>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,38 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<link rel="author" href="mailto:sammy.gill@apple.com">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-flex">
|
||||
<meta name="assert" content="both trimmed block margins should be reflected in computed style">
|
||||
<style>
|
||||
flexbox {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex-wrap: wrap;
|
||||
width: 100px;
|
||||
height: 120px;
|
||||
margin-trim: block;
|
||||
}
|
||||
item {
|
||||
display: block;
|
||||
background-color: green;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
margin-block: 10px;
|
||||
}
|
||||
</style>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/resources/check-layout-th.js"></script>
|
||||
</head>
|
||||
<body onload="checkLayout('flexbox > item')">
|
||||
<div id="target">
|
||||
<flexbox>
|
||||
<item data-offset-y="8" data-expected-margin-top="0" data-expected-margin-bottom="10"></item>
|
||||
<item data-offset-y="78" data-expected-margin-top="10" data-expected-margin-bottom="0" ></item>
|
||||
<item data-offset-y="8" data-expected-margin-top="0" data-expected-margin-bottom="10"></item>
|
||||
<item data-offset-y="78" data-expected-margin-top="10" data-expected-margin-bottom="0"></item>
|
||||
</flexbox>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,38 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<link rel="author" href="mailto:sammy.gill@apple.com">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-flex">
|
||||
<meta name="assert" content="trimmed inline-start margins should be reflected in computed style">
|
||||
<style>
|
||||
flexbox {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex-wrap: wrap;
|
||||
width: min-content;
|
||||
height: 100px;
|
||||
margin-trim: inline-start;
|
||||
}
|
||||
item {
|
||||
display: block;
|
||||
background-color: green;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
margin-inline-start: 10px;
|
||||
}
|
||||
</style>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/resources/check-layout-th.js"></script>
|
||||
</head>
|
||||
<body onload="checkLayout('flexbox > item')">
|
||||
<div id="target">
|
||||
<flexbox>
|
||||
<item data-offset-x="8" data-expected-margin-left="0"></item>
|
||||
<item data-offset-x="8" data-expected-margin-left="0"></item>
|
||||
<item data-offset-x="68" data-expected-margin-left="10"></item>
|
||||
<item data-offset-x="68" data-expected-margin-left="10"></item>
|
||||
</flexbox>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,43 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<link rel="author" href="mailto:sammy.gill@apple.com">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-flex">
|
||||
<meta name="assert" content="block-end trimmed margins should be reflected in computed style">
|
||||
<style>
|
||||
flexbox {
|
||||
display: flex;
|
||||
width: min-content;
|
||||
margin-trim: block-end;
|
||||
}
|
||||
item {
|
||||
display: block;
|
||||
background-color: green;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
margin-inline: 10px;
|
||||
}
|
||||
item:nth-child(1) {
|
||||
margin-block-end: 10px;
|
||||
}
|
||||
item:nth-child(2) {
|
||||
margin-block-end: -10px;
|
||||
}
|
||||
item:nth-child(3) {
|
||||
margin-block-end: 30%;
|
||||
}
|
||||
</style>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/resources/check-layout-th.js"></script>
|
||||
</head>
|
||||
<body onload="checkLayout('flexbox > item')">
|
||||
<div id="target">
|
||||
<flexbox>
|
||||
<item data-expected-margin-bottom="0"></item>
|
||||
<item data-expected-margin-bottom="0"></item>
|
||||
<item data-expected-margin-bottom="0"></item>
|
||||
</flexbox>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,43 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<link rel="author" href="mailto:sammy.gill@apple.com">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-flex">
|
||||
<meta name="assert" content="both trimmed block margins should be reflected in computed style">
|
||||
<style>
|
||||
flexbox {
|
||||
display: flex;
|
||||
width: min-content;
|
||||
margin-trim: block;
|
||||
}
|
||||
item {
|
||||
display: block;
|
||||
background-color: green;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
margin-inline: 10px;
|
||||
}
|
||||
item:nth-child(1) {
|
||||
margin-block: 10px;
|
||||
}
|
||||
item:nth-child(2) {
|
||||
margin-block: -10px;
|
||||
}
|
||||
item:nth-child(3) {
|
||||
margin-block: 30%;
|
||||
}
|
||||
</style>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/resources/check-layout-th.js"></script>
|
||||
</head>
|
||||
<body onload="checkLayout('flexbox > item')">
|
||||
<div id="target">
|
||||
<flexbox>
|
||||
<item data-expected-margin-top="0" data-expected-margin-bottom="0" data-offset-y="8"></item>
|
||||
<item data-expected-margin-top="0" data-expected-margin-bottom="0" data-offset-y="8"></item>
|
||||
<item data-expected-margin-top="0" data-expected-margin-bottom="0" data-offset-y="8"></item>
|
||||
</flexbox>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,33 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<link rel="author" href="mailto:sammy.gill@apple.com">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-flex">
|
||||
<meta name="assert" content="trimmed inline-start margins should be reflected in computed style">
|
||||
<style>
|
||||
flexbox {
|
||||
display: flex;
|
||||
margin-trim: inline-start;
|
||||
}
|
||||
item {
|
||||
display: block;
|
||||
background-color: green;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
margin-inline-start: 20px;
|
||||
}
|
||||
</style>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/resources/check-layout-th.js"></script>
|
||||
</head>
|
||||
<body onload="checkLayout('flexbox > item')">
|
||||
<div id="target">
|
||||
<flexbox>
|
||||
<item data-expected-margin-left="0" data-offset-x="8"></item>
|
||||
<item data-expected-margin-left="20" data-offset-x="78"></item>
|
||||
<item data-expected-margin-left="20" data-offset-x="148"></item>
|
||||
</flexbox>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,36 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<link rel="author" href="mailto:sammy.gill@apple.com">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-flex">
|
||||
<meta name="assert" content="block-end trimmed margins should be reflected in computed style">
|
||||
<style>
|
||||
flexbox {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
width: 100px;
|
||||
margin-trim: block-end;
|
||||
}
|
||||
item {
|
||||
display: block;
|
||||
background-color: green;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
margin-block-end: 10px;
|
||||
}
|
||||
</style>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/resources/check-layout-th.js"></script>
|
||||
</head>
|
||||
<body onload="checkLayout('flexbox > item')">
|
||||
<div id="target">
|
||||
<flexbox>
|
||||
<item data-offset-y="8" data-expected-margin-bottom="10"></item>
|
||||
<item data-offset-y="8" data-expected-margin-bottom="10"></item>
|
||||
<item data-offset-y="68" data-expected-margin-bottom="0"></item>
|
||||
<item data-offset-y="68" data-expected-margin-bottom="0"></item>
|
||||
</flexbox>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,37 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<link rel="author" href="mailto:sammy.gill@apple.com">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-flex">
|
||||
<meta name="assert" content="both trimmed block margins should be reflected in computed style">
|
||||
<style>
|
||||
flexbox {
|
||||
display: flex;
|
||||
width: 100px;
|
||||
flex-wrap: wrap;
|
||||
margin-trim: block;
|
||||
}
|
||||
item {
|
||||
display: block;
|
||||
background-color: green;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
margin-block: 10px;
|
||||
}
|
||||
|
||||
</style>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/resources/check-layout-th.js"></script>
|
||||
</head>
|
||||
<body onload="checkLayout('flexbox > item')">
|
||||
<div id="target">
|
||||
<flexbox>
|
||||
<item data-expected-margin-top="0" data-expected-margin-bottom="10" data-offset-y="8"></item>
|
||||
<item data-expected-margin-top="0" data-expected-margin-bottom="10" data-offset-y="8"></item>
|
||||
<item data-expected-margin-top="10" data-expected-margin-bottom="0" data-offset-y="78"></item>
|
||||
<item data-expected-margin-top="10" data-expected-margin-bottom="0" data-offset-y="78"></item>
|
||||
</flexbox>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,47 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<link rel="author" href="mailto:sammy.gill@apple.com">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-flex">
|
||||
<meta name="assert" content="trimmed inline-start margins should be reflected in computed style">
|
||||
<style>
|
||||
flexbox {
|
||||
display: flex;
|
||||
width: 110px;
|
||||
flex-wrap: wrap;
|
||||
margin-trim: inline-start;
|
||||
}
|
||||
item {
|
||||
display: block;
|
||||
background-color: green;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
}
|
||||
item:nth-child(1) {
|
||||
margin-inline-start: 10px;
|
||||
}
|
||||
item:nth-child(2) {
|
||||
margin-inline-start: -10px;
|
||||
}
|
||||
item:nth-child(3) {
|
||||
margin-inline-start: 50%;
|
||||
}
|
||||
item:nth-child(4) {
|
||||
margin-inline-start: 10px;
|
||||
}
|
||||
</style>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/resources/check-layout-th.js"></script>
|
||||
</head>
|
||||
<body onload="checkLayout('flexbox > item')">
|
||||
<div id="target">
|
||||
<flexbox>
|
||||
<item data-expected-margin-left="0" data-offset-x="8"></item>
|
||||
<item data-expected-margin-left="-10" data-offset-x="48"></item>
|
||||
<item data-expected-margin-left="0" data-offset-x="8"></item>
|
||||
<item data-expected-margin-left="10" data-offset-x="68"></item>
|
||||
</flexbox>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -482,8 +482,7 @@ for (testCase of SIMPLE_JOIN_LEAVE_TEST_CASES) {
|
|||
assert_true(joinExceptionThrown, 'Exception not thrown on join.');
|
||||
}
|
||||
|
||||
let leave_promise = navigator.leaveAdInterestGroup(testCase.interestGroup,
|
||||
INTEREST_GROUP_LIFETIME_SECS);
|
||||
let leave_promise = navigator.leaveAdInterestGroup(testCase.interestGroup);
|
||||
assert_true(leave_promise instanceof Promise, "leave should return a promise");
|
||||
if (testCase.expectLeaveSucces) {
|
||||
assert_equals(await leave_promise, undefined);
|
||||
|
|
6
tests/wpt/web-platform-tests/fs/root-name.https.any.js
Normal file
6
tests/wpt/web-platform-tests/fs/root-name.https.any.js
Normal file
|
@ -0,0 +1,6 @@
|
|||
'use strict';
|
||||
|
||||
promise_test(async test => {
|
||||
let root = await navigator.storage.getDirectory();
|
||||
assert_equals(root.name, '');
|
||||
}, 'getDirectory returns a directory whose name is the empty string');
|
|
@ -0,0 +1,39 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>Disable nested fieldsets with focused element</title>
|
||||
<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-fieldset-element">
|
||||
<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1427047">
|
||||
<link rel="author" href="mailto:xiaochengh@chromium.org">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
|
||||
<div id=container1>
|
||||
<fieldset id=target1>
|
||||
<legend>foo</legend>
|
||||
<fieldset>
|
||||
<legend>bar</legend>
|
||||
<input id=input1>
|
||||
</fieldset>
|
||||
</fieldset>
|
||||
</div>
|
||||
<script>
|
||||
test(() => {
|
||||
input1.focus();
|
||||
target1.disabled = true;
|
||||
assert_not_equals(document.activeElement, input1);
|
||||
}, 'Disable light-nested fieldsets should not crash');
|
||||
</script>
|
||||
|
||||
<div id=container2></div>
|
||||
<script>
|
||||
test(() => {
|
||||
let n = 100;
|
||||
let markup = '<fieldset><legend>foo</legend>'.repeat(n) +
|
||||
'<input id=input2>' + '</fieldset>'.repeat(n);
|
||||
container2.innerHTML = markup;
|
||||
input2.focus();
|
||||
container2.firstChild.disabled = true;
|
||||
assert_not_equals(document.activeElement, input2);
|
||||
}, 'Disable deep-nested fieldsets should not hang');
|
||||
</script>
|
||||
|
|
@ -227,10 +227,17 @@ function FrameInitiatedNavigation(frame, url) {
|
|||
return load;
|
||||
}
|
||||
|
||||
// Makes a subresource request to the provided host in the given frame, and returns the cookies in the response.
|
||||
function FetchFromFrame(frame, host) {
|
||||
// Makes a subresource request to the provided host in the given frame, and
|
||||
// returns the cookies that were included in the request.
|
||||
function FetchSubresourceCookiesFromFrame(frame, host) {
|
||||
return FetchFromFrame(frame, `${host}/storage-access-api/resources/echo-cookie-header.py`);
|
||||
}
|
||||
|
||||
// Makes a subresource request to the provided host in the given frame, and
|
||||
// returns the response.
|
||||
function FetchFromFrame(frame, url) {
|
||||
return PostMessageAndAwaitReply(
|
||||
{ command: "subresource cookies", host }, frame.contentWindow);
|
||||
{ command: "cors fetch", url }, frame.contentWindow);
|
||||
}
|
||||
|
||||
// Tries to set storage access policy, ignoring any errors.
|
||||
|
|
|
@ -70,11 +70,11 @@
|
|||
await SetDocumentCookieFromFrame(crossOriginFrame, `cookie=monster;Secure;SameSite=None;Path=/`);
|
||||
await SetDocumentCookieFromFrame(crossSiteFrame, `foo=bar;Secure;SameSite=None;Path=/`);
|
||||
|
||||
assert_true(cookieStringHasCookie("cookie", "monster", await FetchFromFrame(crossOriginFrame, www)),"crossOriginFrame making same-origin subresource request can access cookies.");
|
||||
assert_true(cookieStringHasCookie("foo", "bar", await FetchFromFrame(crossSiteFrame, wwwAlt)),"crossSiteFrame making same-origin subresource request can access cookies.");
|
||||
assert_true(cookieStringHasCookie("cookie", "monster", await FetchSubresourceCookiesFromFrame(crossOriginFrame, www)),"crossOriginFrame making same-origin subresource request can access cookies.");
|
||||
assert_true(cookieStringHasCookie("foo", "bar", await FetchSubresourceCookiesFromFrame(crossSiteFrame, wwwAlt)),"crossSiteFrame making same-origin subresource request can access cookies.");
|
||||
|
||||
assert_false(cookieStringHasCookie("foo", "bar", await FetchFromFrame(crossOriginFrame, wwwAlt)), "crossOriginFrame making cross-site subresource request to sibling iframe's host should not include cookies.");
|
||||
assert_false(cookieStringHasCookie("cookie", "monster", await FetchFromFrame(crossSiteFrame, www)),"crossSiteFrame making cross-site subresource request to sibling iframe's host should not include cookies.");
|
||||
assert_false(cookieStringHasCookie("foo", "bar", await FetchSubresourceCookiesFromFrame(crossOriginFrame, wwwAlt)), "crossOriginFrame making cross-site subresource request to sibling iframe's host should not include cookies.");
|
||||
assert_false(cookieStringHasCookie("cookie", "monster", await FetchSubresourceCookiesFromFrame(crossSiteFrame, www)),"crossSiteFrame making cross-site subresource request to sibling iframe's host should not include cookies.");
|
||||
|
||||
}, "Cross-site sibling iframes should not be able to take advantage of the existing permission grant requested by others.");
|
||||
|
||||
|
|
|
@ -48,9 +48,8 @@ window.addEventListener("message", async (event) => {
|
|||
// script-with-cookie-header.py.
|
||||
reply(httpCookies);
|
||||
break;
|
||||
case "subresource cookies":
|
||||
const cookie = await fetch(`${event.data.host}/storage-access-api/resources/echo-cookie-header.py`, {mode: 'cors', credentials: 'include'}).then((resp) => resp.text());
|
||||
reply(cookie);
|
||||
case "cors fetch":
|
||||
reply(await fetch(event.data.url, {mode: 'cors', credentials: 'include'}).then((resp) => resp.text()));
|
||||
break;
|
||||
default:
|
||||
}
|
||||
|
|
|
@ -3,27 +3,14 @@
|
|||
// META: script=/resources/testdriver-vendor.js
|
||||
'use strict';
|
||||
|
||||
// Note that this file follows the pattern in:
|
||||
// storage-access-api/requestStorageAccess.sub.window.js
|
||||
//
|
||||
// Some tests are run at the top-level, and an iframe is added to validate API
|
||||
// behavior in that context.
|
||||
|
||||
const {testPrefix, topLevelDocument} = processQueryParams();
|
||||
if (!topLevelDocument) {
|
||||
test_driver.set_test_context(window.top);
|
||||
}
|
||||
|
||||
const requestedOrigin = 'https://foo.com';
|
||||
const altOrigin = 'https://{{hosts[alt][www]}}:{{ports[https][0]}}';
|
||||
|
||||
// Common tests to run in all frames.
|
||||
promise_test(
|
||||
async () => {
|
||||
assert_not_equals(document.requestStorageAccessFor, undefined);
|
||||
},
|
||||
'[' + testPrefix +
|
||||
'] document.requestStorageAccessFor() should be supported on the document interface');
|
||||
'[top-level-context] document.requestStorageAccessFor() should be supported on the document interface');
|
||||
|
||||
promise_test(
|
||||
t => {
|
||||
|
@ -31,8 +18,7 @@ promise_test(
|
|||
document.requestStorageAccessFor(),
|
||||
'document.requestStorageAccessFor() call without origin argument');
|
||||
},
|
||||
'[' + testPrefix +
|
||||
'] document.requestStorageAccessFor() should be rejected when called with no argument');
|
||||
'[top-level-context] document.requestStorageAccessFor() should be rejected when called with no argument');
|
||||
|
||||
// Most tests need to start with the feature in "prompt" state.
|
||||
// For tests that rely on the permission state, this function is intended to be
|
||||
|
@ -45,169 +31,168 @@ async function CommonSetup() {
|
|||
{ name: 'top-level-storage-access', requestedOrigin: altOrigin }, 'prompt');
|
||||
}
|
||||
|
||||
if (topLevelDocument) {
|
||||
promise_test(async t => {
|
||||
await CommonSetup();
|
||||
return promise_rejects_dom(t, 'NotAllowedError',
|
||||
document.requestStorageAccessFor(requestedOrigin),
|
||||
'document.requestStorageAccessFor() call without user gesture');
|
||||
},
|
||||
'[' + testPrefix +
|
||||
'] document.requestStorageAccessFor() should be rejected by default with no user gesture');
|
||||
promise_test(async t => {
|
||||
await CommonSetup();
|
||||
return promise_rejects_dom(t, 'NotAllowedError',
|
||||
document.requestStorageAccessFor(requestedOrigin),
|
||||
'document.requestStorageAccessFor() call without user gesture');
|
||||
},
|
||||
'[top-level-context] document.requestStorageAccessFor() should be rejected by default with no user gesture');
|
||||
|
||||
promise_test(async t => {
|
||||
const description =
|
||||
'document.requestStorageAccessFor() call in a detached frame';
|
||||
// Can't use promise_rejects_dom here because the exception is from the wrong global.
|
||||
return CreateDetachedFrame().requestStorageAccessFor(requestedOrigin)
|
||||
.then(t.unreached_func('Should have rejected: ' + description))
|
||||
.catch((e) => {
|
||||
assert_equals(e.name, 'InvalidStateError', description);
|
||||
});
|
||||
}, '[non-fully-active] document.requestStorageAccessFor() should not resolve when run in a detached frame');
|
||||
promise_test(async t => {
|
||||
const description =
|
||||
'document.requestStorageAccessFor() call in a detached frame';
|
||||
// Can't use promise_rejects_dom here because the exception is from the wrong global.
|
||||
return CreateDetachedFrame().requestStorageAccessFor(requestedOrigin)
|
||||
.then(t.unreached_func('Should have rejected: ' + description))
|
||||
.catch((e) => {
|
||||
assert_equals(e.name, 'InvalidStateError', description);
|
||||
});
|
||||
}, '[non-fully-active] document.requestStorageAccessFor() should not resolve when run in a detached frame');
|
||||
|
||||
promise_test(async t => {
|
||||
const description =
|
||||
'document.requestStorageAccessFor() in a detached DOMParser result';
|
||||
return CreateDocumentViaDOMParser().requestStorageAccessFor(requestedOrigin)
|
||||
.then(t.unreached_func('Should have rejected: ' + description))
|
||||
.catch((e) => {
|
||||
assert_equals(e.name, 'InvalidStateError', description);
|
||||
});
|
||||
}, '[non-fully-active] document.requestStorageAccessFor() should not resolve when run in a detached DOMParser document');
|
||||
promise_test(async t => {
|
||||
const description =
|
||||
'document.requestStorageAccessFor() in a detached DOMParser result';
|
||||
return CreateDocumentViaDOMParser().requestStorageAccessFor(requestedOrigin)
|
||||
.then(t.unreached_func('Should have rejected: ' + description))
|
||||
.catch((e) => {
|
||||
assert_equals(e.name, 'InvalidStateError', description);
|
||||
});
|
||||
}, '[non-fully-active] document.requestStorageAccessFor() should not resolve when run in a detached DOMParser document');
|
||||
|
||||
promise_test(
|
||||
async t => {
|
||||
await CommonSetup();
|
||||
await test_driver.set_permission(
|
||||
{name: 'top-level-storage-access', requestedOrigin}, 'granted');
|
||||
promise_test(
|
||||
async t => {
|
||||
await CommonSetup();
|
||||
await test_driver.set_permission(
|
||||
{name: 'top-level-storage-access', requestedOrigin}, 'granted');
|
||||
|
||||
await document.requestStorageAccessFor(requestedOrigin);
|
||||
},
|
||||
'[' + testPrefix +
|
||||
'] document.requestStorageAccessFor() should be resolved without a user gesture with an existing permission');
|
||||
await document.requestStorageAccessFor(requestedOrigin);
|
||||
},
|
||||
'[top-level-context] document.requestStorageAccessFor() should be resolved without a user gesture with an existing permission');
|
||||
|
||||
promise_test(
|
||||
async t => {
|
||||
await CommonSetup();
|
||||
await test_driver.set_permission(
|
||||
{name: 'top-level-storage-access', requestedOrigin: altOrigin},
|
||||
'granted');
|
||||
promise_test(
|
||||
async t => {
|
||||
await CommonSetup();
|
||||
await test_driver.set_permission(
|
||||
{name: 'top-level-storage-access', requestedOrigin: altOrigin},
|
||||
'granted');
|
||||
|
||||
await RunCallbackWithGesture(() => {
|
||||
return document.requestStorageAccessFor(altOrigin).then(() => {
|
||||
return RunTestsInIFrame(
|
||||
'https://{{hosts[alt][www]}}:{{ports[https][0]}}/top-level-storage-access-api/tentative/resources/requestStorageAccess-integration-iframe.https.html');
|
||||
});
|
||||
});
|
||||
},
|
||||
'[' + testPrefix +
|
||||
'] document.requestStorageAccess() should be resolved without a user gesture after a successful requestStorageAccessFor() call');
|
||||
const frame = await CreateFrame(
|
||||
'/storage-access-api/resources/script-with-cookie-header.py?script=embedded_responder.js');
|
||||
|
||||
promise_test(() => {
|
||||
// Create a test with a single-child same-origin iframe.
|
||||
// This will validate that calls to requestStorageAccessFor are rejected
|
||||
// in non-top-level contexts.
|
||||
return RunTestsInIFrame(
|
||||
'./resources/requestStorageAccessFor-iframe.https.html?testCase=same-origin-frame');
|
||||
});
|
||||
await RunCallbackWithGesture(() => document.requestStorageAccessFor(altOrigin));
|
||||
assert_true(await RequestStorageAccessInFrame(frame));
|
||||
},
|
||||
'[top-level-context] document.requestStorageAccess() should be resolved without a user gesture after a successful requestStorageAccessFor() call');
|
||||
|
||||
promise_test(
|
||||
async t => {
|
||||
await RunCallbackWithGesture(
|
||||
() => document.requestStorageAccessFor(document.location.origin));
|
||||
},
|
||||
'[' + testPrefix +
|
||||
'] document.requestStorageAccessFor() should be resolved when called properly with a user gesture and the same origin');
|
||||
promise_test(
|
||||
async t => {
|
||||
await RunCallbackWithGesture(
|
||||
() => document.requestStorageAccessFor(document.location.origin));
|
||||
},
|
||||
'[top-level-context] document.requestStorageAccessFor() should be resolved when called properly with a user gesture and the same origin');
|
||||
|
||||
promise_test(
|
||||
async t => {
|
||||
await RunCallbackWithGesture(
|
||||
() => promise_rejects_dom(t, 'NotAllowedError', document.requestStorageAccessFor('bogus-url'),
|
||||
'document.requestStorageAccessFor() call with bogus URL'));
|
||||
},
|
||||
'[' + testPrefix +
|
||||
'] document.requestStorageAccessFor() should be rejected when called with an invalid origin');
|
||||
promise_test(
|
||||
async t => {
|
||||
await RunCallbackWithGesture(
|
||||
() => promise_rejects_dom(t, 'NotAllowedError', document.requestStorageAccessFor('bogus-url'),
|
||||
'document.requestStorageAccessFor() call with bogus URL'));
|
||||
},
|
||||
'[top-level-context] document.requestStorageAccessFor() should be rejected when called with an invalid origin');
|
||||
|
||||
promise_test(
|
||||
async t => {
|
||||
await RunCallbackWithGesture(
|
||||
() => promise_rejects_dom(t, 'NotAllowedError', document.requestStorageAccessFor('data:,Hello%2C%20World%21'),
|
||||
'document.requestStorageAccessFor() call with data URL'));
|
||||
},
|
||||
'[' + testPrefix +
|
||||
'] document.requestStorageAccessFor() should be rejected when called with an opaque origin');
|
||||
promise_test(
|
||||
async t => {
|
||||
await RunCallbackWithGesture(
|
||||
() => promise_rejects_dom(t, 'NotAllowedError', document.requestStorageAccessFor('data:,Hello%2C%20World%21'),
|
||||
'document.requestStorageAccessFor() call with data URL'));
|
||||
},
|
||||
'[top-level-context] document.requestStorageAccessFor() should be rejected when called with an opaque origin');
|
||||
|
||||
promise_test(
|
||||
async (t) => {
|
||||
const altEchoCookieHeaderUrl =
|
||||
`${altOrigin}/storage-access-api/resources/echo-cookie-header.py`;
|
||||
promise_test(
|
||||
async (t) => {
|
||||
const altEchoCookieHeaderUrl =
|
||||
`${altOrigin}/storage-access-api/resources/echo-cookie-header.py`;
|
||||
|
||||
await MaybeSetStorageAccess('*', '*', 'blocked');
|
||||
await CommonSetup();
|
||||
await MaybeSetStorageAccess('*', '*', 'blocked');
|
||||
await CommonSetup();
|
||||
|
||||
await test_driver.set_permission(
|
||||
{name: 'top-level-storage-access', requestedOrigin: altOrigin},
|
||||
'granted');
|
||||
await test_driver.set_permission(
|
||||
{name: 'top-level-storage-access', requestedOrigin: altOrigin},
|
||||
'granted');
|
||||
|
||||
// Set cross-site cookie for altOrigin. Note that this only works with
|
||||
// an existing top-level storage access permission.
|
||||
await fetch(
|
||||
`${altOrigin}/cookies/resources/set-cookie.py?name=cookie&path=/&samesite=None&secure=`,
|
||||
{mode: 'cors', credentials: 'include'});
|
||||
// Set cross-site cookie for altOrigin. Note that this only works with
|
||||
// an existing top-level storage access permission.
|
||||
await fetch(
|
||||
`${altOrigin}/cookies/resources/set-cookie.py?name=cookie&path=/&samesite=None&secure=`,
|
||||
{mode: 'cors', credentials: 'include'});
|
||||
|
||||
const httpCookies1 = await fetch(altEchoCookieHeaderUrl, {
|
||||
mode: 'cors',
|
||||
credentials: 'include'
|
||||
}).then((resp) => resp.text());
|
||||
assert_true(
|
||||
httpCookies1.includes('cookie=1'),
|
||||
'After obtaining top-level storage access, cross-site subresource requests with CORS mode should have cookie access.');
|
||||
const httpCookies1 = await fetch(altEchoCookieHeaderUrl, {
|
||||
mode: 'cors',
|
||||
credentials: 'include'
|
||||
}).then((resp) => resp.text());
|
||||
assert_true(
|
||||
httpCookies1.includes('cookie=1'),
|
||||
'After obtaining top-level storage access, cross-site subresource requests with CORS mode should have cookie access.');
|
||||
|
||||
const httpCookies2 = await fetch(altEchoCookieHeaderUrl, {
|
||||
mode: 'no-cors',
|
||||
credentials: 'include'
|
||||
}).then((resp) => resp.text());
|
||||
assert_false(
|
||||
httpCookies2.includes('cookie=1'),
|
||||
'Cross-site subresource requests without CORS mode cannot access cookie even with an existing permission.');
|
||||
},
|
||||
'[' + testPrefix +
|
||||
'] Top-level storage access only allows cross-site subresource requests to access cookie when using CORS mode.');
|
||||
const httpCookies2 = await fetch(altEchoCookieHeaderUrl, {
|
||||
mode: 'no-cors',
|
||||
credentials: 'include'
|
||||
}).then((resp) => resp.text());
|
||||
assert_false(
|
||||
httpCookies2.includes('cookie=1'),
|
||||
'Cross-site subresource requests without CORS mode cannot access cookie even with an existing permission.');
|
||||
},
|
||||
'[top-level-context] Top-level storage access only allows cross-site subresource requests to access cookie when using CORS mode.');
|
||||
|
||||
} else {
|
||||
promise_test(
|
||||
async t => {
|
||||
await RunCallbackWithGesture(
|
||||
() => promise_rejects_dom(t, 'NotAllowedError', document.requestStorageAccessFor(document.location.origin),
|
||||
promise_test(
|
||||
async () => {
|
||||
const frame = await CreateFrame(
|
||||
'/storage-access-api/resources/script-with-cookie-header.py?script=embedded_responder.js');
|
||||
assert_not_equals(frame.contentWindow.document.requestStorageAccessFor, undefined);
|
||||
},
|
||||
'[same-origin-iframe] document.requestStorageAccessFor() should be supported on the document interface');
|
||||
|
||||
promise_test(
|
||||
async t => {
|
||||
const frame = await CreateFrame(
|
||||
'/storage-access-api/resources/script-with-cookie-header.py?script=embedded_responder.js');
|
||||
return promise_rejects_js(t, frame.contentWindow.TypeError,
|
||||
frame.contentWindow.document.requestStorageAccessFor(),
|
||||
'document.requestStorageAccessFor() call without origin argument');
|
||||
},
|
||||
'[same-origin-iframe] document.requestStorageAccessFor() should be rejected when called with no argument');
|
||||
|
||||
promise_test(
|
||||
async t => {
|
||||
const frame = await CreateFrame(
|
||||
'/storage-access-api/resources/script-with-cookie-header.py?script=embedded_responder.js');
|
||||
|
||||
await RunCallbackWithGesture(() =>
|
||||
promise_rejects_dom(t, 'NotAllowedError', frame.contentWindow.DOMException,
|
||||
frame.contentWindow.document.requestStorageAccessFor(document.location.origin),
|
||||
'document.requestStorageAccessFor() call in a non-top-level context'));
|
||||
},
|
||||
'[' + testPrefix +
|
||||
'] document.requestStorageAccessFor() should be rejected when called in an iframe');
|
||||
},
|
||||
'[same-origin-iframe] document.requestStorageAccessFor() should be rejected when called in an iframe');
|
||||
|
||||
promise_test(
|
||||
async (t) => {
|
||||
await MaybeSetStorageAccess('*', '*', 'blocked');
|
||||
await CommonSetup();
|
||||
promise_test(
|
||||
async (t) => {
|
||||
await MaybeSetStorageAccess('*', '*', 'blocked');
|
||||
await CommonSetup();
|
||||
|
||||
// Set cross-site cookie for altOrigin. Note that cookie won't be set
|
||||
// even with an existing top-level storage access permission in an
|
||||
// iframe.
|
||||
await fetch(
|
||||
`${altOrigin}/cookies/resources/set-cookie.py?name=cookie&path=/&samesite=None&secure=`,
|
||||
{mode: 'cors', credentials: 'include'});
|
||||
const frame = await CreateFrame(
|
||||
`/storage-access-api/resources/script-with-cookie-header.py?script=embedded_responder.js`);
|
||||
|
||||
await test_driver.set_permission(
|
||||
{name: 'top-level-storage-access', requestedOrigin: altOrigin},
|
||||
'granted');
|
||||
// Set cross-site cookie for altOrigin. Note that cookie won't be set
|
||||
// even with an existing top-level storage access permission in an
|
||||
// iframe.
|
||||
await FetchFromFrame(frame,
|
||||
`${altOrigin}/cookies/resources/set-cookie.py?name=cookie&path=/&samesite=None&secure=`);
|
||||
|
||||
const httpCookies =
|
||||
await fetch(
|
||||
`${altOrigin}/storage-access-api/resources/echo-cookie-header.py`,
|
||||
{mode: 'cors', credentials: 'include'})
|
||||
.then((resp) => resp.text());
|
||||
assert_false(httpCookies.includes('cookie=1'));
|
||||
},
|
||||
'[' + testPrefix +
|
||||
'] Existing top-level storage access permission should not allow cookie access for the cross-site subresource requests made in a non-top-level context.');
|
||||
}
|
||||
await test_driver.set_permission(
|
||||
{name: 'top-level-storage-access', requestedOrigin: altOrigin},
|
||||
'granted');
|
||||
|
||||
const httpCookies = await FetchSubresourceCookiesFromFrame(frame, altOrigin);
|
||||
assert_false(httpCookies.includes('cookie=1'));
|
||||
},
|
||||
'[same-origin-iframe] Existing top-level storage access permission should not allow cookie access for the cross-site subresource requests made in a non-top-level context.');
|
||||
|
|
|
@ -1,15 +0,0 @@
|
|||
<!doctype html>
|
||||
<meta charset=utf-8>
|
||||
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testdriver.js"></script>
|
||||
<script src="/resources/testdriver-vendor.js"></script>
|
||||
<!-- no testharnessreport.js -->
|
||||
<script src="../../storage-access-api/helpers.js"></script>
|
||||
<div id=log></div>
|
||||
<script>
|
||||
promise_test(
|
||||
async t => document.requestStorageAccess(),
|
||||
'[request-storage-access-integration] ' +
|
||||
'document.requestStorageAccess() should be resolved without a user gesture with an existing top-level-storage-access permission');
|
||||
</script>
|
|
@ -0,0 +1,31 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Region Role Verification Tests</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/resources/testdriver.js"></script>
|
||||
<script src="/resources/testdriver-vendor.js"></script>
|
||||
<script src="/resources/testdriver-actions.js"></script>
|
||||
<script src="/wai-aria/scripts/aria-utils.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- spec resolution https://github.com/w3c/core-aam/issues/166 -->
|
||||
|
||||
<div role="none" id="none" data-expectedrole="none" data-testname="none role == computedrole none" class="ex">x</div><!-- preferred -->
|
||||
<div role="presentation" id="presentation" data-expectedrole="none" data-testname="synonym presentation role == computedrole none" class="ex">x</div><!-- synonym -->
|
||||
|
||||
<div role="image" id="image" data-expectedrole="image" data-testname="image role == computedrole image" class="ex">x</div><!-- preferred -->
|
||||
<div role="img" id="img" data-expectedrole="image" data-testname="synonym img role == computedrole image" class="ex">x</div><!-- synonym -->
|
||||
|
||||
<!-- `directory` synonym deprecated in ARIA 1.2; these examples should all return computedrole `list` -->
|
||||
<ul role="list" id="list2" data-expectedrole="list" data-testname="list role == computedrole list" class="ex"><li>x</li></ul>
|
||||
<ul role="directory" id="directory" data-expectedrole="list" data-testname="directory role == computedrole list" class="ex"><li>x</li></ul>
|
||||
<div role="directory" id="div" data-expectedrole="list" data-testname="div w/directory role == computedrole list" class="ex"><div role="listitem">x</div></div>
|
||||
|
||||
<script>
|
||||
AriaUtils.verifyRolesBySelector(".ex");
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -18,12 +18,29 @@ const { HTTPS_ORIGIN, HTTPS_NOTSAMESITE_ORIGIN } = get_host_info();
|
|||
const held = new Map();
|
||||
let next_lock_id = 1;
|
||||
|
||||
// How this test works:
|
||||
// Step 1 (top-frame): request an exclusive web-lock and store its id
|
||||
// and release for clean-up.
|
||||
// Step 2 (top-frame): open a pop-up window and load a not-same-site
|
||||
// ./web-locks/resources/partitioned-parent.html
|
||||
// Step 3 (pop-up): load a same-site iframe inside the pop-up.
|
||||
// Step 4 (pop-up): send a web-lock request to the same-site iframe.
|
||||
// Step 5 (iframe): process the web-lock request and message the result
|
||||
// back to the pop-up.
|
||||
// Step 6 (pop-up): intercept the result message from the iframe and
|
||||
// send it to the top-frame.
|
||||
// Step 7 (top-frame): ensure that the same-site iframe's web-lock
|
||||
// request succeeds since it and the top-level site are successfully
|
||||
// partitioned and each can hold an exclusive lock.
|
||||
// Step 8 (top-frame): clean up.
|
||||
|
||||
async function third_party_test(t) {
|
||||
let target_url = HTTPS_ORIGIN + '/web-locks/resources/iframe.html';
|
||||
target_url = new URL(
|
||||
`/web-locks/resources/partitioned-parent.html?target=${encodeURIComponent(target_url)}`,
|
||||
HTTPS_NOTSAMESITE_ORIGIN + self.location.pathname);
|
||||
|
||||
// Step 1.
|
||||
navigator.locks.request('testLock', {mode: 'exclusive', ifAvailable: true},
|
||||
lock => {
|
||||
if (lock === null) {
|
||||
|
@ -37,15 +54,18 @@ async function third_party_test(t) {
|
|||
return promise;
|
||||
});
|
||||
|
||||
// Step 2.
|
||||
const w = window.open(target_url);
|
||||
const result = await new Promise(resolve => window.onmessage = resolve);
|
||||
|
||||
// Step 7.
|
||||
// When 3rd party storage partitioning is enabled, the iframe should be able
|
||||
// to aquire a lock with the same name as one exclusively held by the opener
|
||||
// of its top window, even when that opener has the same origin.
|
||||
assert_equals(result.data.failed, undefined,
|
||||
'The 1p iframe failed to acquire the lock');
|
||||
|
||||
// Step 8.
|
||||
t.add_cleanup(() => {
|
||||
w.close()
|
||||
for(let i = 1; i < next_lock_id; i++){
|
||||
|
@ -61,6 +81,30 @@ promise_test(t => {
|
|||
|
||||
// Optional Test: Checking for partitioned web locks in an A->B->A
|
||||
// (nested-iframe with cross-site ancestor chain) scenario.
|
||||
//
|
||||
// How this test works:
|
||||
// Nested Step 1 (top frame): request an exclusive web-lock and
|
||||
// store its id and release for clean-up.
|
||||
// Nested Step 2 (top frame): open a pop-up window and load a
|
||||
// same-site /web-locks/resources/partitioned-parent.html.
|
||||
// Nested Step 3 (pop-up): load a not-same-site "parent" iframe (A->B)
|
||||
// (/web-locks/resources/iframe-parent.html) inside the pop-up.
|
||||
// Nested Step 4 (pop-up): send a web-lock request to the parent iframe.
|
||||
// Nested Step 5 (parent iframe): load a "child" iframe (A->B->A)
|
||||
// (/web-locks/resources/iframe.html) that is same-site with the
|
||||
// pop-up inside the "parent" iframe.
|
||||
// Nested Step 6 (parent iframe): pass on the web-lock request message to
|
||||
// the "child" iframe.
|
||||
// Nested Step 7 (child iframe): process the web-lock request and message
|
||||
// the result to the parent iframe.
|
||||
// Nested Step 8 (parent iframe): intercept the result message from the
|
||||
// child iframe and send it to the pop-up.
|
||||
// Nested Step 9 (pop-up): intercept the result message from the parent
|
||||
// iframe and send it to the top frame.
|
||||
// Nested Step 10 (top frame): ensure that the same-site iframe's web-lock
|
||||
// request succeeds since it and the top-level are successfully
|
||||
// partitioned and each can hold an exclusive lock.
|
||||
// Nested Step 11 (top frame): clean up.
|
||||
|
||||
// Map of lock_id => function that releases a lock.
|
||||
const held_2 = new Map();
|
||||
|
@ -78,6 +122,7 @@ async function nested_iframe_test(t) {
|
|||
`/web-locks/resources/partitioned-parent.html?target=${encodeURIComponent(middle_url)}`,
|
||||
HTTPS_ORIGIN + self.location.pathname);
|
||||
|
||||
// Nested Step 1.
|
||||
// Request the weblock for the top-level site.
|
||||
navigator.locks.request('testLock', {mode: 'exclusive', ifAvailable: true},
|
||||
lock => {
|
||||
|
@ -93,17 +138,20 @@ async function nested_iframe_test(t) {
|
|||
return promise;
|
||||
}).catch(error => alert(error.message));
|
||||
|
||||
// Nested Step 2.
|
||||
// Open the nested iframes. The script in the innermost child iframe
|
||||
// will attempt to obtain the same weblock as above.
|
||||
const w = window.open(top_url);
|
||||
const result = await new Promise(resolve => window.onmessage = resolve);
|
||||
|
||||
// Nested Step 10.
|
||||
// With third-party storage partitioning enabled, the same-site iframe
|
||||
// should be able to acquire the lock as it has a cross-site ancestor
|
||||
// and is partitioned separately from the top-level site.
|
||||
assert_equals(result.data.failed, undefined,
|
||||
'The 1p iframe failed to acquire the lock');
|
||||
|
||||
// Nested Step 11.
|
||||
t.add_cleanup(() => {
|
||||
w.close()
|
||||
for(let i = 1; i < next_lock_id_2; i++){
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
'use strict';
|
||||
|
||||
async function onLoad() {
|
||||
// Nested Step 5: wpt/web-locks/partitioned-web-locks.tentative.https.html
|
||||
// Load the innermost child iframe and its content.
|
||||
const params = new URLSearchParams(self.location.search);
|
||||
const frame = document.createElement('iframe');
|
||||
|
@ -11,6 +12,7 @@ async function onLoad() {
|
|||
document.body.appendChild(frame);
|
||||
|
||||
self.addEventListener('message', evt => {
|
||||
// Nested Step 6: wpt/web-locks/partitioned-web-locks.tentative.https.html
|
||||
// Pass any operations request messages to the
|
||||
// innermost child iframe.
|
||||
if (evt.data.op){
|
||||
|
@ -20,6 +22,7 @@ async function onLoad() {
|
|||
frame.contentWindow.postMessage(evt.data, '*');
|
||||
});
|
||||
}
|
||||
// Nested Step 8: wpt/web-locks/partitioned-web-locks.tentative.https.html
|
||||
else {
|
||||
// All other messages, should be sent back to the
|
||||
// top-level site.
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
<meta name="referrer" content="origin">
|
||||
<script>
|
||||
async function onLoad() {
|
||||
// Step 6 and Nested Step 9:
|
||||
// wpt/web-locks/partitioned-web-locks.tentative.https.html
|
||||
self.addEventListener('message', evt => {
|
||||
if (self.opener)
|
||||
self.opener.postMessage(evt.data, '*');
|
||||
|
@ -10,11 +12,15 @@ async function onLoad() {
|
|||
self.top.postMessage(evt.data, '*');
|
||||
}, { once: true });
|
||||
|
||||
// Step 3 and Nested Step 3:
|
||||
// wpt/web-locks/partitioned-web-locks.tentative.https.html
|
||||
const params = new URLSearchParams(self.location.search);
|
||||
const frame = document.createElement('iframe');
|
||||
frame.src = params.get('target');
|
||||
document.body.appendChild(frame);
|
||||
|
||||
// Step 4 and Nested Step 4:
|
||||
// wpt/web-locks/partitioned-web-locks.tentative.https.html
|
||||
frame.addEventListener('load', function(){
|
||||
frame.contentWindow.postMessage({op: 'request',
|
||||
name: 'testLock', ifAvailable: true}, '*');
|
||||
|
|
|
@ -2,6 +2,3 @@
|
|||
expected: ERROR
|
||||
[WebGL test #2: Unable to fetch WebGL rendering context for Canvas]
|
||||
expected: FAIL
|
||||
|
||||
[WebGL test #0: img was loaded]
|
||||
expected: FAIL
|
||||
|
|
|
@ -76,3 +76,9 @@
|
|||
|
||||
[WebGL test #50: Texture was smaller than the expected size 0x0]
|
||||
expected: FAIL
|
||||
|
||||
[WebGL test #45: Texture was smaller than the expected size 0x0]
|
||||
expected: FAIL
|
||||
|
||||
[WebGL test #49: Texture was smaller than the expected size 0x0]
|
||||
expected: FAIL
|
||||
|
|
|
@ -2,6 +2,3 @@
|
|||
expected: ERROR
|
||||
[WebGL test #2: Unable to fetch WebGL rendering context for Canvas]
|
||||
expected: FAIL
|
||||
|
||||
[WebGL test #0: img was loaded]
|
||||
expected: FAIL
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue