Update web-platform-tests to revision b'45fdf45f79582953fb3aa708566cd2c0707cb222'

This commit is contained in:
WPT Sync Bot 2023-02-18 01:40:20 +00:00
parent f7e88665c6
commit 812c6de70b
125 changed files with 1400 additions and 1046 deletions

View file

@ -0,0 +1,8 @@
[Blob-stream.any.html]
[Reading Blob.stream() with BYOB reader]
expected: FAIL
[Blob-stream.any.worker.html]
[Reading Blob.stream() with BYOB reader]
expected: FAIL

View file

@ -1,7 +0,0 @@
[url-charset.window.html]
expected: TIMEOUT
[Blob charset should override any auto-detected charset.]
expected: TIMEOUT
[Blob charset should override <meta charset>.]
expected: TIMEOUT

View file

@ -7,7 +7,7 @@
expected: FAIL
[Opening a blob URL in a new window immediately before revoking it works.]
expected: TIMEOUT
expected: FAIL
[Opening a blob URL in a noopener about:blank window immediately before revoking it works.]
expected: TIMEOUT

View file

@ -5282,14 +5282,14 @@
},
"popovers": {
"popover-dialog-crash.html": [
"76f51b8a5ed81099ad51bb704b4567579e8c8b07",
"e7579d5a3869958422fc07422fbb84124c8c635a",
[
null,
{}
]
],
"popover-manual-crash.html": [
"d721f7c731e0d2c5a9e6c9ab79a5a450345a4874",
"535eb4c7d120186f620c376a149158900721fe12",
[
null,
{}
@ -28636,6 +28636,19 @@
{}
]
],
"fixedpos-with-iframe-print.html": [
"5102d045c4202e4bc22c6c876fd3bbbcf620c4b0",
[
null,
[
[
"/css/css-break/fixedpos-with-iframe-print-ref.html",
"=="
]
],
{}
]
],
"fixedpos-with-link-with-inline-child-print.html": [
"694e5376cbfab7ee52c1f27b9bf0fd23a2a91375",
[
@ -208348,8 +208361,8 @@
{}
]
],
"overflow-overlay.tentative.html": [
"e3cb8d7180e4bc5ddb84506e401c0b8c90d81470",
"overflow-overlay.html": [
"0e8ff093b03aa4dd9a78900d6f615590ec510fa7",
[
null,
[
@ -212754,6 +212767,19 @@
{}
]
],
"position-sticky-fractional-offset.html": [
"79c29f4e87bf7c14572e51757c258945eb0c8c6e",
[
null,
[
[
"/css/css-position/sticky/position-sticky-fractional-offset-ref.html",
"=="
]
],
{}
]
],
"position-sticky-grid.html": [
"607e7c2936246c192e04c8d3673321c0a54cda3c",
[
@ -276424,6 +276450,72 @@
{}
]
],
"iframe-new-has-scrollbar.html": [
"bed16754f6b163b6bb55c2d2504c733113764c00",
[
null,
[
[
"/css/css-view-transitions/iframe-new-has-scrollbar-ref.html",
"=="
]
],
{
"fuzzy": [
[
[
"/css/css-view-transitions/iframe-new-has-scrollbar.html",
"/css/css-view-transitions/iframe-new-has-scrollbar-ref.html",
"=="
],
[
[
0,
80
],
[
0,
500
]
]
]
]
}
]
],
"iframe-old-has-scrollbar.html": [
"9dfa4adf7ac34ff85bfd19951060152a9a3da962",
[
null,
[
[
"/css/css-view-transitions/iframe-old-has-scrollbar-ref.html",
"=="
]
],
{
"fuzzy": [
[
[
"/css/css-view-transitions/iframe-old-has-scrollbar.html",
"/css/css-view-transitions/iframe-old-has-scrollbar-ref.html",
"=="
],
[
[
0,
80
],
[
0,
500
]
]
]
]
}
]
],
"iframe-transition.sub.html": [
"93a5cbed66eb0efac3c68fbed699984556e362b4",
[
@ -309051,7 +309143,7 @@
},
"popovers": {
"popover-anchor-change-display.html": [
"a80377441b03f212e2cb8ad95c5f65528908ab02",
"435929a6c1b05adc811fe8df029f2a30e2e79cf3",
[
null,
[
@ -309064,7 +309156,7 @@
]
],
"popover-anchor-display.html": [
"23d50df7634b47c034b6b625b27cb7b89dfcb99d",
"d50dd6c857b24f5e75e979d6356151e5cf7b65c8",
[
null,
[
@ -309077,7 +309169,7 @@
]
],
"popover-anchor-nested-display.html": [
"426c0fcb85542870e7fcfecdf228e56e73957e2c",
"4b83d9677b978cc2f2c373e671a956042dd159af",
[
null,
[
@ -309090,7 +309182,7 @@
]
],
"popover-anchor-scroll-display.html": [
"85a05323784ab604aa4008fdec7db57841c3924c",
"9a14b44f04994cd6552862f16d94632d814fb45a",
[
null,
[
@ -309102,47 +309194,8 @@
{}
]
],
"popover-animated-hide-display.html": [
"b914d80e69aefa5296960a1ed3d96073e1a08af2",
[
null,
[
[
"/html/semantics/popovers/popover-animated-display-ref.html",
"=="
]
],
{}
]
],
"popover-animated-hide-finishes.html": [
"1af583b5a8315d7005a56b4eff8a76af93414b16",
[
null,
[
[
"/html/semantics/popovers/popover-animated-hide-finishes-ref.html",
"=="
]
],
{}
]
],
"popover-animated-show-display.html": [
"6857103a759b2c222c424227d0977330d320b22a",
[
null,
[
[
"/html/semantics/popovers/popover-animated-display-ref.html",
"=="
]
],
{}
]
],
"popover-appearance.html": [
"87cc4ba3fc89e36b5c412bdecb7a229835c712ca",
"e9050bdeb9ddc2215bb91d0fc5c7cd6bf6c83365",
[
null,
[
@ -309155,7 +309208,7 @@
]
],
"popover-backdrop-appearance.html": [
"4c5c0acec992249c44f53c76725b30a4d4148c38",
"c71e148644b0edb5064b46a01debb37945913818",
[
null,
[
@ -309168,7 +309221,7 @@
]
],
"popover-dialog-appearance.html": [
"02b34bfc67555930a2bb0a182ef09d34c9800f23",
"8b4edadee9e127355b0e14cbabeb65b30020c5c0",
[
null,
[
@ -309181,7 +309234,7 @@
]
],
"popover-hidden-display.html": [
"35fea3e94c67bfc7cd71a54c8f8a98e99561d865",
"936c57fc17e52c7ad373c7ccb2d681d7de330a2f",
[
null,
[
@ -309210,7 +309263,7 @@
]
],
"popover-inside-display-none.html": [
"3ccb885b81a75b899ac3433101e0822945346364",
"a25cf14d1ce039a88188cf3c637523ece926bf3a",
[
null,
[
@ -309223,7 +309276,7 @@
]
],
"popover-open-display.html": [
"ca57a6259966c13837e8c3d116db1538341d6c4c",
"bc4d16fe80f9dad5ca27b5646db2740ac3dfa652",
[
null,
[
@ -309236,7 +309289,7 @@
]
],
"popover-open-overflow-display.html": [
"7fc96411c22f3ec926ab5022d246cb1a3defee70",
"3d4d833063877ce1a9a3338d534709f94bdcdd77",
[
null,
[
@ -309249,7 +309302,7 @@
]
],
"popover-stacking-context.html": [
"1a9e829250535a3de87239d43fe8c4a4733b3ba9",
"ba4e85a89785cc158b2d4768ad6382c648b544f4",
[
null,
[
@ -366462,6 +366515,10 @@
"000c05350b54885c47ea74a7336e02ed857d55ea",
[]
],
"fixedpos-with-iframe-print-ref.html": [
"5c1714045083dfc22272b0522273e7a7235cde6f",
[]
],
"fixedpos-with-link-with-inline-child-print-ref.html": [
"f12d31acd9d077a24a4ba47bcdbb5b2a3029faf3",
[]
@ -385727,6 +385784,10 @@
"b78c784de185918d8939075fb46eca7ad48b6fde",
[]
],
"position-sticky-fractional-offset-ref.html": [
"8b7a1f8a195843b2b943e39813b5e24781955b8d",
[]
],
"position-sticky-grid-ref.html": [
"123eed311b0d293fbe4265ad641576f4fc83fd9f",
[]
@ -397026,6 +397087,14 @@
"bca532b22c6a777108fd7a1ea7b811a73f7cdb17",
[]
],
"iframe-new-has-scrollbar-ref.html": [
"ea895e84848be70644dbb0b3b62b363d05d0319f",
[]
],
"iframe-old-has-scrollbar-ref.html": [
"3bb9bdb88d27b10d7e421eaf32389380642b1d61",
[]
],
"iframe-transition-ref.html": [
"49394f35f6c4f6c7d6c25e9f4fd61154a708904f",
[]
@ -397244,13 +397313,17 @@
],
"support": {
"dialog-in-rtl-iframe-child.html": [
"f1b3f021cbc19af6757d0a0b46a4971048d35dcc",
"7b40a8fd5b614e18c27e3ba53754274edb7ec896",
[]
],
"frame-helper.html": [
"3d2e7b52d078d640602a15b97e54dd62981cb83d",
[]
],
"iframe-scrollbar-child.html": [
"dfd0fb40d926a358979e9db23f6de11249d277fc",
[]
],
"transition-in-empty-iframe-child.html": [
"4eca06a0a943338efd9835e4c2f86b0eff3fce7a",
[]
@ -402549,7 +402622,7 @@
[]
],
"from-local-system.md": [
"77f4799fb247d39fd291222d1164bc7548ccbcb2",
"f47396acc3c683ba6e074906e3cd835a780cc777",
[]
],
"from-web.md": [
@ -406700,7 +406773,11 @@
[]
],
"support.sub.js": [
"8ffdf100ee8d81f75c923dc712e2e87e52ab3ce7",
"a104021d158d93288ae5ad5e3f1674d304b0e875",
[]
],
"worker-blob-fetcher.html": [
"18a454b7fa3628838da1d0d5cca0f6a61758c770",
[]
],
"worker-fetcher.html": [
@ -419926,21 +420003,13 @@
[]
],
"popover-anchor-nested-display-ref.html": [
"17311f218b24d49fd72dd8c9e330efb13de43990",
"9942b41e365d98bb6115a57c234d755984474feb",
[]
],
"popover-anchor-scroll-display-ref.html": [
"1bac806d11191823bdcf87b61693b00c7d507450",
[]
],
"popover-animated-display-ref.html": [
"477a97c12ccd9dc8f6a5427c7d85449e96d8f3ff",
[]
],
"popover-animated-hide-finishes-ref.html": [
"d8334f985ed51f3277d069838132876d8aad2ffc",
[]
],
"popover-appearance-ref.html": [
"7ceca94559b8d425c10243f61b038d6c8422a02b",
[]
@ -432223,7 +432292,7 @@
[]
],
"webusb-test.js": [
"fc322bd4736b544d694582a3cbde403d01aea341",
"94ff1bcadd913d6b12e4d84d64ac34ef82f2e328",
[]
],
"webusb-test.js.headers": [
@ -436403,6 +436472,10 @@
"1ab609f11bf2be22696f0b132b88d8fc86546b93",
[]
],
"main-frame-navigation.html": [
"8781edef6670b48bf17cf644b5623f08bfca0fdb",
[]
],
"media-autoplay-attribute.html": [
"ebef5b725df828c7f8bb36470139d7480199d543",
[]
@ -448387,7 +448460,7 @@
[]
],
"urltestdata.json": [
"0265346a6a62d437cb9e94e55bd93369d92544fa",
"94d41c0cb0d270da1493774e4fd3de579ddfe30a",
[]
]
},
@ -456088,7 +456161,7 @@
]
],
"Blob-stream.any.js": [
"8f1d5c555aded300e240bf7873ce415cc51785d8",
"87710a171a9752416f47596f59d2dc6313d9bd34",
[
"FileAPI/blob/Blob-stream.any.html",
{
@ -516928,7 +517001,7 @@
]
],
"acos-asin-atan-atan2-computed.html": [
"2835e7a20abc917e111d22a9b04fca17493b4793",
"dc8ecce621d69f950846219f698dbe477cb14833",
[
null,
{}
@ -517287,7 +517360,7 @@
]
],
"minmax-angle-computed.html": [
"c0218a0899e6f9ee991a3645293895b924a895ed",
"2c14aa65763154ddc8093dd6d2a450212df619f7",
[
null,
{}
@ -558087,6 +558160,24 @@
}
]
],
"worker-blob-fetch.window.js": [
"80374143a283f42723a48159a72dd1bd715d6ba2",
[
"fetch/private-network-access/worker-blob-fetch.window.html",
{
"script_metadata": [
[
"script",
"/common/utils.js"
],
[
"script",
"resources/support.sub.js"
]
]
}
]
],
"worker-fetch.https.window.js": [
"89e0c3cf1f35f0cf741957c3eb0bff38a4705d93",
[
@ -604277,14 +604368,14 @@
]
],
"popover-anchor-display-none.html": [
"a4285607fd30360545e1364b450443af1cca1fbe",
"55a11fafdb5901ad2f409595107d1d8c587d4979",
[
null,
{}
]
],
"popover-anchor-idl-property.html": [
"bc9f3ae770d2daded1b7f087a5d56436b578cb36",
"37c79efe1cafe45012627e8b56ab638eaf3c2b95",
[
null,
{}
@ -604298,7 +604389,7 @@
]
],
"popover-anchor-nesting.html": [
"7490d75dc09c750c028f75ac0e5660b3b99084e1",
"e3e712b937ab9c4aabbf595eddf45180f4fd9d34",
[
null,
{
@ -604306,24 +604397,8 @@
}
]
],
"popover-animated-hide-cleanup.html": [
"9310acc4ff209807a36b75c543edad64f4318f39",
[
null,
{
"testdriver": true
}
]
],
"popover-animation-corner-cases.html": [
"f41f7a68df9058dee90de4ece70b753a801d6a49",
[
null,
{}
]
],
"popover-attribute-basic.html": [
"bc32c357d3a5503564282a4e3a7260fcd0ae6458",
"0abba9c4e87f7a72bc2d54f816851b2228e75d5b",
[
null,
{
@ -604333,21 +604408,21 @@
]
],
"popover-beforetoggle-opening-event.html": [
"b2c3fa5d68bf051e2faf5d83e765de1ed42397b6",
"e3597d1c69936435c99c18f8ec8b05c50a4a0149",
[
null,
{}
]
],
"popover-document-open.html": [
"429fd89d3ba68d9588b66e696095e5007eaccc9a",
"db43fd02b92f062f925c0beea13e1a5faab2427f",
[
null,
{}
]
],
"popover-events.html": [
"b299424570024c81238ae076fdacbfa2badc83b4",
"1ccd9967c5c9df25ae7995c19c055fdf2a37b82b",
[
null,
{}
@ -604370,7 +604445,7 @@
]
],
"popover-focus.html": [
"b1e59a13971c7be224663ef3d1161ee83c0527ed",
"307ca8a80f553ce31d5cbf1666ddacf63641cdaf",
[
null,
{
@ -604380,7 +604455,7 @@
]
],
"popover-invoking-attribute.html": [
"b49bb4e4a34ced3b30abe1e2bee14ba5c17cff1e",
"d0098d32738d84cc43a8c91f0f5342671f2d2e10",
[
null,
{
@ -604390,7 +604465,7 @@
]
],
"popover-light-dismiss-on-scroll.html": [
"73b3a2d6193bc6f5a120a583a7a7e6169a34487f",
"a4bb4b452b0d4adde4cbd37e7045aac1004bcf94",
[
null,
{}
@ -604407,7 +604482,7 @@
]
],
"popover-not-keyboard-focusable.html": [
"815ae04ebb4024e84ced328b2d5541734e787cd5",
"cd0b60c3ce65df77e75b67dff9d4af2070f4f395",
[
null,
{
@ -604416,28 +604491,28 @@
]
],
"popover-removal-2.html": [
"b7b185d58d53f5cb84516e7bb2b98746221a7c6e",
"e84124d8bef326efe968ccdebd2717a0eae20d21",
[
null,
{}
]
],
"popover-removal.html": [
"aeed3b678db06b9e351b634f654f93829141d8c4",
"e6ad5d9c004858b407228238bcdb5b2d4f1efd8b",
[
null,
{}
]
],
"popover-shadow-dom.html": [
"72bbe1e8933cfa0fa189b69a41be5d5a47d0716b",
"44ded952b702f3d7729eae333719dd0d471c742f",
[
null,
{}
]
],
"popover-stacking.html": [
"dc07c1c208473cc96ba0e63d1369f17b01f503df",
"bdd6feb20eead682790d1e3814272f3f1a384aa4",
[
null,
{}
@ -604451,7 +604526,7 @@
]
],
"popover-top-layer-combinations.html": [
"001bf88a25ef851e6607dc6e0ba7a7cf3b8cf4f8",
"c8e4211ef5c1358a5f611442513ada939e4b7022",
[
null,
{
@ -604460,7 +604535,7 @@
]
],
"popover-top-layer-interactions.html": [
"50a21be7f7723e9010cfc1f5e6548a231ff3e8dd",
"6ef6938810b8532b78f7fbfc905b8f84c1300df9",
[
null,
{
@ -604476,7 +604551,7 @@
]
],
"toggleevent-interface.html": [
"45709458b00c466805c63d1bc4530d37677718a9",
"09ce3f3b5674860f22d255c428aab9a0b63ae072",
[
null,
{}
@ -624907,14 +624982,14 @@
]
],
"navigate-history-back-after-fragment.html": [
"976754f28a885e77ea08d31fc32f682966bc0999",
"57a30c85b8700b1e86f577bed1008b16271acbb2",
[
null,
{}
]
],
"navigate-history-back-after-pushState.html": [
"4d870fb2ae6d0a66ded888e2dbc7bea37e106980",
"bf2e6e4e300e96c684d467c40a7b3ad796b5018c",
[
null,
{}
@ -624977,14 +625052,21 @@
]
],
"navigate-navigation-back-cross-document.html": [
"214644066e1d120e1ee516a050a40cec3dad2134",
"2e1adbeee93ee082a7d9f7e008a5f863e0fc0c50",
[
null,
{}
]
],
"navigate-navigation-back-same-document-in-iframe.html": [
"cebd2f3693c9d8f0845b78ac0a26e53e164f2628",
[
null,
{}
]
],
"navigate-navigation-back-same-document.html": [
"8753e6b1c86bab8b3388f5730d2f2a54eca8b472",
"431d38449c3dff316911bd17b7260f164160f20b",
[
null,
{}
@ -625039,6 +625121,48 @@
{}
]
],
"navigation-back-cross-document-preventDefault.html": [
"0b5b750876d7775d352d6471f118d882a259669f",
[
null,
{}
]
],
"navigation-back-same-document-preventDefault.html": [
"7edb188823352694caf70101f126135142e7dd28",
[
null,
{}
]
],
"navigation-traverseTo-in-iframe-same-document-preventDefault.html": [
"d68b11fa7ccae6a3dc6287150cf25fe8d96d93cf",
[
null,
{}
]
],
"navigation-traverseTo-navigates-top-and-same-doc-child-and-cross-doc-child.html": [
"31cb54fca2a4d5e06f3bab4330b77d7a87f78fb6",
[
null,
{}
]
],
"navigation-traverseTo-same-document-preventDefault-multiple-windows.html": [
"9bb64fb7cc7a7dd5e007021039616b44da56cdd3",
[
null,
{}
]
],
"navigation-traverseTo-top-cancels-cross-document-child.html": [
"11f07afefc5236efc12efc341f9b85da3c0b6c9f",
[
null,
{}
]
],
"same-url-replace-cross-document.html": [
"0a976cd51fdcb3205d2a71cc9dc1a9853e417eee",
[
@ -626068,7 +626192,7 @@
]
],
"traverseTo-detach-between-navigate-and-navigatesuccess.html": [
"a0a291888786119427dcf544c8a84fce86fa0822",
"43bde9a103bc13fd1cb88320da1fb60df0de0fa5",
[
null,
{}
@ -658195,6 +658319,15 @@
}
]
],
"main-frame-navigation.https.html": [
"47d8f2e81a3ce911e171ac828b867bd0161dedf3",
[
null,
{
"timeout": "long"
}
]
],
"media-autoplay.html": [
"7e6b8d10477f9838fc6f57b83f531a2670efeee5",
[
@ -672669,7 +672802,7 @@
},
"exception": {
"basic.tentative.any.js": [
"9ddebae0e968a28135b9c73748fffb80be4468e4",
"acf644f904f53d54918d660c419f60a15c72eabb",
[
null,
{

View file

@ -1,6 +1,3 @@
[block-in-inline-hittest-002.html]
[elementsFromPoint]
expected: FAIL
[elementFromPoint]
expected: FAIL

View file

@ -0,0 +1,3 @@
[block-in-inline-hittest-float-002.html]
[block-in-inline-hittest-float-002]
expected: FAIL

View file

@ -1,2 +0,0 @@
[attribute-value-selector-004.xht]
expected: TIMEOUT

View file

@ -1,3 +0,0 @@
[hittest-before-pseudo.html]
[Hit-testing text within a pseudo-element flex-item should return the flexbox as the hittest result.]
expected: FAIL

View file

@ -158,9 +158,6 @@
[Matching font-weight: '430' should prefer '500' over '400 425']
expected: FAIL
[Matching font-weight: '500' should prefer '450 460' over '400']
expected: FAIL
[Matching font-weight: '500' should prefer '350 399' over '351 398']
expected: FAIL
@ -319,3 +316,18 @@
[Matching font-style: 'oblique -21deg' should prefer 'oblique -10deg' over 'italic']
expected: FAIL
[Matching font-stretch: '100%' should prefer '100%' over '110% 120%']
expected: FAIL
[Matching font-style: 'normal' should prefer 'oblique 20deg 30deg' over 'oblique -50deg -20deg']
expected: FAIL
[Matching font-style: 'italic' should prefer 'oblique 5deg 10deg' over 'oblique 5deg']
expected: FAIL
[Matching font-style: 'oblique 10deg' should prefer 'oblique 10deg' over 'oblique 5deg']
expected: FAIL
[Matching font-style: 'oblique -21deg' should prefer 'italic' over 'oblique 0deg']
expected: FAIL

View file

@ -1,6 +1,3 @@
[transform-scale-hittest.html]
[Hit test intersecting scaled box]
expected: FAIL
[Hit test within unscaled box]
expected: FAIL

View file

@ -325,153 +325,3 @@
[margin-right length(mm) / values]
expected: [FAIL, PASS]
[color color(rgba) / values]
expected: FAIL
[font-size length(pt) / values]
expected: FAIL
[font-size length(pc) / values]
expected: FAIL
[font-size length(px) / values]
expected: FAIL
[font-size length(em) / values]
expected: FAIL
[font-size length(ex) / values]
expected: FAIL
[font-size length(mm) / values]
expected: FAIL
[font-size length(cm) / values]
expected: FAIL
[font-size length(in) / values]
expected: FAIL
[font-size percentage(%) / values]
expected: FAIL
[font-weight font-weight(keyword) / values]
expected: FAIL
[font-weight font-weight(numeric) / values]
expected: FAIL
[line-height number(integer) / values]
expected: FAIL
[line-height number(decimal) / values]
expected: FAIL
[line-height length(pt) / values]
expected: FAIL
[line-height length(pc) / values]
expected: FAIL
[line-height length(px) / values]
expected: FAIL
[line-height length(em) / values]
expected: FAIL
[line-height length(ex) / values]
expected: FAIL
[line-height length(mm) / values]
expected: FAIL
[line-height length(cm) / values]
expected: FAIL
[line-height length(in) / values]
expected: FAIL
[line-height percentage(%) / values]
expected: FAIL
[letter-spacing length(pt) / values]
expected: FAIL
[letter-spacing length(pc) / values]
expected: FAIL
[letter-spacing length(px) / values]
expected: FAIL
[letter-spacing length(em) / values]
expected: FAIL
[letter-spacing length(ex) / values]
expected: FAIL
[letter-spacing length(mm) / values]
expected: FAIL
[letter-spacing length(cm) / values]
expected: FAIL
[letter-spacing length(in) / values]
expected: FAIL
[word-spacing length(pt) / values]
expected: FAIL
[word-spacing length(pc) / values]
expected: FAIL
[word-spacing length(px) / values]
expected: FAIL
[word-spacing length(em) / values]
expected: FAIL
[word-spacing length(ex) / values]
expected: FAIL
[word-spacing length(mm) / values]
expected: FAIL
[word-spacing length(cm) / values]
expected: FAIL
[word-spacing length(in) / values]
expected: FAIL
[word-spacing percentage(%) / values]
expected: FAIL
[text-indent length(pt) / values]
expected: FAIL
[text-indent length(pc) / values]
expected: FAIL
[text-indent length(px) / values]
expected: FAIL
[text-indent length(em) / values]
expected: FAIL
[text-indent length(ex) / values]
expected: FAIL
[text-indent length(mm) / values]
expected: FAIL
[text-indent length(cm) / values]
expected: FAIL
[text-indent length(in) / values]
expected: FAIL
[text-indent percentage(%) / values]
expected: FAIL
[text-shadow shadow(shadow) / values]
expected: FAIL

View file

@ -121,3 +121,6 @@
[atan2(1ms, -1ms) should be used-value-equivalent to 135deg]
expected: FAIL
[calc(atan2(0,-1) / 4) should be used-value-equivalent to 45deg]
expected: FAIL

View file

@ -0,0 +1,3 @@
[elementFromPoint-subpixel.html]
[Hit test top left corner of box]
expected: FAIL

View file

@ -1,3 +0,0 @@
[elementFromPoint-visibility-hidden-resizer.html]
[elementFromPoint on resizer area of an element with visibility:hidden]
expected: FAIL

View file

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

View file

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

View file

@ -146,6 +146,3 @@
[list-style-image sec-fetch-site - HTTPS downgrade-upgrade]
expected: FAIL
[background-image sec-fetch-site - HTTPS downgrade (header not sent)]
expected: TIMEOUT

View file

@ -0,0 +1,36 @@
[worker-blob-fetch.window.html]
[local to local: success.]
expected: FAIL
[private to local: failure.]
expected: FAIL
[private to private: success.]
expected: FAIL
[public to local: failure.]
expected: FAIL
[public to private: failure.]
expected: FAIL
[public to public: success.]
expected: FAIL
[treat-as-public to local: failure.]
expected: FAIL
[treat-as-public to private: failure.]
expected: FAIL
[treat-as-public to public: success.]
expected: FAIL
[private https to local: failure.]
expected: FAIL
[public https to private: failure.]
expected: FAIL
[public https to local: failure.]
expected: FAIL

View file

@ -1,6 +1,6 @@
[scroll-restoration-fragment-scrolling-cross-origin.html]
type: testharness
expected: ERROR
expected: TIMEOUT
[Manual scroll restoration should take precedent over scrolling to fragment in cross origin navigation]
expected: TIMEOUT

View file

@ -1,4 +1,3 @@
[005.html]
expected: TIMEOUT
[Link with onclick navigation and href navigation ]
expected: FAIL

View file

@ -1,10 +1,9 @@
[iframe-src-aboutblank-navigate-immediately.html]
expected: TIMEOUT
[Navigating to a different document with window.open]
expected: FAIL
[Navigating to a different document with form submission]
expected: TIMEOUT
expected: FAIL
[Navigating to a different document with link click]
expected: FAIL

View file

@ -7,3 +7,6 @@
[load & pageshow events do not fire on contentWindow of <iframe> element created with src='about:blank#foo']
expected: FAIL
[load & pageshow events do not fire on contentWindow of <iframe> element created with src='about:blank']
expected: FAIL

View file

@ -0,0 +1,4 @@
[javascript-url-load-as-html.xhtml]
expected: TIMEOUT
[javascript: URL navigation to a string must create a HTML document using the correct properties]
expected: TIMEOUT

View file

@ -1,10 +1,6 @@
[javascript-url-referrer.window.html]
expected: TIMEOUT
[unsafe-url referrer policy used to create the starting page]
expected: FAIL
[origin referrer policy used to create the starting page]
expected: FAIL
[no-referrer referrer policy used to create the starting page]
expected: TIMEOUT

View file

@ -1,3 +0,0 @@
[navigation-unload-cross-origin.sub.window.html]
[Cross-origin navigation started from unload handler must be ignored]
expected: FAIL

View file

@ -1,3 +0,0 @@
[a-click.html]
[aElement.click() before the load event must NOT replace]
expected: FAIL

View file

@ -1,3 +0,0 @@
[creating_browsing_context_test_01.html]
[first argument: absolute url]
expected: FAIL

View file

@ -1,2 +1,2 @@
[canvas.2d.disconnected.html]
expected: TIMEOUT
expected: FAIL

View file

@ -1,7 +1,6 @@
[update-the-rendering.html]
expected: TIMEOUT
["Flush autofocus candidates" should be happen after the first animation frame callbacks, and before a resize event in the next iteration of window event loop.]
expected: TIMEOUT
["Flush autofocus candidates" should be happen before a scroll event and animation frame callbacks]
expected: TIMEOUT
expected: FAIL

View file

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

View file

@ -1,3 +1,9 @@
[non-active-document.html]
[DOMParser]
expected: FAIL
[createHTMLDocument]
expected: FAIL
[<template>]
expected: FAIL

View file

@ -0,0 +1,3 @@
[select-event.html]
[input type tel: selectionStart twice in disconnected node (must fire select only once)]
expected: FAIL

View file

@ -1,6 +1,5 @@
[htmlanchorelement_noopener.html]
type: testharness
expected: TIMEOUT
[Check that targeting of rel=noopener with a given name ignores an existing window with that name]
expected: NOTRUN
@ -14,4 +13,4 @@
expected: FAIL
[Check that rel=noopener with target=_self does a normal load]
expected: NOTRUN
expected: FAIL

View file

@ -1,2 +0,0 @@
[popover-animated-hide-display.html]
expected: TIMEOUT

View file

@ -1,2 +0,0 @@
[popover-animated-hide-finishes.html]
expected: TIMEOUT

View file

@ -1,2 +0,0 @@
[popover-animated-show-display.html]
expected: TIMEOUT

View file

@ -1,24 +0,0 @@
[popover-animation-corner-cases.html]
[Descendent animations should keep the pop up visible until the animation ends]
expected: FAIL
[Pre-existing animations should *not* keep the pop up visible until the animation ends]
expected: FAIL
[It should be possible to use the "beforetoggle" event handler to animate the hide]
expected: FAIL
[It should be possible to use the "beforetoggle" event handler to animate the hide, even when the hide is due to dialog.showModal]
expected: FAIL
[toggle event cannot be cancelled]
expected: FAIL
[Closing animations are triggered by changing the popover type]
expected: FAIL
[animation finish/cancel events must be trusted in order to finish closing the popover.]
expected: FAIL
[Capturing event listeners can't affect popover animations.]
expected: FAIL

View file

@ -1,3 +0,0 @@
[DOMContentLoaded-defer.html]
[The end: DOMContentLoaded and defer scripts]
expected: FAIL

View file

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

View file

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

View file

@ -1,16 +1,16 @@
[promise-job-entry-different-function-realm.html]
expected: TIMEOUT
[Fulfillment handler on fulfilled promise]
expected: FAIL
expected: TIMEOUT
[Rejection handler on pending-then-rejected promise]
expected: TIMEOUT
expected: FAIL
[Thenable resolution]
expected: FAIL
expected: TIMEOUT
[Rejection handler on rejected promise]
expected: FAIL
expected: TIMEOUT
[Fulfillment handler on pending-then-fulfilled promise]
expected: TIMEOUT
expected: FAIL

View file

@ -0,0 +1,3 @@
[a-element-origin-xhtml.xhtml]
[Parsing origin: <http://[::127.0.0.1.\]> against <http://example.org/foo/bar>]
expected: FAIL

View file

@ -0,0 +1,3 @@
[a-element-origin.html]
[Parsing origin: <http://[::127.0.0.1.\]> against <http://example.org/foo/bar>]
expected: FAIL

View file

@ -304,6 +304,9 @@
[Parsing: <path> against <non-spec:/..//p>]
expected: FAIL
[Parsing: <http://[::127.0.0.1.\]> against <http://example.org/foo/bar>]
expected: FAIL
[a-element-xhtml.xhtml?include=javascript]

View file

@ -307,3 +307,6 @@
[Parsing: <path> against <non-spec:/..//p>]
expected: FAIL
[Parsing: <http://[::127.0.0.1.\]> against <http://example.org/foo/bar>]
expected: FAIL

View file

@ -553,6 +553,9 @@
[Parsing: <path> against <non-spec:/..//p>]
expected: FAIL
[Parsing: <http://[::127.0.0.1.\]> against <http://example.org/foo/bar>]
expected: FAIL
[url-constructor.any.html?include=file]
[Parsing: </> against <file://h/C:/a/b>]
@ -705,5 +708,8 @@
[Parsing: <path> against <non-spec:/..//p>]
expected: FAIL
[Parsing: <http://[::127.0.0.1.\]> against <http://example.org/foo/bar>]
expected: FAIL
[url-constructor.any.worker.html?include=javascript]

View file

@ -0,0 +1,8 @@
[url-origin.any.html]
[Origin parsing: <http://[::127.0.0.1.\]> against <http://example.org/foo/bar>]
expected: FAIL
[url-origin.any.worker.html]
[Origin parsing: <http://[::127.0.0.1.\]> against <http://example.org/foo/bar>]
expected: FAIL

View file

@ -1,16 +1,4 @@
[basic.tentative.any.worker.html]
[Wasm function throws argument]
expected: FAIL
[Wasm function throws null]
expected: FAIL
[Wasm function throws integer]
expected: FAIL
[Imported JS function throws]
expected: FAIL
[basic.tentative.any.sharedworker.html]
expected: ERROR
@ -19,14 +7,3 @@
expected: ERROR
[basic.tentative.any.html]
[Wasm function throws argument]
expected: FAIL
[Wasm function throws null]
expected: FAIL
[Wasm function throws integer]
expected: FAIL
[Imported JS function throws]
expected: FAIL

View file

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

View file

@ -0,0 +1,3 @@
[scrollBy.html]
[Ensure that the window.scrollBy function affects scroll position as expected]
expected: FAIL

View file

@ -6,7 +6,8 @@
// Helper function that triggers garbage collection while reading a chunk
// if perform_gc is true.
async function read_and_gc(reader, perform_gc) {
const read_promise = reader.read();
// Passing Uint8Array for byte streams; non-byte streams will simply ignore it
const read_promise = reader.read(new Uint8Array(64));
if (perform_gc) {
await garbageCollect();
}
@ -16,10 +17,10 @@ async function read_and_gc(reader, perform_gc) {
// Takes in a ReadableStream and reads from it until it is done, returning
// an array that contains the results of each read operation. If perform_gc
// is true, garbage collection is triggered while reading every chunk.
async function read_all_chunks(stream, perform_gc = false) {
async function read_all_chunks(stream, { perform_gc = false, mode } = {}) {
assert_true(stream instanceof ReadableStream);
assert_true('getReader' in stream);
const reader = stream.getReader();
const reader = stream.getReader({ mode });
assert_true('read' in reader);
let read_value = await read_and_gc(reader, perform_gc);
@ -67,7 +68,16 @@ promise_test(async() => {
const stream = blob.stream();
blob = null;
await garbageCollect();
const chunks = await read_all_chunks(stream, /*perform_gc=*/true);
const chunks = await read_all_chunks(stream, { perform_gc: true });
assert_array_equals(chunks, input_arr);
}, "Blob.stream() garbage collection of blob shouldn't break stream" +
"consumption")
promise_test(async () => {
const input_arr = [8, 241, 48, 123, 151];
const typed_arr = new Uint8Array(input_arr);
let blob = new Blob([typed_arr]);
const stream = blob.stream();
const chunks = await read_all_chunks(stream, { mode: "byob" });
assert_array_equals(chunks, input_arr);
}, "Reading Blob.stream() with BYOB reader")

View file

@ -0,0 +1,10 @@
<!DOCTYPE html>
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
<p>The word "PASS" should be seen below.</p>
<div style="position:absolute; background:blue;">
<iframe src="data:text/html,PASS" style="width:8em; height:3em; background:yellow;"></iframe>
</div>
<p style="break-before:page;">
Apart from this text, there should be nothing on this page.
</p>

View file

@ -0,0 +1,12 @@
<!DOCTYPE html>
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1414873">
<link rel="match" href="fixedpos-with-iframe-print-ref.html">
<p>The word "PASS" should be seen below.</p>
<div style="position:fixed; background:blue;">
<iframe src="data:text/html,PASS" style="width:8em; height:3em; background:yellow;"></iframe>
</div>
<p style="break-before:page; position:relative; z-index:1; height:8em; background:white;">
Apart from this text, there should be nothing on this page.
</p>

View file

@ -3,10 +3,10 @@
<link rel="match" href="overflow-overlay-ref.html">
<style>
div {
width: 15em;
height: 10em;
overflow: overlay;
}
width: 15em;
height: 10em;
overflow: overlay;
}
</style>
<div>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>

View file

@ -0,0 +1,40 @@
<!DOCTYPE html>
<style>
.container {
width: 100px;
height: 100px;
overflow-y: scroll;
background: lightgreen;
display: inline-block;
}
</style>
<div class="container">
<div style="height: calc(300px + 50px + 10.10px);"></div>
</div>
<div class="container">
<div style="height: calc(300px + 50px + 10.25px);"></div>
</div>
<div class="container">
<div style="height: calc(300px + 50px + 10.50px);"></div>
</div>
<div class="container">
<div style="height: calc(300px + 50px + 10.75px);"></div>
</div>
<div class="container">
<div style="height: calc(300px + 50px + 10.90px);"></div>
</div>
<script>
window.onload = function() {
var containers = document.getElementsByClassName('container');
for (let i = 0; i < containers.length; i++) {
containers[i].scrollTo(0, 20);
}
};
</script>
</html>

View file

@ -0,0 +1,80 @@
<!DOCTYPE html>
<html class="reftest-wait">
<link rel="help" href="https://www.w3.org/TR/css-position-3/#sticky-pos" />
<meta name="assert" content="Position sticky with a fractional offset should not show a gap" />
<link rel="match" href="position-sticky-fractional-offset-ref.html" />
<style>
.sticky-container {
width: 100px;
height: 100px;
overflow-y: scroll;
background: red;
display: inline-block;
}
.sticky {
position: sticky;
top: 0;
height: 50px;
background: lightgreen;
}
.force-scroll {
height: 300px;
background: lightgreen;
}
</style>
<div class="sticky-container">
<div style="height: 10.10px;"></div>
<div class="sticky"></div>
<div class="force-scroll"></div>
</div>
<div class="sticky-container">
<div style="height: 10.25px;"></div>
<div class="sticky"></div>
<div class="force-scroll"></div>
</div>
<div class="sticky-container">
<div style="height: 10.50px;"></div>
<div class="sticky"></div>
<div class="force-scroll"></div>
</div>
<div class="sticky-container">
<div style="height: 10.75px;"></div>
<div class="sticky"></div>
<div class="force-scroll"></div>
</div>
<div class="sticky-container">
<div style="height: 10.90px;"></div>
<div class="sticky"></div>
<div class="force-scroll"></div>
</div>
<script>
window.onload = function() {
// Start with all containers scrolled to the top.
var containers = document.getElementsByClassName('sticky-container');
for (let i = 0; i < containers.length; i++) {
containers[i].scrollTo(0, 0);
}
// Wait for a full frame, then scroll all containers down so the sticky
// elements are stuck to the container. There should be no visible gap
// where the container's red background color is visible.
requestAnimationFrame(() => {
requestAnimationFrame(() => {
for (let i = 0; i < containers.length; i++) {
containers[i].scrollTo(0, 20);
}
document.documentElement.classList.remove('reftest-wait');
});
});
};
</script>
</html>

View file

@ -37,7 +37,7 @@ test_math_used('calc(atan(tan(0.7853975rad ) ))', '45deg', {type:'angle', approx
test_math_used('calc(atan(tan(3.14159 / 4 + 1 - 1) ))', '45deg', {type:'angle', approx:0.1});
test_math_used('calc(asin(sin(0.25turn)) )', '90deg', {type:'angle', approx:0.1});
test_math_used('calc(atan2(0,1))', '0deg', {type:'angle', approx:0.1});
test_math_used('calc(atan2(0,-1))', '-180deg', {type:'angle', approx:0.1});
test_math_used('calc(atan2(0,-1) / 4)', '45deg', {type:'angle', approx:0.1}); // atan2(0,-1) equals 180deg, result is divided to avoid ambiguity with -180deg
test_math_used('calc(atan2(1,-1))', '135deg', {type:'angle', approx:0.1});
test_math_used('calc(atan2(-1,1))', '-45deg', {type:'angle', approx:0.1});

View file

@ -46,14 +46,14 @@ test_angle_equals('min(270deg, max(0.25turn, 3.14rad))', '3.14rad');
test_angle_equals('max(0.25turn, min(270deg, 3.14rad))', '3.14rad');
// General calculations
test_angle_equals('calc(min(90deg, 1.58rad) + 0.25turn)', '180deg');
test_angle_equals('calc(min(90deg, 1.58rad) + 0.125turn)', '135deg');
test_angle_equals('calc(min(90deg, 1.58rad) - 0.125turn)', '45deg');
test_angle_equals('calc(min(90deg, 1.58rad) * 2', '180deg');
test_angle_equals('calc(min(90deg, 1.58rad) * 1.5', '135deg');
test_angle_equals('calc(min(90deg, 1.58rad) / 2', '45deg');
test_angle_equals('calc(max(90deg, 1.56rad) + 0.25turn)', '180deg');
test_angle_equals('calc(max(90deg, 1.56rad) + 0.125turn', '135deg');
test_angle_equals('calc(max(90deg, 1.56rad) - 0.125turn)', '45deg');
test_angle_equals('calc(max(90deg, 1.56rad) * 2', '180deg');
test_angle_equals('calc(max(90deg, 1.56rad) * 1.5', '135deg');
test_angle_equals('calc(max(90deg, 1.56rad) / 2', '45deg');
test_angle_equals('calc(min(90deg, 1.58rad) + max(0.25turn, 99grad))', '180deg');
test_angle_equals('calc(min(90deg, 1.58rad) + max(0.125turn, 49grad))', '135deg');
test_angle_equals('calc(min(90deg, 1.58rad) - max(0.25turn, 99grad))', '0deg');
</script>

View file

@ -0,0 +1,19 @@
<!DOCTYPE html>
<html>
<head>
<title>View transitions: iframe transition to scrollbar (ref)</title>
<link rel="help" href="https://github.com/WICG/view-transitions">
<link rel="author" href="mailto:bokan@chromium.org">
<style>
iframe {
width: 50vw;
height: 50vh;
}
</style>
</head>
<body>
<iframe src="support/iframe-scrollbar-child.html?scrollbar">
</iframe>
</body>
</html>

View file

@ -0,0 +1,37 @@
<!DOCTYPE html>
<html class=reftest-wait>
<head>
<title>View transitions: iframe transition to scrollbar</title>
<link rel="help" href="https://github.com/WICG/view-transitions">
<link rel="author" href="mailto:bokan@chromium.org">
<link rel="match" href="iframe-new-has-scrollbar-ref.html">
<meta name=fuzzy content="iframe-new-has-scrollbar-ref.html:0-80;0-500">
<script src="/common/reftest-wait.js"></script>
<style>
iframe {
width: 50vw;
height: 50vh;
}
</style>
<script>
onload = () => {
requestAnimationFrame(()=>{requestAnimationFrame(()=> {
frames[0].window.startTransition();
frames[0].window.transition.ready.then(() => {
requestAnimationFrame(()=>{requestAnimationFrame(()=> {
// Expect that the scrollbar should appear immediately, even though
// the new snapshot isn't visible (since the scrollbar isn't part
// of the snapshot).
takeScreenshot();
})});
});
})});
}
</script>
</head>
<body>
<iframe src="support/iframe-scrollbar-child.html">
</iframe>
</body>
</html>

View file

@ -0,0 +1,19 @@
<!DOCTYPE html>
<html>
<head>
<title>View transitions: iframe transition from scrollbar (ref)</title>
<link rel="help" href="https://github.com/WICG/view-transitions">
<link rel="author" href="mailto:bokan@chromium.org">
<style>
iframe {
width: 50vw;
height: 50vh;
}
</style>
</head>
<body>
<iframe src="support/iframe-scrollbar-child.html">
</iframe>
</body>
</html>

View file

@ -0,0 +1,36 @@
<!DOCTYPE html>
<html class=reftest-wait>
<head>
<title>View transitions: iframe transition from scrollbar</title>
<link rel="help" href="https://github.com/WICG/view-transitions">
<link rel="author" href="mailto:bokan@chromium.org">
<link rel="match" href="iframe-old-has-scrollbar-ref.html">
<meta name=fuzzy content="iframe-old-has-scrollbar-ref.html:0-80;0-500">
<script src="/common/reftest-wait.js"></script>
<style>
iframe {
width: 50vw;
height: 50vh;
}
</style>
<script>
onload = () => {
requestAnimationFrame(()=>{requestAnimationFrame(()=> {
frames[0].window.startTransition();
frames[0].window.transition.ready.then(() => {
requestAnimationFrame(()=>{requestAnimationFrame(()=> {
// Expect that the scrollbar should disappear immediately since it
// isn't part of the snapshot.
takeScreenshot();
})});
});
})});
}
</script>
</head>
<body>
<iframe src="support/iframe-scrollbar-child.html?scrollbar">
</iframe>
</body>
</html>

View file

@ -3,6 +3,8 @@
<head>
<style>
body {
/* We need a background due to https://crbug.com/1414158. */
background-color: white;
height: 200vh;
}

View file

@ -0,0 +1,44 @@
<!DOCTYPE html>
<html>
<head>
<style>
body.scrollable {
width: 200lvw;
height: 200lvh;
}
div {
width: 200px;
height: 200px;
background-color: skyblue;
}
::view-transition-new(*) {
animation-duration: 30s;
opacity: 0;
}
::view-transition-old(*) {
animation: unset;
opacity: 1;
}
*/
</style>
<script>
function startTransition() {
window.transition = document.startViewTransition(() => {
document.body.classList.toggle('scrollable');
});
}
onload = () => {
const params = new URLSearchParams(window.location.search);
if (params.has('scrollbar')) {
document.body.classList.add('scrollable');
}
}
</script>
</head>
<body>
<div></div>
</body>
</html>

View file

@ -33,7 +33,7 @@ installed for the user only:
```bash
python -m ensurepip --user
export PATH="$PATH:$HOME/Library/Python/2.7/bin"
export PATH="$PATH:$( python3 -m site --user-base )/bin"
pip install --user virtualenv
```

View file

@ -635,6 +635,23 @@ async function workerFetchTest(t, { source, target, expected }) {
assert_equals(message, expected.message, "response body");
}
async function workerBlobFetchTest(t, { source, target, expected }) {
const targetUrl = preflightUrl(target);
const fetcherUrl = resolveUrl(
'resources/worker-blob-fetcher.html', sourceResolveOptions(source));
const reply = futureMessage();
const iframe = await appendIframe(t, document, fetcherUrl);
iframe.contentWindow.postMessage({ url: targetUrl.href }, "*");
const { error, status, message } = await reply;
assert_equals(error, expected.error, "fetch error");
assert_equals(status, expected.status, "response status");
assert_equals(message, expected.message, "response body");
}
async function sharedWorkerFetchTest(t, { source, target, expected }) {
const targetUrl = preflightUrl(target);

View file

@ -0,0 +1,45 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>Worker Fetcher</title>
<script>
window.addEventListener("message", function (evt) {
const { url } = evt.data;
const workerScriptContent = `
async function doFetch(url) {
const response = await fetch(url);
const body = await response.text();
return {
status: response.status,
body,
};
}
async function fetchAndPost(url) {
try {
const message = await doFetch(url);
self.postMessage(message);
} catch(e) {
self.postMessage({ error: e.name });
}
}
fetchAndPost("${url}");
`;
const blob =
new Blob([workerScriptContent], {type: 'application/javascript'});
const workerScriptUrl = URL.createObjectURL(blob);
const worker = new Worker(workerScriptUrl);
URL.revokeObjectURL(workerScriptUrl);
worker.addEventListener("message", (evt) => {
parent.postMessage(evt.data, "*");
});
worker.addEventListener("error", (evt) => {
parent.postMessage({ error: evt.message || "unknown error" }, "*");
});
});
</script>

View file

@ -0,0 +1,143 @@
// META: script=/common/utils.js
// META: script=resources/support.sub.js
//
// Spec: https://wicg.github.io/private-network-access/#integration-fetch
//
// These tests check that fetches from within `Worker` scripts loaded from blob
// URLs are subject to Private Network Access checks, just like fetches from
// within documents.
//
// This file covers only those tests that must execute in a non-secure context.
// Other tests are defined in: worker-fetch.https.window.js
promise_test(t => workerBlobFetchTest(t, {
source: { server: Server.HTTP_LOCAL },
target: { server: Server.HTTP_LOCAL },
expected: WorkerFetchTestResult.SUCCESS,
}), "local to local: success.");
promise_test(t => workerBlobFetchTest(t, {
source: { server: Server.HTTP_PRIVATE },
target: {
server: Server.HTTP_LOCAL,
behavior: {
preflight: PreflightBehavior.optionalSuccess(token()),
response: ResponseBehavior.allowCrossOrigin(),
},
},
expected: WorkerFetchTestResult.FAILURE,
}), "private to local: failure.");
promise_test(t => workerBlobFetchTest(t, {
source: { server: Server.HTTP_PRIVATE },
target: { server: Server.HTTP_PRIVATE },
expected: WorkerFetchTestResult.SUCCESS,
}), "private to private: success.");
promise_test(t => workerBlobFetchTest(t, {
source: { server: Server.HTTP_PUBLIC },
target: {
server: Server.HTTP_LOCAL,
behavior: {
preflight: PreflightBehavior.optionalSuccess(token()),
response: ResponseBehavior.allowCrossOrigin(),
},
},
expected: WorkerFetchTestResult.FAILURE,
}), "public to local: failure.");
promise_test(t => workerBlobFetchTest(t, {
source: { server: Server.HTTP_PUBLIC },
target: {
server: Server.HTTP_PRIVATE,
behavior: {
preflight: PreflightBehavior.optionalSuccess(token()),
response: ResponseBehavior.allowCrossOrigin(),
},
},
expected: WorkerFetchTestResult.FAILURE,
}), "public to private: failure.");
promise_test(t => workerBlobFetchTest(t, {
source: { server: Server.HTTP_PUBLIC },
target: { server: Server.HTTP_PUBLIC },
expected: WorkerFetchTestResult.SUCCESS,
}), "public to public: success.");
promise_test(t => workerBlobFetchTest(t, {
source: {
server: Server.HTTP_LOCAL,
treatAsPublic: true,
},
target: {
server: Server.HTTP_LOCAL,
behavior: { preflight: PreflightBehavior.optionalSuccess(token()) },
},
expected: WorkerFetchTestResult.FAILURE,
}), "treat-as-public to local: failure.");
promise_test(t => workerBlobFetchTest(t, {
source: {
server: Server.HTTP_LOCAL,
treatAsPublic: true,
},
target: {
server: Server.HTTP_PRIVATE,
behavior: {
preflight: PreflightBehavior.optionalSuccess(token()),
response: ResponseBehavior.allowCrossOrigin(),
},
},
expected: WorkerFetchTestResult.FAILURE,
}), "treat-as-public to private: failure.");
promise_test(t => workerBlobFetchTest(t, {
source: {
server: Server.HTTP_LOCAL,
treatAsPublic: true,
},
target: {
server: Server.HTTP_PUBLIC,
behavior: { response: ResponseBehavior.allowCrossOrigin() },
},
expected: WorkerFetchTestResult.SUCCESS,
}), "treat-as-public to public: success.");
// The following tests verify that workers served over HTTPS are not allowed to
// make private network requests because they are not secure contexts.
promise_test(t => workerBlobFetchTest(t, {
source: { server: Server.HTTPS_PRIVATE },
target: {
server: Server.HTTP_LOCAL,
behavior: {
preflight: PreflightBehavior.success(token()),
response: ResponseBehavior.allowCrossOrigin(),
},
},
expected: WorkerFetchTestResult.FAILURE,
}), "private https to local: failure.");
promise_test(t => workerBlobFetchTest(t, {
source: { server: Server.HTTPS_PUBLIC },
target: {
server: Server.HTTP_PRIVATE,
behavior: {
preflight: PreflightBehavior.success(token()),
response: ResponseBehavior.allowCrossOrigin(),
},
},
expected: WorkerFetchTestResult.FAILURE,
}), "public https to private: failure.");
promise_test(t => workerBlobFetchTest(t, {
source: { server: Server.HTTPS_PUBLIC },
target: {
server: Server.HTTP_LOCAL,
behavior: {
preflight: PreflightBehavior.success(token()),
response: ResponseBehavior.allowCrossOrigin(),
},
},
expected: WorkerFetchTestResult.FAILURE,
}), "public https to local: failure.");

View file

@ -1,7 +1,8 @@
<!DOCTYPE html>
<meta charset="utf-8">
<link rel=author href="mailto:xiaochengh@chromium.org">
<link rel=help href="https://open-ui.org/components/popup.research.explainer">
<link rel=help href="https://open-ui.org/components/popover.research.explainer">
<link rel=help href="https://html.spec.whatwg.org/multipage/popover.html">
<link rel=match href="popover-anchor-change-display-ref.html">
<script src="resources/popover-utils.js"></script>

View file

@ -2,7 +2,8 @@
<meta charset="utf-8">
<title>Tests that a popover can be anchored to an unrendered element.</title>
<link rel=author href="mailto:xiaochengh@chromium.org">
<link rel=help href="https://open-ui.org/components/popup.research.explainer">
<link rel=help href="https://open-ui.org/components/popover.research.explainer">
<link rel=help href="https://html.spec.whatwg.org/multipage/popover.html">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>

View file

@ -1,7 +1,8 @@
<!DOCTYPE html>
<meta charset="utf-8">
<link rel=author href="mailto:masonf@chromium.org">
<link rel=help href="https://open-ui.org/components/popup.research.explainer">
<link rel=help href="https://open-ui.org/components/popover.research.explainer">
<link rel=help href="https://html.spec.whatwg.org/multipage/popover.html">
<link rel=match href="popover-anchor-display-ref.html">
<link rel=stylesheet href="/fonts/ahem.css">
<script src="resources/popover-utils.js"></script>

View file

@ -1,7 +1,8 @@
<!DOCTYPE html>
<meta charset="utf-8">
<link rel="author" href="mailto:masonf@chromium.org">
<link rel=help href="https://open-ui.org/components/popup.research.explainer">
<link rel=help href="https://open-ui.org/components/popover.research.explainer">
<link rel=help href="https://html.spec.whatwg.org/multipage/popover.html">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>

View file

@ -1,7 +1,8 @@
<!DOCTYPE html>
<meta charset="utf-8">
<link rel=author href="mailto:xiaochengh@chromium.org">
<link rel=help href="https://open-ui.org/components/popup.research.explainer">
<link rel=help href="https://open-ui.org/components/popover.research.explainer">
<link rel=help href="https://html.spec.whatwg.org/multipage/popover.html">
<button id=main-menu-button>Show menu</button>

View file

@ -1,7 +1,8 @@
<!DOCTYPE html>
<meta charset="utf-8">
<link rel=author href="mailto:xiaochengh@chromium.org">
<link rel=help href="https://open-ui.org/components/popup.research.explainer">
<link rel=help href="https://open-ui.org/components/popover.research.explainer">
<link rel=help href="https://html.spec.whatwg.org/multipage/popover.html">
<link rel=match href="popover-anchor-nested-display-ref.html">
<button id=main-menu-button popovertoggletarget=main-menu>Show menu</button>

View file

@ -2,7 +2,8 @@
<meta charset="utf-8" />
<title>Popover anchor nesting</title>
<link rel="author" href="mailto:masonf@chromium.org">
<link rel=help href="https://open-ui.org/components/popup.research.explainer">
<link rel=help href="https://open-ui.org/components/popover.research.explainer">
<link rel=help href="https://html.spec.whatwg.org/multipage/popover.html">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>

View file

@ -2,7 +2,8 @@
<html class="reftest-wait">
<meta charset="utf-8">
<link rel=author href="mailto:xiaochengh@chromium.org">
<link rel=help href="https://open-ui.org/components/popup.research.explainer">
<link rel=help href="https://open-ui.org/components/popover.research.explainer">
<link rel=help href="https://html.spec.whatwg.org/multipage/popover.html">
<link rel=match href="popover-anchor-scroll-display-ref.html">
<div class=spacer style="height: 200px"></div>

View file

@ -1,26 +0,0 @@
<!DOCTYPE html>
<link rel="stylesheet" href="resources/popover-styles.css">
<div class=topmost></div>
<div class=fake-popover>This is a popover</div>
<style>
.fake-popover {
width: 100px;
height: 100px;
margin: 1em;
/* The animated property */
left: 100px;
}
.topmost {
position:fixed;
top:0;
left:0;
width:1000px;
height:1000px;
background:green;
margin:0;
padding:0;
}
</style>

View file

@ -1,98 +0,0 @@
<!DOCTYPE html>
<meta charset="utf-8">
<link rel=author href="mailto:masonf@chromium.org">
<link rel=help href="https://open-ui.org/components/popup.research.explainer">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-actions.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="resources/popover-utils.js"></script>
<script src="/common/gc.js"></script>
<dialog>I am a dialog</dialog>
<style>
[popover].animation {
left: 0px;
}
[popover].animation:open {
animation: move 1000s;
}
@keyframes move {
from { left: 0px; }
to { left: 200px; }
}
[popover].transition {
opacity: 0;
transition: opacity 5s;
}
[popover].transition:open {
opacity: 1;
}
[popover] {
top: 200px;
}
[popover]::backdrop {
background-color: rgba(255,0,0,0.2);
}
</style>
<script>
function rAF() {
return new Promise(resolve => requestAnimationFrame(resolve));
}
function addPopover(classname) {
const popover = document.createElement('div');
popover.popover = 'auto';
popover.classList = classname;
popover.textContent = 'This is a popover';
document.body.appendChild(popover);
return popover;
}
promise_test(async () => {
let popover = addPopover("animation");
let dialog = document.querySelector('dialog');
popover.showPopover(); // No animations here
await rAF();
popover.hidePopover(); // Start animations
await rAF();
popover.remove();
await garbageCollect();
await rAF();
// This test passes if it does not crash.
},'Ensure no crashes if running animations are immediately cancelled (document removal)');
promise_test(async (t) => {
let popover = addPopover("animation");
let dialog = document.querySelector('dialog');
popover.showPopover(); // No animations here
await rAF();
popover.hidePopover(); // Start animations
await rAF();
dialog.showModal(); // Immediately hide popover
t.add_cleanup(() => dialog.close());
await rAF();
popover.remove();
await garbageCollect();
await rAF();
// This test passes if it does not crash.
},'Ensure no crashes if running animations are immediately cancelled (dialog showModal)');
promise_test(async (t) => {
let popover = addPopover("transition");
let dialog = document.querySelector('dialog');
let button = document.createElement('button');
t.add_cleanup(() => {popover.remove();button.remove();});
document.body.appendChild(button);
button.addEventListener('click',() => dialog.show());
popover.showPopover(); // No animations here
await rAF();
await clickOn(button);
await rAF();
// This test passes if it does not crash.
},'Ensure no crashes if running transitions are immediately cancelled (button click)');
</script>

View file

@ -1,57 +0,0 @@
<!DOCTYPE html>
<html class="reftest-wait">
<meta charset="utf-8">
<link rel=author href="mailto:masonf@chromium.org">
<link rel=help href="https://open-ui.org/components/popup.research.explainer">
<link rel=match href="popover-animated-display-ref.html">
<div popover>This is a popover</div>
<div class=topmost></div>
<style>
[popover] {
width: 100px;
height: 100px;
margin: 1em;
left: 0;
transition: left 20s steps(2, jump-end) -10s;
}
[popover]:open {
left: 200px;
}
.topmost {
position:fixed;
z-index: 999999;
top:0;
left:0;
width:1000px;
height:1000px;
background:green;
margin:0;
padding:0;
}
</style>
<script>
window.onload = () => {
requestAnimationFrame(() => {
requestAnimationFrame(() => {
// This will show the popover, hide the popover, and start the transition.
const popover = document.querySelector('[popover]');
popover.showPopover();
popover.getAnimations()[0].finish();
if (getComputedStyle(popover).left != "200px")
popover.remove();
popover.hidePopover();
document.getAnimations()[0].ready.then(() => {
requestAnimationFrame(() => {
requestAnimationFrame(() => {
// Take a screenshot now.
document.documentElement.classList.remove('reftest-wait');
});
});
});
});
});
}
</script>

View file

@ -1,16 +0,0 @@
<!DOCTYPE html>
<div class=topmost></div>
<style>
.topmost {
position:fixed;
top:0;
left:0;
width:1000px;
height:1000px;
background:green;
margin:0;
padding:0;
}
</style>

View file

@ -1,56 +0,0 @@
<!DOCTYPE html>
<html class="reftest-wait">
<meta charset="utf-8">
<link rel=author href="mailto:masonf@chromium.org">
<link rel=help href="https://open-ui.org/components/popup.research.explainer">
<link rel=match href="popover-animated-hide-finishes-ref.html">
<div popover>This is a popover</div>
<div class=topmost></div>
<style>
[popover] {
width: 100px;
height: 100px;
margin: 1em;
left: 0;
/* Immediate transition: */
transition: left 1s -1s;
}
[popover]:open {
left: 200px;
}
[popover]::backdrop {
background-color: red;
}
.topmost {
position:fixed;
z-index: 999999;
top:0;
left:0;
width:1000px;
height:1000px;
background:green;
margin:0;
padding:0;
}
</style>
<script>
window.onload = () => {
requestAnimationFrame(() => {
requestAnimationFrame(() => {
// This will show the popover, hide the popover, and start the hide transition,
// which should immediately finish.
document.querySelector('[popover]').showPopover();
document.querySelector('[popover]').hidePopover();
requestAnimationFrame(() => {
requestAnimationFrame(() => {
// Take a screenshot now.
document.documentElement.classList.remove('reftest-wait');
});
});
});
});
}
</script>

View file

@ -1,52 +0,0 @@
<!DOCTYPE html>
<html class="reftest-wait">
<meta charset="utf-8">
<link rel=author href="mailto:masonf@chromium.org">
<link rel=help href="https://open-ui.org/components/popup.research.explainer">
<link rel=match href="popover-animated-display-ref.html">
<div popover>This is a popover</div>
<div class=topmost></div>
<style>
[popover] {
width: 100px;
height: 100px;
margin: 1em;
left: 0;
transition: left 20s steps(2, jump-end) -10s;
}
[popover]:open {
left: 200px;
}
.topmost {
position:fixed;
z-index: 999999;
top:0;
left:0;
width:1000px;
height:1000px;
background:green;
margin:0;
padding:0;
}
</style>
<script>
window.onload = () => {
requestAnimationFrame(() => {
requestAnimationFrame(() => {
// This will show the popover, and start the transition.
document.querySelector('[popover]').showPopover();
document.getAnimations()[0].ready.then(() => {
requestAnimationFrame(() => {
requestAnimationFrame(() => {
// Take a screenshot now.
document.documentElement.classList.remove('reftest-wait');
});
});
});
});
});
}
</script>

View file

@ -1,230 +0,0 @@
<!DOCTYPE html>
<meta charset="utf-8">
<link rel=author href="mailto:masonf@chromium.org">
<link rel=help href="https://open-ui.org/components/popup.research.explainer">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/popover-utils.js"></script>
<body>
<style>
.animation { opacity: 0; }
.animation:open { opacity: 1; }
.animation:not(:open) { animation: fade-out 1000s; }
@keyframes fade-out {
from { opacity: 1; }
to { opacity: 0; }
}
.animation>div>div { left: 0; }
.animation:not(:open)>div>div { animation: rotate 1000s; color:red;}
@keyframes rotate {
from { transform: rotate(0); }
to { transform: rotate(360deg); }
}
[popover] { top: 200px; }
[popover]::backdrop { background-color: rgba(255,0,0,0.2); }
</style>
<script>
function createPopover(t,type) {
const popover = document.createElement('div');
popover.popover = 'auto';
popover.classList = type;
const div = document.createElement('div');
const descendent = div.appendChild(document.createElement('div'));
descendent.appendChild(document.createTextNode("Descendent element"));
popover.append("This is a pop up",div);
document.body.appendChild(popover);
t.add_cleanup(() => popover.remove());
return {popover, descendent};
}
promise_test(async (t) => {
const {popover, descendent} = createPopover(t,'animation');
assert_false(isElementVisible(popover));
assert_equals(descendent.parentElement.parentElement,popover);
assert_true(popover.matches(':closed'));
assert_false(popover.matches(':open'));
popover.showPopover();
assert_false(popover.matches(':closed'));
assert_true(popover.matches(':open'));
assert_true(isElementVisible(popover));
assert_equals(popover.getAnimations({subtree: true}).length,0);
popover.hidePopover();
const animations = popover.getAnimations({subtree: true});
assert_equals(animations.length,2,'There should be two animations running');
assert_false(popover.matches(':open'),'popover should not match :open as soon as hidden');
assert_false(popover.matches(':closed'),'popover should not match :closed until animations complete');
assert_true(isElementVisible(popover),'but animations should keep the popover visible');
assert_true(isElementVisible(descendent),'The descendent should also be visible');
await waitForRender();
await waitForRender();
assert_equals(popover.getAnimations({subtree: true}).length,2,'The animations should still be running');
assert_true(isElementVisible(popover),'Popover should still be visible due to animation');
animations.forEach(animation => animation.finish()); // Force the animations to finish
await waitForRender(); // Wait one frame
assert_true(popover.matches(':closed'),'The pop up should now match :closed');
assert_false(popover.matches(':open'),'The pop up still shouldn\'t match :open');
assert_false(isElementVisible(popover),'The pop up should now be invisible');
assert_false(isElementVisible(descendent),'The descendent should also be invisible');
assert_equals(popover.getAnimations({subtree: true}).length,0);
},'Descendent animations should keep the pop up visible until the animation ends');
promise_test(async (t) => {
const {popover, descendent} = createPopover(t,'');
assert_equals(popover.classList.length, 0);
assert_false(isElementVisible(popover));
popover.showPopover();
assert_true(popover.matches(':open'));
assert_true(isElementVisible(popover));
assert_equals(popover.getAnimations({subtree: true}).length,0);
// Start an animation on the popover and its descendent.
popover.animate([{opacity: 1},{opacity: 0}],{duration: 1000000,iterations: 1});
descendent.animate([{transform: 'rotate(0)'},{transform: 'rotate(360deg)'}],1000000);
assert_equals(popover.getAnimations({subtree: true}).length,2);
// Then hide the popover.
popover.hidePopover();
assert_false(popover.matches(':open'),'pop up should not match :open as soon as hidden');
assert_true(popover.matches(':closed'),'pop up should match :closed immediately');
assert_equals(popover.getAnimations({subtree: true}).length,2,'animations should still be running');
await waitForRender();
assert_equals(popover.getAnimations({subtree: true}).length,2,'animations should still be running');
assert_false(isElementVisible(popover),'Pre-existing animations should not keep the pop up visible');
},'Pre-existing animations should *not* keep the pop up visible until the animation ends');
promise_test(async (t) => {
const {popover, descendent} = createPopover(t,'');
popover.showPopover();
assert_true(isElementVisible(popover));
assert_equals(popover.getAnimations({subtree: true}).length,0);
let animation;
popover.addEventListener('beforetoggle', (e) => {
if (e.newState !== "closed")
return;
animation = popover.animate([{opacity: 1},{opacity: 0}],1000000);
});
assert_equals(popover.getAnimations({subtree: true}).length,0,'There should be no animations yet');
popover.hidePopover();
assert_equals(popover.getAnimations({subtree: true}).length,1,'the hide animation should now be running');
assert_true(!!animation);
assert_true(isElementVisible(popover),'The animation should keep the popover visible');
animation.finish();
await waitForRender();
assert_false(isElementVisible(popover),'Once the animation ends, the popover is hidden');
},'It should be possible to use the "beforetoggle" event handler to animate the hide');
promise_test(async (t) => {
const {popover, descendent} = createPopover(t,'');
const dialog = document.body.appendChild(document.createElement('dialog'));
t.add_cleanup(() => dialog.remove());
popover.showPopover();
assert_true(isElementVisible(popover));
assert_equals(popover.getAnimations({subtree: true}).length,0);
let animation;
popover.addEventListener('beforetoggle', (e) => {
if (e.newState !== "closed")
return;
animation = popover.animate([{opacity: 1},{opacity: 0}],1000000);
});
assert_equals(popover.getAnimations({subtree: true}).length,0,'There should be no animations yet');
dialog.showModal(); // Force hide the popover
await waitForRender();
assert_equals(popover.getAnimations({subtree: true}).length,1,'the hide animation should now be running');
assert_true(isElementVisible(popover),'And the animation should keep the popover visible');
animation.finish();
await waitForRender();
assert_false(isElementVisible(popover),'Once the animation ends, the popover is hidden');
},'It should be possible to use the "beforetoggle" event handler to animate the hide, even when the hide is due to dialog.showModal');
promise_test(async (t) => {
const {popover, descendent} = createPopover(t,'');
popover.showPopover();
assert_true(isElementVisible(popover));
popover.addEventListener('beforetoggle', (e) => e.preventDefault());
popover.hidePopover();
await waitForRender();
assert_false(isElementVisible(popover),'Even if hide event is cancelled, the popover still closes');
},'toggle event cannot be cancelled');
promise_test(async (t) => {
const {popover, descendent} = createPopover(t,'animation');
assert_false(isElementVisible(popover));
popover.showPopover();
assert_false(popover.matches(':closed'));
assert_true(popover.matches(':open'));
assert_true(isElementVisible(popover));
assert_equals(popover.getAnimations({subtree: true}).length,0);
popover.popover = 'manual';
const animations = popover.getAnimations({subtree: true});
assert_equals(animations.length,2,'There should be two animations running');
assert_false(popover.matches(':open'),'popover should not match :open as soon as hidden');
assert_false(popover.matches(':closed'),'popover should not match :closed until animations complete');
assert_true(isElementVisible(popover),'but animations should keep the popover visible');
animations.forEach(animation => animation.finish()); // Force the animations to finish
await waitForRender(); // Wait one frame
assert_true(popover.matches(':closed'),'The pop up should now match :closed');
assert_false(popover.matches(':open'),'The pop up still shouldn\'t match :open');
assert_false(isElementVisible(popover),'The pop up should now be invisible');
},'Closing animations are triggered by changing the popover type');
promise_test(async (t) => {
const {popover, descendent} = createPopover(t,'');
popover.showPopover();
assert_true(isElementVisible(popover));
assert_equals(popover.getAnimations({subtree: true}).length,0);
popover.addEventListener('beforetoggle', (e) => {
if (e.newState !== "closed")
return;
popover.animate([{opacity: 1},{opacity: 0}],1000000);
});
assert_equals(popover.getAnimations({subtree: true}).length,0,'There should be no animations yet');
popover.hidePopover();
await waitForRender();
assert_equals(popover.getAnimations({subtree: true}).length,1,'the hide animation should now be running');
assert_true(isElementVisible(popover),'The popover should still be visible because the animation hasn\'t ended.');
const animation = popover.getAnimations({subtree: true})[0];
animation.dispatchEvent(new Event('finish'));
await waitForRender();
assert_true(isElementVisible(popover),'Synthetic finish events should not stop the animation, so the popover should still be visible.');
assert_equals(popover.getAnimations({subtree: true}).length,1,'the hide animation should still be running');
animation.dispatchEvent(new Event('cancel'));
await waitForRender();
assert_true(isElementVisible(popover),'Synthetic cancel events should not stop the animation, so the popover should still be visible.');
assert_equals(popover.getAnimations({subtree: true}).length,1,'the hide animation should still be running');
},'animation finish/cancel events must be trusted in order to finish closing the popover.');
promise_test(async (t) => {
const {popover, descendent} = createPopover(t,'');
popover.showPopover();
popover.addEventListener('beforetoggle', (e) => {
if (e.newState !== "closed")
return;
popover.animate([{opacity: 1},{opacity: 0}],1000000);
});
popover.hidePopover();
await waitForRender();
assert_true(isElementVisible(popover),'The popover should still be visible because the animation hasn\'t ended.');
assert_equals(popover.getAnimations({subtree: true}).length,1,'There should be one animation running');
const animation = popover.getAnimations({subtree: true})[0];
let new_animation;
const listener = () => {new_animation = popover.animate([{opacity: 1},{opacity: 0}],1000000)};
animation.addEventListener('finish',listener,{capture:true});
animation.addEventListener('cancel',listener,{capture:true});
popover.addEventListener('animationfinish',listener,{capture:true});
popover.addEventListener('animationcancel',listener,{capture:true});
assert_true(isElementVisible(popover),'The popover should still be visible.');
assert_equals(new_animation, undefined,'New animation should not be started yet.');
animation.finish();
await waitForRender(); // Wait one frame
assert_true(popover.matches(':closed'),'The pop up should now match :closed');
assert_false(popover.matches(':open'),'The pop up still shouldn\'t match :open');
assert_false(isElementVisible(popover),'The pop up should now be invisible');
assert_not_equals(new_animation, animation);
assert_equals(popover.getAnimations({subtree: true})[0],new_animation,'The new animation should now be running');
},'Capturing event listeners can\'t affect popover animations.');
</script>

View file

@ -2,7 +2,8 @@
<meta charset="utf-8" />
<title>Popover element appearance</title>
<link rel="author" href="mailto:masonf@chromium.org">
<link rel=help href="https://open-ui.org/components/popup.research.explainer">
<link rel=help href="https://open-ui.org/components/popover.research.explainer">
<link rel=help href="https://html.spec.whatwg.org/multipage/popover.html">
<link rel="match" href="popover-appearance-ref.html">
<style>

View file

@ -32,16 +32,8 @@
<dialog open>Dialog without popover attribute</dialog>
</div>
<div popover class=animated>Animated popover</div>
<div id=outside></div>
<style>
[popover].animated {
opacity: 0;
transition: opacity 10s;
}
[popover].animated:open {
opacity: 1;
}
[popover] {
inset:auto;
top:0;
@ -106,11 +98,11 @@ window.onload = () => {
// be invisible. Otherwise, it should be visible.
const expectVisible = !nonPopover.hasAttribute('popover');
assertPopoverVisibility(nonPopover, /*isPopover*/false, expectVisible, 'A non-popover should start out visible');
assert_throws_dom("InvalidStateError",() => nonPopover.showPopover(),'Calling showPopover on a non-popover should throw InvalidStateError');
assert_throws_dom("NotSupportedError",() => nonPopover.showPopover(),'Calling showPopover on a non-popover should throw NotSupported');
assertPopoverVisibility(nonPopover, /*isPopover*/false, expectVisible, 'Calling showPopover on a non-popover should leave it visible');
assert_throws_dom("InvalidStateError",() => nonPopover.hidePopover(),'Calling hidePopover on a non-popover should throw InvalidStateError');
assert_throws_dom("NotSupportedError",() => nonPopover.hidePopover(),'Calling hidePopover on a non-popover should throw NotSupported');
assertPopoverVisibility(nonPopover, /*isPopover*/false, expectVisible, 'Calling hidePopover on a non-popover should leave it visible');
assert_throws_dom("InvalidStateError",() => nonPopover.togglePopover(),'Calling togglePopover on a non-popover should throw InvalidStateError');
assert_throws_dom("NotSupportedError",() => nonPopover.togglePopover(),'Calling togglePopover on a non-popover should throw NotSupported');
assertPopoverVisibility(nonPopover, /*isPopover*/false, expectVisible, 'Calling togglePopover on a non-popover should leave it visible');
}
@ -406,28 +398,6 @@ window.onload = () => {
});
});
promise_test(async () => {
const popover = document.querySelector('[popover].animated');
assert_true(!!popover);
assert_false(isElementVisible(popover));
popover.showPopover();
assert_true(popover.matches(':open'));
assert_false(popover.matches(':closed'));
assert_true(getComputedStyle(popover).opacity < 0.1,'Animations should start on show');
assert_throws_dom("InvalidStateError",() => popover.showPopover(),'Calling showPopover on a popover that is in the process of animating show should throw InvalidStateError');
await finishAnimations(popover);
assert_true(getComputedStyle(popover).opacity > 0.9);
assert_true(isElementVisible(popover));
popover.hidePopover();
assert_false(popover.matches(':open'));
assert_false(popover.matches(':closed'),'Not :closed until animations finish');
assert_true(getComputedStyle(popover).opacity > 0.9,'Animations should start on hide');
assert_throws_dom("InvalidStateError",() => popover.hidePopover(),'Calling hidePopover on a popover that is in the process of animating hide should throw InvalidStateError');
assert_throws_dom("InvalidStateError",() => popover.showPopover(),'Calling showPopover on a popover that is in the process of animating hide should throw InvalidStateError');
await finishAnimations(popover);
assert_true(popover.matches(':closed'),':closed should match once animations finish');
},'Exceptions are thrown even when show/hide are animated');
done();
};
</script>

View file

@ -2,7 +2,8 @@
<meta charset="utf-8" />
<title>Popover ::backdrop pseudo element appearance</title>
<link rel="author" href="mailto:masonf@chromium.org">
<link rel=help href="https://open-ui.org/components/popup.research.explainer">
<link rel=help href="https://open-ui.org/components/popover.research.explainer">
<link rel=help href="https://html.spec.whatwg.org/multipage/popover.html">
<link rel="match" href="popover-backdrop-appearance-ref.html">
<style>

View file

@ -2,7 +2,8 @@
<meta charset="utf-8" />
<title>Popover show event</title>
<link rel="author" href="mailto:masonf@chromium.org">
<link rel=help href="https://open-ui.org/components/popup.research.explainer">
<link rel=help href="https://open-ui.org/components/popover.research.explainer">
<link rel=help href="https://html.spec.whatwg.org/multipage/popover.html">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>

View file

@ -2,7 +2,8 @@
<meta charset="utf-8" />
<title>Dialog-Popover appearance</title>
<link rel="author" href="mailto:masonf@chromium.org">
<link rel=help href="https://open-ui.org/components/popup.research.explainer">
<link rel=help href="https://open-ui.org/components/popover.research.explainer">
<link rel=help href="https://html.spec.whatwg.org/multipage/popover.html">
<link rel="match" href="popover-dialog-appearance-ref.html">
<p>Both dialogs should have the same shades of background.</p>

View file

@ -3,7 +3,8 @@
<meta charset="utf-8" />
<title>Dialog-Popover crash</title>
<link rel="author" href="mailto:masonf@chromium.org">
<link rel=help href="https://open-ui.org/components/popup.research.explainer">
<link rel=help href="https://open-ui.org/components/popover.research.explainer">
<link rel=help href="https://html.spec.whatwg.org/multipage/popover.html">
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-actions.js"></script>
<script src="/resources/testdriver-vendor.js"></script>

View file

@ -1,7 +1,8 @@
<!DOCTYPE html>
<meta charset="utf-8">
<link rel="author" href="mailto:masonf@chromium.org">
<link rel=help href="https://open-ui.org/components/popup.research.explainer">
<link rel=help href="https://open-ui.org/components/popover.research.explainer">
<link rel=help href="https://html.spec.whatwg.org/multipage/popover.html">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>

View file

@ -2,7 +2,8 @@
<meta charset="utf-8" />
<title>Popover events</title>
<link rel="author" href="mailto:masonf@chromium.org">
<link rel=help href="https://open-ui.org/components/popup.research.explainer">
<link rel=help href="https://open-ui.org/components/popover.research.explainer">
<link rel=help href="https://html.spec.whatwg.org/multipage/popover.html">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/popover-utils.js"></script>
@ -20,7 +21,7 @@ function getPopoverAndSignal(t) {
window.onload = () => {
for(const method of ["listener","attribute"]) {
promise_test(async t => {
const popover = document.querySelector('[popover]');
const {popover,signal} = getPopoverAndSignal(t);
assert_false(popover.matches(':open'));
let showCount = 0;
let afterShowCount = 0;
@ -59,10 +60,9 @@ window.onload = () => {
};
switch (method) {
case "listener":
const {signal} = getPopoverAndSignal(t);
// These events bubble.
document.addEventListener('beforetoggle', listener, {signal});
document.addEventListener('toggle', listener, {signal});
// These events do *not* bubble.
popover.addEventListener('beforetoggle', listener, {signal});
popover.addEventListener('toggle', listener, {signal});
break;
case "attribute":
assert_false(popover.hasAttribute('onbeforetoggle'));

View file

@ -54,15 +54,6 @@
border: 2px solid black;
top:150px;
left:150px;
opacity: 0;
}
[popover]:not(:open) {
/* Add a *hide* transition to all popovers, to make sure animations don't
affect focus management */
transition: opacity 10s;
}
[popover]:open {
opacity: 1;
}
:focus-within { border: 5px dashed red; }
:focus { border: 5px solid lime; }
@ -90,10 +81,6 @@
t.add_cleanup(() => priorFocus.remove());
return priorFocus;
}
async function finishAnimationsAndVerifyHide(popover) {
await finishAnimations(popover);
assert_false(isElementVisible(popover),'After animations are finished, the popover should be hidden');
}
function activateAndVerify(popover) {
const testName = popover.getAttribute('data-test');
promise_test(async t => {
@ -113,7 +100,7 @@
assert_equals(document.activeElement, expectedFocusedElement, `${testName} activated by popover.showPopover()`);
popover.hidePopover();
assert_equals(document.activeElement, priorFocus, 'prior element should get focus on hide, or if focus didn\'t shift on show, focus should stay where it was');
await finishAnimationsAndVerifyHide(popover);
assert_false(isElementVisible(popover));
// Hit Escape:
priorFocus.focus();
@ -122,7 +109,7 @@
assert_equals(document.activeElement, expectedFocusedElement, `${testName} activated by popover.showPopover()`);
await sendEscape();
assert_equals(document.activeElement, priorFocus, 'prior element should get focus after Escape');
await finishAnimationsAndVerifyHide(popover);
assert_false(isElementVisible(popover));
// Move focus into the popover, then hit Escape:
let containedButton = popover.querySelector('button');
@ -134,7 +121,7 @@
assert_equals(document.activeElement, containedButton);
await sendEscape();
assert_equals(document.activeElement, priorFocus, 'prior element should get focus after Escape');
await finishAnimationsAndVerifyHide(popover);
assert_false(isElementVisible(popover));
}
// Change the popover type:
@ -145,7 +132,7 @@
popover.popover = 'hint';
assert_false(popover.matches(':open'), 'Changing the popover type should hide the popover');
assert_equals(document.activeElement, priorFocus, 'prior element should get focus when the type is changed');
await finishAnimationsAndVerifyHide(popover);
assert_false(isElementVisible(popover));
popover.popover = 'auto';
// Remove from the document:
@ -167,7 +154,7 @@
dialog.showModal();
assert_false(popover.matches(':open'), 'Opening a modal dialog should hide the popover');
assert_not_equals(document.activeElement, priorFocus, 'prior element should *not* get focus when a modal dialog is shown');
await finishAnimationsAndVerifyHide(popover);
assert_false(isElementVisible(popover));
dialog.close();
dialog.remove();
@ -181,7 +168,7 @@
// Make sure Escape works in the invoker case:
await sendEscape();
assert_equals(document.activeElement, priorFocus, 'prior element should get focus after Escape (via invoker)');
await finishAnimationsAndVerifyHide(popover);
assert_false(isElementVisible(popover));
// Make sure we can directly focus the (already open) popover:
priorFocus.focus();
@ -193,7 +180,7 @@
button.click(); // Button is set to toggle the popover
assert_false(popover.matches(':open'));
assert_equals(document.activeElement, priorFocus, 'prior element should get focus on button-toggled hide');
await finishAnimationsAndVerifyHide(popover);
assert_false(isElementVisible(popover));
}, "Popover focus test: " + testName);
promise_test(async t => {
@ -210,7 +197,7 @@
await clickOn(button); // This will *not* light dismiss, but will "toggle" the popover.
assert_false(popover.matches(':open'));
assert_equals(document.activeElement, priorFocus, 'focus should return to the prior focus');
await finishAnimationsAndVerifyHide(popover);
assert_false(isElementVisible(popover));
// Same thing, but the button is contained within the popover
button.removeAttribute('popovertoggletarget');
@ -227,7 +214,7 @@
await clickOn(button);
assert_false(popover.matches(':open'), 'clicking button should hide the popover');
assert_equals(document.activeElement, priorFocus, 'Contained button should return focus to the previously focused element');
await finishAnimationsAndVerifyHide(popover);
assert_false(isElementVisible(popover));
// Same thing, but the button is unrelated (no popovertoggletarget)
button = document.createElement('button');
@ -238,7 +225,7 @@
await clickOn(button); // This will light dismiss the popover, focus the prior focus, then focus this button.
assert_false(popover.matches(':open'), 'clicking button should hide the popover (via light dismiss)');
assert_equals(document.activeElement, button, 'Focus should go to unrelated button on light dismiss');
await finishAnimationsAndVerifyHide(popover);
assert_false(isElementVisible(popover));
}, "Popover button click focus test: " + testName);
promise_test(async t => {
@ -259,7 +246,7 @@
assert_equals(document.activeElement, newFocus, 'focus should not change when prior focus is removed');
popover.hidePopover();
assert_not_equals(document.activeElement, priorFocus, 'focused element has been removed');
await finishAnimationsAndVerifyHide(popover);
assert_false(isElementVisible(popover));
document.body.appendChild(priorFocus); // Put it back
// Move the prior focus inside the (already open) popover
@ -271,12 +258,7 @@
assert_true(popover.contains(priorFocus));
assert_true(popover.matches(':open'), 'popover should stay open');
popover.hidePopover();
await waitForRender();
assert_true(isElementVisible(popover),'Animations should keep the popover visible');
assert_not_equals(getComputedStyle(popover).display,'none','Animations should keep the popover visible');
assert_equals(document.activeElement, priorFocus, 'focused element gets focused');
await finishAnimationsAndVerifyHide(popover);
assert_equals(getComputedStyle(popover).display,'none','Animations have ended, popover should be hidden');
assert_false(isElementVisible(popover));
assert_not_equals(document.activeElement, priorFocus, 'focused element is display:none inside the popover');
document.body.appendChild(priorFocus); // Put it back
}, "Popover corner cases test: " + testName);

View file

@ -1,7 +1,8 @@
<!DOCTYPE html>
<meta charset="utf-8">
<link rel=author href="mailto:masonf@chromium.org">
<link rel=help href="https://open-ui.org/components/popup.research.explainer">
<link rel=help href="https://open-ui.org/components/popover.research.explainer">
<link rel=help href="https://html.spec.whatwg.org/multipage/popover.html">
<link rel=match href="popover-hidden-display-ref.html">
<meta name=fuzzy content="0-1;0-15">

View file

@ -1,7 +1,8 @@
<!DOCTYPE html>
<meta charset="utf-8">
<link rel=author href="mailto:masonf@chromium.org">
<link rel=help href="https://open-ui.org/components/popup.research.explainer">
<link rel=help href="https://open-ui.org/components/popover.research.explainer">
<link rel=help href="https://html.spec.whatwg.org/multipage/popover.html">
<link rel=match href="popover-inside-display-none-ref.html">
No popover should be displayed here.<p>

View file

@ -2,7 +2,8 @@
<meta charset="utf-8" />
<title>Popover invoking attribute</title>
<link rel="author" href="mailto:masonf@chromium.org">
<link rel=help href="https://open-ui.org/components/popup.research.explainer">
<link rel=help href="https://open-ui.org/components/popover.research.explainer">
<link rel=help href="https://html.spec.whatwg.org/multipage/popover.html">
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>

View file

@ -3,7 +3,8 @@
<meta charset="utf-8" />
<title>Popover should *not* light dismiss on scroll</title>
<link rel="author" href="mailto:masonf@chromium.org">
<link rel=help href="https://open-ui.org/components/popup.research.explainer">
<link rel=help href="https://open-ui.org/components/popover.research.explainer">
<link rel=help href="https://html.spec.whatwg.org/multipage/popover.html">
<link rel=help href="https://github.com/openui/open-ui/issues/240">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>

View file

@ -3,7 +3,8 @@
<meta charset="utf-8" />
<title>Popover=manual crash test</title>
<link rel="author" href="mailto:masonf@chromium.org">
<link rel=help href="https://open-ui.org/components/popup.research.explainer">
<link rel=help href="https://open-ui.org/components/popover.research.explainer">
<link rel=help href="https://html.spec.whatwg.org/multipage/popover.html">
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-actions.js"></script>
<script src="/resources/testdriver-vendor.js"></script>

View file

@ -2,7 +2,8 @@
<meta charset="utf-8" />
<title>Popover keyboard focus behaviors</title>
<link rel="author" href="mailto:masonf@chromium.org">
<link rel=help href="https://open-ui.org/components/popup.research.explainer">
<link rel=help href="https://open-ui.org/components/popover.research.explainer">
<link rel=help href="https://html.spec.whatwg.org/multipage/popover.html">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>

View file

@ -1,7 +1,8 @@
<!DOCTYPE html>
<meta charset="utf-8">
<link rel=author href="mailto:masonf@chromium.org">
<link rel=help href="https://open-ui.org/components/popup.research.explainer">
<link rel=help href="https://open-ui.org/components/popover.research.explainer">
<link rel=help href="https://html.spec.whatwg.org/multipage/popover.html">
<link rel=match href="popover-open-display-ref.html">
<div popover>This is a popover</div>

View file

@ -1,7 +1,8 @@
<!DOCTYPE html>
<meta charset="utf-8">
<link rel=author href="mailto:masonf@chromium.org">
<link rel=help href="https://open-ui.org/components/popup.research.explainer">
<link rel=help href="https://open-ui.org/components/popover.research.explainer">
<link rel=help href="https://html.spec.whatwg.org/multipage/popover.html">
<link rel=match href="popover-open-overflow-display-ref.html">
<div id=container>

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