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

@ -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