Update web-platform-tests to revision 589d1d54b73d37f1efde64f75cc408bdd640b44a

This commit is contained in:
WPT Sync Bot 2020-09-27 08:23:13 +00:00
parent 8ab389c10c
commit 1c7e2d22cf
122 changed files with 1953 additions and 415 deletions

View file

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

View file

@ -2,12 +2,6 @@
[.flexbox > img 1] [.flexbox > img 1]
expected: FAIL expected: FAIL
[.flexbox > img 2]
expected: FAIL
[.flexbox > img 3]
expected: FAIL
[.flexbox > img 5] [.flexbox > img 5]
expected: FAIL expected: FAIL
@ -20,24 +14,9 @@
[.flexbox > img 8] [.flexbox > img 8]
expected: FAIL expected: FAIL
[.flexbox > img 9]
expected: FAIL
[.flexbox > img 14]
expected: FAIL
[.flexbox > img 15]
expected: FAIL
[.flexbox > img 16] [.flexbox > img 16]
expected: FAIL expected: FAIL
[.flexbox > img 17]
expected: FAIL
[.flexbox > img 18]
expected: FAIL
[.flexbox > img 11] [.flexbox > img 11]
expected: FAIL expected: FAIL

View file

@ -2,12 +2,6 @@
[.flexbox > img 1] [.flexbox > img 1]
expected: FAIL expected: FAIL
[.flexbox > img 2]
expected: FAIL
[.flexbox > img 3]
expected: FAIL
[.flexbox > img 5] [.flexbox > img 5]
expected: FAIL expected: FAIL
@ -20,24 +14,9 @@
[.flexbox > img 8] [.flexbox > img 8]
expected: FAIL expected: FAIL
[.flexbox > img 9]
expected: FAIL
[.flexbox > img 14]
expected: FAIL
[.flexbox > img 15]
expected: FAIL
[.flexbox > img 16] [.flexbox > img 16]
expected: FAIL expected: FAIL
[.flexbox > img 17]
expected: FAIL
[.flexbox > img 18]
expected: FAIL
[.flexbox > img 11] [.flexbox > img 11]
expected: FAIL expected: FAIL

View file

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

View file

@ -1,4 +0,0 @@
[elementFromPoint-001.html]
[CSSOM View - 5 - extensions to the Document interface]
expected: FAIL

View file

@ -0,0 +1,4 @@
[elementsFromPoint-invalid-cases.html]
[The root element is the last element returned for otherwise empty queries within the viewport]
expected: FAIL

View file

@ -1,2 +0,0 @@
[matchMedia-display-none-iframe.html]
expected: ERROR

View file

@ -1,2 +0,0 @@
[HTMLMediaElement.html]
expected: TIMEOUT

View file

@ -312,21 +312,24 @@
[Response: combined response Content-Type: text/html;" \\" text/plain ";charset=GBK] [Response: combined response Content-Type: text/html;" \\" text/plain ";charset=GBK]
expected: NOTRUN expected: NOTRUN
[<iframe>: separate response Content-Type: text/html */*;charset=gbk]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;" text/plain]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;" text/plain] [<iframe>: combined response Content-Type: text/html;" text/plain]
expected: FAIL expected: FAIL
[<iframe>: combined response Content-Type: 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 */*] [<iframe>: combined response Content-Type: text/html */*;charset=gbk]
expected: FAIL expected: FAIL
[<iframe>: separate response Content-Type: text/plain */*] [<iframe>: separate response Content-Type: text/html;x=" text/plain]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;" \\" text/plain]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
expected: FAIL
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
expected: FAIL expected: FAIL

View file

@ -11,3 +11,9 @@
[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'NosniFF']
expected: FAIL
[X-Content-Type-Options%3A%0D%0AX-Content-Type-Options%3A%20nosniff]
expected: FAIL

View file

@ -0,0 +1,4 @@
[traverse_the_history_2.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

@ -1,2 +0,0 @@
[cross-origin-objects-on-new-window.html]
expected: TIMEOUT

View file

@ -1,16 +1,20 @@
[supported-elements.html] [supported-elements.html]
expected: TIMEOUT
[Contenteditable element should support autofocus] [Contenteditable element should support autofocus]
expected: FAIL expected: FAIL
[Host element with delegatesFocus including no focusable descendants should be skipped] [Host element with delegatesFocus including no focusable descendants should be skipped]
expected: FAIL expected: NOTRUN
[Element with tabindex should support autofocus] [Element with tabindex should support autofocus]
expected: FAIL expected: FAIL
[Area element should support autofocus] [Area element should support autofocus]
expected: FAIL expected: NOTRUN
[Host element with delegatesFocus should support autofocus] [Host element with delegatesFocus should support autofocus]
expected: FAIL expected: NOTRUN
[Non-HTMLElement should not support autofocus]
expected: TIMEOUT

View file

@ -1,5 +1,4 @@
[iframe_sandbox_popups_escaping-3.html] [iframe_sandbox_popups_escaping-3.html]
expected: CRASH
[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: FAIL expected: FAIL

View file

@ -1,5 +1,5 @@
[iframe_sandbox_popups_nonescaping-1.html] [iframe_sandbox_popups_nonescaping-1.html]
expected: CRASH 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: FAIL expected: NOTRUN

View file

@ -1,5 +1,5 @@
[iframe_sandbox_popups_nonescaping-2.html] [iframe_sandbox_popups_nonescaping-2.html]
expected: CRASH 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: NOTRUN

View file

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

View file

@ -0,0 +1,4 @@
[module-delayed.html]
[async document.write in a module]
expected: FAIL

View file

@ -0,0 +1,4 @@
[module-static-import-delayed.html]
[document.write in an imported module]
expected: FAIL

View file

@ -4,5 +4,5 @@
expected: TIMEOUT expected: TIMEOUT
[The entry settings object while executing the compiled callback via Web IDL's invoke must be that of the node document] [The entry settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
expected: TIMEOUT expected: FAIL

View file

@ -1,5 +1,4 @@
[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

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

View file

@ -8,9 +8,6 @@
[XRSystem interface: operation isSessionSupported(XRSessionMode)] [XRSystem interface: operation isSessionSupported(XRSessionMode)]
expected: FAIL expected: FAIL
[XRInputSourceArray interface: iterable<XRInputSource>]
expected: FAIL
[XRReferenceSpaceEvent interface: existence and properties of interface prototype object's @@unscopables property] [XRReferenceSpaceEvent interface: existence and properties of interface prototype object's @@unscopables property]
expected: FAIL expected: FAIL
@ -251,9 +248,6 @@
[XRBoundedReferenceSpace interface object name] [XRBoundedReferenceSpace interface object name]
expected: FAIL expected: FAIL
[XRWebGLLayer interface: attribute ignoreDepthValues]
expected: FAIL
[XRRenderState interface: xrRenderState must inherit property "depthFar" with the proper type] [XRRenderState interface: xrRenderState must inherit property "depthFar" with the proper type]
expected: FAIL expected: FAIL
@ -275,33 +269,15 @@
[XRSession interface: operation end()] [XRSession interface: operation end()]
expected: FAIL expected: FAIL
[XRLayer interface: existence and properties of interface prototype object]
expected: FAIL
[XRLayer interface: existence and properties of interface object]
expected: FAIL
[XRLayer interface object name]
expected: FAIL
[XRLayer interface: existence and properties of interface prototype object's "constructor" property]
expected: FAIL
[XRWebGLLayer interface: existence and properties of interface object]
expected: FAIL
[XRWebGLLayer interface: existence and properties of interface prototype object]
expected: FAIL
[XRLayer interface object length]
expected: FAIL
[XRLayer interface: existence and properties of interface prototype object's @@unscopables property]
expected: FAIL
[XRSession interface: xrSession must inherit property "cancelAnimationFrame(unsigned long)" with the proper type] [XRSession interface: xrSession must inherit property "cancelAnimationFrame(unsigned long)" with the proper type]
expected: FAIL expected: FAIL
[XRSession interface: calling cancelAnimationFrame(unsigned long) on xrSession with too few arguments must throw TypeError] [XRSession interface: calling cancelAnimationFrame(unsigned long) on xrSession with too few arguments must throw TypeError]
expected: FAIL expected: FAIL
[XRView interface: attribute recommendedViewportScale]
expected: FAIL
[XRView interface: operation requestViewportScale(double?)]
expected: FAIL

View file

@ -567,6 +567,13 @@
null, null,
{} {}
] ]
],
"feimage-target-child-reference-crash.html": [
"eef96ef094d913fb9423616af9177ddfd932796c",
[
null,
{}
]
] ]
} }
}, },
@ -141077,6 +141084,19 @@
], ],
{} {}
] ]
],
"fontface-override-descriptors.html": [
"40de722981221ff08a4c8f381de8a69e75598979",
[
null,
[
[
"/css/css-font-loading/fontface-override-descriptors-ref.html",
"=="
]
],
{}
]
] ]
}, },
"css-fonts": { "css-fonts": {
@ -156469,6 +156489,123 @@
{} {}
] ]
], ],
"baseline-000.html": [
"e01e9de1dd124af08eb5a2aa07f36254769375a7",
[
null,
[
[
"/css/css-multicol/baseline-000-ref.html",
"=="
]
],
{}
]
],
"baseline-001.html": [
"cd27731f4f4f3bde5c43912d50f6bb75bb71d328",
[
null,
[
[
"/css/css-multicol/baseline-001-ref.html",
"=="
]
],
{}
]
],
"baseline-002.html": [
"127ecd56fb50f1114ad01b18d1a2a6765d47ea7b",
[
null,
[
[
"/css/css-multicol/baseline-002-ref.html",
"=="
]
],
{}
]
],
"baseline-003.html": [
"7d1f252d472ed986ea5047e46336053d3b1c3e01",
[
null,
[
[
"/css/css-multicol/baseline-003-ref.html",
"=="
]
],
{}
]
],
"baseline-004.html": [
"b14d42761c76df1ef9c53fa07cae23536e9935e8",
[
null,
[
[
"/css/css-multicol/baseline-004-ref.html",
"=="
]
],
{}
]
],
"baseline-005.html": [
"e1bf253dbce7fa932fee883a38f6757f67ca7b7f",
[
null,
[
[
"/css/css-multicol/baseline-005-ref.html",
"=="
]
],
{}
]
],
"baseline-006.html": [
"c55ed730258050f7d73429ddc76be4fd24749961",
[
null,
[
[
"/css/css-multicol/baseline-006-ref.html",
"=="
]
],
{}
]
],
"baseline-007.html": [
"be886e919da95a0f797bbcb719993d2e59c22c16",
[
null,
[
[
"/css/css-multicol/baseline-007-ref.html",
"=="
]
],
{}
]
],
"baseline-008.html": [
"89381ab3d5950bb6487d3c78678ce2eb4057b9fe",
[
null,
[
[
"/css/css-multicol/baseline-008-ref.html",
"=="
]
],
{}
]
],
"change-intrinsic-width.html": [ "change-intrinsic-width.html": [
"3df3e1ebc8f9b5780dc858a878bca13dbedcdb35", "3df3e1ebc8f9b5780dc858a878bca13dbedcdb35",
[ [
@ -186901,7 +187038,7 @@
] ]
], ],
"text-decoration-thickness-scroll-001.html": [ "text-decoration-thickness-scroll-001.html": [
"acc829dc66d75e776dbe4ca5ad2976576c5c3241", "283e28793d0ea778f30e904d986626fde596e29a",
[ [
null, null,
[ [
@ -187304,7 +187441,7 @@
] ]
], ],
"text-underline-offset-scroll-001.html": [ "text-underline-offset-scroll-001.html": [
"6fb53aa421ab8a869a6e43125b9b04badc1dad10", "ee521fa215c7b9102ec6a6805c2866bf433c10a4",
[ [
null, null,
[ [
@ -246079,7 +246216,20 @@
{} {}
] ]
] ]
} },
"svg-child-will-change-transform-invalidation.html": [
"962ba5abeb7ca711551fdf30de45de81083e58ae",
[
null,
[
[
"/svg/painting/svg-child-will-change-transform-invalidation-ref.html",
"=="
]
],
{}
]
]
}, },
"path": { "path": {
"bearing": { "bearing": {
@ -297993,6 +298143,10 @@
"513867b3503042886e51312bcfec20967f7384d4", "513867b3503042886e51312bcfec20967f7384d4",
[] []
], ],
"fontface-override-descriptors-ref.html": [
"4a6d26ead980c5cfb7e25e5eb4266638a3f5c1eb",
[]
],
"resources": { "resources": {
"GenI102.woff2": [ "GenI102.woff2": [
"117d4a8fe7f8429d4eb97089e2f1334e1ff7bec9", "117d4a8fe7f8429d4eb97089e2f1334e1ff7bec9",
@ -307391,6 +307545,42 @@
"aa0ea5595d067d1c8bfc21f604ff2d662bef155a", "aa0ea5595d067d1c8bfc21f604ff2d662bef155a",
[] []
], ],
"baseline-000-ref.html": [
"aba812bb9d8b2ce166e13d7b89a24b6f0ff15b6a",
[]
],
"baseline-001-ref.html": [
"181f7bafec331977d9cc0fb2b291b6d4ce3dc419",
[]
],
"baseline-002-ref.html": [
"6de99d0767250a1e103dd5afa4da9b00c35a1ba3",
[]
],
"baseline-003-ref.html": [
"e031f1aeae2890bb8520a3a31ef11d8a72676692",
[]
],
"baseline-004-ref.html": [
"c1d72cb01580be376d3a874462357a2778aae9a4",
[]
],
"baseline-005-ref.html": [
"d5a382740f570c23ddbeefcccf067dbcae82caa4",
[]
],
"baseline-006-ref.html": [
"e229db9cedac5ab4b27c1d33a2a13af08688ef97",
[]
],
"baseline-007-ref.html": [
"dc6562cd70e56e739cab5fdab60ef89c2af8a2b8",
[]
],
"baseline-008-ref.html": [
"181f7bafec331977d9cc0fb2b291b6d4ce3dc419",
[]
],
"column-balancing-paged-001-print-ref.html": [ "column-balancing-paged-001-print-ref.html": [
"af1a86b1e73a49e488faaba1741aae9afe63f28f", "af1a86b1e73a49e488faaba1741aae9afe63f28f",
[] []
@ -325756,7 +325946,7 @@
[] []
], ],
"testdriver.md": [ "testdriver.md": [
"63608a71c27831cdae45fef5c85fad8f0d792c82", "8eec38729f41b40a5e1cf073c9e8bba99c6f5efc",
[] []
], ],
"testharness-api.md": [ "testharness-api.md": [
@ -333580,7 +333770,7 @@
}, },
"resources": { "resources": {
"dispatcher.js": [ "dispatcher.js": [
"44571722770a87fa7491b6be93ec59350c232f5e", "23c5ee97b71d2d2169f8d396d644c69550ce206f",
[] []
], ],
"dispatcher.py": [ "dispatcher.py": [
@ -333591,6 +333781,10 @@
"e97e18aca4bd6fdff1181310aa2d543110980cc9", "e97e18aca4bd6fdff1181310aa2d543110980cc9",
[] []
], ],
"redirect.py": [
"21a3dec9d224c1fca4a8815d9830d392c44cd18b",
[]
],
"report.py": [ "report.py": [
"8e5ec6d1b9b14168c92eedd6e9098e51a61f31c8", "8e5ec6d1b9b14168c92eedd6e9098e51a61f31c8",
[] []
@ -343215,6 +343409,14 @@
[] []
] ]
}, },
"click_child.html": [
"5899841c4c1bcc9181f71b4b8699ded57cfe93fd",
[]
],
"click_outer_child.html": [
"ae4944635f00fb400fa8345a77bfb3b62766bc49",
[]
],
"file_upload.py": [ "file_upload.py": [
"9c4dd75438454b852a1590018361ee682f1106df", "9c4dd75438454b852a1590018361ee682f1106df",
[] []
@ -343963,7 +344165,7 @@
[] []
], ],
"webxr.idl": [ "webxr.idl": [
"81e42e908cb9368dc05bc176bb3ec6fb9613dade", "c1b7175765d788b9981d5bd0a6640b46cafb7cb2",
[] []
], ],
"worklets.idl": [ "worklets.idl": [
@ -344188,7 +344390,7 @@
] ]
}, },
"lint.ignore": [ "lint.ignore": [
"c740932e60ad5dc6939e7a41dc7d92534d81a5e4", "ae6c07b877cb8040d653b164438ce5408ae09136",
[] []
], ],
"loading": { "loading": {
@ -344952,7 +345154,7 @@
], ],
"resources": { "resources": {
"common.js": [ "common.js": [
"6da98746ecd0939295e4463ef7af580f29111efa", "3b246719799d2f963bc5cb4cd12500bba62ecb08",
[] []
], ],
"iframe.redirect.sub.html": [ "iframe.redirect.sub.html": [
@ -344978,6 +345180,10 @@
"window.sub.html": [ "window.sub.html": [
"c2540943828ce9fd9db463ad4f33c643c6f1eadf", "c2540943828ce9fd9db463ad4f33c643c6f1eadf",
[] []
],
"worker.js": [
"bc194a854cd93528930b49ff2a3051e63d4ad43e",
[]
] ]
} }
}, },
@ -349693,6 +349899,10 @@
"313d77b977156dfc8a6e31ccce547064f2c41648", "313d77b977156dfc8a6e31ccce547064f2c41648",
[] []
], ],
"async-test-return-restrictions.html": [
"0fde2e24223f01753294656ea1baa427c3ff9f4a",
[]
],
"basic.html": [ "basic.html": [
"d52082f2e076de0458b689750523b3d10646f4e0", "d52082f2e076de0458b689750523b3d10646f4e0",
[] []
@ -349702,7 +349912,7 @@
[] []
], ],
"exceptional-cases.html": [ "exceptional-cases.html": [
"2be4dacaaec8ae53e63d704e842d32968a424b4b", "4054d0311d2de5a83c43bc076d0f79e8c601e474",
[] []
], ],
"format-value.html": [ "format-value.html": [
@ -349730,7 +349940,7 @@
[] []
], ],
"test-return-restrictions.html": [ "test-return-restrictions.html": [
"b846d4dc4300a990edf7a905f301dcaf75bee18c", "0295c5214dc22beba9791caf8cdffc869e07f1d8",
[] []
], ],
"throwing-assertions.html": [ "throwing-assertions.html": [
@ -349777,7 +349987,7 @@
[] []
], ],
"testdriver.js": [ "testdriver.js": [
"4d373c9281d85e6ff37a6d0dfe4cdc2fc9c10787", "165147d1430bfe990da2c8d3d601267dbe5143af",
[] []
], ],
"testdriver.js.headers": [ "testdriver.js.headers": [
@ -349785,7 +349995,7 @@
[] []
], ],
"testharness.js": [ "testharness.js": [
"61eadfeb6541a974522bf9890ff5f68fd6cb5d5e", "2c7dcd8df4aa59043cdd14d37ac9cb38f14c8e89",
[] []
], ],
"testharness.js.headers": [ "testharness.js.headers": [
@ -353534,7 +353744,11 @@
"610a3ddb2d21da119fb4a53f5f351dff0190880c", "610a3ddb2d21da119fb4a53f5f351dff0190880c",
[] []
] ]
} },
"svg-child-will-change-transform-invalidation-ref.html": [
"0d760d18dce03df5917086ccb0253a8ced421e36",
[]
]
}, },
"path": { "path": {
"bearing": { "bearing": {
@ -354214,7 +354428,7 @@
], ],
"tasks": { "tasks": {
"test.yml": [ "test.yml": [
"c3fccff065555c25961efa6599c32b3a6d495e93", "1b5c7acfd743dd613fb667acb19d594b0edccce4",
[] []
] ]
}, },
@ -354348,7 +354562,7 @@
[] []
], ],
"lint.py": [ "lint.py": [
"bb49d8970d96dfe6767fcefdf1eea183e6bbccbd", "5027da705774f8d306e4d491608e562daa378d0f",
[] []
], ],
"rules.py": [ "rules.py": [
@ -360575,7 +360789,7 @@
[] []
], ],
"client.py": [ "client.py": [
"1a4b6498312d652b4a9d839e2076dbb7d8b0f9f5", "adc9b3a3f705e4624408ed74b581478fd2422cd8",
[] []
], ],
"error.py": [ "error.py": [
@ -360602,7 +360816,7 @@
[] []
], ],
"browser.py": [ "browser.py": [
"6f9da16c50bea6f073421c99e5050ed9eedb71b8", "35f60d1620beab37f93a43da72a927d3ea8ea1eb",
[] []
], ],
"commands.json": [ "commands.json": [
@ -360638,7 +360852,7 @@
[] []
], ],
"run.py": [ "run.py": [
"8edaa60ab03bf19339aa0773789dd8bdf3755b54", "f289e097753f40767c8d3c28848e6ac8a428f2c5",
[] []
], ],
"testfiles.py": [ "testfiles.py": [
@ -360651,7 +360865,7 @@
[] []
], ],
"test_browser.py": [ "test_browser.py": [
"350ee9b5eaee3e23454a71202480e28f14330a0a", "0abdb9d45b875f5712b14ba20b7a9c8e07a026bf",
[] []
], ],
"test_install.py": [ "test_install.py": [
@ -360984,7 +361198,7 @@
[] []
], ],
"edgechromium.py": [ "edgechromium.py": [
"5c51f066f0441321660cab96f6de51af868d310b", "0bcb18cdc0cca64376906e9156b07c4a9cc7dcdb",
[] []
], ],
"epiphany.py": [ "epiphany.py": [
@ -361056,11 +361270,11 @@
[] []
], ],
"actions.py": [ "actions.py": [
"fc43dd665a2f3bc5576cb535f29d49abbc9593fd", "b11d30bb94aa7c2747fcc4dcfb61292f7678e273",
[] []
], ],
"base.py": [ "base.py": [
"b5820a3808563675e57499a26e6dbca3998a5437", "0247b3feed2b00d8de7da1dbc1c0da4f3841e5bd",
[] []
], ],
"executorchrome.py": [ "executorchrome.py": [
@ -361080,7 +361294,7 @@
[] []
], ],
"executormarionette.py": [ "executormarionette.py": [
"9c1f4f366d5fe782b772b79d3f6d4978ada010ac", "e7c9726974b31118bb1dc6027feb9f817dd37563",
[] []
], ],
"executoropera.py": [ "executoropera.py": [
@ -361104,7 +361318,7 @@
[] []
], ],
"executorwebdriver.py": [ "executorwebdriver.py": [
"ad79600aeb8f943f5c5621102df8b6e701eed303", "139c475ce44ed29608d68509a88ba1b4c4aa932c",
[] []
], ],
"executorwebkit.py": [ "executorwebkit.py": [
@ -361116,7 +361330,7 @@
[] []
], ],
"protocol.py": [ "protocol.py": [
"3f0e44339f9b5499b22e40fc5c4ee4e044691478", "1c85c0f8b963482e8da72e7a793830e0d49b29be",
[] []
], ],
"pytestrunner": { "pytestrunner": {
@ -361227,7 +361441,7 @@
[] []
], ],
"testdriver-extra.js": [ "testdriver-extra.js": [
"5001b004f2e199d864810e316ab8e3a80044a50f", "241fc83395152fc9188b791e1f8e1ab9a3d3a542",
[] []
], ],
"testdriver-vendor.js": [ "testdriver-vendor.js": [
@ -396595,28 +396809,28 @@
] ]
], ],
"image-as-flexitem-size-003.html": [ "image-as-flexitem-size-003.html": [
"03a9a6e3547ee9a4421d4624efd1371a237c8ad7", "21a63069ed120df876948a8eb406f84074ed1bb0",
[ [
null, null,
{} {}
] ]
], ],
"image-as-flexitem-size-003v.html": [ "image-as-flexitem-size-003v.html": [
"fd728027e0cfb78162df586320bcb8cb284105a2", "4b957e586a2ba067b862f4622d698fee1bc9fbd0",
[ [
null, null,
{} {}
] ]
], ],
"image-as-flexitem-size-004.html": [ "image-as-flexitem-size-004.html": [
"15e9f729271aecf945896a0af3263ee42415f0c3", "36cb048e2ec2fbaa698022f2f90660afe6936eec",
[ [
null, null,
{} {}
] ]
], ],
"image-as-flexitem-size-004v.html": [ "image-as-flexitem-size-004v.html": [
"10e871a1c0eacf00a45aed2e594c14daa6b685e2", "16cadce4b96cdf9d06c28e718b72274393698ef9",
[ [
null, null,
{} {}
@ -397207,6 +397421,13 @@
{} {}
] ]
], ],
"fontface-override-descriptor-getter-setter.html": [
"a674c22285af20e24a26cfcd3fb590d9663b8c25",
[
null,
{}
]
],
"fontfaceset-load-css-wide-keywords.html": [ "fontfaceset-load-css-wide-keywords.html": [
"b85b92bd15e387db3dacd93b325f7f7b4d8d80db", "b85b92bd15e387db3dacd93b325f7f7b4d8d80db",
[ [
@ -418373,7 +418594,7 @@
] ]
], ],
"pseudo-class-defined.html": [ "pseudo-class-defined.html": [
"ed12830d5a9582dbf3ec30c74a43fe381221a139", "f5bf2750a058b2f0efdd3abef1f37ebd4fb8fbb1",
[ [
null, null,
{} {}
@ -461887,7 +462108,7 @@
"reporting": { "reporting": {
"access-reporting": { "access-reporting": {
"access-from-coop-page-to-openee_coop-ro.https.html": [ "access-from-coop-page-to-openee_coop-ro.https.html": [
"7adca0ae67a3a7f9f5aa90803c712f1cd0a2a8e9", "481b9294377c3fe4f0b49b3aebe04528bd39d4a2",
[ [
null, null,
{ {
@ -461896,7 +462117,7 @@
] ]
], ],
"access-from-coop-page-to-openee_coop-ro_cross-origin.https.html": [ "access-from-coop-page-to-openee_coop-ro_cross-origin.https.html": [
"8231639241018c83c42dc958c4970fb374db98b7", "a78c75eaae6edf7d60ef3aeae2af52002209ba52",
[ [
null, null,
{ {
@ -461905,7 +462126,7 @@
] ]
], ],
"access-from-coop-page-to-opener_coop-ro.https.html": [ "access-from-coop-page-to-opener_coop-ro.https.html": [
"264561a93a85a2536135a811010194c9f9cb91fe", "9cc92dcd9617608ac428480608272134871c6c57",
[ [
null, null,
{ {
@ -461914,7 +462135,7 @@
] ]
], ],
"access-from-coop-page-to-opener_coop-ro_cross-origin.https.html": [ "access-from-coop-page-to-opener_coop-ro_cross-origin.https.html": [
"8510334df16261609561aa5be3cd0f422347d6c0", "39a58331259f5e1de882d265f89f44e317800c08",
[ [
null, null,
{ {
@ -461941,7 +462162,7 @@
] ]
], ],
"access-to-coop-page-from-openee_coop-ro.https.html": [ "access-to-coop-page-from-openee_coop-ro.https.html": [
"dbd710662baf216c179d5a061e9912c28f60d87c", "0c63c067798f2d8776f0a97020dfdee3575a9de9",
[ [
null, null,
{ {
@ -461950,7 +462171,7 @@
] ]
], ],
"access-to-coop-page-from-openee_coop-ro_cross-origin.https.html": [ "access-to-coop-page-from-openee_coop-ro_cross-origin.https.html": [
"9ee8589c16edb34212a22c8feb3fa335a2309c84", "a5859228077039dab62341059f6c591a7eb97f50",
[ [
null, null,
{ {
@ -461959,7 +462180,7 @@
] ]
], ],
"access-to-coop-page-from-opener_coop-ro.https.html": [ "access-to-coop-page-from-opener_coop-ro.https.html": [
"41012fdb55a0e4cbea98eb1ab978ba63ad7b2c62", "79f20b149f0674b8b86522498bed8075f4c57204",
[ [
null, null,
{ {
@ -461968,7 +462189,7 @@
] ]
], ],
"access-to-coop-page-from-opener_coop-ro_cross-origin.https.html": [ "access-to-coop-page-from-opener_coop-ro_cross-origin.https.html": [
"1712e153b6dbec63ee6183fd44311651be59a569", "ea3fa0b21bf3652edbdacfc17860f3862f295063",
[ [
null, null,
{ {
@ -480675,6 +480896,33 @@
} }
] ]
], ],
"click_iframe.html": [
"167a91afcfaa3d4e9a023adf5bbbe0aa4c7c3bf6",
[
null,
{
"testdriver": true
}
]
],
"click_nested.html": [
"378b9e8c0f1411afdf7b93f7e93c03d05af227c7",
[
null,
{
"testdriver": true
}
]
],
"click_window.html": [
"614a92478e07d51e48c420d5fa253338a87378b2",
[
null,
{
"testdriver": true
}
]
],
"file_upload.sub.html": [ "file_upload.sub.html": [
"0490e89c422b851653d760cdb38855b2ce6816a6", "0490e89c422b851653d760cdb38855b2ce6816a6",
[ [
@ -480774,7 +481022,7 @@
] ]
], ],
"input-events-get-target-ranges-backspace.tentative.html": [ "input-events-get-target-ranges-backspace.tentative.html": [
"6967fa746c6fbcd4da6969ab040fc6c7244a7481", "50d5cb96e84a8400fd961d7221b551b536dbcc57",
[ [
null, null,
{ {
@ -480784,7 +481032,7 @@
] ]
], ],
"input-events-get-target-ranges-forwarddelete.tentative.html": [ "input-events-get-target-ranges-forwarddelete.tentative.html": [
"dd349fc444d7e51c424b3bc94bd81fca55ab3bce", "03518d54e42e5aea5ed51635a4fb088d2428ef86",
[ [
null, null,
{ {
@ -483717,6 +483965,29 @@
} }
] ]
], ],
"main-frame-and-worker.tentative.window.js": [
"514a4ed067315433c5a368fc7d065b415a4e8229",
[
"measure-memory/main-frame-and-worker.tentative.window.html",
{
"script_metadata": [
[
"script",
"/common/get-host-info.sub.js"
],
[
"script",
"./resources/common.js"
],
[
"timeout",
"long"
]
],
"timeout": "long"
}
]
],
"main-frame.tentative.window.js": [ "main-frame.tentative.window.js": [
"0a34abb9246f0c218c26cedd99bebbf2f01aeaf0", "0a34abb9246f0c218c26cedd99bebbf2f01aeaf0",
[ [
@ -507035,10 +507306,12 @@
] ]
], ],
"serial-allowed-by-feature-policy.https.sub.html": [ "serial-allowed-by-feature-policy.https.sub.html": [
"316256bbbb4d49f10747d6244eb438228617df6f", "36990694d19db365eddd2ebee9cd85867318d4c8",
[ [
null, null,
{} {
"timeout": "long"
}
] ]
], ],
"serial-default-feature-policy.https.sub.html": [ "serial-default-feature-policy.https.sub.html": [

View file

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

View file

@ -17,3 +17,18 @@
[.flexbox > img 4] [.flexbox > img 4]
expected: FAIL expected: FAIL
[.flexbox > img 8]
expected: FAIL
[.flexbox > img 5]
expected: FAIL
[.flexbox > img 7]
expected: FAIL
[.flexbox > img 6]
expected: FAIL
[.flexbox > img 1]
expected: FAIL

View file

@ -17,3 +17,18 @@
[.flexbox > img 4] [.flexbox > img 4]
expected: FAIL expected: FAIL
[.flexbox > img 8]
expected: FAIL
[.flexbox > img 5]
expected: FAIL
[.flexbox > img 7]
expected: FAIL
[.flexbox > img 6]
expected: FAIL
[.flexbox > img 1]
expected: FAIL

View file

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

View file

@ -1,4 +0,0 @@
[elementFromPoint-001.html]
[CSSOM View - 5 - extensions to the Document interface]
expected: FAIL

View file

@ -0,0 +1,4 @@
[elementsFromPoint-invalid-cases.html]
[The root element is the last element returned for otherwise empty queries within the viewport]
expected: FAIL

View file

@ -1,2 +0,0 @@
[matchMedia-display-none-iframe.html]
expected: ERROR

View file

@ -1,2 +0,0 @@
[HTMLMediaElement.html]
expected: TIMEOUT

View file

@ -312,21 +312,24 @@
[fetch(): separate response Content-Type: text/plain ] [fetch(): separate response Content-Type: text/plain ]
expected: NOTRUN expected: NOTRUN
[<iframe>: separate response Content-Type: text/html */*;charset=gbk]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;" text/plain]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;" text/plain] [<iframe>: combined response Content-Type: text/html;" text/plain]
expected: FAIL expected: FAIL
[<iframe>: combined response Content-Type: 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 */*] [<iframe>: combined response Content-Type: text/html */*;charset=gbk]
expected: FAIL expected: FAIL
[<iframe>: separate response Content-Type: text/plain */*] [<iframe>: separate response Content-Type: text/html;x=" text/plain]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;" \\" text/plain]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
expected: FAIL
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
expected: FAIL expected: FAIL

View file

@ -11,3 +11,9 @@
[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'NosniFF']
expected: FAIL
[X-Content-Type-Options%3A%0D%0AX-Content-Type-Options%3A%20nosniff]
expected: FAIL

View file

@ -0,0 +1,4 @@
[traverse_the_history_2.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

@ -1,2 +0,0 @@
[cross-origin-objects-on-new-window.html]
expected: TIMEOUT

View file

@ -1,4 +1,5 @@
[supported-elements.html] [supported-elements.html]
expected: TIMEOUT
[Contenteditable element should support autofocus] [Contenteditable element should support autofocus]
expected: FAIL expected: FAIL
@ -6,11 +7,14 @@
expected: FAIL expected: FAIL
[Host element with delegatesFocus including no focusable descendants should be skipped] [Host element with delegatesFocus including no focusable descendants should be skipped]
expected: FAIL expected: NOTRUN
[Area element should support autofocus] [Area element should support autofocus]
expected: FAIL expected: NOTRUN
[Host element with delegatesFocus should support autofocus] [Host element with delegatesFocus should support autofocus]
expected: FAIL expected: NOTRUN
[Non-HTMLElement should not support autofocus]
expected: TIMEOUT

View file

@ -1,6 +1,5 @@
[iframe_sandbox_popups_escaping-3.html] [iframe_sandbox_popups_escaping-3.html]
type: testharness type: testharness
expected: CRASH
[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: FAIL expected: FAIL

View file

@ -1,6 +1,6 @@
[iframe_sandbox_popups_nonescaping-1.html] [iframe_sandbox_popups_nonescaping-1.html]
type: testharness type: testharness
expected: CRASH 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: FAIL expected: NOTRUN

View file

@ -1,6 +1,6 @@
[iframe_sandbox_popups_nonescaping-2.html] [iframe_sandbox_popups_nonescaping-2.html]
type: testharness type: testharness
expected: CRASH 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: NOTRUN

View file

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

View file

@ -0,0 +1,4 @@
[module-delayed.html]
[async document.write in a module]
expected: FAIL

View file

@ -0,0 +1,4 @@
[module-static-import-delayed.html]
[document.write in an imported module]
expected: FAIL

View file

@ -5,5 +5,5 @@
expected: TIMEOUT expected: TIMEOUT
[The entry settings object while executing the compiled callback via Web IDL's invoke must be that of the node document] [The entry settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
expected: TIMEOUT expected: FAIL

View file

@ -1,5 +1,4 @@
[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

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

View file

@ -335,3 +335,9 @@
[XRSession interface: calling cancelAnimationFrame(unsigned long) on xrSession with too few arguments must throw TypeError] [XRSession interface: calling cancelAnimationFrame(unsigned long) on xrSession with too few arguments must throw TypeError]
expected: FAIL expected: FAIL
[XRView interface: attribute recommendedViewportScale]
expected: FAIL
[XRView interface: operation requestViewportScale(double?)]
expected: FAIL

View file

@ -46,7 +46,7 @@
<!-- Row 1: no special sizing: --> <!-- Row 1: no special sizing: -->
<div class="flexbox"> <div class="flexbox">
<img src="support/solidblue.png" data-expected-width="16" data-expected-height="40"> <img src="support/solidblue.png" data-expected-width="40" data-expected-height="40">
</div> </div>
<br> <br>
@ -64,18 +64,18 @@
<!-- Row 3: min main-size OR min cross-size, or both --> <!-- Row 3: min main-size OR min cross-size, or both -->
<div class="flexbox"> <div class="flexbox">
<img src="support/solidblue.png" style="min-width: 34px" data-expected-width="34" data-expected-height="40"> <img src="support/solidblue.png" style="min-width: 34px" data-expected-width="40" data-expected-height="40">
</div> </div>
<div class="flexbox"> <div class="flexbox">
<img src="support/solidblue.png" style="min-height: 34px" data-expected-width="34" data-expected-height="40"> <img src="support/solidblue.png" style="min-height: 34px" data-expected-width="40" data-expected-height="40">
</div> </div>
<div class="flexbox"> <div class="flexbox">
<img src="support/solidblue.png" style="min-width: 30px; <img src="support/solidblue.png" style="min-width: 30px;
min-height: 34px" data-expected-width="34" data-expected-height="40"> min-height: 34px" data-expected-width="40" data-expected-height="40">
</div> </div>
<div class="flexbox"> <div class="flexbox">
<img src="support/solidblue.png" style="min-width: 34px; <img src="support/solidblue.png" style="min-width: 34px;
min-height: 30px" data-expected-width="34" data-expected-height="40"> min-height: 30px" data-expected-width="40" data-expected-height="40">
</div> </div>
<br> <br>

View file

@ -49,7 +49,7 @@
<!-- Row 1: no special sizing: --> <!-- Row 1: no special sizing: -->
<div class="flexbox"> <div class="flexbox">
<img src="support/solidblue.png" data-expected-width="16" data-expected-height="40"> <img src="support/solidblue.png" data-expected-width="40" data-expected-height="40">
</div> </div>
<br> <br>
@ -67,18 +67,18 @@
<!-- Row 3: min main-size OR min cross-size, or both --> <!-- Row 3: min main-size OR min cross-size, or both -->
<div class="flexbox"> <div class="flexbox">
<img src="support/solidblue.png" style="min-width: 34px" data-expected-width="34" data-expected-height="40"> <img src="support/solidblue.png" style="min-width: 34px" data-expected-width="40" data-expected-height="40">
</div> </div>
<div class="flexbox"> <div class="flexbox">
<img src="support/solidblue.png" style="min-height: 34px" data-expected-width="34" data-expected-height="40"> <img src="support/solidblue.png" style="min-height: 34px" data-expected-width="40" data-expected-height="40">
</div> </div>
<div class="flexbox"> <div class="flexbox">
<img src="support/solidblue.png" style="min-width: 30px; <img src="support/solidblue.png" style="min-width: 30px;
min-height: 34px" data-expected-width="34" data-expected-height="40"> min-height: 34px" data-expected-width="40" data-expected-height="40">
</div> </div>
<div class="flexbox"> <div class="flexbox">
<img src="support/solidblue.png" style="min-width: 34px; <img src="support/solidblue.png" style="min-width: 34px;
min-height: 30px" data-expected-width="34" data-expected-height="40"> min-height: 30px" data-expected-width="40" data-expected-height="40">
</div> </div>
<br> <br>

View file

@ -46,7 +46,7 @@
<!-- Row 1: no special sizing: --> <!-- Row 1: no special sizing: -->
<div class="flexbox"> <div class="flexbox">
<img src="support/solidblue.png" data-expected-width="40" data-expected-height="16"> <img src="support/solidblue.png" data-expected-width="40" data-expected-height="40">
</div> </div>
<br> <br>
@ -64,18 +64,18 @@
<!-- Row 3: min main-size OR min cross-size, or both --> <!-- Row 3: min main-size OR min cross-size, or both -->
<div class="flexbox"> <div class="flexbox">
<img src="support/solidblue.png" style="min-width: 34px" data-expected-width="40" data-expected-height="34"> <img src="support/solidblue.png" style="min-width: 34px" data-expected-width="40" data-expected-height="40">
</div> </div>
<div class="flexbox"> <div class="flexbox">
<img src="support/solidblue.png" style="min-height: 34px" data-expected-width="40" data-expected-height="34"> <img src="support/solidblue.png" style="min-height: 34px" data-expected-width="40" data-expected-height="40">
</div> </div>
<div class="flexbox"> <div class="flexbox">
<img src="support/solidblue.png" style="min-width: 30px; <img src="support/solidblue.png" style="min-width: 30px;
min-height: 34px" data-expected-width="40" data-expected-height="34"> min-height: 34px" data-expected-width="40" data-expected-height="40">
</div> </div>
<div class="flexbox"> <div class="flexbox">
<img src="support/solidblue.png" style="min-width: 34px; <img src="support/solidblue.png" style="min-width: 34px;
min-height: 30px" data-expected-width="40" data-expected-height="34"> min-height: 30px" data-expected-width="40" data-expected-height="40">
</div> </div>
<br> <br>

View file

@ -49,7 +49,7 @@
<!-- Row 1: no special sizing: --> <!-- Row 1: no special sizing: -->
<div class="flexbox"> <div class="flexbox">
<img src="support/solidblue.png" data-expected-width="40" data-expected-height="16"> <img src="support/solidblue.png" data-expected-width="40" data-expected-height="40">
</div> </div>
<br> <br>
@ -67,18 +67,18 @@
<!-- Row 3: min main-size OR min cross-size, or both --> <!-- Row 3: min main-size OR min cross-size, or both -->
<div class="flexbox"> <div class="flexbox">
<img src="support/solidblue.png" style="min-width: 34px" data-expected-width="40" data-expected-height="34"> <img src="support/solidblue.png" style="min-width: 34px" data-expected-width="40" data-expected-height="40">
</div> </div>
<div class="flexbox"> <div class="flexbox">
<img src="support/solidblue.png" style="min-height: 34px" data-expected-width="40" data-expected-height="34"> <img src="support/solidblue.png" style="min-height: 34px" data-expected-width="40" data-expected-height="40">
</div> </div>
<div class="flexbox"> <div class="flexbox">
<img src="support/solidblue.png" style="min-width: 30px; <img src="support/solidblue.png" style="min-width: 30px;
min-height: 34px" data-expected-width="40" data-expected-height="34"> min-height: 34px" data-expected-width="40" data-expected-height="40">
</div> </div>
<div class="flexbox"> <div class="flexbox">
<img src="support/solidblue.png" style="min-width: 34px; <img src="support/solidblue.png" style="min-width: 34px;
min-height: 30px" data-expected-width="40" data-expected-height="34"> min-height: 30px" data-expected-width="40" data-expected-height="40">
</div> </div>
<br> <br>

View file

@ -0,0 +1,222 @@
<!DOCTYPE html>
<title>Tests getters and setters of the font metrics override descriptors of FontFace</title>
<link rel="author" href="mailto:xiaochengh@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css-font-loading/#fontface-interface">
<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-metrics-override-desc">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
function rejection(promise) {
return new Promise((resolve, reject) => promise.then(reject, resolve));
}
// ascentOverride
test(() => {
const face = new FontFace(
'ascent-override-initial',
'url(https://example.com/font.woff)');
assert_equals(face.ascentOverride, 'normal');
}, "Initial value of ascentOverride should be 'normal'");
test(() => {
const face = new FontFace(
'ascent-override-initialize-with-normal',
'url(https://example.com/font.woff)',
{ascentOverride: 'normal'});
assert_equals(face.ascentOverride, 'normal');
}, "Initialize ascentOverride with 'normal' should succeed");
test(() => {
const face = new FontFace(
'ascent-override-initialize-with-percentage',
'url(https://example.com/font.woff)',
{ascentOverride: '50%'});
assert_equals(face.ascentOverride, '50%');
}, "Initialize ascentOverride with a percentage should succeed");
promise_test(async () => {
const face = new FontFace(
'ascent-override-initialize-with-negative-percentage',
'url(https://example.com/font.woff)',
{ascentOverride: '-50%'});
const error = await rejection(face.load());
assert_equals('error', face.status);
assert_throws_dom('SyntaxError', () => {throw error});
}, "Initialize ascentOverride with a negative percentage should fail");
promise_test(async () => {
const face = new FontFace(
'ascent-override-initialize-with-non-percentage',
'url(https://example.com/font.woff)',
{ascentOverride: '10px'});
const error = await rejection(face.load());
assert_equals('error', face.status);
assert_throws_dom('SyntaxError', () => {throw error});
}, "Initialize ascentOverride with a non-percentage should fail");
test(() => {
const face = new FontFace(
'ascent-override-normal-to-percentage',
'url(https://example.com/font.woff)',
{ascentOverride: 'normal'});
face.ascentOverride = '50%';
assert_equals(face.ascentOverride, '50%');
}, "Changing ascentOverride from 'normal' to percentage should succeed");
test(() => {
const face = new FontFace(
'ascent-override-percentage-to-normal',
'url(https://example.com/font.woff)',
{ascentOverride: '50%'});
face.ascentOverride = 'normal';
assert_equals(face.ascentOverride, 'normal');
}, "Changing ascentOverride from percentage to 'normal' should succeed");
test(() => {
const face = new FontFace(
'ascent-override-set-to-invalid',
'url(https://example.com/font.woff)');
assert_throws_dom('SyntaxError', () => {face.ascentOverride = '10px'});
}, "Changing ascentOverride to invalid value should fail");
// descentOverride
test(() => {
const face = new FontFace(
'descent-override-initial',
'url(https://example.com/font.woff)');
assert_equals(face.descentOverride, 'normal');
}, "Initial value of descentOverride should be 'normal'");
test(() => {
const face = new FontFace(
'descent-override-initialize-with-normal',
'url(https://example.com/font.woff)',
{descentOverride: 'normal'});
assert_equals(face.descentOverride, 'normal');
}, "Initialize descentOverride with 'normal' should succeed");
test(() => {
const face = new FontFace(
'descent-override-initialize-with-percentage',
'url(https://example.com/font.woff)',
{descentOverride: '50%'});
assert_equals(face.descentOverride, '50%');
}, "Initialize descentOverride with a percentage should succeed");
promise_test(async () => {
const face = new FontFace(
'descent-override-initialize-with-negative-percentage',
'url(https://example.com/font.woff)',
{descentOverride: '-50%'});
const error = await rejection(face.load());
assert_equals('error', face.status);
assert_throws_dom('SyntaxError', () => {throw error});
}, "Initialize descentOverride with a negative percentage should fail");
promise_test(async () => {
const face = new FontFace(
'descent-override-initialize-with-non-percentage',
'url(https://example.com/font.woff)',
{descentOverride: '10px'});
const error = await rejection(face.load());
assert_equals('error', face.status);
assert_throws_dom('SyntaxError', () => {throw error});
}, "Initialize descentOverride with a non-percentage should fail");
test(() => {
const face = new FontFace(
'descent-override-normal-to-percentage',
'url(https://example.com/font.woff)',
{descentOverride: 'normal'});
face.descentOverride = '50%';
assert_equals(face.descentOverride, '50%');
}, "Changing descentOverride from 'normal' to percentage should succeed");
test(() => {
const face = new FontFace(
'descent-override-percentage-to-normal',
'url(https://example.com/font.woff)',
{descentOverride: '50%'});
face.descentOverride = 'normal';
assert_equals(face.descentOverride, 'normal');
}, "Changing descentOverride from percentage to 'normal' should succeed");
test(() => {
const face = new FontFace(
'descent-override-set-to-invalid',
'url(https://example.com/font.woff)');
assert_throws_dom('SyntaxError', () => {face.descentOverride = '10px'});
}, "Changing descentOverride to invalid value should fail");
// lineGapOverride
test(() => {
const face = new FontFace(
'lineGap-override-initial',
'url(https://example.com/font.woff)');
assert_equals(face.lineGapOverride, 'normal');
}, "Initial value of lineGapOverride should be 'normal'");
test(() => {
const face = new FontFace(
'lineGap-override-initialize-with-normal',
'url(https://example.com/font.woff)',
{lineGapOverride: 'normal'});
assert_equals(face.lineGapOverride, 'normal');
}, "Initialize lineGapOverride with 'normal' should succeed");
test(() => {
const face = new FontFace(
'lineGap-override-initialize-with-percentage',
'url(https://example.com/font.woff)',
{lineGapOverride: '50%'});
assert_equals(face.lineGapOverride, '50%');
}, "Initialize lineGapOverride with a percentage should succeed");
promise_test(async () => {
const face = new FontFace(
'lineGap-override-initialize-with-negative-percentage',
'url(https://example.com/font.woff)',
{lineGapOverride: '-50%'});
const error = await rejection(face.load());
assert_equals('error', face.status);
assert_throws_dom('SyntaxError', () => {throw error});
}, "Initialize lineGapOverride with a negative percentage should fail");
promise_test(async () => {
const face = new FontFace(
'lineGap-override-initialize-with-non-percentage',
'url(https://example.com/font.woff)',
{lineGapOverride: '10px'});
const error = await rejection(face.load());
assert_equals('error', face.status);
assert_throws_dom('SyntaxError', () => {throw error});
}, "Initialize lineGapOverride with a non-percentage should fail");
test(() => {
const face = new FontFace(
'lineGap-override-normal-to-percentage',
'url(https://example.com/font.woff)',
{lineGapOverride: 'normal'});
face.lineGapOverride = '50%';
assert_equals(face.lineGapOverride, '50%');
}, "Changing lineGapOverride from 'normal' to percentage should succeed");
test(() => {
const face = new FontFace(
'lineGap-override-percentage-to-normal',
'url(https://example.com/font.woff)',
{lineGapOverride: '50%'});
face.lineGapOverride = 'normal';
assert_equals(face.lineGapOverride, 'normal');
}, "Changing lineGapOverride from percentage to 'normal' should succeed");
test(() => {
const face = new FontFace(
'lineGap-override-set-to-invalid',
'url(https://example.com/font.woff)');
assert_throws_dom('SyntaxError', () => {face.lineGapOverride = '10px'});
}, "Changing lineGapOverride to invalid value should fail");
</script>

View file

@ -0,0 +1,27 @@
<!DOCTYPE html>
<title>Tests that the ascentOverride, descentOverride and lineGapOverride attributes of FontFace work</title>
<link rel="stylesheet" herf="/fonts/ahem.css">
<style>
#target {
position: absolute;
font-family: Ahem;
font-size: 20px;
}
#first-line {
position: absolute;
left: 0;
top: 0.7em;
}
#second-line {
position: absolute;
left: 0;
top: 3.7em;
}
</style>
<div id="target">
<div id="first-line">XXXXX</div>
<div id="second-line">XXXXX</div>
</div>

View file

@ -0,0 +1,29 @@
<!DOCTYPE html>
<title>Tests that the ascentOverride, descentOverride and lineGapOverride attributes of FontFace work</title>
<link rel="help" href="https://drafts.csswg.org/css-font-loading/#fontface-interface">
<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-metrics-override-desc">
<link rel="match" href="fontface-override-descriptors-ref.html">
<script>
const face = new FontFace(
'ahem-overridden',
'local("Ahem"), url("/fonts/Ahem.ttf")',
{ascentOverride: '100%', descentOverride: '100%', lineGapOverride: '100%'});
document.fonts.add(face);
// Line height is ascent + descent + lineGap = 3em
// Baseline is placed at lineGap * 0.5 + ascent = 1.5em below line box top
// Since each Ahem 'X' glyph has 0.8em above baseline, the top of each glyph
// should be placed at 0.7em below line box top
</script>
<style>
#target {
position: absolute;
font-family: ahem-overridden;
font-size: 20px;
}
</style>
<div id="target">
XXXXX<br>
XXXXX
</div>

View file

@ -0,0 +1,4 @@
<!DOCTYPE html>
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
<p>The word "PASS" should be seen below, with letters baseline aligned.</p>
PASS

View file

@ -0,0 +1,13 @@
<!DOCTYPE html>
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css-multicol-1">
<link rel="help" href="https://drafts.csswg.org/css-align/#baseline-export">
<link rel="match" href="baseline-000-ref.html">
<p>The word "PASS" should be seen below, with letters baseline aligned.</p>
<div style="display:flex; align-items:baseline;">
PA
<div style="columns:2; column-fill:auto; height:5em;">
SS
<br>
</div>
</div>

View file

@ -0,0 +1,4 @@
<!DOCTYPE html>
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
<p>There should be a green square below.</p>
<div style="width:100px; height:100px; background:green;"></div>

View file

@ -0,0 +1,14 @@
<!DOCTYPE html>
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css-multicol-1">
<link rel="help" href="https://drafts.csswg.org/css-align/#baseline-export">
<meta name="assert" content="The multicol container here has no baseline, since we're only supposed to look for a baseline in the first column, which has no lines at all.">
<link rel="match" href="baseline-001-ref.html">
<p>There should be a green square below.</p>
<div style="display:flex; align-items:baseline;">
<div style="width:50px; height:100px; background:green;"></div>
<div style="columns:2; height:100px; column-fill:auto;">
<div style="width:50px; height:100px; background:green;"></div>
<br>
</div>
</div>

View file

@ -0,0 +1,7 @@
<!DOCTYPE html>
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
<p>The word "PASS" should be seen below, with letters baseline aligned.</p>
<div style="line-height:2em;">
<br>
PASS
</div>

View file

@ -0,0 +1,16 @@
<!DOCTYPE html>
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css-multicol-1">
<link rel="help" href="https://drafts.csswg.org/css-align/#baseline-export">
<link rel="match" href="baseline-002-ref.html">
<meta name="assert" content="Make sure that baseline propagation doesn't take place before column balancing is finished.">
<p>The word "PASS" should be seen below, with letters baseline aligned.</p>
<div style="display:flex; align-items:baseline;">
PA
<div style="columns:3; orphans:1; widows:1; line-height:2em;">
<div style="break-inside:avoid; height:2em;"></div>
SS<br>
<br>
<br>
</div>
</div>

View file

@ -0,0 +1,4 @@
<!DOCTYPE html>
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
<p>The word "PASS" should be seen below, with letters baseline aligned.</p>
PASS

View file

@ -0,0 +1,13 @@
<!DOCTYPE html>
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css-multicol-1">
<link rel="help" href="https://drafts.csswg.org/css-align/#baseline-export">
<link rel="match" href="baseline-003-ref.html">
<p>The word "PASS" should be seen below, with letters baseline aligned.</p>
<div style="display:flex; align-items:baseline;">
PA
<div style="columns:3;">
<div style="column-span:all;">SS</div>
<br>
</div>
</div>

View file

@ -0,0 +1,6 @@
<!DOCTYPE html>
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
<p>The word "PASS" should be seen below, with letters baseline aligned.</p>
<div style="padding-top:2em;">
PASS
</div>

View file

@ -0,0 +1,14 @@
<!DOCTYPE html>
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css-multicol-1">
<link rel="help" href="https://drafts.csswg.org/css-align/#baseline-export">
<link rel="match" href="baseline-004-ref.html">
<p>The word "PASS" should be seen below, with letters baseline aligned.</p>
<div style="display:flex; align-items:baseline;">
PA
<div style="columns:3;">
<div style="column-span:all; height:2em;"></div>
<div style="column-span:all;">SS</div>
<br>
</div>
</div>

View file

@ -0,0 +1,3 @@
<!DOCTYPE html>
<p>The word "PASS" should be seen below, with letters baseline aligned.</p>
PASS

View file

@ -0,0 +1,14 @@
<!DOCTYPE html>
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css-multicol-1">
<link rel="help" href="https://drafts.csswg.org/css-align/#baseline-export">
<link rel="match" href="baseline-005-ref.html">
<p>The word "PASS" should be seen below, with letters baseline aligned.</p>
<div style="display:flex; align-items:baseline;">
PA
<div style="columns:3;">
SS
<div style="column-span:all;"><br></div>
<br>
</div>
</div>

View file

@ -0,0 +1,4 @@
<!DOCTYPE html>
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
<p>The word "PASS" should be seen below, with letters baseline aligned.</p>
<div style="padding-top:33px;">PASS</div>

View file

@ -0,0 +1,14 @@
<!DOCTYPE html>
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css-multicol-1">
<link rel="help" href="https://drafts.csswg.org/css-align/#baseline-export">
<link rel="match" href="baseline-006-ref.html">
<p>The word "PASS" should be seen below, with letters baseline aligned.</p>
<div style="display:flex; align-items:baseline;">
PA
<div style="columns:3;">
<div style="height:99px;"></div>
<div style="column-span:all;">SS</div>
<br>
</div>
</div>

View file

@ -0,0 +1,4 @@
<!DOCTYPE html>
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
<p>There should be a green square below.</p>
<div style="width:100px; height:100px; background:green"></div>

View file

@ -0,0 +1,15 @@
<!DOCTYPE html>
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css-multicol-1">
<link rel="help" href="https://drafts.csswg.org/css-align/#baseline-export">
<meta name="assert" content="The first column has no baseline. The column after the spanner does have one, but we're not supposed to look beyond the first column (and any spanners).">
<link rel="match" href="baseline-007-ref.html">
<p>There should be a green square below.</p>
<div style="display:flex; align-items:baseline;">
<div style="width:50px; height:100px; background:green;"></div>
<div style="columns:3; width:50px; line-height:40px; background:green;">
<div style="height:90px;"></div>
<div style="column-span:all; height:30px;"></div>
<br>
</div>
</div>

View file

@ -0,0 +1,4 @@
<!DOCTYPE html>
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
<p>There should be a green square below.</p>
<div style="width:100px; height:100px; background:green;"></div>

View file

@ -0,0 +1,22 @@
<!DOCTYPE html>
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css-multicol-1">
<link rel="help" href="https://drafts.csswg.org/css-align/#baseline-export">
<meta name="assert" content="According to the spec, a multicol container has no last baseline, only a first baseline. So, when aligning with an inline-block, the block-end outer edge of the multicol is what's used for alignment.">
<link rel="match" href="baseline-008-ref.html">
<style>
.part {
display: inline-block;
width: 50px;
height: 100px;
background: green;
}
.multicol {
columns: 2;
column-fill: auto;
}
</style>
<p>There should be a green square below.</p>
<div class="part"></div><div class="part multicol">
<br>
</div>

View file

@ -30,6 +30,7 @@
text-decoration: green underline; text-decoration: green underline;
text-decoration-skip-ink: none; text-decoration-skip-ink: none;
text-decoration-thickness: 8em; text-decoration-thickness: 8em;
text-underline-position: from-font;
} }
</style> </style>
</head> </head>

View file

@ -29,6 +29,7 @@
text-decoration: red underline; text-decoration: red underline;
text-decoration-skip-ink: none; text-decoration-skip-ink: none;
text-underline-offset: 5em; text-underline-offset: 5em;
text-underline-position:from-font;
} }
</style> </style>
</head> </head>

View file

@ -0,0 +1,16 @@
<!doctype html>
<title>feImage referencing a child of the filter's target element</title>
<link rel="help" href="https://drafts.fxtf.org/filter-effects-1/#FilterProperty">
<svg>
<filter id='f1' x='0' y='0' width='1' height='1'>
<feFlood flood-color='green'/>
</filter>
<filter id='f2' x='0' y='0' width='1' height='1'>
<feImage href='#inner'/>
</filter>
<g filter='url(#f2)'>
<g id='inner' filter='url(#f1)'>
<rect width='50' height='50' fill='orange'/>
</g>
</g>
</svg>

View file

@ -96,14 +96,17 @@ test(function () {
var log = []; var log = [];
var instance = document.createElement('my-custom-element-2'); var instance = document.createElement('my-custom-element-2');
document.body.appendChild(instance); document.body.appendChild(instance);
assert_false(instance.matches(":defined"), "Prior to definition, instance should not match :defined");
customElements.define('my-custom-element-2',class extends HTMLElement { customElements.define('my-custom-element-2',class extends HTMLElement {
constructor() { constructor() {
assert_false(instance.matches(":defined"), "During construction, prior to super(), instance should not match :defined");
super(); super();
log.push([this, 'begin']); log.push([this, 'begin']);
assert_false(this.matches(":defined"), "During construction, this should not match :defined"); assert_false(this.matches(":defined"), "During construction, after super(), this should not match :defined");
log.push([this, 'end']); log.push([this, 'end']);
} }
}); });
assert_true(instance.matches(":defined"), "After construction, instance should match :defined");
assert_equals(log.length, 2); assert_equals(log.length, 2);
assert_array_equals(log[0], [instance, 'begin']); assert_array_equals(log[0], [instance, 'begin']);
assert_array_equals(log[1], [instance, 'end']); assert_array_equals(log[1], [instance, 'end']);

View file

@ -65,6 +65,10 @@ setKeyboard: Set the current default key source
addKeyboard: Add a new key input source with the given name addKeyboard: Add a new key input source with the given name
``` ```
This works with elements in other frames/windows as long as they are
same-origin with the test, and the test does not depend on the
window.name property remaining unset on the target window.
### bless ### bless
Usage: `test_driver.bless(intent, action)` Usage: `test_driver.bless(intent, action)`
@ -104,6 +108,10 @@ possible to click it. It returns a promise that resolves after the
click has occurred or rejects if the element cannot be clicked (for click has occurred or rejects if the element cannot be clicked (for
example, it is obscured by an element on top of it). example, it is obscured by an element on top of it).
This works with elements in other frames/windows as long as they are
same-origin with the test, and the test does not depend on the
window.name property remaining unset on the target window.
Note that if the element to be clicked does not have a unique ID, the Note that if the element to be clicked does not have a unique ID, the
document must not have any DOM mutations made between the function document must not have any DOM mutations made between the function
being called and the promise settling. being called and the promise settling.
@ -120,6 +128,10 @@ make it possible to send keys. It returns a promise that resolves
after the keys have been sent, or rejects if the keys cannot be sent after the keys have been sent, or rejects if the keys cannot be sent
to the element. to the element.
This works with elements in other frames/windows as long as they are
same-origin with the test, and the test does not depend on the
window.name property remaining unset on the target window.
Note that if the element that the keys need to be sent to does not have Note that if the element that the keys need to be sent to does not have
a unique ID, the document must not have any DOM mutations made a unique ID, the document must not have any DOM mutations made
between the function being called and the promise settling. between the function being called and the promise settling.

View file

@ -13,10 +13,11 @@
const directory = "/html/cross-origin-opener-policy/reporting"; const directory = "/html/cross-origin-opener-policy/reporting";
const executor_path = directory + "/resources/executor.html?pipe="; const executor_path = directory + "/resources/executor.html?pipe=";
const redirect_path = directory + "/resources/redirect.py?";
const same_origin = get_host_info().HTTPS_ORIGIN; const same_origin = get_host_info().HTTPS_ORIGIN;
const coep_header = '|header(Cross-Origin-Embedder-Policy,require-corp)'; const coep_header = '|header(Cross-Origin-Embedder-Policy,require-corp)';
promise_test(async t => { let runTest = (openee_redirect, name) => promise_test(async t => {
// The test window. // The test window.
const this_window_token = token(); const this_window_token = token();
@ -32,6 +33,9 @@ promise_test(async t => {
const openee_report_token = token(); const openee_report_token = token();
const openee_token = token(); const openee_token = token();
const openee_url = same_origin + executor_path + `&uuid=${openee_token}`; const openee_url = same_origin + executor_path + `&uuid=${openee_token}`;
const openee_redirect_url = same_origin + redirect_path + openee_url
const openee_requested_url = openee_redirect ? openee_redirect_url
: openee_url;
// 1. Create the opener window. // 1. Create the opener window.
let opener_window_proxy = window.open(opener_url); let opener_window_proxy = window.open(opener_url);
@ -39,7 +43,7 @@ promise_test(async t => {
// 2. The opener opens it openee. // 2. The opener opens it openee.
send(opener_token, ` send(opener_token, `
openee = window.open("${openee_url}"); openee = window.open("${openee_requested_url}");
send("${this_window_token}", "ACK 1"); send("${this_window_token}", "ACK 1");
`); `);
assert_equals("ACK 1", await receive(this_window_token)); assert_equals("ACK 1", await receive(this_window_token));
@ -66,7 +70,9 @@ promise_test(async t => {
assert_equals(report.body.effectivePolicy, "same-origin-plus-coep"); assert_equals(report.body.effectivePolicy, "same-origin-plus-coep");
assert_equals(report.body.property, "blur"); assert_equals(report.body.property, "blur");
assert_source_location_found(report); assert_source_location_found(report);
// TODO(arthursonzogni): Check the window-blocked-url. }, name);
}, "Opener (COOP-RO+COEP) accesses openee. Report to opener");
runTest(false, "access-from-coop-page-to-openee, same-origin");
runTest(true , "access-from-coop-page-to-openee, same-origin + redirect");
</script> </script>

View file

@ -13,11 +13,12 @@
const directory = "/html/cross-origin-opener-policy/reporting"; const directory = "/html/cross-origin-opener-policy/reporting";
const executor_path = directory + "/resources/executor.html?pipe="; const executor_path = directory + "/resources/executor.html?pipe=";
const redirect_path = directory + "/resources/redirect.py?";
const same_origin = get_host_info().HTTPS_ORIGIN; const same_origin = get_host_info().HTTPS_ORIGIN;
const cross_origin = get_host_info().HTTPS_REMOTE_ORIGIN; const cross_origin = get_host_info().HTTPS_REMOTE_ORIGIN;
const coep_header = '|header(Cross-Origin-Embedder-Policy,require-corp)'; const coep_header = '|header(Cross-Origin-Embedder-Policy,require-corp)';
promise_test(async t => { let runTest = (openee_redirect, name) => promise_test(async t => {
// The test window. // The test window.
const this_window_token = token(); const this_window_token = token();
@ -33,6 +34,9 @@ promise_test(async t => {
const openee_report_token= token(); const openee_report_token= token();
const openee_token = token(); const openee_token = token();
const openee_url = cross_origin + executor_path + `&uuid=${openee_token}`; const openee_url = cross_origin + executor_path + `&uuid=${openee_token}`;
const openee_redirect_url = same_origin + redirect_path + openee_url
const openee_requested_url = openee_redirect ? openee_redirect_url
: openee_url;
// 1. Create the opener window. // 1. Create the opener window.
let opener_window_proxy = window.open(opener_url); let opener_window_proxy = window.open(opener_url);
@ -40,7 +44,7 @@ promise_test(async t => {
// 2. The opener opens it openee. // 2. The opener opens it openee.
send(opener_token, ` send(opener_token, `
openee = window.open("${openee_url}"); openee = window.open("${openee_requested_url}");
send("${this_window_token}", "ACK 1"); send("${this_window_token}", "ACK 1");
`); `);
assert_equals("ACK 1", await receive(this_window_token)); assert_equals("ACK 1", await receive(this_window_token));
@ -67,7 +71,9 @@ promise_test(async t => {
assert_equals(report.body.effectivePolicy, "same-origin-plus-coep"); assert_equals(report.body.effectivePolicy, "same-origin-plus-coep");
assert_equals(report.body.property, "blur"); assert_equals(report.body.property, "blur");
assert_source_location_found(report); assert_source_location_found(report);
// TODO(arthursonzogni): Check the window-blocked-url. }, name);
}, "Opener (COOP-RO+COEP) accesses openee. Report to opener");
runTest(false, "access-from-coop-page-to-openee, cross-origin");
runTest(true , "access-from-coop-page-to-openee, cross-origin + redirect");
</script> </script>

View file

@ -13,10 +13,11 @@
const directory = "/html/cross-origin-opener-policy/reporting"; const directory = "/html/cross-origin-opener-policy/reporting";
const executor_path = directory + "/resources/executor.html?pipe="; const executor_path = directory + "/resources/executor.html?pipe=";
const redirect_path = directory + "/resources/redirect.py?";
const same_origin = get_host_info().HTTPS_ORIGIN; const same_origin = get_host_info().HTTPS_ORIGIN;
const coep_header = '|header(Cross-Origin-Embedder-Policy,require-corp)'; const coep_header = '|header(Cross-Origin-Embedder-Policy,require-corp)';
promise_test(async t => { let runTest = (openee_redirect, name) => promise_test(async t => {
const report_token = token(); const report_token = token();
const openee_token = token(); const openee_token = token();
@ -24,7 +25,11 @@ promise_test(async t => {
const openee_url = same_origin + executor_path + const openee_url = same_origin + executor_path +
reportTo.header + reportTo.coopReportOnlySameOriginHeader + coep_header + reportTo.header + reportTo.coopReportOnlySameOriginHeader + coep_header +
`&uuid=${openee_token}`; `&uuid=${openee_token}`;
const openee = window.open(openee_url); const openee_redirect_url = same_origin + redirect_path + openee_url
const openee_requested_url = openee_redirect ? openee_redirect_url
: openee_url;
const openee = window.open(openee_requested_url);
t.add_cleanup(() => send(openee_token, "window.close()")) t.add_cleanup(() => send(openee_token, "window.close()"))
// 1. Try to access the opener. A report is sent, because of COOP-RO+COEP. // 1. Try to access the opener. A report is sent, because of COOP-RO+COEP.
@ -42,6 +47,9 @@ promise_test(async t => {
assert_equals(report.body.effectivePolicy, "same-origin-plus-coep"); assert_equals(report.body.effectivePolicy, "same-origin-plus-coep");
assert_equals(report.body.property, "blur"); assert_equals(report.body.property, "blur");
assert_source_location_found(report); assert_source_location_found(report);
}, "Openee (COOP-RO+COEP) accesses opener. Report to openee"); }, name);
runTest(false, "access-from-coop-page-to-opener, same-origin");
runTest(true , "access-from-coop-page-to-opener, same-origin + redirect");
</script> </script>

View file

@ -13,10 +13,12 @@
const directory = "/html/cross-origin-opener-policy/reporting"; const directory = "/html/cross-origin-opener-policy/reporting";
const executor_path = directory + "/resources/executor.html?pipe="; const executor_path = directory + "/resources/executor.html?pipe=";
const redirect_path = directory + "/resources/redirect.py?";
const same_origin = get_host_info().HTTPS_ORIGIN;
const cross_origin = get_host_info().HTTPS_REMOTE_ORIGIN; const cross_origin = get_host_info().HTTPS_REMOTE_ORIGIN;
const coep_header = '|header(Cross-Origin-Embedder-Policy,require-corp)'; const coep_header = '|header(Cross-Origin-Embedder-Policy,require-corp)';
promise_test(async t => { let runTest = (openee_redirect, name) => promise_test(async t => {
const report_token = token(); const report_token = token();
const openee_token = token(); const openee_token = token();
@ -24,7 +26,11 @@ promise_test(async t => {
const openee_url = cross_origin + executor_path + const openee_url = cross_origin + executor_path +
reportTo.header + reportTo.coopReportOnlySameOriginHeader + coep_header + reportTo.header + reportTo.coopReportOnlySameOriginHeader + coep_header +
`&uuid=${openee_token}`; `&uuid=${openee_token}`;
const openee = window.open(openee_url); const openee_redirect_url = same_origin + redirect_path + openee_url
const openee_requested_url = openee_redirect ? openee_redirect_url
: openee_url;
const openee = window.open(openee_requested_url);
t.add_cleanup(() => send(openee_token, "window.close()")) t.add_cleanup(() => send(openee_token, "window.close()"))
// 1. Try to access the opener. A report is sent, because of COOP-RO+COEP. // 1. Try to access the opener. A report is sent, because of COOP-RO+COEP.
@ -42,6 +48,9 @@ promise_test(async t => {
assert_equals(report.body.effectivePolicy, "same-origin-plus-coep"); assert_equals(report.body.effectivePolicy, "same-origin-plus-coep");
assert_equals(report.body.property, "blur"); assert_equals(report.body.property, "blur");
assert_source_location_found(report); assert_source_location_found(report);
}, "Openee (COOP-RO+COEP) accesses opener. Report to openee"); }, name);
runTest(false, "access-from-coop-page-to-opener, cross-origin");
runTest(true , "access-from-coop-page-to-opener, cross-origin + redirect");
</script> </script>

View file

@ -13,10 +13,11 @@
const directory = "/html/cross-origin-opener-policy/reporting"; const directory = "/html/cross-origin-opener-policy/reporting";
const executor_path = directory + "/resources/executor.html?pipe="; const executor_path = directory + "/resources/executor.html?pipe=";
const redirect_path = directory + "/resources/redirect.py?";
const same_origin = get_host_info().HTTPS_ORIGIN; const same_origin = get_host_info().HTTPS_ORIGIN;
const coep_header = '|header(Cross-Origin-Embedder-Policy,require-corp)'; const coep_header = '|header(Cross-Origin-Embedder-Policy,require-corp)';
promise_test(async t => { let runTest = (openee_redirect, name) => promise_test(async t => {
// The test window. // The test window.
const this_window_token = token(); const this_window_token = token();
@ -32,6 +33,9 @@ promise_test(async t => {
const openee_report_token= token(); const openee_report_token= token();
const openee_token = token(); const openee_token = token();
const openee_url = same_origin + executor_path + `&uuid=${openee_token}`; const openee_url = same_origin + executor_path + `&uuid=${openee_token}`;
const openee_redirect_url = same_origin + redirect_path + openee_url
const openee_requested_url = openee_redirect ? openee_redirect_url
: openee_url;
// 1. Create the opener window. // 1. Create the opener window.
let opener_window_proxy = window.open(opener_url); let opener_window_proxy = window.open(opener_url);
@ -39,7 +43,7 @@ promise_test(async t => {
// 2. The opener opens its openee. // 2. The opener opens its openee.
send(opener_token, ` send(opener_token, `
openee = window.open("${openee_url}"); openee = window.open("${openee_requested_url}");
send("${this_window_token}", "ACK 1"); send("${this_window_token}", "ACK 1");
`); `);
assert_equals("ACK 1", await receive(this_window_token)); assert_equals("ACK 1", await receive(this_window_token));
@ -60,7 +64,9 @@ promise_test(async t => {
assert_equals(report.body.effectivePolicy, "same-origin-plus-coep"); assert_equals(report.body.effectivePolicy, "same-origin-plus-coep");
assert_equals(report.body.property, "blur"); assert_equals(report.body.property, "blur");
assert_source_location_missing(report); assert_source_location_missing(report);
// TODO(arthursonzogni): Check the window-blocked-url. }, name);
}, "Openee accesses opener (COOP-RO-COEP). Report to opener");
runTest(false, "access-to-coop-page-from-openee, same-origin");
runTest(true , "access-to-coop-page-from-openee, same-origin + redirect");
</script> </script>

View file

@ -13,11 +13,12 @@
const directory = "/html/cross-origin-opener-policy/reporting"; const directory = "/html/cross-origin-opener-policy/reporting";
const executor_path = directory + "/resources/executor.html?pipe="; const executor_path = directory + "/resources/executor.html?pipe=";
const redirect_path = directory + "/resources/redirect.py?";
const same_origin = get_host_info().HTTPS_REMOTE_ORIGIN; const same_origin = get_host_info().HTTPS_REMOTE_ORIGIN;
const cross_origin= get_host_info().HTTPS_ORIGIN; const cross_origin= get_host_info().HTTPS_ORIGIN;
const coep_header = '|header(Cross-Origin-Embedder-Policy,require-corp)'; const coep_header = '|header(Cross-Origin-Embedder-Policy,require-corp)';
promise_test(async t => { let runTest = (openee_redirect, name) => promise_test(async t => {
// The test window. // The test window.
const this_window_token = token(); const this_window_token = token();
@ -33,6 +34,9 @@ promise_test(async t => {
const openee_report_token= token(); const openee_report_token= token();
const openee_token = token(); const openee_token = token();
const openee_url = cross_origin + executor_path + `&uuid=${openee_token}`; const openee_url = cross_origin + executor_path + `&uuid=${openee_token}`;
const openee_redirect_url = same_origin + redirect_path + openee_url
const openee_requested_url = openee_redirect ? openee_redirect_url
: openee_url;
// 1. Create the opener window. // 1. Create the opener window.
let opener_window_proxy = window.open(opener_url); let opener_window_proxy = window.open(opener_url);
@ -40,7 +44,7 @@ promise_test(async t => {
// 2. The opener opens its openee. // 2. The opener opens its openee.
send(opener_token, ` send(opener_token, `
openee = window.open("${openee_url}"); openee = window.open("${openee_requested_url}");
send("${this_window_token}", "ACK 1"); send("${this_window_token}", "ACK 1");
`); `);
assert_equals("ACK 1", await receive(this_window_token)); assert_equals("ACK 1", await receive(this_window_token));
@ -61,7 +65,9 @@ promise_test(async t => {
assert_equals(report.body.effectivePolicy, "same-origin-plus-coep"); assert_equals(report.body.effectivePolicy, "same-origin-plus-coep");
assert_equals(report.body.property, "blur"); assert_equals(report.body.property, "blur");
assert_source_location_missing(report); assert_source_location_missing(report);
// TODO(arthursonzogni): Check the window-blocked-url. }, name);
}, "Openee accesses opener (COOP-RO-COEP). Report to opener");
runTest(false, "access-to-coop-page-from-openee, cross-origin");
runTest(true , "access-to-coop-page-from-openee, cross-origin + redirect)");
</script> </script>

View file

@ -13,10 +13,11 @@
const directory = "/html/cross-origin-opener-policy/reporting"; const directory = "/html/cross-origin-opener-policy/reporting";
const executor_path = directory + "/resources/executor.html?pipe="; const executor_path = directory + "/resources/executor.html?pipe=";
const redirect_path = directory + "/resources/redirect.py?";
const same_origin = get_host_info().HTTPS_ORIGIN; const same_origin = get_host_info().HTTPS_ORIGIN;
const coep_header = '|header(Cross-Origin-Embedder-Policy,require-corp)'; const coep_header = '|header(Cross-Origin-Embedder-Policy,require-corp)';
promise_test(async t => { let runTest = (openee_redirect, name) => promise_test(async t => {
const report_token = token(); const report_token = token();
const openee_token = token(); const openee_token = token();
const opener_token = token(); // The current test window. const opener_token = token(); // The current test window.
@ -25,7 +26,12 @@ promise_test(async t => {
const openee_url = same_origin + executor_path + reportTo.header + const openee_url = same_origin + executor_path + reportTo.header +
reportTo.coopReportOnlySameOriginHeader + coep_header + reportTo.coopReportOnlySameOriginHeader + coep_header +
`&uuid=${openee_token}`; `&uuid=${openee_token}`;
const openee = window.open(openee_url); const openee_redirect_url = same_origin + redirect_path + openee_url
const openee_requested_url = openee_redirect ? openee_redirect_url
: openee_url;
const openee = window.open(openee_requested_url);
t.add_cleanup(() => send(openee_token, "window.close()")) t.add_cleanup(() => send(openee_token, "window.close()"))
// 1. Make sure the new document to be loaded. // 1. Make sure the new document to be loaded.
@ -48,7 +54,9 @@ promise_test(async t => {
assert_equals(report.body.effectivePolicy, "same-origin-plus-coep"); assert_equals(report.body.effectivePolicy, "same-origin-plus-coep");
assert_equals(report.body.property, "blur"); assert_equals(report.body.property, "blur");
assert_source_location_missing(report); assert_source_location_missing(report);
// TODO(arthursonzogni): Add check for report > body > blocked-window-url }, name);
}, "Opener accesses openee (COOP-RO+COEP). Report to openee");
runTest(false, "access-to-coop-page-from-opener, same-origin");
runTest(true , "access-to-coop-page-from-opener, same-origin + redirect");
</script> </script>

View file

@ -13,10 +13,12 @@
const directory = "/html/cross-origin-opener-policy/reporting"; const directory = "/html/cross-origin-opener-policy/reporting";
const executor_path = directory + "/resources/executor.html?pipe="; const executor_path = directory + "/resources/executor.html?pipe=";
const redirect_path = directory + "/resources/redirect.py?";
const same_origin = get_host_info().HTTPS_ORIGIN;
const cross_origin = get_host_info().HTTPS_REMOTE_ORIGIN; const cross_origin = get_host_info().HTTPS_REMOTE_ORIGIN;
const coep_header = '|header(Cross-Origin-Embedder-Policy,require-corp)'; const coep_header = '|header(Cross-Origin-Embedder-Policy,require-corp)';
promise_test(async t => { let runTest = (openee_redirect, name) => promise_test(async t => {
const report_token = token(); const report_token = token();
const openee_token = token(); const openee_token = token();
const opener_token = token(); // The current test window. const opener_token = token(); // The current test window.
@ -25,7 +27,12 @@ promise_test(async t => {
const openee_url = cross_origin + executor_path + const openee_url = cross_origin + executor_path +
reportTo.header + reportTo.coopReportOnlySameOriginHeader + coep_header + reportTo.header + reportTo.coopReportOnlySameOriginHeader + coep_header +
`&uuid=${openee_token}`; `&uuid=${openee_token}`;
const openee = window.open(openee_url); const openee_redirect_url = same_origin + redirect_path + openee_url
const openee_requested_url = openee_redirect ? openee_redirect_url
: openee_url;
const openee = window.open(openee_requested_url);
t.add_cleanup(() => send(openee_token, "window.close()")) t.add_cleanup(() => send(openee_token, "window.close()"))
// 1. Make sure the new document to be loaded. // 1. Make sure the new document to be loaded.
@ -48,7 +55,9 @@ promise_test(async t => {
assert_equals(report.body.effectivePolicy, "same-origin-plus-coep"); assert_equals(report.body.effectivePolicy, "same-origin-plus-coep");
assert_equals(report.body.property, "blur"); assert_equals(report.body.property, "blur");
assert_source_location_missing(report); assert_source_location_missing(report);
// TODO(arthursonzogni): Add check for report > body > blocked-window-url }, name);
}, "Opener accesses openee (COOP-RO+COEP). Report to openee");
runTest(false, "access-to-coop-page-from-opener, cross-origin");
runTest(true , "access-to-coop-page-from-opener, cross-origin + redirect");
</script> </script>

View file

@ -18,7 +18,7 @@ const send = function(uuid, message) {
} }
const receive = async function(uuid) { const receive = async function(uuid) {
const timeout = 3000; const timeout = 2500;
const retry_delay = 100; const retry_delay = 100;
for(let i = 0; i * retry_delay < timeout; ++i) { for(let i = 0; i * retry_delay < timeout; ++i) {
let response = await fetch(dispatcher_url + `?uuid=${uuid}`); let response = await fetch(dispatcher_url + `?uuid=${uuid}`);

View file

@ -0,0 +1,3 @@
def main(request, response):
response.status = 302
response.headers.set(b"Location", request.url[request.url.find('?')+1:])

View file

@ -0,0 +1,7 @@
<!doctype html>
<button id="button">Button</button>
<div id="log">FAIL</div>
<script>
document.getElementById("button").addEventListener("click", () =>
document.getElementById("log").textContent = "PASS");
</script>

View file

@ -0,0 +1,24 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>TestDriver click on a document in an iframe</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>
<iframe src="click_child.html"></iframe>
<script>
setup({single_test: true});
addEventListener("load", () => {
let child = frames[0];
let button = child.document.getElementById("button");
test_driver
.click(button)
.then(() => {
assert_equals(child.document.getElementById("log").textContent, "PASS");
done();
})
.catch(() => assert_unreached("click failed"));
});
</script>

View file

@ -0,0 +1,31 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>TestDriver click method with multiple windows and nested iframe</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>
<iframe src="about:blank"></iframe>
<script>
setup({single_test: true});
window.open("about:blank")
var child = window.open("click_outer_child.html")
window.open("about:blank")
addEventListener("load",() => {
child.addEventListener("load", () => {
let doc = child.frames[2].document;
let button = doc.getElementById("button");
test_driver
.click(button)
.then(() => {
assert_equals(doc.getElementById("log").textContent, "PASS");
done();
})
.catch(() => assert_unreached("click failed"));
});
});
</script>

View file

@ -0,0 +1,4 @@
<!doctype html>
<iframe src="about:blank"></iframe>
<iframe src="about:blank"></iframe>
<iframe src="click_child.html"></iframe>

View file

@ -0,0 +1,24 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>TestDriver click method in window</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>
setup({single_test: true});
addEventListener("load", () => {
let child = window.open("click_child.html");
child.addEventListener("load", () => {
let button = child.document.getElementById("button");
test_driver
.click(button)
.then(() => {
assert_equals(child.document.getElementById("log").textContent, "PASS");
done();
})
.catch(() => assert_unreached("click failed"));
});
})
</script>

View file

@ -163,6 +163,21 @@ function checkBeforeinputAndInputEventsOnNOOP() {
"input event shouldn't be fired when the key operation does not cause modifying the DOM tree"); "input event shouldn't be fired when the key operation does not cause modifying the DOM tree");
} }
promise_test(async () => {
reset();
editor.innerHTML = "<p>abc</p>";
selection.collapse(editor.firstChild.firstChild, 0);
await sendBackspaceKey();
assert_equals(editor.innerHTML, "<p>abc</p>");
checkGetTargetRangesOfBeforeinputOnDeleteSomething({
startContainer: editor.firstChild.firstChild,
startOffset: 0,
endContainer: editor.firstChild.firstChild,
endOffset: 0,
});
checkGetTargetRangesOfInputOnDoNothing();
}, 'Backspace at "<p>[]abc</p>"');
// Simply deletes the previous ASCII character of caret position. // Simply deletes the previous ASCII character of caret position.
promise_test(async () => { promise_test(async () => {
reset(); reset();

View file

@ -211,6 +211,54 @@ promise_test(async () => {
checkGetTargetRangesOfInputOnDeleteSomething(); checkGetTargetRangesOfInputOnDeleteSomething();
}, 'Delete at "<p>[]abc</p>"'); }, 'Delete at "<p>[]abc</p>"');
promise_test(async () => {
reset();
editor.innerHTML = "<p>abc</p>";
let abc = editor.querySelector("p").firstChild;
selection.collapse(abc, 3);
await sendDeleteKey();
assert_equals(editor.innerHTML, "<p>abc</p>");
checkGetTargetRangesOfBeforeinputOnDeleteSomething({
startContainer: abc,
startOffset: 3,
endContainer: abc,
endOffset: 3,
});
checkGetTargetRangesOfInputOnDoNothing();
}, 'Delete at "<p>abc[]</p>"');
promise_test(async () => {
reset();
editor.innerHTML = "<p>abc<br></p>";
let abc = editor.querySelector("p").firstChild;
selection.collapse(abc, 3);
await sendDeleteKey();
assert_equals(editor.innerHTML, "<p>abc<br></p>");
checkGetTargetRangesOfBeforeinputOnDeleteSomething({
startContainer: abc,
startOffset: 3,
endContainer: abc,
endOffset: 3,
});
checkGetTargetRangesOfInputOnDoNothing();
}, 'Delete at "<p>abc[]<br></p>"');
promise_test(async () => {
reset();
editor.innerHTML = `<p><img src="${kImgSrc}"><br></p>`;
let p = editor.querySelector("p");
selection.collapse(p, 1);
await sendDeleteKey();
assert_equals(editor.innerHTML, `<p><img src="${kImgSrc}"><br></p>`);
checkGetTargetRangesOfBeforeinputOnDeleteSomething({
startContainer: p,
startOffset: 1,
endContainer: p,
endOffset: 1,
});
checkGetTargetRangesOfInputOnDoNothing();
}, 'Delete at "<p><img>[]<br></p>"');
// Should delete the `<span>` element because it becomes empty. // Should delete the `<span>` element because it becomes empty.
// However, we need discussion whether the `<span>` element should be // However, we need discussion whether the `<span>` element should be
// contained by a range of `getTargetRanges()`. // contained by a range of `getTargetRanges()`.
@ -566,6 +614,25 @@ promise_test(async () => {
checkGetTargetRangesOfInputOnDeleteSomething(); checkGetTargetRangesOfInputOnDeleteSomething();
}, 'Delete at "<p>abc[]<br></p><p>def</p>"'); }, 'Delete at "<p>abc[]<br></p><p>def</p>"');
promise_test(async () => {
reset();
editor.innerHTML = `<p><img src="${kImgSrc}"><br></p><p>def</p>`;
let p1 = editor.firstChild;
let img = p1.firstChild;
let p2 = p1.nextSibling;
let def = p2.firstChild;
selection.collapse(p1, 1);
await sendDeleteKey();
assert_equals(editor.innerHTML, `<p><img src="${kImgSrc}">def</p>`);
checkGetTargetRangesOfBeforeinputOnDeleteSomething({
startContainer: p1,
startOffset: 1,
endContainer: def,
endOffset: 0,
});
checkGetTargetRangesOfInputOnDeleteSomething();
}, `Delete at "<p><img>{}<br></p><p>def</p>"`);
promise_test(async () => { promise_test(async () => {
reset(); reset();
editor.innerHTML = "<p>abc</p><p>def</p>"; editor.innerHTML = "<p>abc</p><p>def</p>";
@ -941,6 +1008,23 @@ promise_test(async () => {
checkGetTargetRangesOfInputOnDeleteSomething(); checkGetTargetRangesOfInputOnDeleteSomething();
}, 'Delete at "<div>abc[]<br><hr>def</div>"'); }, 'Delete at "<div>abc[]<br><hr>def</div>"');
promise_test(async () => {
reset();
editor.innerHTML = `<div><img src="${kImgSrc}"><br><hr>def</div>`;
let div = editor.querySelector("div");
let img = div.firstChild;
selection.collapse(div, 1);
await sendDeleteKey();
assert_equals(editor.innerHTML, `<div><img src="${kImgSrc}">def</div>`);
checkGetTargetRangesOfBeforeinputOnDeleteSomething({
startContainer: div,
startOffset: 1,
endContainer: div,
endOffset: 3,
});
checkGetTargetRangesOfInputOnDeleteSomething();
}, 'Delete at "<div><img>{}<br><hr>def</div>"');
promise_test(async () => { promise_test(async () => {
reset(); reset();
editor.innerHTML = `<div>abc<hr>def</div>`; editor.innerHTML = `<div>abc<hr>def</div>`;
@ -1069,6 +1153,46 @@ promise_test(async () => {
checkGetTargetRangesOfInputOnDeleteSomething(); checkGetTargetRangesOfInputOnDeleteSomething();
}, 'Delete at "<div>abc[<p>]def<br>ghi</p></div>"'); }, 'Delete at "<div>abc[<p>]def<br>ghi</p></div>"');
promise_test(async () => {
reset();
editor.innerHTML = "<div>abc<br><p>def<br>ghi</p></div>";
let div = editor.firstChild;
let p = editor.querySelector("p");
let def = p.firstChild;
let abc = div.firstChild;
selection.collapse(abc, 3);
await sendDeleteKey();
assert_in_array(editor.innerHTML, ["<div>abcdef<p>ghi</p></div>",
"<div>abcdef<br><p>ghi</p></div>"]);
checkGetTargetRangesOfBeforeinputOnDeleteSomething({
startContainer: div,
startOffset: 1,
endContainer: def,
endOffset: 0,
});
checkGetTargetRangesOfInputOnDeleteSomething();
}, 'Delete at "<div>abc[]<br><p>def<br>ghi</p></div>"');
promise_test(async () => {
reset();
editor.innerHTML = `<div><img src="${kImgSrc}"><br><p>def<br>ghi</p></div>`;
let div = editor.firstChild;
let p = editor.querySelector("p");
let def = p.firstChild;
let abc = div.firstChild;
selection.collapse(div, 1);
await sendDeleteKey();
assert_in_array(editor.innerHTML, [`<div><img src="${kImgSrc}">def<p>ghi</p></div>`,
`<div><img src="${kImgSrc}">def<br><p>ghi</p></div>`]);
checkGetTargetRangesOfBeforeinputOnDeleteSomething({
startContainer: div,
startOffset: 1,
endContainer: def,
endOffset: 0,
});
checkGetTargetRangesOfInputOnDeleteSomething();
}, 'Delete at "<div><img>{}<br><p>def<br>ghi</p></div>"');
// Joining parent block and child block should remove invisible preceding // Joining parent block and child block should remove invisible preceding
// white-spaces of the child block and invisible leading white-spaces in // white-spaces of the child block and invisible leading white-spaces in
// the child block, and they should be contained in a range of // the child block, and they should be contained in a range of
@ -1182,6 +1306,44 @@ promise_test(async () => {
checkGetTargetRangesOfInputOnDeleteSomething(); checkGetTargetRangesOfInputOnDeleteSomething();
}, 'Delete at "<div><p>abc[]</p>def</div>"'); }, 'Delete at "<div><p>abc[]</p>def</div>"');
promise_test(async () => {
reset();
editor.innerHTML = "<div><p>abc<br></p>def</div>";
let p = editor.querySelector("p");
let abc = p.firstChild;
let def = p.nextSibling;
selection.collapse(abc, 3);
await sendDeleteKey();
assert_in_array(editor.innerHTML, ["<div><p>abcdef</p></div>",
"<div><p>abcdef<br></p></div>"]);
checkGetTargetRangesOfBeforeinputOnDeleteSomething({
startContainer: p,
startOffset: 1,
endContainer: def,
endOffset: 0,
});
checkGetTargetRangesOfInputOnDeleteSomething();
}, 'Delete at "<div><p>abc[]<br></p>def</div>"');
promise_test(async () => {
reset();
editor.innerHTML = `<div><p><img src="${kImgSrc}"><br></p>def</div>`;
let p = editor.querySelector("p");
let abc = p.firstChild;
let def = p.nextSibling;
selection.collapse(p, 1);
await sendDeleteKey();
assert_in_array(editor.innerHTML, [`<div><p><img src="${kImgSrc}">def</p></div>`,
`<div><p><img src="${kImgSrc}">def<br></p></div>`]);
checkGetTargetRangesOfBeforeinputOnDeleteSomething({
startContainer: p,
startOffset: 1,
endContainer: def,
endOffset: 0,
});
checkGetTargetRangesOfInputOnDeleteSomething();
}, 'Delete at "<div><p><img>{}<br></p>def</div>"');
promise_test(async () => { promise_test(async () => {
reset(); reset();
editor.innerHTML = "<div><p>abc</p>def</div>"; editor.innerHTML = "<div><p>abc</p>def</div>";

View file

@ -118,6 +118,9 @@ enum XREye {
readonly attribute XREye eye; readonly attribute XREye eye;
readonly attribute Float32Array projectionMatrix; readonly attribute Float32Array projectionMatrix;
[SameObject] readonly attribute XRRigidTransform transform; [SameObject] readonly attribute XRRigidTransform transform;
readonly attribute double? recommendedViewportScale;
undefined requestViewportScale(double? scale);
}; };
[SecureContext, Exposed=Window] interface XRViewport { [SecureContext, Exposed=Window] interface XRViewport {

View file

@ -180,8 +180,6 @@ SET TIMEOUT: media-source/mediasource-util.js
SET TIMEOUT: media-source/URL-createObjectURL-revoke.html SET TIMEOUT: media-source/URL-createObjectURL-revoke.html
SET TIMEOUT: mixed-content/generic/sanity-checker.js SET TIMEOUT: mixed-content/generic/sanity-checker.js
SET TIMEOUT: navigation-timing/* SET TIMEOUT: navigation-timing/*
SET TIMEOUT: html/canvas/offscreen/the-offscreen-canvas/*
SET TIMEOUT: html/canvas/offscreen/manual/the-offscreen-canvas/*
SET TIMEOUT: old-tests/submission/Microsoft/history/history_000.htm SET TIMEOUT: old-tests/submission/Microsoft/history/history_000.htm
SET TIMEOUT: paint-timing/resources/subframe-painting.html SET TIMEOUT: paint-timing/resources/subframe-painting.html
SET TIMEOUT: payment-request/allowpayment/setting-allowpaymentrequest-timing.https.sub.html SET TIMEOUT: payment-request/allowpayment/setting-allowpaymentrequest-timing.https.sub.html
@ -618,6 +616,8 @@ CSS-COLLIDING-SUPPORT-NAME: css/css-shapes/shape-outside/shape-image/support/ani
CSS-COLLIDING-SUPPORT-NAME: css/css-display/support/util.js CSS-COLLIDING-SUPPORT-NAME: css/css-display/support/util.js
CSS-COLLIDING-SUPPORT-NAME: css/CSS2/normal-flow/support/replaced-min-max-1.png CSS-COLLIDING-SUPPORT-NAME: css/CSS2/normal-flow/support/replaced-min-max-1.png
CSS-COLLIDING-SUPPORT-NAME: css/vendor-imports/mozilla/mozilla-central-reftests/ui3/support/replaced-min-max-1.png CSS-COLLIDING-SUPPORT-NAME: css/vendor-imports/mozilla/mozilla-central-reftests/ui3/support/replaced-min-max-1.png
CSS-COLLIDING-REF-NAME: css/css-multicol/baseline-001-ref.html
CSS-COLLIDING-REF-NAME: css/css-grid/subgrid/baseline-001-ref.html
CSS-COLLIDING-TEST-NAME: css/css-contain/inheritance.html CSS-COLLIDING-TEST-NAME: css/css-contain/inheritance.html
CSS-COLLIDING-TEST-NAME: css/css-contain/content-visibility/inheritance.html CSS-COLLIDING-TEST-NAME: css/css-contain/content-visibility/inheritance.html
@ -691,14 +691,9 @@ MISSING-LINK: css/filter-effects/*.any.js
# Tests that use WebKit/Blink testing APIs # Tests that use WebKit/Blink testing APIs
LAYOUTTESTS APIS: import-maps/common/resources/common-test-helper.js LAYOUTTESTS APIS: import-maps/common/resources/common-test-helper.js
LAYOUTTESTS APIS: resources/test-only-api.js
LAYOUTTESTS APIS: resources/chromium/enable-hyperlink-auditing.js LAYOUTTESTS APIS: resources/chromium/enable-hyperlink-auditing.js
LAYOUTTESTS APIS: resources/chromium/generic_sensor_mocks.js LAYOUTTESTS APIS: resources/chromium/generic_sensor_mocks.js
LAYOUTTESTS APIS: resources/chromium/nfc-mock.js
LAYOUTTESTS APIS: resources/chromium/webxr-test.js LAYOUTTESTS APIS: resources/chromium/webxr-test.js
LAYOUTTESTS APIS: web-nfc/NDEFReader-document-hidden-manual.https.html
LAYOUTTESTS APIS: web-nfc/NDEFReader_scan.https.html
LAYOUTTESTS APIS: web-nfc/NDEFWriter_write.https.html
LAYOUTTESTS APIS: webxr/resources/webxr_util.js LAYOUTTESTS APIS: webxr/resources/webxr_util.js
# Signed Exchange files have hard-coded URLs in the certUrl field # Signed Exchange files have hard-coded URLs in the certUrl field
@ -733,6 +728,7 @@ AHEM SYSTEM FONT: acid/acid3/test.html
AHEM SYSTEM FONT: resource-timing/resources/all_resource_types.htm AHEM SYSTEM FONT: resource-timing/resources/all_resource_types.htm
AHEM SYSTEM FONT: resource-timing/resources/iframe-reload-TAO.sub.html AHEM SYSTEM FONT: resource-timing/resources/iframe-reload-TAO.sub.html
AHEM SYSTEM FONT: html/canvas/element/drawing-text-to-the-canvas/2d.text.measure.fontBoundingBox.ahem.html AHEM SYSTEM FONT: html/canvas/element/drawing-text-to-the-canvas/2d.text.measure.fontBoundingBox.ahem.html
AHEM SYSTEM FONT: css/css-font-loading/fontface-override-descriptors.html
# TODO: The following should be deleted along with the Ahem web font cleanup # TODO: The following should be deleted along with the Ahem web font cleanup
# PR (https://github.com/web-platform-tests/wpt/pull/18702) # PR (https://github.com/web-platform-tests/wpt/pull/18702)
@ -744,7 +740,6 @@ TESTHARNESS-IN-OTHER-TYPE: html/canvas/element/manual/wide-gamut-canvas/imagedat
TESTHARNESS-IN-OTHER-TYPE: css/CSS2/floats-clear/adjoining-float-new-fc-crash.html TESTHARNESS-IN-OTHER-TYPE: css/CSS2/floats-clear/adjoining-float-new-fc-crash.html
TESTHARNESS-IN-OTHER-TYPE: css/CSS2/floats/floats-saturated-position-crash.html TESTHARNESS-IN-OTHER-TYPE: css/CSS2/floats/floats-saturated-position-crash.html
TESTHARNESS-IN-OTHER-TYPE: css/CSS2/linebox/video-needs-layout-crash.html TESTHARNESS-IN-OTHER-TYPE: css/CSS2/linebox/video-needs-layout-crash.html
TESTHARNESS-IN-OTHER-TYPE: css/css-animations/keyframes-remove-documentElement-crash.html
TESTHARNESS-IN-OTHER-TYPE: css/css-break/break-before-with-no-fragmentation-crash.html TESTHARNESS-IN-OTHER-TYPE: css/css-break/break-before-with-no-fragmentation-crash.html
TESTHARNESS-IN-OTHER-TYPE: css/css-multicol/abspos-in-multicol-with-spanner-crash.html TESTHARNESS-IN-OTHER-TYPE: css/css-multicol/abspos-in-multicol-with-spanner-crash.html
TESTHARNESS-IN-OTHER-TYPE: css/css-multicol/extremely-tall-multicol-with-extremely-tall-child-crash.html TESTHARNESS-IN-OTHER-TYPE: css/css-multicol/extremely-tall-multicol-with-extremely-tall-child-crash.html

View file

@ -0,0 +1,24 @@
// META: script=/common/get-host-info.sub.js
// META: script=./resources/common.js
// META: timeout=long
'use strict';
promise_test(async testCase => {
try {
const BYTES_PER_WORKER = 10 * 1024 * 1024;
await createWorker(BYTES_PER_WORKER);
const result = await performance.measureMemory();
assert_greater_than_equal(result.bytes, BYTES_PER_WORKER);
checkMeasureMemory(result, {
allowed: [window.location.href],
required: [window.location.href],
});
} catch (error) {
if (!(error instanceof DOMException)) {
throw error;
}
assert_equals(error.name, 'SecurityError');
}
}, 'Well-formed result of performance.measureMemory.');

View file

@ -180,3 +180,15 @@ function sameOriginContexts(children) {
} }
return result; return result;
} }
async function createWorker(bytes) {
const worker = new Worker('resources/worker.js');
let resolve_promise;
const promise = new Promise(resolve => resolve_promise = resolve);
worker.onmessage = function (message) {
assert_equals(message.data, 'ready');
resolve_promise();
}
worker.postMessage({bytes});
return promise;
}

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